智能合约怎么开发,solidity是一种智能合约高级语言,运行在
在本教程中,我们将学习如何搜索Chainlink Market以找到符合需求的Chainlink Oracle,以及如何编写Solidity smart contract来实现通过Oracle访问区块链外部数据(如货币价格)的功能。
用熟悉的语言学习以太坊DApp开发:Java PHP Python 。NET/c# Golang node . js Flutter/Dart
由于区块链生态系统的性质,无法从链上的智能合约直接访问链下的数据。然而,Chainlink为区块链Oracle提供了一个平台,作为链上和链下数据之间的桥梁。Oracle支持智能合同从区块链以外获取数据。
每个Oracle节点都可以配置为执行各种任务,具体取决于它支持的适配器。一些适配器包括HTTP GET、HTTP POST、JSON Parse、Multiply等的实现。
1.Chainlink预言机简介假设我们要创建一个智能合约,它会根据CoinGecko上以太币的价格做出不同的响应。我们知道智能合约没有办法调用外部HTTP API,但是oracle节点可以。
通过请求-响应循环处理,智能合约可以从oracle节点请求数据,该节点被配置为执行HTTP GET请求,并为oracle实现回调函数以执行响应:
我们不能简单地使用任何Oracle,因为每个Oracle都被配置为执行特定的任务,这取决于它支持的适配器。为了找到符合要求的高质量预测器,我们必须使用像Chainlink Market这样的库存服务。
2.使用Chainlink Market搜索符合要求的预测性机器Chainlink的预测性机器列表服务有助于我们找到符合要求的预测性机器。流行的API通常对一些端点的请求有预配置的Oracle实现,这将使我们的开发更容易。在Chainlink Market主页的搜索栏中输入“CoinGecko”,我们可以确认是否有Oracle实现了所需的CoinGecko端点:
如上图,我们确实得到了一些结果!
“节点”部分列出了与搜索字符串匹配的Oracle节点。这可能意味着它们支持从CoinGecko API检索数据的作业。在三个可用节点中,Omniscience-Ropsten得到了验证(圈出),这表明了它的可信度。此外,它运行的作业数量最多。
向下滚动,我们可以在乔布斯的标题下看到ETH-USD CoinGecko。这看起来很完美,因为它似乎准确地描述了我们想要检索和使用验证节点的数据。单击链接查看有关此职务的更多信息:
该图显示了Oracle节点的详细信息。左边(红色矩形内)是Oracle的链地址。如果你想用这个神谕,你需要写下地址。屏幕右侧有三个选项卡:适配器、数据源和作业。单击作业并滚动,直到找到ETH-USD CoinGecko。单击链接显示职务信息页面:
上图显示的是工作信息页面,您可以在其中查看请求时其工作的详细信息。突出显示了作业ID和运行该作业的成本(这些也需要注意)。页面右侧是“任务列表”。这是调用作业时该作业执行的操作列表。
每个任务都使用一个支持的适配器来逐个创建任务链。让我们仔细检查列表中的每项任务,以找到工作。
如何获取所需数据:
2.1 HTTP GET请求【外链镜像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-XehJKFHD-1595382259128)(contract-Oracle/http-get . png)]
第一个任务是使用HTTP GET调用CoinGecko API。我们可以确认它从参数中的URL发送了正确的CoinGecko请求。
这将返回JSON响应结果。
2.2 JSON响应解析
由于任务1返回JSON,下一个任务需要解析它,以便访问我们需要的目标数据。2任务使用JSON解析适配器通过提供的路径遍历返回的JSON对象。例如,Task 2路径中的目标数据将采用以下JSON结构:
{ " market _ data ":{ " current _ price ":{ " USD ":" price _ here " } } 2.3乘法计算
我们已经从JSON结果中得到价格,但是这个还没有被处理。由于Solidity不能处理小数,Task 3将价格乘以100,000,000,以确保它可以表示为整数。
2.4 ETH Int256
然后,任务4将结果转换为编码的int256。
2.5 ETH交易
最后,Task 5创建一个以太坊事务,将结果发送回原始契约。
3.写一份合同给神谕。现在,让我们写一个契约来请求神谕的服务。Chainlink提供了一个模板契约ChainlinkClient,我们将对其进行扩展:
pragma实度0 . 6 . 0;导入“https://github . com/smartcontractkit/chain link/EVM-contracts/src/v 0.6/chain link client . sol”;导入“https://github . com/smartcontractkit/chain link/EVM-contracts/src/v 0.6/vendor/own able . sol”;合同示例OracleClient是ChainlinkClient,Ownable { address constant private ORACLE=0x 83 da 1 beeb 89 ffaf 56d 0 b 7 c 50 AFB 0 a 66 FB 4 df 8 CB 1;string常量private JOB _ ID= 93547 cb3c 6784 EC 08 a 366 be 6211 CAA 24 ;uint256常量私有ORACLE _ PAYMENT=1 * LINK/10;uint256公共货币价格;事件requestethereumpricefulled(bytes 32索引requestId,uint256索引price);constructor()public Ownable(){ setPublicChainlinkToken();}函数requestEthereumPrice()public only owner { chain link。请求内存req=buildChainlinkRequest(stringtobytes 32(JOB _ ID),address(this),this . fulfillethereumprice . selector);sendChainlinkRequestTo(ORACLE,req,ORACLE _ PAYMENT);} function fulfillEthereumPrice(bytes 32 _ request id,uint 256 _ price)public recordChainlinkFulfillment(_ request id){ emit requestethereumpricefulled(_ request id,_ price);currentPrice=_ price} function with drawlink()public only owner { LinkTokenInterface link=LinkTokenInterface(chainlinkTokenAddress());require(link . transfer(msg . sender,link.balanceOf(address(this))),无法转接);}函数stringToBytes32(字符串内存源)私有纯返回(Bytes32结果){bytes内存tempEmptyStringTest=bytes(源);if(tempemptystringtest . length==0){ return0x 0;} assembly {//sol hint-disable-line no-inline-assembly result:=m load(add(source,32))}}以上示例OracleClient契约使用Oracle Oracle客户端通过使用Oracle Oracle向CoinGecko请求以太坊的最新美元价格。让我们一行一行地解释:
第7行:在节点详细信息页面上找到的Oracle的地址第8行和第9行:之前找到的作业ID和价格第11行:currentPrice是由执行请求的Oracle填充的字段。第19行:setPublicChainLINKToken()是ChainlinkClient契约中提供的函数,用于设置当前网络上链接令牌的地址。第2225行:requestEthereumPrice()使用oracle地址、作业ID、价格和回调函数来构建Chainlink请求。然后调用sendchainlinkrequest(),该函数使用父ChainlinkClient协定提供的另一个函数来请求数据。第27行:Oracle用来完成请求的回调函数第32行:使所有者能够从契约中提取链接令牌的函数第37行:用来构建请求的辅助函数的实现试图将这个契约粘贴到Remix IDE中,并部署到Ropsten测试网络中。部署后,发送一些Ropsten链接到他们的地址(你可以在这里找到Ropsten LINK水龙头)。当事务成功完成时,单击requestEthereumPrice方法按钮。过一会儿,单击currentPrice按钮,您应该会看到价格:
4.结论Chainlink Oracle是一个功能强大的工具,可以实现外部世界与区块链的互操作。库存服务,如Chainlink Market,是一种有用的目录服务,用于查找需求的最佳预测。
在本教程示例中,我们找到了一个符合要求的Oracle机器作业,它已经被配置为从目标服务请求数据。
Oracle机器还支持接受GET请求URL作为参数并从中获取数据的作业。这意味着您可以使用Chainlink Oracle从任何外部API检索数据。
原文链接:用ChainLink-Huizhi.com访问区块链的外部数据
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。