带Converctor套件的Hyperledger Fabric结构的预言机

介绍

如何从现实世界(即:API)收集数据,并提高使用Converctor Suite构建的智能合约。
这个话题最近在Discord聊天中讨论过,所以我决定创建一个如何在Converctor Suite中使用预言机的示例(不要与公司的那个“Oracle”混淆)。
这篇博客文章是为了帮助你理解什么是预言机,如何集成它们,并得到一个实际的例子并运行。我知道要找到如何在企业中实施区块链的真实例子是多么困难 — 我们尝试了很多创建这样的回购协议来指导Github中的开发人员。
我将使用Converctor智能合约、Hurley、NestJS、mockable.io,当然还有Hyperledger Fabric 1.4。由于预言机一开始可能会令人困惑,我将尝试通过多个概念图和技术图来解释和迭代数据流。
没时间看书?在这里下载回购协议!

什么时候需要预言机

预言机是智能合约从链外访问数据的手段。智能合约不能依赖外部数据进行计算 — 这意味着它需要确定性数据来计算交易并将其应用于分类账。

考虑下面的场景,如果智能合约可以访问外部资源,比如API:会发生什么:

  1. 银行A、银行B和银行C进入多方工作流;
  2. 交易取决于中央银行的一个值;
  3. 银行A将交易发送至智能合约1;
  4. 银行A、银行B和银行C运行它。在区块链中,通常每个签署交易的成员都需要在其对等方上本地模拟交易;
  5. 智能合约1从网络的每个成员处调用来自中央银行的外部API;
  6. 银行1得到“10”作为响应;
  7. 银行2得到“10”作为响应;
  8. 银行3得到“11”作为响应。
  9. 这个交易被拒绝。
    这可能是因为外部资源不确定,它们可能会不时变化、故障、更改、攻击都会影响智能合约的计算
    这可能是因为外部资源不确定,它们可能会不时变化、故障、更改、攻击都会影响智能合约的计算

有些人通过这样的思考过程来提到这个属性:如果我要获取区块链的所有历史数据并重新计算,结果应该是相同的。

但是,如果中央银行在区块链中:

  1. 他们事先在分类账中添加了一个名为“Value=10”的记录;
  2. 智能合约1在分类账中引用该值;
  3. 银行1、银行2和银行3运行交易;
  4. 每个人都得到相同的结果
    这幅图来自原作者
    这看起来不错,但数据需要放在需要之前。按需非链数据呢?这就是预言机的用处所在。

用神谕解决问题

预言机允许请求外部资源,保存它们,并基于这些数据进行计算。oracle不仅仅是代码 — 它是一种受信任的实体,每个人都依赖于它将现实生活中的数据“反映”到链中,保持对请求资源的跟踪,并使计算具有确定性。
图片来自于原作者
事务通过事件计算并请求外部资源。oracle通过调用原始智能合约中的函数_callback(),计算请求、获取数据并“重新启动”事务。

简言之,这就像说……“我们开始这个事务,但需要这个值来完成它。、预言机,为我们寻找外部资源,然后将其存储在区块链中,让我们知道如何完成交易”。

我们将在后面的文章中进一步研究流程。

外部可能需要的一些常见数据包括:

天气数据;
物联网事件;
集中式数据库记录;
新闻;
付款凭证;

例如

典型流程包括两个主要步骤:

步骤1:启动事务并请求外部资源。
步骤2:获取外部世界的响应并继续事务。
您将需要以下主要组件:

  1. 你的智能合约。
  2. oracle进程(侦听链请求的外部web服务器)。
  3. 您的外部资源(例如API)。

步骤一

启动事务并从智能合约请求外部资源。

在这里插入图片描述

  1. 发送需要外部数据才能完成的事务。
  2. 智能合约通过事件向oracle守护进程请求外部数据,但不会等待响应。
  3. oracle守护进程异步请求数据(步骤1不再涉及)。
  4. 如果达成共识,智能合约将以成功状态响应请求用户。

步骤二

oracle守护进程从外部世界获取响应并继续事务。
在这里插入图片描述

  1. 外部API使用外部资源进行响应。
  2. 有时,oracle可能会处理请求的重试和失败。
  3. oracle守护进程触发对智能合约1中函数_callback()的请求。
  4. 该函数触发智能合约,以根据输入数据继续交易。
  5. 用户获得一个异步的最终性通知(可选)。

代码展示

这里是代码的来源
git clone https://github.com/worldsibu/convector-oracle

cd convector-oracle

有几个关键概念:
区块链(使用Hurley创建的Hyperledger结构网络)。
您的智能合约(Converctor中的保险)。
oracle守护进程(Nestjs中的conv-oracle)。
您的外部资源(mockable.io)。

代码的逻辑是这样的:

  1. 您可以调用create()来创建汽车,但是.insuranceLevel属性将由oracle通过查询外部web服务来设置。
  2. 一旦接受事务,oracle守护进程(nestjs)将启动一个事件来获取数据。
  3. oracle守护进程正在积极侦听链码中的事件,一旦收到查询数据的请求,它将转到mockable.io以获得响应并触发_callback()。
  4. 字段.insuranceLevel将使用API返回的数据进行设置。此外,值dateOracleResponse将在oracle返回数据时设置为log。

我们的模型架构非常简单:
在这里插入图片描述
我们的控制器如下所示:
在这里插入图片描述
一些事情需要注意:

  1. 在函数create中,我们触发一个事件this.tx.stub.setEvent。
  2. oracle守护进程(conv-oracle)正在等待该事件。回调函数将查询等待某个标识提交具有insuranceLevel值的事务的车辆。

让我们更详细地探讨一下实际流程:
在这里插入图片描述
要首先运行项目,请确保满足Hyperledger结构的先决条件
然后你需要一个 mockable.io API 运行 — https://www.mockable.io
在mockable.io中,您只需按照教程进行操作,并按照以下方式进行配置:
在这里插入图片描述

注意POST中的动词和bankapi的路径。
然后一定要把它拿起来:
在这里插入图片描述
点击“stopped” — 是的,用户体验很奇怪,你点击“停止”来启动它。
从包含 /bankapi 片段的字段路径复制url。这将模拟oracle守护进程将调用的外部API。
在./packages/conv-oracle/src/.env中添加具有以下内容的新文件:
EXTERNAL_URL=

这将告诉oracle守护程序服务器从何处获取数据。

准备好了吗?

第一个事务将花费几秒钟在第二个组织中实例化智能合约。 代码片.

npm install

# Start a blockchain network locally
npm run env:restart

# Install the smart contract
npm run cc:start

# Start the oracle daemon [ignore npx if you don't use npx]
npx lerna run start --scope conv-oracle --stream

# Make a call to see everything in action 
# YOU WILL NEED ANOTHER CONSOLE TAB 
hurl invoke carinsurance carinsurance_create "1" "volk" "1199"

祝贺多亏Converctor,您第一次使用Hyperledger结构运行oracle!🎊
让我们来看看数据 — 在浏览器中转到
http://localhost:5084/_utils/#database/ch1_carinsurance/1

你将看到:
在这里插入图片描述
Oracle通过API设置了dateOracleResponse和insuranceLevel字段。

尝试一些事情来证明它没有作弊,关闭运行服务器选项卡中的oracle守护进程(只需键入control+c)。

发送另一个事务:

	hurl invoke carinsurance carinsurance_create "2" "volk" "1199"

并探索结果:
http://localhost:5084/_utils/#database/ch1_carinsurance/2
在这里插入图片描述
预言机是一个很好的工具,你可以随意使用 — 我们利用Converctor使用Hyperledger结构的事件的能力,通过这个引导的nestjs oracle守护程序,您可以开始做一些整洁的事情了!

我希望这是有用的,也能在Discord社区看到你们数百名开发者互相帮助,一起学习!

接下来做什么

就像区块链基础设施一样,oracle的基础设施也不是微不足道的 — 事实上,这就是为什么我们创建Forma来解决基础设施难题,而不削减区块链网络的分散利益。因此,以下是我对创建预言机时应重点关注的内容的建议:

  1. 为动态查询和动态模型(响应)创建机制。
  2. 实现加密查询和响应的方法。
  3. 确保Oracle身份并在Buffic Stand(Auth-AcLeBuffE)函数中验证它,就像我们在这里的身份模式中建议的那样(这将保护您免遭劫持,因为请求通过事件获得数据是没有响应的,因此只有当Oracle查询外部API时,才有人进入中间和答复)。
  4. 为oracle守护进程、身份验证和授权、黑白列表、网络安全和队列创建高可用性,以处理请求并避免重复。
  5. 记录所有发生的事情和oracle的每个响应。
    仅举几个例子,预言机是区块链网络的关键组成部分,因此应谨慎对待。

总结

你怎么认为?现实生活中的数据对于现实生活中的区块链是必要的。在WorldSibu,我们喜欢与社区一起展示我们的经验和建设。
1.如果你想了解更多,请加入社区
2. 了解WorldSibu’ s在为企业简化区块链方面的工作。

参考文献

本文来自翻译https://hackernoon.com/oracles-for-hyperledger-fabric-with-convector-suite-ay2u130w9中的博客,如有侵权请联系本人立即删除,希望读者在使用中注明出处。
本人还未联系上作者,希望有联系上的提供给我作者邮箱,本人也尝试给作者发邮件告知。
[1]: https://hackernoon.com/oracles-for-hyperledger-fabric-with-convector-suite-ay2u130w9

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值