Chainlink

AggregatorV3Interface 的 Chainlink 歷史價格

  • April 6, 2022

類似於這個問題如何從chainlink價格饋送中獲取所有歷史數據? 我想檢索特定價格饋送的歷史數據,以便在鏈下用於大量連續更新。但是,根據文件,似乎輪 ID 不再是增量的(即,您不能只呼叫getRoundData(latest_round-_step)某個範圍內的步驟)。

解決方案是簡單地向後進行線性搜尋並嘗試所有小於最新 roundID 的條目,還是現在有遞歸方法來實現這一點(前一輪 ID 是否保存在某處)?

是簡單地向後進行線性搜尋並嘗試所有小於最新 roundID 的條目的解決方案嗎

基本上,這個問題的答案是肯定的。

更好的方法是使用圖表來索引數據饋送,然後從圖表中提取。

roundId 由相位和 aggregatorRoundId 計算得出:

function addPhase(uint16 _phase, uint64 _originalId) internal pure returns (uint80)
{
   return uint80(uint256(_phase) << PHASE_OFFSET | _originalId);
}

由於我們知道 roundId 是如何生成的,我們可以只遍歷有效的,不需要搜尋。

我製作了一個庫,用於從給定的 roundId 獲取 next() 和 prev() roundId。你可以在這裡查看https://github.com/JonahGroendal/chainlink-round-id-calc/blob/master/contracts/ChainlinkRoundIdCalc.sol

引用自:https://ethereum.stackexchange.com/questions/106704