怎样将智能合约和API连接在一起?
任何区块链上的智能合约都可以通过集成 Chainlink 预言机连接至任何API。Chainlink是以太坊预言机,它将solidity智能合约连接至链下API和数据,并推动应用量呈现爆发式增长。Chainlink是领先的价格参考数据提供商,目前保障价值超过10亿美元的DeFi应用。虽然Chainlink预言机为众多受人熟知和喜爱的DeFi平台提供了重要价值,但光凭它的一己之力还是无法实现智能合约的颠覆创新。
Chainlink拥有一个非常宏大的目标,那就是成为智能合约标准化的数据中间件,充分释放智能合约的潜力,并在现实世界中产生真正的价值。为了实现这个目标,Chainlink为Solidity和其他区块链开发者提供了开发框架,让他们能与所有链下API交互,本文将详细阐述操作细节,并教大家如何在以太坊主网上进行部署。 首先第一个概念就是适配器:所有Chainlink节点都可以接入适配器以保证数据兼容。所有开发者都可以通过这些适配器建立数据请求的标准接口,而节点运营商也可以建立数据传输标准。这些适配器的功能包括HTTP GET、HTTP POST、Compare和Copy等。适配器能够将dApp连接至链下数据。
以下是HttpGet适配器的参数:
-
get:包含URL的字符串,用来发起一个GET请求
-
headers:是一个键值对,键是字符串类型,值是包含一系列字符串的数组。
-
queryParams:是字符串或字符串数组,代表了URL的请求参数。
-
extPath:是斜线分割的字符串或字符串数组,附加在job的URL上。
如果要将适配器接入智能合约,就需要引入另一个概念,那就是数据请求。继承ChainlinkClient的所有智能合约都可以创建Chainlink.Request结构,允许开发者向Chainlink节点发起一个数据请求。要提交数据请求需要填写一些基本的字段,比如你想要使用的预言机节点地址、job ID以及协商的费用。除了这些默认字段以外,还必须用以下方式在数据请求结构中添加理想的适配器参数:
// Set the URL to perform the GET request onrequest.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");
这样一来,数据请求的灵活性就会非常高,而且可以适应各种不同的场景,包括获得、发布以及处理任何API,因为数据请求中可以包含任何功能的适配器。若想了解如何创建数据请求以及在ChainlinkClient合约中发送请求和收到回复所需的功能,请查看我们完整的HTTP GET数据请求示例。
对于某些常见的请求来说,节点运营商可能已经配置了预言机任务,在这种情况下请求数据就变得简单了许多。你无需创建一个附带适配器的数据请求结构,只需创建默认数据请求格式即可。你也无需再创建其他适配器参数,你选择的预言机基于创建数据请求结构时生成的JobID就能判断如何进行响应。
下方是CoinGecko API consumer接口的完整示例:
Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this),this.fulfillEthereumPrice.selector);sendChainlinkRequestTo(oracle, req, fee);
可以用Chainlink Market搜寻现有节点以及节点支持的任务,并最终找到你需要的job ID。 然而,一旦出现一些特别复杂的智能合约应用场景,超出了适配器的默认功能范围,那该怎么处理呢?比如说你可能需要对API数据进行一些高级的处理,这种情况下该怎么办?也许你不想将原始API数据传输至智能合约中,而是先对多个数据点进行统计分析然后再产生元数据。你可以使用默认适配器在链上处理数据,但同时你也希望能够降低gas成本。也许你只是不希望在链上发起需要身份认证的数据请求,因为你不想将身份认证信息放到区块链上或预言机的任务描述中。这种情况下就需要使用外部适配器。
外部适配器的宗旨是“无论你想要连接什么样的数据,我都能帮你搞定”。外部适配器是与Chainlink节点共存的链下代码,代码可以用任何一种编程语言编写,可以执行任何你可以想到的功能,唯一需要满足的条件就是数据输入和输出能匹配适配器的JSON格式。外部适配器是连接Chainlink节点和外部数据的桥梁,通知节点运营商如何请求数据并收到JSON数据响应,以供在链上使用。
通过外部适配器约定链下交互参数,将创造出各种新的应用潜力:你可以将API身份认证信息以任何方式储存在链下,数据可以用任何方式进行处理,你可以用任何编程语言编写代码,所有这些操作都不用消耗gas。从某种程度上来说,外部适配器就像是一个 layer2 预言机,将链下数据以快速和低成本的方式打包成简洁的JSON格式,由Chainlink节点传输到链上,并得到验证。 外部适配器极大丰富了Chainlink预言机中间件的功能性。智能合约开发者可以灵活配置适配器,也可以从Chainlink Market中挑选适配器。如果你是一名智能合约开发者,并希望创建外部适配器,你只需要确定JSON格式的数据请求和响应数据即可。只要确定了这两种格式,开发者就可以依照具体需求任意创建和处理数据。节点运营商如果要支持外部适配器并处理额外的数据请求,就必须在节点UI中为其建立“桥梁”进行连接,并在任务中加入适配器的桥接名称。
{"initiators":[{ "type":"runLog" }],"tasks":[{ "type":"randomNumber" },{ "type":"copy","params":{"copyPath":["details", "current"]}},{ "type":"multiply","params":{"times":100 }},{ "type":"ethuint256" },{ "type":"ethtx" }]}
Chainlink致力于为区块链和智能合约开发者提供工具,完美地将智能合约连接至链下数据。Chainlink既可以通过默认适配器也可以通过外部适配器直接调用任何API,开发者可以使用任何所需的数据灵活进行创建。
来源:加密谷Live(ID:cryptovalley)
==
和11万人同时接收最新行情资讯
搜“鸵鸟区块链”下载
和2万人一起加入鸵鸟社群
添加微信ID:tuoniao02
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
Justin Sun suspected to have purchased $160m in Ethereum
Justin Sun suspected to have purchased $160m in Ethereum