Chainlink初探-基本原理

358 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

一、基本概念

  • 混合智能合约:通过Oracle预言机,能够安全地获取链外数据和服务的智能合约。
  • Oracle预言机: 预言机的由来还是要从智能合约的特性说起,由于智能合约只具备单向通信能力,即智能合约无法调用智能合约之外的API获取信息,因此需要一种其他机制来进行数据的反哺,从实际应用上来说,智能合约可能需要了解交易所的币价信息、股票市场的股价、体育比赛的结果等数据,同时还有另外一类需求,比如获取随机数或者获取链外触发时机等,预言机就是帮助智能合约实现这些功能的机制,它能提供智能合约所需的来自真实世界的数据,是连接真实世界数据和链上合约数据的桥梁。
  • 预言机分类:分为中心化预言机和去中心化预言机。中心化预言机有着单点失败风险,在数据的安全性和公平性上存在隐患。去中心化预言机能够弥补中心化预言机的不足之处,ChainLink就是一种去中心化的预言机。
  • LINK Token:
    • ERC677 token ,继承自ERC20
    • 允许token转账时带上payload数据
    • 任何支持ERC20代币的钱包都可以存储LINK tokens
    • 最小的LINK单位是Juel,1,000,000,000,000,000,000 Juels等于1 LINK,类似于Wei和ETH的关系

二、ChainLink的基本架构

预言机的设计模式有三种,分别是:

  • 立即读取(immediate-read)
  • 发布/订阅(publish–subscribe)
  • 请求/响应(request–response)

ChainLink是基于ERC677实现的预言机,属于请求/响应模式。 下图为一个基本的chainlink请求模型:

chainlink request model.png

根据模型图,我们可以知道一次完整的请求过程为:

  1. 链上的consumer通过ChainLinkClient发出LINK的转账交易,此转账交易附带链上consumer想要请求的数据,这笔转账交易会发送到Oracle Contract;
  2. Oracle Contract触发一个事件,此事件包含客户端想要获取的链外信息;
  3. 链外的Oracle节点监听这些事件,解析事件请求,完成信息汇集任务后调用Oracle Contract的fulfilOracleRequest接口回填数据;
  4. Oracle Contract再调用ChainlinkClient的回调函数从而返回ChainLinkClient想要获知的链外信息,这样链上的consumer就获得次链外数据的反馈。

一个ChainlinkClient请求合约必须包含三个要素:

  • oracle合约地址
  • JobID,告知oracle去执行哪个任务
  • 回调函数,以便oracle合约将返回信息传回

三、数据获取过程

ChainLink支持很多种data feed,比如目前最常用的查询ETH币价就是一种data feed。这些data feed是由各个社区成员搭建的,这些社区成员有需要获取及时、准确的链外数据的需求,他们参与维护data feed并也能从共享的数据中获益,随着对某种data feed有需求的人增多,维护者也会变多,此data feed支持的特性也会变得更加丰富,这也非常符合DAO的组织特性。

把真实世界的数据聚合的过程需要三个必备的合约, Consumer 合约 ( 用户合约 ), Proxy 合约 ( 代理合约 ),和 Aggregator 合约(聚合合约)。 Aggregator合约内部使用 Mapping 存储节点网络聚合后的数据,Proxy 合约作为接口连接 Consumer 合约和 Aggregator 合约,屏蔽了 Aggregator 的复杂性,对外向用户提供一个统一的接口(latestRounddata),返回预言机网络最近一次的汇集好的数据。这个过程如下图所示:

chainlink data feed.png

链下预言机网络类似于一个简单的区块链网络,节点之间采用P2P通信,并且有简单的共识机制,采用门限签名的方式在节点网络中做验证确认,从而保证节点网络数据的可靠性。为了保证数据的有效性,预言机网络有两个参数设定:一个是Deviation threshold ( 波动阈值 ),如果当前的聚合数值与前一次的数值相比较,波动率大于这个波动阈值,预言机网络就会发起新一轮的查询与聚合更新;另一个是heartbeat ( 心跳计时 ),如果距离上一次的数值更新时间超过了心跳计时,也会发起新一轮的查询与更新,并且重置计时时间。


参考资料