You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sawtooth验证节点连接创世节点报错‘not in dispatcher’求助

解决Sawtooth验证节点Peer连接时的AUTHORIZATION_VIOLATION错误

我之前处理过类似的Sawtooth节点组网问题,咱们从报错信息入手,一步步拆解解决:

错误核心原因分析

日志里的两个关键信息已经点明了问题:

  • AUTHORIZATION_VIOLATION:这说明你的新验证节点没有被现有Sawtooth网络授权加入。Sawtooth的验证节点网络默认是权限管控模式,只有在授权列表中的节点公钥才能参与共识和组网。
  • 后续的"connection not in dispatcher"是连锁反应:主节点检测到未授权的连接后主动断开了链路,所以后续无法发送响应消息。

分步解决方案

1. 获取新节点的验证公钥

首先拿到新节点的验证身份公钥,有两种方式:

  • 执行命令查看:sawtooth key list,找到validator对应的公钥字符串
  • 直接读取文件:cat ~/.sawtooth/keys/validator.pub

把这个公钥复制下来,接下来要将其加入主节点的授权列表。

2. 给新节点添加网络授权

根据你已经生成创世块的情况,推荐用不重置现有链的方式添加授权:
在主节点上执行以下操作:

  1. 生成添加授权的配置批处理文件:
    sawset proposal create --key ~/.sawtooth/keys/validator.priv \
    sawtooth.validator.authorized_keys="$(cat ~/.sawtooth/keys/validator.pub),<新节点公钥>" \
    -o add-authorized-node.batch
    
    记得把<新节点公钥>替换成你刚才复制的内容。
  2. 提交批处理到主节点的REST API:
    sawtooth batch submit -f add-authorized-node.batch --url http://localhost:8008
    
  3. 等待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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:58:35