| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> Cosmos区块链Chainlink预言机教程 -> 正文阅读 |
|
[区块链]Cosmos区块链Chainlink预言机教程 |
区块链预言机(Oracle)是一种第三方去中心化数据服务,可以为智能合约和区块链提供链外数据。预言机在封闭、确定性的区块链系统与现实世界之间搭建了一座桥梁。
区块链预言机的主要问题是,它不是区块链共识机制的组成部分,因此没有区块链的公共基础设施提供的基本安全保证。Chainlink是目前的行业标准,提供了一个鲁棒的解决方案。 Cosmos是构建多资产的、PoS共识的自定义区块链的一个出色的开源框架。每个Cosmos程序都运行在PoS共识引擎Tendermint Core之上。 自定义区块链意味着Cosmos没有采用以太坊那样的虚拟机区块链范式,即使用状态机运行智能合约,虽然你也可以利用Ethermint让自定义区块链支持智能合约。 Chainlink目前广泛地用于以太坊智能合约,整个过程大致如下:
从这个描述中,我们可以清楚地看到,智能合约是整个过程中的关键。你的智能合约不与任何链下API 或资源通信 - 仅与另一个智能合约交互。 那么,基于cosmos的自定义区块链,在没有智能合约的情况下,如何实现预言机呢?老实说我不确定。我知道的唯一类似的项目,是Kava区块链在其系统中集成了Chainlink价格预言机。他们使用一个可以发布链上价格数据的预言机白名单。当Kava平台用户想要价格数据时,他们可以查询保存的 据我所知,Chainlink也在尝试建立一个模块,完成类似的功能。 在我不得不考虑这个问题的一小段时间里,我想出了两个解决方案。我相信有更好的方法来解决这个技术问题,所以请随时使本文的评论部分成为集思广益的创意中心。 1、解决方案 1一种解决方案是,预言机运营商在自定义区块链上创建一个钱包。然后,它使用 WebSocket来监听涉及该地址的交易。当它记录到此类交易时,就执行一些链下操作,一旦完成,就将交易发送到上一笔交易的来源地址。 它将允许按需启动预言机请求,预言机将能够执行任何工作——而不仅仅是发布价格数据。 目前,这可以利用Chainlink预言机完成。预言机运营商可以在区块链上注册钱包,并使用 2、解决方案 2第二个更可靠的选择是在Cosmos上创建一个预言机区块链,这将作为Chainlink节点和Cosmos生态系统之间的通信点。它将Chainlink的所有 API 暴露在用Cosmos构建的每一个区块链中。我们甚至可以在预言机区块链中构建安全机制,以验证链外数据的完整性。 听起来对Cosmos生态系统来说这是一件非常有价值的事情, 那么应该怎么实现? 预言机区块链使用前面提出的第一个解决方案,这意味着预言机将使用WebSockets订阅来自其他Cosmos区块链上来自预言机区块链上的交易事件。这些事件包含的信息,允许预言机节点确定它必须执行什么工作。成功执行后,从预言机区块链向客户端区块链提交一个交易。 最近推出的链间通信协议 (IBC)使上述方案变得可行。简言之,IBC是一个允许Cosmos区块链之间端到端、可靠和经过验证的通信的协议。任何Cosmos区块链都能够执行与预言机区块链通信的协议。 显然,我不会在本文中实施这第二个解决方案,因为它需要大量的规划、架构和编程,并且会让你失去继续读下去的兴趣。但是,从长远来看,我确实计划将此成为现实,因此,如果你有兴趣,请留意我的更新或与我保持联系。 我们将在以下段落中实施第一个解决方案:创建一个Cosmos区块链,并使用Chainlink从互联网上获取随机报价。 为了保持这篇文章的合理长度,我们将代码编写的尽可能简洁。不过还是有相当多的步骤和代码需要我们完成。我知道这很复杂,但这将是值得的。 我们必须:
现在是时候卷起袖子,戴上安全帽去上班了! 3、创建区块链我实现了一个最小功能的区块链,用于预言机报价请求和报价创建。下面,我将展示如何从头开始的基本知识,但不会解释如何构建整个示例应用程序,因为这不是本文的重点。 如果你想直接上手代码,可以点击此处查看 GitHub仓库: 让我们开始创建Cosmos区块链。最简单的方法是使用starport工具,你可以GitHub安装。 打开终端运行:
上述命令将创建一个名为"linktest"的cosmos应用程序。你可以进入linktest文件夹并运行 这个区块链目前还没有太多功能。基本上,它所做的就是运行 Tendermint 共识引擎,并提供最小功能,在地址之间交易。我们下面就要实现业务逻辑了。 从上面的终端输出,可以看到,我们可以在端口26657与tendermint互动。共识引擎会发出不同的事件,我们可以通过 WebSocket 订阅它们。让我们用命令行和postman说明一下这其中的工作原理,然后我们可以继续实现Chainlink外部启动器。 打开Postman,然后单击File ->New -> WebSocket请求。在顶部输入ws://localhost:25657并单击Connect。现在,让我们订阅所有交易事件。在消息字段中粘贴以下信息,然后单击Send:
就是这样。我们用WebSocket连接共识引擎。现在是时候利用一个交易来测试一切正常。以下是我们需要的命令:
例如,对于我来说,带入实际参数后是这样:
让我们回到Postman那里,在那里我们可以看到交易已被记录。我们的外部发起人将做同样的事情,并触发预言机节点的工作。 4、创建Chainlink外部启动器外部启动器是使Chainlink节点与区块链无关的秘密武器,即任何区块链都可用。
虽然您可以按照代码执行,但如果你也希望能够运行并测试代码,则应在本地或云中设置Chainlink节点。要设置本地节点,请按照此教程执行。一旦你有了自己的节点,打开.env文件,并确保它包括以下内容,以便禁用以太坊并启用外部启动器:
现在是时候登录到节点的管理员设置,以便添加发起人:
现在可以注册它:
这将创建一个名为linktest并使用默认端点访问Chainlink节点作业的启动器。输出将是这样的: 复制并保存这些值,因为我们下面还需要它们。 现在使用命令
现在前往顶部栏中的"Jobs",选择"New Job",并将此粘贴到"Job Spec"中:
这告诉Chainlink,我们希望运行的工作,由名为linktest的外部发起人触发,并且应该调用link-ea桥。创建作业后,如果打开它,你将看到名称下的 ID。我们还需要那个ID。 我们要做的最后一件事就是为我们的外部适配器在本地建立一个Postgres数据库。如果你不知道如何做到这一点,可以查阅Chainlink节点教程中的相关解释。 现在,我们可以创建实际的外部启动器。这只是一个简单的WebSocket服务器,你可以在任何编程语言中构建它,但我会在Go中构建它,因为我真的很喜欢该语言。 首先,创建一个名为"external-initiator"的项目,并在项目根源中定义一个.env文件。现在,我们需要将保存的值添加到改文件中:
现在让我们来看看WebSocket客户端的代码:
这为外部发起人执行了大部分工作。还有其他一些文件,所以你应该看看仓库代码,以建立整体概念。 在这里,我们有一个WebSocket结构,它保存访问端接点,还有一个wsConn结构,代表连接。 我们在WebSocket上定义了一个Connect方法,其作用是建立一个连接。 我们在wsConn上定义了subscribe方法,用来订阅交易事件。当它记录到一个事件时,会获取到请求者的地址并检查事件类型是否为RequestQuote。我们只需要这种类型的事件。然后,它调用startJob方法,这将触发Chainlink预言机的工作。 现在我们有了一个功能正常的区块链,并且正顺利地将预言机连接到它。伟大的工作!让我们继续! 5、创建Chainlink外部适配器外部适配器是能够用我们的预言机调用任何外部API 的关键。我们将在 JavaScript 中构建适配器,因为一方面,这几乎是标准方法(尽管你可以同样轻松地使用 Go 或 Python)。另一方面,以后我们将希望能够签署和广播交易到我们的区块链,Cosmos可以为我们自动生成所需的JavaScript代码。
首先创建一个文件夹link-ea并执行
还记得我告诉过你保存第一次运行区块链时生成的地址的助记词吗?现在我们需要其中之一。创建一个.env文件,并复制MNEMONIC和ORACLE_ADDRESS。如果你没有保存它,只需使用 现在是时候生成与区块链交互的代码了。在区块链文件夹中运行以下命令:
在此之后,你应该会看到./vue/src/store路径上名为generated的文件夹。这包含生成的代码。我们只需要其中一些文件,也必须做一些轻微的修改,以便能够在我们的应用程序中正常工作。完整代码可以查看这里 一旦我们有了这个,就可以设置签署和广播交易的API:
在上面,我们需要一些东西:
我们创建一个具有具有singAndBroadcast方法和main属性的API类。我们的 API 目前仅包含此功能,但此设计可方便将来更新它。 signAndBroadcast方法包括预言机地址、请求报价的帐户地址和报价文本。它利用我们的助记词(存储在文件中)创建一个钱包,并使用该钱包创建交易客户端(txClient)。然后,我们使用我们之前引入的MsgCreateQuote对象的fromJSON方法,并传入到txClient创建消息的方法。之后我们调用signAndBroadcast广播消息,并用assertIsBroadcastTxSuccess来检查一切是否顺利。 除此之外,我们有两个重要的文件(我不会在这里粘贴他们的代码)。一个被称为index.js,它定义了一个createRequest函数,将验证来自我们的外部发起人的API请求的主体,并生成第三方API请求。 另一个是app.js,它负责启动我们的服务器然后调用createRequest。 6、把一切放在一起我们基本完成了!现在是时候看看是否做的每件事都是正确的。让我们逐一启动所有的流程:
现在向预言机体提交报价请求:
用你自己的预言机地址替换 现在,您应该观察每个终端窗口中的日志,看到各自流程正在开展的工作。 当一切都完成后,你可以使用 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:17:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |