首页 > 解决方案 > Hyperledger Fabric - 我可以在验证或背书阶段调用外部系统吗

问题描述

我们有一个用例,其中交易验证逻辑非常复杂,需要来自不同来源的数据才能验证交易。

查询 我们可以调用外部休息服务来验证来自超级账本结构的某些数据,使用它的可插入验证功能吗?

标签: validationhyperledger-fabricexternal

解决方案


从 Hyperledger Fabric 智能合约进行外部 API 调用在技术上是可行的,这是一个有风险的想法,原因如下:

1) 链码必须是确定性的,使用外部 API “丰富”事务的问题是它必须返回在业务网络中任何地方运行的相同结果,这很可能在全球范围内运行,因此您需要相信在比几毫秒宽得多的时间窗口内,答案都将是相同的 2)在开发生产中只运行一个背书者可以解决这个问题,但会稍微削弱共识,并且基本上不可能证明确定性对于任何给定的交易 3) 设计这样一个弱化的系统不是一个好主意,因为不可避免地有人会意识到背书政策应该更强大,然后你就回到第 1 点中的问题

解决此问题的一种方法是使用带有版本化数据的分布式外部 API(并且您可能需要编写一个 oracle 以在未对其数据进行版本化的 API 之上提供此工具),以便所有背书者都存储外部数据的当前版本在世界状态的资产存储库中也是如此。这确保了读取的数据是相同的,并解释了预言机网络中的传播延迟。API 数据版本在世界状态的最终资产数据中的存在(更准确地说是在交易的读/写集中)确保了预言机中不同区域的不同版本的数据(例如传播延迟)将失败任何多背书政策。当然,在这样的环境中设计的客户端可以自由地重新提交交易进行背书以获得共识。


推荐阅读