Solana Durable Nonce是什么? 图 1
Solana Durable Nonce是什么? · 图 1

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是什么。离线设备应展示完整账户和程序,而不只是一个人类可读的“转账”标签。

广播前的八项核对

  1. 网络和Genesis环境正确。
  2. Nonce Account地址来自可信清单。
  3. 读取的nonce仍是链上当前值。
  4. nonceAdvance位于第一条指令。
  5. Authority与业务签名人符合权限设计。
  6. fee payer余额足够,费用设置合理。
  7. 收款人、Mint、Token Account和程序ID逐项确认。
  8. 广播后同时核对交易状态和nonce新值。

本文用于Solana钱包与离线签名安全教育,不构成支付或托管保证。Nonce Account余额要求、SDK和命令会随版本变化,请以当前Solana官方文档及链上状态为准。大额或多签流程应先在测试环境演练,并保留可审计的消息摘要与审批记录。