개요
이 문서는 oracle module에 대한 사양을 설명합니다. Oracle module은 주로exchange module에서 외부 가격 데이터를 가져오는 데 사용됩니다.
워크플로우
- 새로운 price feed provider는 먼저 governance proposal을 통해 relayer 목록에 권한을 부여받아야 합니다. 단, Coinbase price oracle의 경우 Coinbase oracle private key로 이미 서명되어 있으므로 누구나 Coinbase price update를 전송할 수 있습니다.
Grant Proposal 예시:GrantBandOraclePrivilegeProposal,GrantPriceFeederPrivilegeProposal - Governance proposal이 승인되면, 지정된 relayer는 해당 oracle type에 맞는 relay message를 전송하여 oracle 데이터를 게시할 수 있습니다.
Relay Message 예시:MsgRelayBandRates,MsgRelayPriceFeedPrice,MsgRelayCoinbaseMessages등 - Relay message를 수신하면, oracle module은 relayer 계정이 grant 권한을 가지고 있는지 확인하고 최신 가격 데이터를 state에 저장합니다.
- 다른 Cosmos-SDK module은 oracle module을 쿼리하여 특정 provider의 최신 가격 데이터를 가져올 수 있습니다.
Revoke Proposal 예시:
RevokeBandOraclePrivilegeProposal, RevokePriceFeederPrivilegeProposal 등
Band IBC 통합 흐름
Cosmos SDK 블록체인은 IBC를 사용하여 서로 상호 작용할 수 있으며, Injective는 IBC를 통해 Band chain에서 price feed를 가져오는 기능을 지원합니다.- IBC를 사용하여 Band chain의 oracle과 통신하려면, Injective Chain이 먼저 relayer를 사용하여 Band chain의 oracle module과 통신 채널을 초기화해야 합니다.
- 연결이 설정되면, Injective Chain용과 Band용 두 개의 channel identifier가 생성됩니다. Channel identifier는 Injective Chain에서 Band로 나가는 oracle request packet을 라우팅하는 데 사용됩니다. 마찬가지로, Band의 oracle module은 oracle response를 다시 보낼 때 channel identifier를 사용합니다.
-
통신 채널 설정 후 Band IBC 통합을 활성화하려면,
EnableBandIBCProposalgovernance proposal이 통과되어야 합니다. -
그런 다음, IBC를 통해 가져올 가격 목록은
AuthorizeBandOracleRequestProposal및UpdateBandOracleRequestProposal로 결정되어야 합니다. -
BandIBC가 활성화되면, chain은 주기적으로 Band chain에 price request IBC packet(
OracleRequestPacketData)을 전송하고, Band chain은 IBC packet(OracleResponsePacketData)을 통해 가격으로 응답합니다. Band chain은 임계값 수의 data provider가 확인하면 가격을 제공하며, request 전송 후 가격을 받는 데 시간이 걸립니다. 설정된 간격 전에 가격을 요청하려면, 모든 사용자가 즉시 실행되는MsgRequestBandIBCRatesmessage를 브로드캐스트할 수 있습니다.
