【问题标题】:Substrate genesis blocks not matching底物创世区块不匹配
【发布时间】:2021-03-09 20:57:58
【问题描述】:

我目前正在做this tutorial。当我按照描述跟踪它并在同一台机器上执行 alice 和 bob 节点时,它按预期工作:节点正在连接并且正在创建和完成块。现在我想通过互联网和不同的机器完成同样的事情。所以我在我的 PC 上执行 bootnode,在我的笔记本电脑上执行另一个节点。我从the same code 编译并转发了路由器中的端口。因此,现在我期望与在本地计算机上同时运行两者时的行为相同。因此,当我执行它们时,我看到两个控制台中都打印了网络流量,但 bob 节点打印了一个警告:Bootnode with peer id '12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp' is on a different chain (our genesis: 0xbfbd…3144 theirs: 0x8859…14c4) 并且它们未连接 (Idle 0 peers)。

所以从警告中我得出结论,它们没有相同的创世块,这显然是作为区块链运行所必需的。但据我了解,加入节点应该从引导节点复制链的当前状态。如何更改 bob 部分以使用链的 alices 状态?

两台机器都运行 rust 版本 1.50.0

感谢您的帮助!

【问题讨论】:

    标签: substrate


    【解决方案1】:

    Rust 编译不是确定性的,因此在两台计算机上编译的完全相同的区块链的完全相同的代码将很遗憾不会具有相同的创世哈希。 (特别是因为该链的部分起源是 Wasm 运行时 blob,它是用 Rust 非确定性编译的)。

    您需要create a chainspec 文件才能用于所有其他节点。请注意,您希望在一台计算机上生成此文件,并将文件传递给其他节点(不要重新生成它,因为您遇到的创世代码会有所不同),然后再启动其他节点using the correct chainspec and manually specifying boot nodes

    【讨论】:

    • 感谢@shawn 的帮助 :)
    • 感谢您的帮助!有效。我之前也尝试过使用自定义链规范,但缺少 --rpc-methods Unsafe--name NodeName 标志。
    猜你喜欢
    • 2021-10-07
    • 2020-10-01
    • 1970-01-01
    • 2018-09-27
    • 2018-12-04
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多