0

Code Review 回顾:Chainlink

 3 years ago
source link: https://www.chainnews.com/articles/885894119849.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Code Review 回顾:Chainlink

这次的 Code Review 的项目是一个预言机项目 —— Chainlink (https://chain.link/ ),由魏杨领读,代码 review 花费 1 个小时,讨论花费 15 分钟。总体来看,Chainlink 核心的代码和架构比较简单和清晰…

· 2020年12月30日 23:23

这次的 Code Review 的项目是一个预言机项目 —— Chainlink (https://chain.link/ ),由魏杨领读,代码 review 花费 1 个小时,讨论花费 15 分钟。总体来看,Chainlink 核心的代码和架构比较简单和清晰。

视频回顾:https://www.bilibili.com/video/BV19z4y1r7ds/ 。也可以点击原文链接观看。

Code Review 回顾:Chainlink

项目组成部分

Chainlink 的项目架构比较简单,主要包含几部分 :

  • 用户端。也就是数据请求方

  • Oracle 合约。是 Chainlink 最核心的合约。用来接收和回复用户的查询请求,然后发出查询事件给监听节点

  • 监听节点。是一个线下服务,用 go 语言实现。用来监听 Oracle 发出的查询事件,去数据源进行查询

数据源来自于外部,通常不属于 Chainlink。用来接收监听节点的查询,返回对应的数据。比如 Coinmarketcap 的价格 API。

典型的一个查询流程是这样的:

  1. 用户端按照 Oracle 合约要求组装好查询请求,调用 Oracle 合约的查询方法,并发送一定的 LINK 代币作为查询费用

  2. Oracle 合约发出查询事件

  3. 监听节点监听到 Oracle 发出的查询事件后,去数据源进行查询

  4. 数据源返回给监听节点对应的数据

  5. 监听节点将查询结果返回给 Oracle 合约(调用合约方法)

  6. Oracle 合约收到查询结果后,通知用户端

整个查询过程完成。

代码结构分析

代码链接:https://github.com/smartcontractkit/chainlink

这次分析的是 0.6 版本的合约。

对于用户端的代码,Chainlink 这边实现了一个叫做 ChainlinkClient 的合约,最核心的方法是组装查询请求和发送查询请求。用户也可以实现自己的合约,只需要继承 ChainlinkClient 合约,并添加自己的逻辑就好了。核心方法包含:

  • buildChainlinkRequest:构建查询请求

  • sendChainlinkRequest:发送查询请求

  • cancelChainlinkRequest:取消查询请求,5 分钟内的请求可以取消

Oracle 的代码核心方法有几个:

  • oracleRequest:接收查询请求后发出 OracleRequest 事件。只有 LINK 代币合约可以调用这个方法,LINK 代币是用 ERC 677 实现的,用户发送 LINK 代币成功后,会自动调用 onTokenTransfer 方法调用到 oracleRequest 方法

  • fulfillOracleRequest:收到监听节点返回的结果。这个方法只能被 owner 授权的节点地址调用

  • cancelOracleRequest:取消查询请求,5 分钟内的请求可以取消

  • withdraw:节点运营者可以取回 LINK 代币

监听节点是用 go 语言实现的,这次没有 review 里面的代码,有兴趣的可以看我们录制的视频,了解它是如何工作的。监听节点主要负责监听节点的查询,并返回对应的数据。对于支持查询的数据类型,是需要在节点上进行 job 配置的,每个节点可以有多个 job,每种配置对应一个 job,每个 job 可以完成一种数据查询和后续的数据处理任务。

Code Review 回顾:Chainlink

配置项为 json 格式,包含三个部分:

  1. job 的名称

  2. 初始化 job 需要的参数

  3. 获取到数据后需要进行哪些处理(tasks)

Chainlink 有一个数据服务市场网站 https://market.link/ ,在市场上罗列了可以提供查询的节点,用户可以从中选择自己想查询的节点。不过从 Feed Updates 里面看,查询有点贵啊,gas 花费 100+ 美金。

Code Review 回顾:Chainlink

如果没有你想要的数据源,也可以自己搭建一套,对外提供查询服务。

Chainlink 的核心架构比较简单,代码读下来也比较轻松。有了这次的基础,相信下次再看其它的预言机项目也会更得心应手了。(完)


Code Review 是由 Rebase 社区组织的代码学习活动,通过小组学习的形式一起学习开源项目代码。通过 review 代码,可以深入了解一个项目;通过小组学习,大家可以一起互相激励学习、交流和进步。Happy Review!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK