Oracle·EVM · Solana · Sui · Multi-chain
RedStone
Modular oracle supporting both pull (RedStone Core) and push (RedStone Classic) delivery, plus the ultra-low-latency Bolt feed. 1,500+ assets including LSTs, RWAs, and long-tail tokens, delivered to 110+ chains including Solana and Sui.
- 01low-cost on-demand price feeds (Core / pull)
- 02traditional push feeds with custom thresholds (Classic)
- 03LST, LRT, and RWA price data
- 04non-EVM oracle support (Solana, Sui, TON, Fuel)
- 05ultra-low-latency feeds (Bolt)
- pnpm add @redstone-finance/evm-connector @redstone-finance/sdk
- pnpm add @redstone-finance/protocol
| Variable | Scope | Description |
|---|---|---|
| REDSTONE_GATEWAY_URL | Client | Optional override for the RedStone gateway (default rotates `https://oracle-gateway-1.a.redstone.finance` and mirrors). Use a dedicated gateway for production reliability. |
Choose a model first: RedStone Core (pull) for low gas and on-demand updates, or RedStone Classic (push) for traditional `latestAnswer()`-style feeds. CORE: inherit `MainDemoConsumerBase` (or the production base for your data service) from `@redstone-finance/evm-connector/contracts`, expose a function that calls `getOracleNumericValueFromTxMsg(bytes32 dataFeedId)` — clients wrap the tx via `WrapperBuilder.wrap(contract).usingDataService({ dataServiceId, uniqueSignersCount, dataFeeds })` which appends signed price packages to the calldata. CLASSIC: read from a deployed `IRedstoneAdapter` / `PriceFeed` proxy via `latestRoundData()` exactly like a Chainlink AggregatorV3. For non-EVM chains use the platform-specific receiver in `@redstone-finance/sdk`. Always validate `timestamp` freshness (`block.timestamp - timestamp <= MAX_AGE`) and signer set.
- ⚑Pull (Core) requires wrapping every tx that reads a price — forgetting `WrapperBuilder.wrap(...).usingDataService(...)` produces a `CalldataMustHaveValidPayload` revert that's confusing to debug.
- ⚑Always enforce `uniqueSignersCount` >= 2 (ideally 3+) on production: the default `MainDemoConsumerBase` accepts a single signer and is NOT safe for mainnet.
- ⚑Push feeds (Classic) have per-feed heartbeat and deviation thresholds — enforce a max-age check on `updatedAt` and reject if stale; thresholds vary by asset.
- ⚑`dataFeedId` is a `bytes32` of the symbol (e.g. `bytes32('ETH')`) — using string concatenation or wrong padding silently returns the wrong feed.
- ⚑Public gateways are rate-limited and best-effort; production apps should pin a paid/dedicated gateway and implement signer-set + timestamp validation server-side.
- ⚑Long-tail and LST/LRT feeds may have wider deviation thresholds than blue-chip pairs — read the per-feed config from the RedStone Market app, don't assume Chainlink-equivalent SLAs.
- ⚑Non-EVM (Solana, Sui, TON) integrations use platform-specific receiver programs / modules and a different SDK surface; the EVM wrapper pattern doesn't translate.
- ⚑Bolt sub-second feeds require a permissioned partnership and have separate signer sets and gateways.