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查询。
网友评论