背景
在以太网本机语言的稳固性下,API可以传输到智能合约应用链中。世界各地的开发者可以使用chainlink的去中心化区块链预言机,将链下的真实世界数据和事件访问到区块链环境中。Chainlink的内置核心适配器使配置和验证来自任何开放API的数据变得容易。
但是,chainlink核心适配器在灵活性和功能性方面往往不能满足开发人员的所有要求,例如:
API接口身份验证(保护API密钥隐私)
保证了隐私性,减少了延迟,实现了高吞吐量的链外计算,降低了燃气成本
将数据传输到其他区块链(互操作性)
其他核心适配器无法满足的功能
外部适配器可以访问优质数据并使智能合约能够非常灵活地连接至付费web API。目前众多安全可靠的预言机网络都已接入外部适配器,其中包括超过35个价格参考数据,总共保障了30多亿美元的DeFi资产。本文将探讨以下问题:
什么是外部适配器?
如何开发外部适配器?
如何运行外部适配器?
如何使用外部适配器?
什么是外部适配器?
适配器一般分为两类:
芯适配器
外部适配器
核心适配器是Chainlink核心节点客户端内置的功能。Httpget、Copy和onparse都属于核心适配器。而外部适配器则是指开发者根据具体要求基于Chainlink预言机网络定制化的功能。本文不会深入探讨接入其他区块链的技术细节,但是Chainlink外部适配器和外部启动器实现定制化,将使Chainlink能够与任何区块链兼容,因此能极大丰富其功能,这是Chainlink两大关键价值的其中一个。
顺便说一句,如果您希望智能合约保持端到端的去中心化,则必须允许其他预言机节点也运行外部适配器。可以将外部适配器看作是一个用于chainlink节点的开源包。也就是说,您可以选择不自己运行节点,但也可以使用智能合约中节点的定制功能。您可以让其他节点为您运行外部适配器。现在,许多项目集成了chainlink,但不运行节点本身。这样,智能合约开发者就可以专注于去中心化应用的业务逻辑,将节点操作交给专业的节点运营商。你可以市场.link当外部适配器挂在第三方节点分类信息平台上时,也可以委托节点操作员运行外部适配器。你只需要负责测试和开发。
当然,如果您想自己运行节点,也可以这样做!
如何开发外部适配器
快速入门
开发外部适配器的最简单方法是使其成为API接口。这样,您就可以灵活地定制链下计算方法,使用任何编程语言,并调用API来传输和接收数据。关于如何开发API接口,有很多教材。接下来,我们将研究node中的一个简单的链接适配器模板。还有一些Python版本的示例,如果您感兴趣,可以查看这些示例。我们将基于下面的代码库开发,这是一个功能齐全的外部适配器,可以方便地定制所需的数据。您也可以从头开始,但是使用这个代码库进行开发要容易得多。
接下来,您需要使用纱线和node。首先,在本地克隆代码库并使用CD命令进入项目。
git克隆;https://github.com/thodges gh/CL EA Node Template.git外部适配器模板cd外部适配器模板
然后,安装依赖项并启动API服务器。
纱线开始
API/外部适配器的服务器已启动并等待调用。
帕特里克@iMac:[~/code/ExternalAdapterTemplate-(master)]$纱线开始运行v1.22.4$节点;应用程序监听端口8080!
请注意,当chainlink节点在其适配器/任务列表中找到外部适配器时,它会扫描所有适配器和调用。我们可以自己调用一次来模拟链节节点请求的过程。
这是一个curl命令,它向刚刚开始运行的API服务器发送httppost请求。你可以在本地终端窗口试试。
卷曲-X后-H quot;内容-类:应用程序/onquot; quot;http/ / 本地主机:8080/quot;--数据和39;{quot;idquot;:0,quot;数据quot;:{quot; FROMquot;:quot;ETHquot;,quot;到6035:quot;USDquot;}}39;
http://localhost参数80后,等待我们的数据链参数是80,等待我们的数据链是参数80。chainlink节点发送的ON请求包括:
身份证
数据对象
格式如下: {quot;idquot;:quot;0quot;, quot;dataquot;:{}}
在数据对象中,可以清楚地看到from和to参数。这些是我们设置的自定义参数,允许外部适配器访问各种不同的价格数据。如您所见,当您运行curl脚本时,将返回以下结果:
{quot;jobRunIDquot;:0,quot;dataquot;:{quot;USDquot;:441.49,quot;resultquot;:441.49},quot;resultquot;:441.49,quot;状态码quot;:200}
注意:由于以太网的价格一直在变化,这里的数字可能会改变!
所有外部适配器都返回至少包含以下内容的ON对象:
作业编号
数据对象
**还能包含status和result字段,这样可以轻松处理并改正错误。在这个示例中,返回的结果是441.49,即当前以太坊价格。我们之所以会获得这个数据,是因为我们的外部适配器也调用了一个API,那就是:
https://min-api.cryptocompare.com/data/price?fsym=以太坊和tsyms=美元
外部适配器实际上包含一个API接口,它也是外部适配器的通用框架。
外部适配器就是这样做的,所以让我们来看看它是如何工作的。
获取天气数据
您可以在Patrick alphaC模板代码库的weather API分支中看到它。
让我们修改代码以从新的API(openweathermap)获取天气数据。为了方便教学,我们首先在这里免费注册并获得免费的API密钥。账户验证后,我们可以看到API密钥和本市当前天气数据的API文档。注意:注册后,密钥大约需要10分钟才能完全生效。
现在我们要稍微修改一下这个外部适配器。最初,它有以太网的价格,但现在我们需要得到城市的天气数据。
我们需要修改一下索引.文件(如果要联机,则需要修改测试/索引测试.测试文件)。应用程序它定义了外部适配器/API服务器如何响应请求,因此我们现在不必担心它。在上一个示例中的数据对象中,我们使用了两个参数,from和to参数。我们可以通过更新customparams来自定义参数:
更新前的Customparams:
常态化和非正规化;39;硬币和#39;硬币#39;基#39;基#39;自#39;从#39;39;硬币和#39;硬币#39;39;39;39;39;39;39;39;39;报价;报价;报价:[#39;报价#39;39;39;到#39;39;至#39;39;39;至#39;39;39;39;39;39;39;39;39;39;39;39;39;39;39;39;39;35;39;],终结点:false}
更新的customparams:
constcustomParams={城市:[#39;q#39;,39;城市#39;,39;城镇#39;],终点:false}
这样,无论我们输入city、town或Q,我们都是指city。
createRequest常量是最关键的部分,因为您需要连接到URL。如果您查看天气数据文档,可以看到这样一个地址示例:https://api.openweathermap.org/data/2.5/weather?q=应用程序ID=
您可以输入API密钥和城市名称Boston,测试API,然后将URL**到浏览器中(如果返回错误,说明API密钥无效,您可以等待几分钟,然后重试)
使用此URL可了解需要进行哪些更新:
变更前:
常量终结点=validator.validated.data.endpoint |#39;价格和#39;
变更后:
常量终结点=validator.validated.data.endpoint |#39;天气和#39;
变更前:
const url=39;https://min-api.cryptocompare.com/data/39美元;
变更后:
const url=const-url=39;https://api.openweathermap.org/data/2.5/39美元;
现在我们要添加参数。我们的两个参数是city(文档中的city是q)和API键(`appid’)
城市可以在原始代码的基础上进行修改:
常数fsym=validator.validated.data. 底壳.上盖()
更改为:
常数q=validator.validated.data. 城市。toUpperCase()
但是,我们不能用代码编写API密钥。
API认证
我们应该编辑这行代码:
常数tsyms=validator.validated.data. 报价单.toUpperCase()
更改为:
常量appid=过程.env.API钥匙;
将API密钥放入。用Envrc文件代替源代码,创建一个新的。Envrc文件:
导出API密钥=
别忘了把它加到。忽略!如果在运行curl命令测试时遇到任何问题,也可以在终端_KEY=上运行export API
注意:单击此处了解有关环境变量的更多信息
然后需要从以下位置更改参数:
const params={fsym,tsym}
更改为:
const params={q,appid}
发件人:
响应.数据.结果= 请求者.validateResultNumber( 响应.数据,[tsyms])
更改为:
响应.数据.结果= 请求者.validateResultNumber( 响应.数据,[#39;主#39;,#39;温度#39;])
然后就结束了!现在,主对象的temp值等于weather API输出的温度,因此响应.数据.结果参数如上所示。
现在您已经成功开发了API密钥认证外部适配器!
让我们调用API。卷曲-X柱-H quot;内容-类:应用程序/onquot;quot;http://localhost:8080/quot;–数据#39;{quot;idquot;:0,quot;dataquot;:{quot;cityquot;:quot;Bostonquot;}}
样本返回值:
{{quot;jobRunIDquot;:0,quot;数据quot;:{quot;标准quot;:{quot;lonquot;:{quot;lonquot;:-71.06,quot;Laquot; latquot;:42.36},quot;气象quot;:[{quot;IDA66035:804,quot;mainquot;主quot;:quot;Cloudsquot;,quot;描述quot;:quot;阴云Squot;,quot;iconquot;:quot;iconquot;:quot;iconquot;:quot;0504Dquot;}}]],quot;Basquot;:quot;:quot;:quot;站quot;,quot; quot;主菜单:quot;温度quot;:296.81,quot;感觉像quot;:298.49,quot;钢种quot;临时钢种6035:295.15、quot;温度**quot;:297.59、quot;压力quot;:1008、quot;湿度6035:78}、quot;可见性quot;可视性quot;:10000、quot;windquot;:{quot;速度quot;速度quot;:2.6、quot;DEGAquot;:360},quot;风电quot;:{quot;ALALA66035:90},quot;dtquot;:90:90},quot;dtquot;:1599162213,quot;sysquot;:{A6A603quot;:{A6quot;{A603quot;:2{quot;{quot;{035quot;:1,quot;idquot;:3486,quot;国家quot;:quot;USquot;,quot;sunyquot;:1599127933,quot;sunsetquot;:1599174905},quot;时区quot;:-14400,quot;idquot;:4930956,quot;名称quot;:quot;Bostonquot;,quot;codquot;:200,quot;resultquot;:296.81},quot;resultquot;:296.81,quot;状态代码quot;:200}
很好!现在它完美地工作了!我们创建了关键内容以使chainlink节点能够理解数据请求。你可以清楚地看到计算链外的好处。智能合约可以将大量计算工作从链上转移出去,然后将结果返回给链。
既然已经生成了外部适配器,下一个问题是如何使chainlink节点运行外部适配器?如何调用外部适配器?让我们暂时不用自己运行外部适配器,因为实际上我们不需要自己运行它。留下来索引.底部有一些包装器,允许节点操作员以无需服务器的方式部署代码。所以我们可以这样做:
将适配器添加到第三方节点分类信息平台,如市场链接
让节点操作员运行我们的适配器(ask-a-node-operator discord)
自己运行节点(不需要)
你可以发现,你甚至都不用亲自运行节点就可以使用自己的外部适配器。这是最理想的情况,因为我们希望自己的适配器可以被其他预言机节点使用,这样就可以有许多节点访问数据,并使Chainlink网络保持极高的去中心化水平。
我们将在稍后的视频或博客文章中详细探讨如何运行外部适配器。如果您已经开发了一个新的适配器,您可以暂时让节点为您运行并加入我们的社区!
使用外部适配器
假设有一个节点可以为您运行外部适配器,那么您可以通过该节点将数据传输到智能合约。在这个例子中,我们开发了一个叫做alpha-vantage的外部适配器。Alpha Vantage是一个用于股票和加密货币价格数据的API,需要API密钥才能访问。让我们看看如何通过运行在Linkpool Kovan节点上的外部适配器获取特斯拉股票价格数据。要首先找到外部适配器,我们需要查看外部适配器的网页。下拉页面,直到找到我们想要的alpha-vantage外部适配器。
Alpha vantage外部适配器
图中描述了外部适配器的所有功能。我们可以单击“支持的节点”按钮查看哪些节点可以运行适配器。我们发现一个节点可以支持它,然后我们可以在任务页面中查看这个节点的具体信息。您可以看到alpha-vantage适配器位于该节点的适配器列表中。
下一步是如何使用适配器。让我们首先像往常一样将作业ID和预言机 ID添加到代码中。然后在alpha-vantage文档中添加所有参数。
bytes32 jobId=“802ec94e00184b789a016b8e71ae9fb4”;地址预言机=0x56dd6586DB0D08c6Ce7B2f2805af28616E082455函数requestslaprice()(public);链接请求;memoryreq=buildChainlinkRequest(作业ID,地址(this));this.fulfillETHereumPrice.selector);请求添加(quot;功能6035,quot;全球通用报价quot;);请求添加(quot;symbolquot;,quot;TSLAquot;);字符串[]内存copyPath=新字符串[](2);copyPath[0]=quot;全局Quotequot; copyPath[1]=quot;05。价格quot;;请求addStringArray(quot;copyPathquot;,**路径);要求附加值(quot;次quot;,100000000次);sendChainlinkRequestTo(预言机,请求,费用);}
以上是完整版本的代码,可以尝试使用。您也可以使用任何API文档来尝试,因为现在您应该已经发现例程是相同的!
总结
正如您所看到的,外部适配器是非常强大的工具,开发人员可以使用这些工具来丰富智能合约的功能并改进其连接性。此外,可以使用Layer2解决方案(如API身份验证和链外计算)来增强外部适配器的灵活性。如果这篇文章对你有什么启发,欢迎加入chainlink hack pine并尝试应用你的新技能!hacker pine的奖金超过4万美元。我希望你能加入我们!
如果在您阅读本文时黑客攻击已经结束,也欢迎您在twitter、discord或reddit上加入我们的社区,将其转发并标记为“chainlink”和“chainlinka”,了解链链接活动的**消息,并尝试应用您的技能!
如果chainlink 预言机可以为您当前正在开发的产品提供任何附加值,或者如果您想参与chainlink网络的开源开发,请查看开发者文档或加入discord频道的技术讨论组。
文章标题:外接适配器的研制与应用
文章链接:https://www.btchangqing.cn/120218.html
更新时间:2020年10月13日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。