Sawtooth验证节点连接创世节点报错‘not in dispatcher’求助
我之前处理过类似的Sawtooth节点组网问题,咱们从报错信息入手,一步步拆解解决:
错误核心原因分析
日志里的两个关键信息已经点明了问题:
AUTHORIZATION_VIOLATION:这说明你的新验证节点没有被现有Sawtooth网络授权加入。Sawtooth的验证节点网络默认是权限管控模式,只有在授权列表中的节点公钥才能参与共识和组网。- 后续的"connection not in dispatcher"是连锁反应:主节点检测到未授权的连接后主动断开了链路,所以后续无法发送响应消息。
分步解决方案
1. 获取新节点的验证公钥
首先拿到新节点的验证身份公钥,有两种方式:
- 执行命令查看:
sawtooth key list,找到validator对应的公钥字符串 - 直接读取文件:
cat ~/.sawtooth/keys/validator.pub
把这个公钥复制下来,接下来要将其加入主节点的授权列表。
2. 给新节点添加网络授权
根据你已经生成创世块的情况,推荐用不重置现有链的方式添加授权:
在主节点上执行以下操作:
- 生成添加授权的配置批处理文件:
记得把sawset proposal create --key ~/.sawtooth/keys/validator.priv \ sawtooth.validator.authorized_keys="$(cat ~/.sawtooth/keys/validator.pub),<新节点公钥>" \ -o add-authorized-node.batch<新节点公钥>替换成你刚才复制的内容。 - 提交批处理到主节点的REST API:
sawtooth batch submit -f add-authorized-node.batch --url http://localhost:8008 - 等待1-2分钟,单节点网络会自动通过这个提案,多节点则需要其他验证节点确认。
3. 检查新节点的启动配置
确保新节点的启动参数正确指向主节点:
- 启动命令必须包含
--peering dynamic --peer tcp://<主节点IP>:8800,替换成你的主节点实际IP - 检查新节点的
validator.toml文件,确认network_public_key和signing_key的路径配置正确,没有拼写错误
4. 验证基础网络连通性
别忽略最基础的网络问题:
- 在新节点上测试主节点8800端口是否可达:
nc -zv <主节点IP> 8800 - 检查两台机器的防火墙/安全组,确保8800端口(P2P通信)和8008端口(REST API)都已开放
5. 确认节点时间同步
Sawtooth的POET共识对节点时间同步要求极高,时间差超过几秒就会导致连接或共识失败:
- 在两台节点上执行
ntpq -p,确认时间同步正常;如果不同步,手动同步或配置NTP服务
最终验证
完成以上步骤后,重启新的验证节点,观察日志。如果不再出现AUTHORIZATION_VIOLATION报错,且能看到PING_RESPONSE正常交互,说明节点已成功加入网络。
内容的提问来源于stack exchange,提问作者STOIE
相关产品推荐
相关产品推荐

