RedStone
RedStone is a modular oracle network that provides real-time data feeds to smart contracts through a unique approach called “data-on-demand”. Instead of constantly pushing data to the blockchain, RedStone delivers signed data packages directly to smart contracts at the time of transaction execution. This architecture significantly reduces gas costs while maintaining high data freshness and reliability.
What You’ll Be Doing in This Guide
In this tutorial, you’ll learn how to:
- Integrate RedStone’s data feeds into your application on the SEI network
- Retrieve real-time SEI token price data using RedStone’s SDK and data packages
- Understand RedStone’s unique “data-on-demand” architecture
- Implement fetching and data verification
By the end of this guide, you’ll have a working demo that can fetch SEI price data from RedStone’s oracle network using their data package system.
Prerequisites
Before starting this tutorial, ensure you have:
Technical Requirements
- Solidity Knowledge: Basic understanding of Solidity smart contract development
- JavaScript/Node.js: For off-chain data fetching using RedStone SDK
- Development Environment: Remix IDE, Hardhat, or similar Solidity development setup
- SEI Network Access: RPC endpoint and mainnet access for SEI
Required Dependencies
- RedStone SDK (
@redstone-finance/sdk) - RedStone EVM Connector (
@redstone-finance/evm-connector)
Install
# npm
npm install @redstone-finance/sdk @redstone-finance/evm-connector
# yarn
yarn add @redstone-finance/sdk @redstone-finance/evm-connector
# pnpm
pnpm add @redstone-finance/sdk @redstone-finance/evm-connectorSEI Network Configuration
Make sure your development environment is configured for SEI:
- Mainnet RPC:
https://evm-rpc.sei-apis.com - Chain ID: 1329 (mainnet)
RedStone Architecture Overview
RedStone uses a unique “data-on-demand” model:
- Data Providers: Collect data from multiple sources and sign data packages
- Data Packages: Signed data structures containing price information and metadata
- Gateway Network: Distributes data packages to consumers
- Smart Contracts: Verify signatures and extract data on-chain
Steps to Fetch SEI Price Data
Let’s implement the JavaScript code to fetch SEI price data using RedStone’s SDK:
import { requestDataPackages, getSignersForDataServiceId } from '@redstone-finance/sdk';
async function fetchSEIPrice() {
try {
// Fetch data packages from RedStone DDL based on provided configuration
const dataPackages = await requestDataPackages({
// For production environment, "redstone-primary-prod" is the standard service
dataServiceId: 'redstone-primary-prod',
// Array of tokens to fetch - we're requesting SEI price data
dataPackagesIds: ['SEI'],
// Ensure minimum number of signers for each token
// 'uniqueSignersCount' packages closest to median are returned
// Throws error if there are fewer signers available
uniqueSignersCount: 3,
// (Optional) Wait time for gateway responses in milliseconds
// Default: 500ms, here we set it to 1000ms for better reliability
waitForAllGatewaysTimeMs: 1000,
// (Optional) Filter out packages older than specified time
// Here we accept packages up to 60 seconds old
maxTimestampDeviationMS: 60 * 1000,
// (Optional) Accept packages only from authorized signers
// This provides additional security against man-in-the-middle attacks
authorizedSigners: getSignersForDataServiceId('redstone-primary-prod'),
// (Optional) Don't throw error for missing feeds
// Useful when requesting multiple tokens where some might be unavailable
ignoreMissingFeed: true
});
// Extract SEI price from the data package
const seiPrice = dataPackages['SEI'][0].dataPackage.dataPoints[0]?.numericDataPointArgs.value;
console.log('SEI price:', seiPrice);
console.log('Full data package:', dataPackages['SEI'][0]);
return {
price: seiPrice,
timestamp: dataPackages['SEI'][0].dataPackage.timestampMilliseconds,
dataPackage: dataPackages['SEI'][0]
};
} catch (error) {
console.error('Error fetching SEI price:', error);
throw error;
}
}
// Usage example
fetchSEIPrice()
.then((result) => {
console.log(`SEI Price: $${result.price}`);
console.log(`Last Updated: ${new Date(result.timestamp)}`);
})
.catch((error) => {
console.error('Failed to fetch price:', error);
});Data Package Structure
A RedStone data package contains:
- dataPoints: Array of price data points
- timestampMilliseconds: When the data was signed
- signature: Cryptographic signature from the data provider
- dataPackageId: Identifier for the specific data feed (e.g., “SEI”)