当前位置: 首页 > 科技观察

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

时间:2023-03-20 18:04:25 科技观察

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