如何从以太坊智能合约调用chainlink的API

2020-08-28 10:56 栏目:经验之谈 来源:网络整理 查看()

由于区块链生态系统的性质,不可能从链中的智能合同访问链外的数据。但是,Chainlink为区块链oracle提供了一个平台,它是网络上的一个节点,充当链上和链外数据之间的桥梁。Oracle支持智能合同从外部世界检索数据。

根据支持的适配器,每个oracle节点都可以配置为执行各种任务。一些适配器包括httpget、httpget、JSON Parse、乘法等的实现。

如何使用链接甲骨文

注意:在这个例子中,我们使用的是Ropsten测试网络。

假设我们想创建一个智能合同,它基于以太网的美元价格,这是由一个流行的价格分析网站CoinGecko报道的。正如我们所知,我们的智能契约没有本地方法来调用外部的超文本传输协议应用编程接口,但是甲骨文节点可以。

使用请求和响应周期,我们的智能契约可以从oracle节点请求数据,该节点被配置为执行HTTP GET请求并实现回调函数以供oracle响应。

如何从以太坊智能合约调用chainlink的API

我们不能简单地使用任何Oracle,因为每个Oracle都被配置为执行特定的任务,这取决于它们支持的适配器。为了找到适合我们需求的高质量甲骨文,我们必须使用连锁市场等上市服务进行搜索。

链环市场

列表服务使我们能够找到符合我们要求的甲骨文。常用的APIs通常预先配置了对特定端点的请求的oracle实现,这使得我们的开发更加容易。我们可以通过进入链接市场主页并在搜索栏中键入“CoinGecko”来确定所需的CoinGecko端点是否已由甲骨文实现。

如何从以太坊智能合约调用chainlink的API

如图2所示,我们得到了一些结果!

“节点”部分列出了返回搜索字符串结果的oracle节点。这可能意味着他们支持从coingeckoapi检索数据的工作。在三个可用节点中,Omnisyce-Robsten已经过验证(圈出),显示了其可靠性。它也运行最多的工作。

向下滚动,我们可以看到就业标题下的瑞士联邦理工学院美元硬币。这看起来很完美,因为它似乎准确地描述了我们想要检索和使用的经过验证的节点。

如何从以太坊智能合约调用chainlink的API

图3显示了节点详细信息页面,它为我们提供了关于Oracle节点的更多信息。左边(红色矩形内)是甲骨文的链地址。如果你想使用这个甲骨文,你需要写下这个地址。

屏幕右侧有三个选项卡:适配器、源和作业。点击工作并滚动,直到您找到瑞士联邦理工学院美元硬币壁虎。单击链接显示职务信息页面。

如何从以太坊智能合约调用chainlink的API

图4显示了工作信息页面,在这里我们可以查看关于工作需求的详细信息。突出显示作业标识和运行该作业的成本(同时注意这些)。

页面右侧是任务列表。这是调用作业时执行的操作列表。每个任务都使用支持的适配器来逐个创建任务链。让我们浏览一下列表中的每项任务,找出该作业是如何获得所需数据的:

1.获取请求

如何从以太坊智能合约调用chainlink的API

第一个任务是使用超文本传输协议来调用。我们可以从参数中的网址确认它发送了正确的CoinGecko请求。这将返回JSON响应体。

2.JSON解析

如何从以太坊智能合约调用chainlink的API

由于任务1返回JSON,下一个任务需要解析它来访问目标数据。任务2使用JSON解析适配器通过提供的路径遍历返回的JSON对象。例如,任务2路径中的目标数据将位于以下JSON结构中:

{

市场数据' :

{

当前价格' :

{

美元' : 'PRICE_HERE '

{}

{}

{}

3.多样地

如何从以太坊智能合约调用chainlink的API

我们已经从JSON那里得到了价格,但是我们还没有准备好。由于实度不能处理小数,任务3将价格乘以100000000,以确保它可以表示为整数。

4.ETH Int256

如何从以太坊智能合约调用chainlink的API

然后任务4将结果转换成编码的int256。

5.ETH交易

如何从以太坊智能合约调用chainlink的API

最后,任务5创建一个以太网事务,并将结果发送回原始合同。

智能合同写作

现在,我们已经选择了一个能够满足请求的Oracle,让我们编写一个能够发出请求的合同。链接提供了一个名为链接客户端的父合同,我们将对其进行扩展以简化请求和响应周期。

pragma稠度0 . 6 . 0;

import ' https://github.com/smart contract kit/chainlink/EVM-contracts/src/v 0.6/Chainlink Client . sol ';

import ' https://github.com/smart contract kit/chain link/EVM-contracts/src/v 0.6/vendor/Ownable . sol ';

合同示例客户是链接客户,可拥有{

地址常量专用ORACLE=0x83 D1 beeb 89 FFA f 56d 0 b 7 c 50 AFB 0 a 66 FB 4 df 8 CB 1;

字符串常量私有JOB _ ID=' 93547 CB 3c 6784 EC 08 a 366 be 6211 ca a24 ';

uint256常量专用ORACLE _ PAYMENT=1 * LInk/10;

uint256公共货币;

事件请求已完成(

字节32索引的requestId,

uint256指数价格

);

构造函数()公共Ownable() {

set publicchanlinktoken();

{}

函数requestEthereumPrice()仅公共所有者{

链环。请求内存请求=构建链接请求(字符串对象32(作业标识),地址(此),此. fulfilletereumpseries . selector);

发送链接请求到(ORACLE,请求,ORACLE _ PAYMENT);

{}

函数fulfillEthereumPrice(字节32 _requestId,uint256 _price)公共记录链链接实现(_requestId) {

发出请求已实现(_requestId,_ price);

当前价格=_价格;

{}

函数withdrawLink()仅公共所有者{

链接令牌接口链接=链接令牌接口(链接令牌地址());

要求(链接.转移(邮件.发件人,链接.余额(地址(此))),‘无法转移’);

{}

函数stringToBytes32(字符串内存源)私有纯返回(字节32结果){

字节内存tempEmptyStringTest=字节(源);

if(TempemptyStringTest . length==0){

返回0x0

{}

程序集{//sol hint-disable-line no-inline-assembly

结果:=mload(add(source,32))

{}

{}

{}

图5向我们展示了示例ORACLE客户端契约。它的功能是通过使用链接市场找到的甲骨文向硬币壁虎请求最新的以太网美元价格。让我们逐行浏览:

第7行:图3中节点详细信息页面上的Oracle地址

第8行和第9行:图4中的工作标识和价格

第11行:currentPrice是由执行请求的oracle填写的字段。

第19行:setPublicChainLINKToken()是链接客户端的父合同中的一个可用函数,它设置当前网络上链接令牌的地址。

第2225行:请求链接()使用Oracle地址、作业标识、价格和回调函数来构建链接请求。然后它使用发送链接请求来请求数据,这是由父链接客户端契约提供的另一个功能。

第27行:Oracle用来完成请求的回调函数

第32行:使所有者能够从合同中提取链接令牌的函数

第37行:构建请求的实用函数

尝试将此合同粘贴到Remix IDE中,并将其部署到Ropsten测试网络中。部署后,发送一些链接到它的地址(你可以在这里找到链接水龙头)。然后,当事务成功完成时,单击请求修改可用函数列表。几秒/几分钟后,点击当前价格按钮,你会看到一个价格!

如何从以太坊智能合约调用chainlink的API

结论

链接甲骨文是一个强大的工具,以实现外部世界和区块链之间的互操作性。像链结市场这样的库存服务是一个有用的目录服务,可以找到最适合您的智能合同需求的甲骨文。

在我们的示例中,我们发现一个oracle作业已被配置为从目标终端请求数据。如果这样的工作不存在,或者你找不到,你可以。Oracle还支持接受获取请求URL作为参数并从中获取数据的作业。这意味着您可以使用Chainlink oracle从任何外部应用编程接口检索数据。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发