我需要获取一个特定时间段内某个代币的Chainlink价格,这个时间段根据用户输入而变化,但通常不会太长(最多1天到2周),根据代币的心跳。这用于计算智能合约和应用主页中支付的价格。
要获取历史价格数据,Chainlink需要一个“roundId”,这是一个非递增的值。
在Chainlink中,最佳方法是从给定的时间窗口获取所有roundIds或以开放、分散的方式记录它们,并可以在Solidity智能合约中访问它们?
我需要获取一个特定时间段内某个代币的Chainlink价格,这个时间段根据用户输入而变化,但通常不会太长(最多1天到2周),根据代币的心跳。这用于计算智能合约和应用主页中支付的价格。
要获取历史价格数据,Chainlink需要一个“roundId”,这是一个非递增的值。
在Chainlink中,最佳方法是从给定的时间窗口获取所有roundIds或以开放、分散的方式记录它们,并可以在Solidity智能合约中访问它们?
aggregator
getter函数。latestRound
getter函数查找它存储的最后一轮,然后从那个数字作为输入参数传递给getRoundData
,然后减少这个数字并循环,直到达到您的时间点。36893488147419113293
这样的大而长的数字,实际上只是基于聚合器阶段ID和聚合器轮次ID的派生值。这样做是为了确保代理轮次ID始终增加,并且在不同聚合器之间永远不会有任何重叠,例如来自相位ID为1的聚合器的第5000轮应该具有比来自相位ID为2的聚合器的第5000轮更低的代理轮次ID。return uint80(uint256(_phaseId) << 64 | _aggregatorRoundId);
getRoundData
函数中,并获得与给定聚合器轮次ID相应的聚合器合约调用getRoundData
相同的数据结果。建议通过在etherescan上直接与这些函数交互并查看返回数据来玩弄它们。例如,在Kovan网络中,ETH/USD代理和最新的聚合器。