5 Chainlink预言机问题

有两个疑惑。

第一个,chainlink的返回的这5个字段分别代表什么意思,在文档中没找到解释:

(
            uint80 roundID, 
            int price,
            uint startedAt,
            uint timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();

第二个,chainlink我看了下相应的交易对信息,如果我想要将100cny计算出需要多少ETH的话,那么就需要经过:

首先,查询 CNY / USD 的价格,然后再查询 USD / ETH 的价格。然后才能给出100CNY能兑换多少ETH。这样的前后依赖的情况下,该怎么确保一次交易的成功呢?

目前我的想法是,前端用户提交了100CNY,且提交有预言机给的CNY/USD的roundId,和 USD/ETH的roundId,然后在合约中进行验证。结合预言机给的startedAt做一个时间范围限制,比如说超过10分钟的roundId就视作无效。不知道这个思路是否可行?这个思路是否太复杂了,是否有跟简单的方法?

请先 登录 后评论

最佳答案 2021-04-29 19:16

第一个问题中的字段解释,首先需要知道这个函数的定义是下面这个:

function latestRoundData() external view 
    returns (
        uint80 roundId, 
        int256 answer, 
        uint256 startedAt, 
        uint256 updatedAt, 
        uint80 answeredInRound
    )

所以问题中提到的几个字段有几个不一样,本质是一样的。

  • roundID,表示当前的更新轮次编号,每个价格对的更新由两个因素决定,心跳时间和价格偏差阈值,两个任意一个达成就会触发下一轮的更新
  • price: 资产对的价格数据,在函数定义中用的是answer
  • startedAt:轮次开始的时间戳
  • timestamp: 该轮次更新时间,对应updatedAt
  • answeredInRound: 答案计算出来的轮次编号

关于第二个问题,连续发出两个请求,写在一个合约函数中,作为一个原子交易是可行的。

CNY / USD price today | Chainlink

ETH / USD price today | Chainlink

查看这两个价格对的信息可以看出,用roundId不一定可行的,不同的价格对的信息是不同的。如心跳时间和价格的偏移都有不同的参数。

请先 登录 后评论

其它 1 个回答

Tiny熊
  擅长:智能合约,以太坊
请先 登录 后评论
  • 2 关注
  • 0 收藏,3068 浏览
  • 小滕™ 提出于 2021-04-28 12:29