LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 揭开Chainlink的神秘面纱(一)

揭开Chainlink的神秘面纱(一)

2020-04-16 Chainlink 来源:区块链网络

作者:Jim Zhang

本文将详细解析Chainlink网络中的各个要素如何协力为区块链开发者打造一个稳健且可扩展的系统,并与外部世界交互。Chainlink网络为复杂的智能合约提供了可靠且防篡改的数据输入和输出,将智能合约连接至链下数据、事件和支付系统。

Chainlink的底层架构是去中心化的预言机,这个概念一直以来都受到区块链社区的大力追捧。Chainlink不同于其他中心化预言机网络,其网络由多个独立节点组成,为用户提供了独一无二的使用体验。节点操作者的服务可以得到验证,服务质量高的节点还可得到LINK奖励。如果节点违规操作或服务水平低,则会受到惩罚。

Chainlink在2017年9月发布的白皮书(https://link.smartcontract.com/whitepaper)中首次披露了其网络的设计架构。到目前为止,Chainlink的架构与当初的设计思路基本保持一致。目前Chainlink的代码库(https://github.com/smartcontractkit/chainlink)仍然活跃,当初计划的许多功能都在持续上线中。

Kaleido刚刚发布了1.0.22版本,这个版本在开源项目0.7.0版本基础上更新了Chainlink runtime。Chainlink是Kaleido应用市场最早发布的APP之一,首个版本在2019年1月发布。

下方链接可查看Chainlink总体架构:

https://docs.chain.link/docs/architecture-overview.

Chainlink相较其他预言机技术的不同之处

我将Chainlink与其他类型的预言机做了一个对比:

Chainlink网络的构成要素

Chainlink网络由众多节点组成,每个节点都有具体的任务描述,节点执行链上预言机合约发出的任务指令。Chainlink节点操作者为客户端智能合约提供服务,可获得LINK奖励。

预言机智能合约

预言机合约是Chainlink的内核,也是Chainlink在Kaleido区块链网络中的核心价值。

· 可以决定使用哪些Chainlink节点完成任务

·可以将客户端智能合约连接至Chainlink网络

·将任务执行结果从Chainlink网络返回至客户端智能合约

·如果节点服务水平低下,则没收其抵押通证作为惩罚

智能合约会发布EVM活动,目的是为了广播客户端对外部数据或任务的请求,即预言机请求(OracleRequest),并与Chainlink网络节点进行交互。请求对象包括任务ID(job ID)、客户付款金额、客户期望的任务执行参数以及客户端合约接收返回结果的回调地址。

区块链网络中可能有一个以上活跃的预言机合约。因此,Chainlink节点操作者需要选择希望服务的预言机合约,合约也需对申请服务的预言机进行选择。

客户端智能合约

Chainlink预言机主要服务的对象是智能合约。这也是对企业区块链APP开发者最关键的一块内容。如上文所述,客户端智能合约无法与链下世界交互。比如要通过一个特殊的载体,在交易事件广播中将数据请求发布出去,让链下的服务提供者可以看到请求,搜集所需数据,并通过交易调用智能合约,将数据传输到链上。


智能合约与链下世界交互的方式:请求-事件-响应模式

Chainlink的设计思路就是基于请求-事件-响应的模式,并建立了更加精细化的交互流程。应用开发者不需要从零开始写智能合约,他们可以在ChainlinkClient.sol(标准合约模板)基础上进行开发,这样能大幅缩短开发流程。

应用开发者只需实现客户端智能合约的三个部分即可:

· 决定使用哪个LinkToken合约和预言机合约,可以在构造函数中进行配置

constructor(address _link, address _oracle) public Ownable() {
setChainlinkToken(_link);
setChainlinkOracle(_oracle);
}

· 实现对应的函数:使用要求的参数和回调函数构建一个任务请求,然后发送到预言机合约

function requestEthereumPrice(string _jobId)
public
onlyOwner
{
Chainlink.Request memory req = buildChainlinkRequest(stringToBytes32(_jobId), address(this), this.fulfillEthereumPrice.selector);
req.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");
req.add("path", "USD");
req.addInt("times", 100);
sendChainlinkRequest(req, ORACLE_PAYMENT);
}

· 实现回调函数:将响应数据作为参数传入

function fulfillEthereumPrice(bytes32 _requestId, uint256 _price)
public
recordChainlinkFulfillment(_requestId)
{
emit RequestEthereumPriceFulfilled(_requestId, _price);
currentPrice = _price;
}

(未完待续)

Chainlink官方渠道

QQ群: 6135525

微博:https://weibo.com/chainlinkofficial

币乎:https://bihu.com/people/1869894547

合作联系:[email protected]

GitHub:https://github.com/smartcontractkit/chainlink

Gitter:https://gitter.im/smartcontractkit-chainlink/Lobby

Twitter:https://twitter.com/chainlinkofficial

Telegram:https://t.me/chainlinkofficial

—-

编译者/作者:Chainlink

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...