风险提示:请理性看待区块链,树立正确的货币观念和投资理念,不要盲目跟风投资,本站内容不构成投资建议,请谨慎对待。 免责声明:本站所发布文章仅代表个人观点,与CoinVoice官方立场无关

硬核丨怎样将智能合约和 API 连接在一起?

加密谷Live
2020年09月05日

硬核丨怎样将智能合约和 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 成本。也许你只是不希望在链上发起需要身份认证的数据请求,因为你不想将身份认证信息放到区块链上或预言机的任务描述中。这种情况下就需要使用外部适配器。

硬核丨怎样将智能合约和 API 连接在一起?

外部适配器的宗旨是“无论你想要连接什么样的数据,我都能帮你搞定”。外部适配器是与 Chainlink 节点共存的链下代码,代码可以用任何一种编程语言编写,可以执行任何你可以想到的功能,唯一需要满足的条件就是数据输入和输出能匹配适配器的 JSON 格式。外部适配器是连接 Chainlink 节点和外部数据的桥梁,通知节点运营商如何请求数据并收到 JSON 数据响应,以供在链上使用。

通过外部适配器约定链下交互参数,将创造出各种新的应用潜力:你可以将 API 身份认证信息以任何方式储存在链下,数据可以用任何方式进行处理,你可以用任何编程语言编写代码,所有这些操作都不用消耗 gas。从某种程度上来说,外部适配器就像是一个 layer2 预言机,将链下数据以快速和低成本的方式打包成简洁的 JSON 格式,由 Chainlink 节点传输到链上,并得到验证。

外部适配器极大丰富了 Chainlink 预言机中间件的功能性。智能合约开发者可以灵活配置适配器,也可以从 Chainlink Market 中挑选适配器。如果你是一名智能合约开发者,并希望创建外部适配器,你只需要确定 JSON 格式的数据请求和响应数据即可。只要确定了这两种格式,开发者就可以依照具体需求任意创建和处理数据。节点运营商如果要支持外部适配器并处理额外的数据请求,就必须在节点 UI 中为其建立“桥梁”进行连接,并在任务中加入适配器的桥接名称。

硬核丨怎样将智能合约和 API 连接在一起?

    {"initiators":[{ "type":"runLog" }],"tasks":[{ "type":"randomNumber" },{ "type":"copy","params":{"copyPath":["details", "current"]}},{ "type":"multiply","params":{"times":100 }},{ "type":"ethuint256" },{ "type":"ethtx" }]}

Chainlink 致力于为区块链和智能合约开发者提供工具,完美地将智能合约连接至链下数据。Chainlink 既可以通过默认适配器也可以通过外部适配器直接调用任何 API,开发者可以使用任何所需的数据灵活进行创建。如果你是一名智能合约开发者,并希望将智能合约连接至外部数据;抑或你只是想了解更多关于 Chainlink 的信息,请查看下方列出的资源。

硬核丨怎样将智能合约和 API 连接在一起?

硬核丨怎样将智能合约和 API 连接在一起?

硬核丨怎样将智能合约和 API 连接在一起?


声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。

评论0条

加密谷Live

简介:分享区块链领域专业、前沿、有趣的内容

专栏

更多>>