validation - Hyperledger Fabric - 我可以在验证或背书阶段调用外部系统吗
问题描述
我们有一个用例,其中交易验证逻辑非常复杂,需要来自不同来源的数据才能验证交易。
查询 我们可以调用外部休息服务来验证来自超级账本结构的某些数据,使用它的可插入验证功能吗?
解决方案
从 Hyperledger Fabric 智能合约进行外部 API 调用在技术上是可行的,这是一个有风险的想法,原因如下:
1) 链码必须是确定性的,使用外部 API “丰富”事务的问题是它必须返回在业务网络中任何地方运行的相同结果,这很可能在全球范围内运行,因此您需要相信在比几毫秒宽得多的时间窗口内,答案都将是相同的 2)在开发和生产中只运行一个背书者可以解决这个问题,但会稍微削弱共识,并且基本上不可能证明确定性对于任何给定的交易 3) 设计这样一个弱化的系统不是一个好主意,因为不可避免地有人会意识到背书政策应该更强大,然后你就回到第 1 点中的问题
解决此问题的一种方法是使用带有版本化数据的分布式外部 API(并且您可能需要编写一个 oracle 以在未对其数据进行版本化的 API 之上提供此工具),以便所有背书者都存储外部数据的当前版本在世界状态的资产存储库中也是如此。这确保了读取的数据是相同的,并解释了预言机网络中的传播延迟。API 数据版本在世界状态的最终资产数据中的存在(更准确地说是在交易的读/写集中)确保了预言机中不同区域的不同版本的数据(例如传播延迟)将失败任何多背书政策。当然,在这样的环境中设计的客户端可以自由地重新提交交易进行背书以获得共识。
推荐阅读
- amazon-web-services - 如何使用 aws 每天复制生产数据库
- android - 解析 LiveQuery 未订阅 - Android (Kotlin)
- python - Python 列表到 BigQuery 重复字符串
- java - Java Future:如何在执行 Aysnc 调用时解除对主线程的阻塞
- ios - 如何在推送通知中更改应用程序的名称?
- elasticsearch - 获取 ES 5.0 之前创建的所有索引
- mysql - 从远程服务器下载 mysql 转储后出现未知数据库错误
- reactjs - API 路由变更 Server React
- c# - 我如何通过控制器的 userId 向特定用户发送 signalR 消息?
- java - 是否可以创建在单个操作中计算其元素的 Stream 实现