Chainlink

作者: 雪落无留痕 | 来源:发表于2021-07-09 01:02 被阅读0次

Chainlink功能主要有:

  • 为智能合约获取加密货币价格;
  • 生成可验证的随机数;
  • 利用Chainlink合约库请求和接收来自任何API的数据

架构

请求模型

Chainlink通过去中心化网络连接智能合约和去中心化的oracle网络。

ChainlinkClient合约消费从Oracle获取的数据;

LINK token需要兼容ERC-667标准,实现transferAndCall 函数。

Oracle合约由Oracle 节点拥有。

去中心化数据模型

从去中心化网络上,获取多个oracle上的数据,然后在链上聚合。

聚合参数:

  • 偏差阈值: 当节点监测到链上价格与实际价格差距较大时;
  • 心跳阈值:每隔一定的时间更新数据。

链下汇报

OCR(off-chain reporting) 下一代link网络升级,用来代替链上聚合器,以节点gas费用。

OCR由链下节点组成共识网络,每个节点分别喂价并签名,采用共识聚合在一起,将聚合结果提交,只需要提交一次即可。

喂价

可以获取最新的和历史的价格。

Chainlink采用ENS以保证提供真实喂价的地址。

VRF

可验证的随机数可用于:

  • 游戏,NFT
  • 随机分配
  • 共识中代表的选择

VRF 采用请示&接收数据过程,消费合约主要实现两个接口:

  • requestRandomness: 发出随机数的请求;
  • fulfillRandomness: 响应随机数的请示。

可以用一个随机数响应派生出多个随机数:

function expand(uint256 randomValue, uint256 n) public pure returns (uint256[] memory expandedValues) {
    expandedValues = new uint256[](n);
    for (uint256 i = 0; i < n; i++) {
        expandedValues[i] = uint256(keccak256(abi.encode(randomValue, i)));
    }
    return expandedValues;
}

任意API

通过去中心化的网络,支持获取任意的外部数据。

通过url 可以指定GET请求;

可以通过jobId指定 已经存的job类型,其可以在Chainlink Market查询。

参考

https://docs.chain.link/docs/

https://github.com/ethereum/EIPs/issues/677

相关文章

网友评论

      本文标题:Chainlink

      本文链接:https://www.haomeiwen.com/subject/jrjheltx.html