区块链智能合约可以通过集成去中心化Oracle来访问链外的数据。在用户深入研究如何使用它们之前,了解整体情况下区块链智能合约的重要性以及需要Oracle访问数据的原因非常重要。
如今,世界各地每天都在进行大量交易,并且通常受协议或合同约束。这可能是由供应商的服务条款,监管框架或两者的结合所驱动。这些协议的参数并不总是清晰或透明的。他们最终取决于组织及其按照事先约定的条件采取行动的意愿。
越来越多的合同被数字化。区块链技术的兴起引入了智能合约,该系统可防止篡改,透明和公平地管理此类协议。智能合约是通过数学而不是组织来管理的。合同生效后,他们将自动实施合同参数,为所有各方创建一个更公平的结构。
智能合约的挑战在于,它们通常依赖于将现实世界的数据与区块链桥接的能力(或从一个区块链到另一区块链的数据传输),以便智能合约可以识别质量,评估可靠的数据并触发商定的结果满足健康)状况。过去,这是一个过于复杂和困难的过程,从而限制了其广泛采用。
Chainlink是一个开源抽象层,它提供了一个框架,可以轻松地将区块链与外部(或单独的区块链)API连接起来。您可以将Chainlink视为TCP / IP中传输层的等效区块链,以确保可靠地进出数据。Chainlink旨在成为智能合约的标准数据层,释放其影响外部世界的真正能力,并将其转变为具有外部意识的通用智能合约。
智能合约可以完全改变信任和自动化在业务中的处理方式,但是它们对区块链事件应用范围的限制严重限制了它们的潜力。开发人员希望与之交互的大多数内容都存在于“现实世界”中,例如定价数据,运输条件,全球事件等,以创建通用的智能合约。这些合同具有外部意识,因此在掌握世界数据时可以处理各种常规任务。Chainlink网络为Solidity和其他区块链开发人员提供了构建去中心化Oracle的框架。
这些Oracle可用于在以太坊网站上实时从分散式应用程序(dApps)检索数据。
默认情况下,适配器是每个Chainlink节点支持的数据操作功能。在这种情况下,节点是分散的。它们满足数据请求,并且Chainlink网络由越来越多的节点组成。它的节点由许多独立的运营商运营。通过该适配器,所有开发人员都具有用于发送数据请求的标准接口,并且节点操作员将遵循该标准来处理数据。这些适配器包括HTTP GET,HTTP POST,比较,复制和其他功能。适配器是dApp与外部世界数据之间的连接。
-
Get:获取包含API URL的字符串以请求Get。
-
-
queryParams:获取URL查询参数的字符串或字符串数组。
-
extPath:以斜杠分隔的字符串或字符串数组,以附加到作业的URL。
为了使通用智能合约能够与这些适配器交互,还需要其他功能。从Chainlink Client继承的所有合同都可以创建Chainlink.Request结构,该结构允许开发人员向Chainlink的去中心化Oracle发出请求。该请求应根据要发出的请求将所需的适配器参数添加到结构中。提交此请求需要一些基本字段,例如用作Oracle的节点的地址,jobId和约定的费用。除了这些默认字段之外,您还可以将所需的适配器参数添加到请求结构中:
使用这种结构,该请求是灵活的,并且可以被表述为适合各种情况的请求,这些情况涉及从任何API获取,发布和操作数据,因为该请求可以包含任何适配器功能。系统分散的原因是Chainlink的Oracle网络由许多这样的节点组成,开发人员可以根据需要自由选择节点和编号。正如高可靠性dApp经常需要的那样,这可以通过多个源实现冗余故障转移和错误检查。
有关在ChainlinkClient合同中构造请求以及提交请求和接收响应所需的功能的更多信息,您可以查看Chainlink的完整HTTP GET请求示例。
对于常见请求,节点操作员可能已预先配置了现有的Oracle作业,在这种情况下,请求要简单得多。无需构建自定义请求结构并添加必要的适配器。不需要其他适配器参数,并且所选的分布式oracle集将基于创建请求结构时提供的jobId知道如何响应。
您可以使用分散的Oracle数据服务(例如Chainlink Market)搜索现有的Oracle和受支持的作业,以找到所需的jobId。
但是,如果智能合约具有复杂的用例,并且默认适配器功能不能涵盖该用例,那么应该怎么做?如果需要执行一些高级数据操作怎么办?也许不是要提交给合同的原始数据,而是通过对数据点进行统计分析而生成的多个元数据。可能可以使用默认适配器来操作链上的数据,但希望降低成本。也许由于使用凭证来源,我不希望其API请求出现在链上,也不想在链上或Oracle作业规范中指定这些凭证。这是外部适配器起作用的地方。
由于外部适配器是与Chainlink Oracle节点脱链存在的代码段,因此只要数据输入和输出遵循适配器的JSON规范,它们就可以用他们选择的任何语言编写并执行人们可以想到的任何功能。。外部适配器充当Chainlink分散的Oracle网络与外部数据之间的接口,使节点操作员能够知道如何请求和接收JSON响应,然后在链上使用它们。
通过外部适配器在链外定义此接口规范将带来巨大的可能性:现在可以根据个人安全标准在链外存储API凭据,并且可以使用选择的语言以任何方式对数据进行编程,而无需使用任何以太坊费用用于资助链上交易。从某种意义上说,外部适配器就像分散的Oracle的另一层一样。它以低成本快速地将数据打包到区块链的外部,然后将其转换为整洁的JSON格式,供Chainlink oracle使用。节点在链上进行了验证。
外部适配器是使Chainlink成为多功能分散式Oracle网络的重要组成部分。合同开发人员可以根据需要自由地实现这些适配器,或者从Chainlink市场上的现有适配器中进行选择。如果它是寻求创建外部适配器的智能合约开发人员,则Chainlink仅需要JSON接口来进行数据请求和返回数据。在这两个界面之间,开发人员可以自由创建和操纵数据以适合他们的用例。作为Oracle节点操作员,要支持外部适配器并处理其他请求,必须在节点用户界面中为其创建桥,并将适配器的桥名称添加到支持的任务中。
您可以在Chainlink Build External Adapter页面上访问创建外部适配器的完整示例。
Chainlink致力于为区块链和智能合约开发人员提供工具,以便他们可以根据实际需求使用实际数据支持通用智能合约。
Chainlink致力于为区块链和智能合约开发人员提供工具,以便他们可以根据实际需求使用实际数据支持通用智能合约。Chainlink的设计结合了通过默认适配器和可扩展外部适配器对任何API的直接调用,从而为开发人员提供了一个灵活的平台来创建所需的任何数据。这为智能合约打开了一个真实的数据世界,并给出了新的用例。
总结
如果您是一个智能合约开发人员,想要通过外部数据增加智能合约的效用,则需要尝试这个Chainlink示例练习,以部署与链下数据进行交互的通用智能合约。
Chainlink是MIT许可下的开源代码。因此,如果您想开发一种可以从Chainlink的分散式预言中受益的产品,或者想协助Chainlink网络的开发,则需要参考开发人员文档或参与有关Discord的技术讨论。
原文始发于微信公众号(区块链研究实验室):区块链研究实验室 | 如何创建通用的区块链智能合约