适(shì)配器(qì)是每个Chainlink节(jiē)点(diǎn)默认支持(chí)的数据(jù)操(cāo)作功(gōng)能。节点在这(zhè)种情况下是分(fèn)散的。它们满足数(shù)据请求,而Chainlink网(wǎng)络由(yóu)数量不断增长的节点(diǎn)组成。其节点由众多独立(lì)的运(yùn)营商运营。通过适配(pèi)器,所有开(kāi)发人员都(dōu)具有(yǒu)用于(yú)发(fā)出(chū)数据请(qǐng)求的标准(zhǔn)接口(kǒu),而节点(diǎn)操作人员将遵(zūn)循(xún)用于(yú)处理(lǐ)该数据的标准。这些适配器(qì)包括HTTP GET、HTTP POST、比较,复制等功能。适配器是dApp与外(wài)部世界数(shù)据的连接。
例如,这是HttpGet适(shì)配(pèi)器的参数:
Get:获取包含API URL的字符串(chuàn)以向Get请求。
headers:将包(bāo)含键作为字符串,将(jiāng)值作为(wéi)字符串数组的对象(xiàng)。
queryParams:获取(qǔ)URL的查询参数的字符串或字符(fú)串数组。
extPath:采用(yòng)斜杠分隔的字符串或字符串数组,以附加到作业的(de)URL。
Chainlink请(qǐng)求
为(wéi)了使通用智能合(hé)约(yuē)与(yǔ)这(zhè)些适配器进行交互,需(xū)要其他功能。从Chainlink Client继承的所有合同都可以创建(jiàn)Chainlink.Request结构,该结(jié)构允许开发人员(yuán)向(xiàng)Chainlink分散的Oracle发出(chū)请求。该请(qǐng)求应根据(jù)要发出的(de)请(qǐng)求将所需的适配(pèi)器参(cān)数添加到(dào)结构中(zhōng)。提交(jiāo)这一(yī)请求需要一些基(jī)本字段,例如要用作(zuò)Oracle的(de)节点的地址、jobId和约定的费用(yòng)。除了这些默认字段之外,还可以将(jiāng)所需的适配器(qì)参(cān)数添(tiān)加到请求结构中:
//设置网址以在(zài)上(shàng)执(zhí)行Get请求
request.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");
使(shǐ)用(yòng)这个(gè)结构,其请求是灵活的,并且可以制(zhì)定为适合各种情况的请求,这些情(qíng)况涉及从任(rèn)何API获取(qǔ)、发布和操作数据,因为请求(qiú)可以包(bāo)含任何适配器功(gōng)能。使该系统去中心化(huà)的原因(yīn)是(shì)Chainlink的Oracle网络由(yóu)许多这些节(jiē)点(diǎn)组成,并且开发(fā)人员可以根(gēn)据自己的需求自由选择(zé)节点和数量。正如高可靠性dApp经常需要的那样,这可(kě)以通过多个来源实现冗余故障转移和(hé)错误(wù)检(jiǎn)查。
有关构(gòu)造(zào)请求以及(jí)在ChainlinkClient合同内提交请求和接收(shōu)响应所需的(de)功(gōng)能(néng)的更多信息,可以查看(kàn)Chainlink的完整HTTP GET请(qǐng)求(qiú)示例(lì)。
对于常见(jiàn)请(qǐng)求,节点(diǎn)操作人员可能已经预先配置了(le)现有的Oracle作业,在这种情况(kuàng)下,其请求要简单得多。而无需构建自定义请(qǐng)求结构并添加(jiā)必要的适(shì)配器。无需其他适配器(qì)参(cān)数,选择的(de)分散式预言集(jí)将基(jī)于(yú)创(chuàng)建请(qǐng)求结构时提供的(de)jobId知道如(rú)何响应。
这一示例来自完整的CoinGecko Consumer API:
Chainlink.Request memory req = build Chainlink Request(jobId, address(this),this. fulfill Ethereum Price.selector);send Chainlink Request To(oracle, req, fee);
可以(yǐ)使(shǐ)用分散的Oracle数据服务(例如Chainlink Market)搜索现有(yǒu)的Oracle及其(qí)支持的作业以找到所(suǒ)需的jobId。
外(wài)部适(shì)配器
但是如果智能合约有(yǒu)复杂(zá)的(de)用例,而默认(rèn)适配器功能未涵盖这(zhè)一用例,那(nà)么该怎么办?如果需要执行一些高(gāo)级数据操作怎么办(bàn)?也许不是要提交到合同的原始(shǐ)数据(jù),而是由对多个数据(jù)点进行(háng)统计分析(xī)生成的(de)元数据。也许可以使用默认适配(pèi)器(qì)在链上操作数据,但(dàn)希望降低成(chéng)本。也(yě)许由于使用凭据来源,不(bú)希望(wàng)其API请求(qiú)在(zài)链上,并且不想在(zài)链上或在Oracle作业规范中指定这些凭据。这是外部适配(pèi)器发挥作(zuò)用(yòng)的地方。
由于(yú)外部适配(pèi)器是与Chainlink Oracle节点脱链存在(zài)的代码段,因此它们可以用选择的(de)任何语言编(biān)写,并执(zhí)行(háng)人们可以想到的任何功能,只(zhī)要(yào)数据输入和输出遵循适配器(qì)的JSON规范(fàn)。外部(bù)适配器(qì)充当Chainlink分散式Oracle网络与外部数据(jù)之(zhī)间的接口,使节点操作员知道如何请求和接收JSON响应,然后(hòu)在链上(shàng)使用(yòng)它们。
通过外部适(shì)配器在链外定义这一接口规范将带来巨大的(de)可能(néng)性:现在可以根据个人安全标准在链外存储API凭据(jù),可以采用选择的语言以(yǐ)任何方式对数据进行编程,所有这些无需使用任何
以太坊费用(yòng)来资(zī)助链上交易的情况。从某种意(yì)义上说,外(wài)部适配器就像去中心化(huà)Oracle的另(lìng)一层(céng)一样,以低成本、快速地(dì)将数据打包到(dào)
区块链外部,然后将其转换为整洁的JSON格式(shì),以(yǐ)由Chainlink oracle节点在链(liàn)上(shàng)进(jìn)行(háng)验证。
外部适配(pèi)器是使Chainlink成为一个多功能的分散式Oracle网络的重要部分。合同开发人员可(kě)以根据需要自由实施这(zhè)些适配器,也可(kě)以从Chainlink市(shì)场(chǎng)上的(de)现(xiàn)有适配器中进行选择。如果是寻(xún)求(qiú)创建外部适配器的(de)智能合约开发人员(yuán),Chainlink只要求为数据请求和返回数据指定JSON接口。在这两个接口之(zhī)间,开发人员可以自由创(chuàng)建和操作数据以适应其用例。作为Oracle节点(diǎn)操作人员,要支持外部适配器并处理其他(tā)请求,必须在(zài)节点用户(hù)界面中(zhōng)为其创建网桥,并将适配器的桥名(míng)称添加(jiā)到支持的任务中(zhōng)。
你可(kě)以在Chainlink构建外部适配器页面上访(fǎng)问创(chuàng)建外部适配器的完整示例。
Chainlink致力(lì)于为区块链和智能合约开发人员提供(gòng)工(gōng)具,使他(tā)们可以根据实际需要,以真(zhēn)实数据来支持通用智能合约。
Chainlink致力于为区块链和智能合约开发人员提供工(gōng)具,使他(tā)们可以根据实际需要,以(yǐ)真实数据来支持通用智能(néng)合(hé)约。Chainlink的设计结合(hé)了(le)通过默认适配器和可扩(kuò)展外部适配器对(duì)任何API的直接调用,为开发人(rén)员提供了一个灵活的平台,可以根据需要创建所需的任(rèn)何数据。这为智能合约打开了一个真正(zhèng)的数据世界(jiè),并赋(fù)予(yǔ)新的用例。
版(bǎn)权申明:本内(nèi)容来自于互联(lián)网,属第三方汇(huì)集推荐平台(tái)。本文的版权归原作者(zhě)所有,文章言论不(bú)代表链门(mén)户(hù)的(de)观点,链门(mén)户不承担任何法律(lǜ)责任。如有(yǒu)侵权(quán)请联系QQ:3341927519进行反馈。