跳转到内容

Go SDK:无序交易

无序交易允许创建彼此之间不指定执行顺序的交易。这在多台机器需要为同一发送账户签名或提交、但顺序不影响结果的场景中很有用。

协议概览请参阅无序交易AIP-123AIP-129)。

将入口函数包装在 TransactionInnerPayload 中,并在 TransactionExtraConfigV1 上设置 ReplayProtectionNonce。使用 aptos.ExpirationSeconds(60) 将过期时间限制为 60 秒。

replayNonce := uint64(100)
accountBytes, err := bcs.Serialize(&bob.Address)
if err != nil {
panic("Failed to serialize bob's address:" + err.Error())
}
amountBytes, err := bcs.SerializeU64(TransferAmount)
if err != nil {
panic("Failed to serialize transfer amount:" + err.Error())
}
rawTxn, err := client.BuildTransaction(
alice.AccountAddress(),
aptos.TransactionPayload{
Payload: &aptos.TransactionInnerPayload{
Payload: &aptos.TransactionInnerPayloadV1{
Executable: aptos.TransactionExecutable{
Inner: &aptos.EntryFunction{
Module: aptos.ModuleId{
Address: aptos.AccountOne,
Name: "aptos_account",
},
Function: "transfer",
ArgTypes: []aptos.TypeTag{},
Args: [][]byte{accountBytes, amountBytes},
},
},
ExtraConfig: aptos.TransactionExtraConfig{
Inner: &aptos.TransactionExtraConfigV1{
MultisigAddress: nil,
ReplayProtectionNonce: &replayNonce,
},
},
},
},
},
aptos.ExpirationSeconds(60),
)

之后遵循与简单交易相同的步骤:

  1. 模拟交易(可选)
  2. 签名交易。
  3. 交易提交到网络。
  4. 等待交易执行。

若要跳过手动签名和提交步骤,BuildSignAndSubmitTransaction 也接受相同的 inner payload。

SDK 仓库包含遵循此 API 的可运行示例:

运行:

Terminal window
go run examples/orderless_transaction/main.go