无序交易
如 AIP-123(常见问题)所述,无序交易不使用序列号即可执行。这尤其适用于多台机器从同一发送账户提交交易、且提交顺序无关紧要的场景。
重放由 nonce 保护。区块链会保存最近 60 秒内已提交无序交易的 (sender, nonce) 对。只有该对尚未使用时交易才会执行,且无序交易最多 60 秒后过期——短于序列号交易。
带有链上 0x1::account::Account 资源的账户和无状态账户都可以发送无序交易。
无序交易使用 AIP-129 中指定的额外负载字段。
- 使用唯一的
replayProtectionNonce(随机u64)以及要调用的 Move entry 函数构建交易。 - 像普通交易一样签名并提交。nonce 取代序列号来提供重放保护。
nonce 不会为交易排序。它只确保在过期前,同一 nonce 不能执行两次。
TypeScript 示例
Section titled “TypeScript 示例”在交易 options 中传入 replayProtectionNonce:
const transaction = await aptos.transaction.build.simple({ sender: sender.accountAddress, data: { function: "0x1::aptos_account::transfer", functionArguments: [destination.accountAddress, 100], }, options: { replayProtectionNonce: 12345n, },});SDK 支持
Section titled “SDK 支持”每个官方 SDK 都记录了无序交易,并提供已测试示例: