Go SDK:无序交易
无序交易允许创建彼此之间不指定执行顺序的交易。这在多台机器需要为同一发送账户签名或提交、但顺序不影响结果的场景中很有用。
协议概览请参阅无序交易(AIP-123 和 AIP-129)。
构建无序交易
Section titled “构建无序交易”将入口函数包装在 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),)之后遵循与简单交易相同的步骤:
- 模拟交易(可选)。
- 签名交易。
- 将交易提交到网络。
- 等待交易执行。
若要跳过手动签名和提交步骤,BuildSignAndSubmitTransaction 也接受相同的 inner payload。
SDK 仓库包含遵循此 API 的可运行示例:
运行:
go run examples/orderless_transaction/main.go