ChainLink(LINK)介绍
LINK是基于以太坊区块链的ERC20标准化代币,用于支付Chainlink节点运营商,以便从脱链数据中检索数据,将数据格式化为区块链可读格式,脱链计算以及保证正常运行时间。Chainlink代币作为运行节点的一部分,可防止不良参与者。
Chainlink的底层架构是去中心化的预言机,这个概念一直以来都受到区块链社区的大力追捧。Chainlink不同于其他中心化预言机网络,其网络由多个独立节点组成,为用户提供了独一无二的使用体验。节点操作者的服务可以得到验证,服务质量高的节点还可得到LINK奖励。如果节点违规操作或服务水平低,则会受到惩罚。
Chainlink在2017年9月发布的白皮书(https://link.smartcontract.com/whitepaper)中首次披露了其网络的设计架构。到目前为止,Chainlink的架构与当初的设计思路基本保持一致。目前Chainlink的代码库(https://github.com/smartcontractkit/chainlink)仍然活跃,当初计划的许多功能都在持续上线中。
Chainlink网络的构成要素
Chainlink网络由众多节点组成,每个节点都有具体的任务描述,节点执行链上预言机合约发出的任务指令。Chainlink节点操作者为客户端智能合约提供服
务,可获得LINK奖励。
预言机智能合约
预言机合约是Chainlink的内核,也是Chainlink在Kaleido区块链网络中的核心价值。
可以决定使用哪些Chainlink节点完成任务
可以将客户端智能合约连接至Chainlink网络
将任务执行结果从Chainlink网络返回至客户端智能合约
如果节点服务水平低下,则没收其抵押通证作为惩罚
智能合约会发布EVM活动,目的是为了广播客户端对外部数据或任务的请求,即预言机请求(OracleRequest),并与Chainlink网络节点进行交互。请求对象包括任务ID(job ID)、客户付款金额、客户期望的任务执行参数以及客户端合约接收返回结果的回调地址。
区块链网络中可能有一个以上活跃的预言机合约。因此,Chainlink节点操作者需要选择希望服务的预言机合约,合约也需对申请服务的预言机进行选择。
客户端智能合约
Chainlink预言机主要服务的对象是智能合约。这也是对企业区块链APP开发者最关键的一块内容。如上文所述,客户端智能合约无法与链下世界交互。比如要通过一个特殊的载体,在交易事件广播中将数据请求发布出去,让链下的服务提供者可以看到请求,搜集所需数据,并通过交易调用智能合约,将数据传输到链上。
Chainlink的设计思路就是基于请求-事件-响应的模式,并建立了更加精细化的交互流程。应用开发者不需要从零开始写智能合约,他们可以在ChainlinkClient.sol(标准合约模板)基础上进行开发,这样能大幅缩短开发流程。
Chainlink节点
Chainlink节点负责执行任务请求。区块链网络可以接入任意数量的Chainlink节点。节点互相独立,它们之间不存在任何P2P网络,只能与接入的区块链节点交互,接收任务请求并通过交易将结果发回到链上。
使用Chainlink客户端智能合约的组织可以部署一些共享Chainlink节点实例,任务需求部署后产生的Job ID可以在所有参与的组织中进行共享。只要有Job ID就可以使用Chainlink的预言机服务。目前发布的版本中,每次部署任务都会产生一个新的Job ID。因此,每个数据请求都有对应的Chainlink节点。也就是
说,Chainlink暂时还未完全实现最初设想的去中心化架构。
LinkToken智能合约
在去中心化的世界里,必须要有一个稳健的机制,既能激励诚实守信的行为,又能惩戒违规行为。Chainlink使用经济激励的方式,以LINK通证作为奖励或进行处罚。LinkToken是ERC2.0合约,可实现transfer、approve和transferFrom等标准化操作。另外,它还实现了ERC677接口,可调用transferAndCall函
数,在单笔交易中实现支付和调用功能。
LINK通证有以下两个使用场景:
规范节点操作者的行为:提供服务的Chainlink节点必须在预言机合约中抵押一定金额的LINK,并在合约中注册。预言机合约将评估节点操作者的表现,一旦发现违规操作,概不退还抵押资金。
客户端向节点操作者付款:当节点操作者发布任务描述时也会设置服务价格。客户端合约在发布任务请求时会以LINK支付服务费。
Kaleido上的Chainlink服务为每个环境提供了价值10亿个LINK通证的资金池,仅限Kaleido区块链网络使用(注:这些LINK通证没有实际货币价值)。所有联盟成员都可以通过服务控制界面或Kaleido平台API支取LINK。然而,所有Chainlink节点执行任务都不允许付款功能,也就是说内部任务是“不收费”的,不需要用LINK支付。Chainlink服务管理员仍然可以定义新的外部适配器类型。
任务(Job)
归根到底,预言机是为了完成任务,比如执行代码逻辑或获取外部数据,而这些任务在EVM这样受限的链上环境是无法进行操作的。Chainlink将Job定义为描述具体工作的模型。
所有Job都分为两部分:
启动器(initiator):指任务触发方式。任务可以由目标区块链发布的事件启动,也可以按预先设置的日程启动一次或反复启动,还可以直接根据对Chainlink节点发出的HTTP请求启动。
子任务(task):完成任务(job)的具体步骤。类型可以是HTTPGet和JSONParse等内部task,也可以是通过Chainlink外部适配器的定制化task。
Job需要在Chainlink节点注册。注册后,节点会生成独一无二的Job ID。客户端可以用这个ID发送任务执行请求。
总结
下图显示了Chainlink网络的各个构成要素。
Chainlink网络的工作流程:
第一步:在交易中调用客户端智能合约执行功能,功能实现需要外部数据。智能合约使用job ID准备发出请求,并设置任务参数。客户端智能合约调用预言机合约执行请求。
第二步:预言机合约发布事件(包含Job ID和参数,以及客户端合约承诺支付的LINK金额)
第三步:所有连接到区块链网络的Chainlink节点都通过事件广播得知任务请求。
第四步:部署了Job ID的Chainlink节点得知自己已接受任务请求。将Job ID对应的任务内容与事件中的参数相结合,为任务执行设置环境。
第五步:收到所需数据后,Chainlink节点向预言机合约发出一笔交易,提醒任务已完成。交易信息包含任务执行结果。
第六步:预言机合约使用request ID查询请求方,并使用预言机结果数据触发请求方合约的回调。
到这一步,客户端智能合约已经成功从链下获得了所需数据,并开始处理客户端发出的原始交易请求。