搭建Substrate私有网络时suri来源及区块最终化停滞问题咨询
问题核心原因
你插入Grandpa(gran类型)密钥时未指定加密方案为Ed25519,导致密钥库中存储的Grandpa密钥和链规范中写入的Grandpa权威地址不匹配,GRANDPA共识无法完成投票,所以区块始终无法最终化。
关于你提到的suri疑问也顺便说明:suri是Secret URI的缩写,你生成密钥得到的秘密种子、助记词都可以作为--suri的输入值,这部分你的用法没有问题。
具体错误点
- 密钥类型和加密方案不匹配
Substrate默认的Aura共识使用Sr25519算法,GRANDPA共识使用Ed25519算法。你在执行key insert导入gran类型密钥时,没有加--scheme Ed25519参数,命令默认使用Sr25519算法从种子派生密钥,派生出来的公钥和你之前用key inspect --scheme Ed25519得到的公钥完全不一致,自然和链规范grandpa.authorities字段中填入的Ed25519地址对不上。 - 可以从你给出的密钥库文件列表验证问题:node01的gran类型密钥文件名后缀是
780a4cd1...,对应你生成的Aura公钥,而你实际需要的Grandpa公钥是9c1726a7...,两者完全不符,GRANDPA节点找不到对应自己的投票任务,自然不会参与最终化投票。
修复步骤
- 先清空原有错误的密钥库
rm -rf /tmp/node01/chains/local_testnet/keystore/* rm -rf /tmp/node02/chains/local_testnet/keystore/*
- 重新导入密钥,注意导入gran类型时必须加
--scheme Ed25519参数
# node01导入Aura密钥(默认Sr25519,可不指定scheme) ./target/release/node-template key insert --base-path /tmp/node01 \ --chain customSpecRaw.json \ --suri 0xa80c9a2c2c96ac61a548a358c81aa07a519af00e7b3fc25f06761e2a5af42044 \ --password-interactive \ --key-type aura # node01导入Grandpa密钥,必须指定Ed25519 ./target/release/node-template key insert --base-path /tmp/node01 \ --chain customSpecRaw.json \ --suri 0xa80c9a2c2c96ac61a548a358c81aa07a519af00e7b3fc25f06761e2a5af42044 \ --password-interactive \ --key-type gran \ --scheme Ed25519 # node02导入Aura密钥 ./target/release/node-template key insert --base-path /tmp/node02 \ --chain customSpecRaw.json \ --suri 0x52e547fc68fed1d7e97be6232434ccc51d9cfe1cc237820d9cf3a559dd2be6e8 \ --password-interactive \ --key-type aura # node02导入Grandpa密钥,必须指定Ed25519 ./target/release/node-template key insert --base-path /tmp/node02 \ --chain customSpecRaw.json \ --suri 0x52e547fc68fed1d7e97be6232434ccc51d9cfe1cc237820d9cf3a559dd2be6e8 \ --password-interactive \ --key-type gran \ --scheme Ed25519
- 导入完成后重启两个节点,等待1-2分钟即可看到区块开始正常最终化。
内容的提问来源于stack exchange,提问作者gfan
相关产品推荐
相关产品推荐

