State
Params
oracle module parameter입니다.PriceState
PriceState는 모든 oracle type에 대해 cumulative price와 최신 가격을 timestamp와 함께 관리하는 공통 타입입니다.Price는 정규화된 decimal price를 나타냅니다.CumulativePrice는 oracle price feed 생성 시점부터 해당 oracle price feed에 대한 cumulative price를 나타냅니다.Timestamp는 price state가 relay된 block time을 나타냅니다.
CumulativePrice 값은 Uniswap V2 Oracle에서 설정한 규칙을 따르며, module이 두 임의의 block time 간격 (t1, t2) 사이의 Time-Weighted Average Price (TWAP)를 계산할 수 있게 합니다.
Band
주어진 symbol에 대한 Band price 데이터는 다음과 같이 표현되고 저장됩니다:- BandPriceState:
0x01 | []byte(symbol) -> ProtocolBuffer(BandPriceState)
Rate는 Band chain에서 얻은 Symbol에 대한 원시 USD rate이며 1e9로 스케일링됩니다 (예: 1.42 가격은 1420000000). PriceState는 정규화된 decimal price를 가집니다 (예: 1.42).
Band relayer는 다음과 같이 주소별로 저장됩니다.
- BandRelayer:
0x02 | RelayerAddr -> []byte{}
Band IBC
이 섹션에서는 IBC를 통해 Band chain에 연결하여 가격을 유지하기 위한 모든 state 관리에 대해 설명합니다.- LatestClientID는 Band IBC packet에 대한 고유한 clientID를 관리하기 위해 유지됩니다. Band chain에 price request packet을 보낼 때 1씩 증가합니다.
- LatestClientID:
0x32 -> Formated(LatestClientID)
- LatestRequestID는 고유한
BandIBCOracleRequests를 관리하기 위해 유지됩니다. 새로운BandIBCOracleRequest를 생성할 때 1씩 증가합니다.
- LatestRequestID:
0x36 -> Formated(LatestRequestID)
- 주어진 symbol에 대한 Band IBC price 데이터는 다음과 같이 저장됩니다:
- BandPriceState:
0x31 | []byte(symbol) -> ProtocolBuffer(BandPriceState)
- BandIBCCallDataRecord는 Band chain에 price request packet을 보낼 때 다음과 같이 저장됩니다:
- CalldataRecord:
0x33 | []byte(ClientId) -> ProtocolBuffer(CalldataRecord)
- BandIBCOracleRequest는 governance가 전송할 oracle request를 구성할 때 다음과 같이 저장됩니다:
- BandOracleRequest:
0x34 | []byte(RequestId) -> ProtocolBuffer(BandOracleRequest)
- BandIBCParams는 다음과 같이 저장되며 governance에 의해 구성됩니다:
- BandIBCParams:
0x35 -> ProtocolBuffer(BandIBCParams)
BandIBCParams는 Band chain과의 IBC 연결에 대한 정보를 포함합니다.
BandIbcEnabled는 Band IBC 연결 상태를 설명합니다.IbcSourceChannel,IbcVersion,IbcPortId는 IBC 연결에 필요한 공통 parameter입니다.IbcRequestInterval는 Injective chain의 beginblocker에서 자동으로 트리거되는 자동 price fetch request interval을 설명합니다.
Coinbase
주어진 symbol(“key”)에 대한 Coinbase price 데이터는 다음과 같이 표현되고 저장됩니다:- CoinbasePriceState:
0x21 | []byte(key) -> CoinbasePriceState
Value는 Coinbase에서 얻은 원시 USD price 데이터이며 1e6으로 스케일링됩니다 (예: 1.42 가격은 1420000). PriceState는 정규화된 decimal price를 가집니다 (예: 1.42).
Pricefeed
주어진 base quote pair에 대한 Pricefeed price 데이터는 다음과 같이 표현되고 저장됩니다:- PriceFeedInfo:
0x11 + Keccak256Hash(base + quote) -> PriceFeedInfo
- PriceFeedPriceState:
0x12 + Keccak256Hash(base + quote) -> PriceFeedPriceState
- PriceFeedRelayer:
0x13 + Keccak256Hash(base + quote) + relayerAddr -> relayerAddr
Provider
Provider price feed는 다음과 같이 표현되고 저장됩니다:- ProviderInfo:
0x61 + provider + @@@ -> ProviderInfo
-
ProviderIndex:
0x62 + relayerAddress -> provider -
ProviderPrices:
0x63 + provider + @@@ + symbol -> ProviderPriceState
Pyth
Pyth price는 다음과 같이 표현되고 저장됩니다:- PythPriceState:
0x71 + priceID -> PythPriceState
Stork
Stork price는 다음과 같이 표현되고 저장됩니다:- StorkPriceState:
0x81 + symbol -> PythPriceState
- Publisher:
0x82 + stork_publisher -> publisher
