跳转到内容

无序交易

AIP-123常见问题)所述,无序交易不使用序列号即可执行。这尤其适用于多台机器从同一发送账户提交交易、且提交顺序无关紧要的场景。

重放由 nonce 保护。区块链会保存最近 60 秒内已提交无序交易的 (sender, nonce) 对。只有该对尚未使用时交易才会执行,且无序交易最多 60 秒后过期——短于序列号交易。

带有链上 0x1::account::Account 资源的账户和无状态账户都可以发送无序交易。

无序交易使用 AIP-129 中指定的额外负载字段。

  1. 使用唯一的 replayProtectionNonce(随机 u64)以及要调用的 Move entry 函数构建交易。
  2. 像普通交易一样签名并提交。nonce 取代序列号来提供重放保护。

nonce 不会为交易排序。它只确保在过期前,同一 nonce 不能执行两次。

在交易 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 都记录了无序交易,并提供已测试示例: