首页 > 解决方案 > Hyperledger-Sawtooth:共识如何运作?

问题描述

建立一个包含 3 个验证器的锯齿网络,每个验证器都连接到一个事务处理器。我正在测试共识机制,所以在我的 TransactionHandler 中对 setState 做了一些有意的破坏。在 2 个处理器中,我在状态中设置了相同的对象,而在另一个处理器中,我设置了不同的值。因此,每笔交易都会在验证器中产生不同的状态。
在不同的验证器中有不同的状态可以吗?那么共识在哪里呢?

标签: hyperledgerhyperledger-sawtooth

解决方案


在我看来,如果发生这种情况,验证器节点没有对等。后一个事务将覆盖状态中的前一个事务。3 个验证器节点需要在对等网络中。您只在第一个节点中创建一个创世块(块 0)。该节点被复制到 Sawtooth 网络中的所有其他节点。

您可以使用该命令验证所有节点上的创世节点是否相同(以及所有其他节点是否相同)sawnet compare-chains。在链的末端寻找一组不同的块。

我建议开始使用 Docker 使用预构建配置创建 Sawtooth 网络。例如,使用此处找到的 文件sawtooth-default-poet.yamlhttps ://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


推荐阅读