Band Oracle Integration

We’re currently working on two implementations of Band integration. The first one is our existing integration implemented on Equinox, but this approach less secure/decentralized due to the need for a set of relayers. While this is the common approach for Band’s price feed integration for all other projects, there’s a better way to go about this. Thankfully, Band’s next mainnet version enables IBC and allows for the price feed to be fed directly via IBC in a secure and decentralized way. But this does require band to finish their mainnet upgrade and enable IBC.

Band PriceFeed using Relayer

Workflow:

  1. New Band price feed providers must first obtain oracle privileges through a governance proposal(GrantBandOraclePrivilegeProposal) which grants privileges to a list of relayers.
  2. Once the governance proposal is approved, the specified relayers can publish oracle data by sending MsgRelayBandRates relay messages to Injective Chain.
  3. Upon receiving the relay message, the oracle module of Injective Chain checks if the relayer account has grant privileges and persists the latest price data in the state.

Challenges:

  1. It relies on the set of band relayers acting honestly
  2. Not fully secure/decentralized

Current Status:

  1. On the current Equinox Staking testnet, the Injective team has been running off chain band relayer with Band Price feeder privilege which fetches and publishes the Band price feed to Injective.
  2. We’re currently onboarding the Band team to actually be a Band relayer and grant them Band Price feeder privileges on the Injective Mainnet.

Band PriceFeed using IBC

Workflow:

  1. To make a request to the BandChain’s oracle using IBC, Injective Chain must first initialize a communication tunnel with the oracle module on the BandChain.
  2. Once the connection has been established, a pair of channel identifiers is generated – one for the Injective Chain and one for Band. The channel identifier is used by Injective Chain to route outgoing oracle request packets to Band. Similarly, Band’s oracle module uses the channel identifier when sending back the oracle response.
  3. The Injective Chain generates an OracleRequestPacketData data packet and relays it to Band.
  4. Once the request is submitted to Band, randomly chosen validators on Band will attempt to retrieve the information requested from the data sources and then submit the data in a report to the BandChain. For doing so, validators also earn a fee.
  5. If the number of validators that successfully submit the report exceeds the minCount specified in the OracleRequestPacketData, Band then computes and stores an aggregate final value.
  6. The final result is also directly relayed back to Injective Chain in the form of a OracleResponsePacketData data packet.
  7. The Injective Chain decodes PriceFeed data from OracleResponsePacketData and persists the latest price data in the state.

Pros:

  1. Interoperate with BandChain directly for PriceFeed.
  2. Fully decentralized.
  3. Security is tied with the validators/consensus of both chains instead of the relayers between two chains.

Current Status:

  1. The Injective team is currently implementing consumer side IBC functionalities and integrating PriceFeeds from Band's Laozi Testnet 2 using IBC.
  2. In the near-mid term we’ll integrate Band pricefeeds on Mainnet through IBC for our derivative markets, as Band is launching a new mainnet version that supports IBC.
3 Likes

Given Band’s Laozi Mainnet incident, a more sensible approach at this moment will be integrating with Band PriceFeed using relayer. Since IBC is still the most secure and decentralized approach long term, we will be implementing a flexible integration that allows the relayer oracle to be switched to IBC via a governance vote when the IBC-ready Laozi mainnet proves to be stable.