如何创建通用的区块链智能合约

译文
区块链
区块链智能合约能够通过集成去中心化的Oracle来访问链外数据。用户在深入研究如何使用它们之前,重要的是要了解区块链智能合约在全局中的重要性以及为什么需要Oracle来访问数据的原因。

【51CTO.com快译】区块链智能合约能够通过集成去中心化的Oracle来访问链外数据。用户在深入研究如何使用它们之前,重要的是要了解区块链智能合约在全局中的重要性以及为什么需要Oracle来访问数据的原因。

[[358149]]

如今,全球每天都在发生大量交易,并且它们通常受到协议或合同的约束。这可能是由供应商的服务条款、监管框架或两者的组合所驱动的。这些协议的参数并不总是明确或透明的,它们最终取决于组织以及它是否愿意按照事先商定的条款行事。

越来越多的合同正在实现数字化。区块链技术的兴起引入了智能合约,这是一种防止篡改、透明、公平的管理此类协议的系统。智能合约是由数学而不是组织来管理的。一旦合同生效,它们会自动执行合同的参数,为各方创造一个更加公平的结构。

智能合约的挑战在于,它们通常依赖于将现实世界数据与区块链(或数据从一个区块链转移到另一个区块链)进行桥接的能力,以便智能合约能够识别质量、评估可靠数据并触发商定的结果满足条件。而在以往这是一个过于复杂和困难的过程,限制了更广泛的采用。

关于Chainlink

Chainlink是一个开源抽象层,它提供了一个框架,可以轻松地将区块链与外部(或单独的区块链)API连接。你可以将Chainlink视为TCP/IP中传输层的等效区块链,以确保数据可靠地传入和传出。Chainlink旨在成为智能合约的标准数据层,释放其影响外部世界的真正能力,并将其转变为具有外部意识的通用智能合约。

智能合约可以彻底改变业务中信任和自动化的处理方式,但是它们对区块链事件应用范围的限制严重限制了其潜力。开发人员希望与之交互的大部分内容都存在于“真实世界”中,例如定价数据、航运条件、全球事件等,以创建通用智能合约。这些合约具有外部意识,因此可以在掌握世界数据的情况下处理广泛而通用的工作,Chainlink网络为Solidity和其他区块链开发人员提供了一个用于构建分散式Oracle的框架。

可以使用这些Oracle在以太坊网站上实时检索分散应用程序(dApp)的数据。

Chainlink适配器

适配器是每个Chainlink节点默认支持的数据操作功能。节点在这种情况下是分散的。它们满足数据请求,而Chainlink网络由数量不断增长的节点组成。其节点由众多独立的运营商运营。通过适配器,所有开发人员都具有用于发出数据请求的标准接口,而节点操作人员将遵循用于处理该数据的标准。这些适配器包括HTTP GET、HTTP POST、比较,复制等功能。适配器是dApp与外部世界数据的连接。

例如,这是HttpGet适配器的参数:

  • Get:获取包含API URL的字符串以向Get请求。
  • headers:将包含键作为字符串,将值作为字符串数组的对象。
  • queryParams:获取URL的查询参数的字符串或字符串数​​组。
  • extPath:采用斜杠分隔的字符串或字符串数​​组,以附加到作业的URL。

Chainlink请求

为了使通用智能合约与这些适配器进行交互,需要其他功能。从Chainlink Client继承的所有合同都可以创建Chainlink.Request结构,该结构允许开发人员向Chainlink分散的Oracle发出请求。该请求应根据要发出的请求将所需的适配器参数添加到结构中。提交这一请求需要一些基本字段,例如要用作Oracle的节点的地址、jobId和约定的费用。除了这些默认字段之外,还可以将所需的适配器参数添加到请求结构中:

//设置网址以在上执行Get请求 

  1. request.add("get""https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD"); 

使用这个结构,其请求是灵活的,并且可以制定为适合各种情况的请求,这些情况涉及从任何API获取、发布和操作数据,因为请求可以包含任何适配器功能。使该系统去中心化的原因是Chainlink的Oracle网络由许多这些节点组成,并且开发人员可以根据自己的需求自由选择节点和数量。正如高可靠性dApp经常需要的那样,这可以通过多个来源实现冗余故障转移和错误检查。

有关构造请求以及在ChainlinkClient合同内提交请求和接收响应所需的功能的更多信息,可以查看Chainlink的完整HTTP GET请求示例。

对于常见请求,节点操作人员可能已经预先配置了现有的Oracle作业,在这种情况下,其请求要简单得多。而无需构建自定义请求结构并添加必要的适配器。无需其他适配器参数,选择的分散式预言集将基于创建请求结构时提供的jobId知道如何响应。

这一示例来自完整的CoinGecko Consumer API: 

  1. Chainlink.Request memory req = build Chainlink Request(jobId, address(this),this. fulfill Ethereum Price.selector);send Chainlink Request To(oracle, req, fee); 

可以使用分散的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构建外部适配器页面上访问创建外部适配器的完整示例。

Chainlink致力于为区块链和智能合约开发人员提供工具,使他们可以根据实际需要,以真实数据来支持通用智能合约。

Chainlink致力于为区块链和智能合约开发人员提供工具,使他们可以根据实际需要,以真实数据来支持通用智能合约。Chainlink的设计结合了通过默认适配器和可扩展外部适配器对任何API的直接调用,为开发人员提供了一个灵活的平台,可以根据需要创建所需的任何数据。这为智能合约打开了一个真正的数据世界,并赋予新的用例。

使用Chainlink进行构建

如果是智能合约开发人员,希望通过外部数据增加智能合约的实用性,需要尝试此Chainlink示例演练,以部署与链外数据进行交互的通用智能合约。

Chainlink是根据MIT许可证开放的源代码,因此,如果要开发一款可以从Chainlink分散式预言中受益的产品,或者想协助开发Chainlink网络,需要参考开发人员文档或参加有关Discord的技术讨论。还可以在Chainlink的网站、Twitter、Reddit、YouTube、Telegram和GitHub上了解更多信息。

原文标题:Create universal blockchain smart contracts,作者:Gage Mondok

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:华轩 来源: 51CTO
相关推荐

2021-11-02 10:25:19

区块链智能合约

2021-03-25 16:34:10

区块链加密资产技术

2023-07-04 20:15:00

2021-04-23 10:59:07

区块链货币私钥

2022-02-13 23:05:23

加密货币比特币货币

2022-05-29 10:19:08

区块链智能合约编程语言

2019-01-18 05:22:39

区块链智能合约网络安全

2022-10-26 08:00:00

2021-09-14 10:28:25

区块链以太坊数据

2018-09-26 09:40:03

2023-04-21 15:29:30

区块链去中心化自动化合约

2018-06-02 13:37:00

2018-06-01 15:48:22

2018-06-06 00:21:49

2019-07-12 10:25:37

物联网区块链智能合约

2023-06-27 09:22:31

2022-05-11 23:39:21

加密货币区块链智能合约

2023-06-20 08:00:00

2018-03-28 14:59:34

区块链人工智能比特币

2022-03-11 15:07:42

区块链人工智能数据
点赞
收藏

51CTO技术栈公众号