hyperledger - Hyperledger-Sawtooth:共识如何运作?
问题描述
建立一个包含 3 个验证器的锯齿网络,每个验证器都连接到一个事务处理器。我正在测试共识机制,所以在我的 TransactionHandler 中对 setState 做了一些有意的破坏。在 2 个处理器中,我在状态中设置了相同的对象,而在另一个处理器中,我设置了不同的值。因此,每笔交易都会在验证器中产生不同的状态。
在不同的验证器中有不同的状态可以吗?那么共识在哪里呢?
解决方案
在我看来,如果发生这种情况,验证器节点没有对等。后一个事务将覆盖状态中的前一个事务。3 个验证器节点需要在对等网络中。您只在第一个节点中创建一个创世块(块 0)。该节点被复制到 Sawtooth 网络中的所有其他节点。
您可以使用该命令验证所有节点上的创世节点是否相同(以及所有其他节点是否相同)sawnet compare-chains
。在链的末端寻找一组不同的块。
我建议开始使用 Docker 使用预构建配置创建 Sawtooth 网络。例如,使用此处找到的
文件sawtooth-default-poet.yaml
:
https ://sawtooth.hyperledger.org/docs/core/nightly/master/app_developers_guide/creating_sawtooth_network.html
基本上你启动
参数指定初始网络节点和网络动态对等其他对等节点。sawtooth-validator -vvv --peering dynamic --seeds tcp://validator-0:8800
--seeds
推荐阅读
- react-native - 无论状态如何,如何强制重新渲染整个应用程序?
- r - 减少 ggplot 中图的大小
- c# - 在报表数据集中输入数据
- java - 如何解决无法找到或加载主类?
- eclipse - 如何像 Zend Studio 一样在 Eclipse 中实现远程系统?
- php - 如何在另一个控制器 cakephp 1.3 中使用 App 控制器方法
- cmd - Windows 10 上的 bcdedit 命令问题
- json - Swift,如何使用 Decodable 和 Codable 解析/解码 JSON,当密钥未知/动态时
- spring-security - 如何在 Spring WebFlux 中使用 @PreAuthorize?
- django - 覆盖模型字段选择选项未通过验证