Substrate全节点使用--staging flag无法出块,如何正确使用staging配置?
问题原因说明
你看到的节点输出表示当前节点未连接到任何对等节点,且网络中没有授权的出块节点生产区块,核心原因是--chain=staging是Substrate官方预置的预发布测试链配置,并非单节点/私有链启动选项:
- staging配置内置的出块权限归属于官方预生成的验证人密钥,你本地启动的普通节点没有出块权限,单节点运行时自然无法生成区块
- 如果你要基于staging配置搭建私有网络,需要手动修改链规范中的验证人集合,替换为你自己控制的节点Session密钥,否则网络不会启动出块逻辑
staging 正确使用指南
- 如果你要接入官方staging测试网:
- 确认你使用的Substrate二进制版本和官方staging网部署的版本完全一致,版本不匹配会导致无法连接对等节点
- 启动命令不需要额外加参数,直接运行
./target/release/substrate --chain=staging即可,节点会自动发现网络中的对等节点并同步区块
- 如果你要基于staging配置搭建私有网络:
- 导出staging链规范原始文件:
./target/release/substrate build-spec --chain=staging --raw > staging-custom.json - 修改
staging-custom.json中的palletSession字段下的验证人列表,替换为你自己生成的节点SR2551/ED25519公钥 - 启动所有验证人节点时指定自定义链规范:
./target/release/substrate --chain=./staging-custom.json --validator --name "你的验证人名称" - 至少启动2个配置好的验证人节点(满足staging默认的最低出块节点数要求),网络会自动开始出块
- 导出staging链规范原始文件:
生产环境配置说法确认
想确认“生产环境应当使用--staging而非--dev、--local”的说法是否正确?
这个说法完全错误,三类配置的定位完全不同:
--dev/--local是本地开发测试配置,默认开启即时出块、权限宽松,所有数据重启后可清除,绝对不能用于生产环境--staging是预发布测试网配置,仅用于上线前的功能验证、压力测试,本身不是生产环境配置- 生产环境必须使用你自行定制、经过安全审计的自定义链规范,不要使用任何Substrate预置的链配置(包括staging),避免预置密钥、默认参数带来的安全风险
内容的提问来源于stack exchange,提问作者Makam Aravind
相关产品推荐
相关产品推荐

