Solana交易通常把recent blockhash写进消息,既帮助网络拒绝重复交易,也让签名只在有限窗口内有效。离线设备、多方签名或跨时区审批可能来不及在窗口内完成。Durable Nonce把recent blockhash替换为Nonce Account中保存的链上值,让已签消息不会按普通窗口过期;代价是必须管理一个账户、一个权限,以及严格的推进顺序。
它不是“永久有效的任意签名”,更不是交易成功保证。收款地址、金额、程序调用和费用都在消息里固定,签名后不能偷偷修改。
四个角色不要混在一起
| 角色 | 职责 | 是否一定相同 |
|---|---|---|
| Nonce Account | 保存当前nonce状态 | 否 |
| Nonce Authority | 授权推进或管理nonce | 否 |
| Fee payer | 支付本次交易费用 | 否 |
| 业务签名人 | 授权转账或程序调用 | 否 |
Nonce Account由System Program管理,并需保持满足当前规则的账户余额。Nonce Authority能推进nonce,也能管理相关账户操作,因此它不是普通展示地址。把authority密钥放在联网协调机上,会削弱离线签名流程的安全价值。
为什么第一条指令必须推进nonce
Durable Nonce交易把账户中存储的nonce放到消息的recentBlockhash位置,并要求第一条指令推进它。网络验证旧值后立即换成新值,使同一个已使用nonce不能再次成功执行。
如果推进指令不是第一条、authority未签名、账户值已经变化,或该nonce已被另一笔交易抢先使用,整笔交易会失败。一个nonce值不适合并行支撑多笔待执行交易;需要并行审批时,应使用独立Nonce Account或明确的串行队列。
从创建到广播的安全流程
第一阶段,在联网环境创建Nonce Account并设置独立authority,记录公开地址,不导出私钥。第二阶段,读取当前nonce,构造完整消息,把推进指令放在第一位。第三阶段,把序列化消息送到离线设备,逐项确认fee payer、账户列表、程序ID、金额和所有指令。第四阶段,多位签名人对完全相同的消息签名。第五阶段,联网端再次确认链上nonce未变化后广播,并查询交易签名状态。
交易哈希与网络核验可参考交易哈希的浏览器核验方法。若失败原因只是拥堵,不要盲目提高费用并重复提交旧消息;先确认nonce是否已经被推进。Solana基础费和优先费的作用边界见Solana优先费说明。
离线签名最容易忽略“延迟风险”
普通blockhash会自然让旧签名失效;Durable Nonce移除了这层短时过期保护。若你签了一笔一周后才广播的付款,期间收款背景、价格、业务权限或合规状态可能已经变化,但链上消息仍是当初那一笔。
因此,审批系统应在业务层加入金额上限、人工过期时间和撤回流程。若决定取消一笔尚未广播的交易,可由authority安全推进nonce,让旧消息无法再用,但必须核对这不会与另一笔合法交易发生竞争。
实施前先确认这项能力仍受支持
截至2026年7月15日,Solana官方Durable Nonces文档已明确提示:这项机制可能在未来发布中移除,并引用了相关SIMD讨论。这不等于当前已停用,但意味着新系统不应把Durable Nonce当成永久不变的基础设施。
上线前应核对当前集群、SDK与官方文档,同时为延迟执行保留可替换方案。本文因此标记为时效敏感内容,不应仅凭旧版CLI截图或历史教程建立长期流程。
三种失败情形怎么判断
消息过期类:普通交易会提示blockhash not found;Durable Nonce应检查是否错误使用普通blockhash。nonce不匹配类:账户值已推进、首指令错误或authority缺失。业务执行类:nonce验证通过,但余额、账户权限、程序逻辑或计算预算失败。三类问题的修复路径不同,不能一律“重新签名”。
Solana代币转账还要区分钱包主地址与Token Account,相关账户关系可对照Solana ATA是什么。离线设备应展示完整账户和程序,而不只是一个人类可读的“转账”标签。
广播前的八项核对
- 网络和Genesis环境正确。
- Nonce Account地址来自可信清单。
- 读取的nonce仍是链上当前值。
- nonceAdvance位于第一条指令。
- Authority与业务签名人符合权限设计。
- fee payer余额足够,费用设置合理。
- 收款人、Mint、Token Account和程序ID逐项确认。
- 广播后同时核对交易状态和nonce新值。
本文用于Solana钱包与离线签名安全教育,不构成支付或托管保证。Nonce Account余额要求、SDK和命令会随版本变化,请以当前Solana官方文档及链上状态为准。大额或多签流程应先在测试环境演练,并保留可审计的消息摘要与审批记录。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。