跳转到内容

Go SDK:多代理交易

多代理交易允许多个账户参与 Move 合约逻辑。

它可用于要求多方在执行前同意一笔交易,或使用多个账户中的资源。

创建和执行多代理交易的流程与常规交易流程类似,但有几个显著差异。

  1. 构建交易时,加入 aptos.AdditionalSigners,其中包含每个额外签名者的列表。

    transaction, err := client.BuildTransactionMultiAgent(alice.AccountAddress(), aptos.TransactionPayload{
    Payload: &aptos.EntryFunction{
    // Replace module and function with your multi-agent function
    Module: aptos.ModuleId{
    Address: aptos.AccountOne,
    Name: "aptos_account",
    },
    Function: "transfer",
    ArgTypes: []aptos.TypeTag{},
    Args: [][]byte{
    accountBytes,
    amountBytes,
    },
    },
    AdditionalSigners: []aptos.AccountAddress{bob.AccountAddress()},
    })
  2. 为每个签名者分别签名。

    下一步将组合这些签名。

    aliceAuth, err := rawTxn.Sign(alice)
    if err != nil {
    panic("Failed to sign transaction as sender:" + err.Error())
    }
    bobAuth, err := rawTxn.Sign(bob)
    if err != nil {
    panic("Failed to sign transaction as second signer:" + err.Error())
    }
  3. 将签名与原始交易组合,创建多代理已签名交易。

    signedTxn, ok := rawTxn.ToMultiAgentSignedTransaction(aliceAuth, []crypto.AccountAuthenticator{bobAuth})
  4. 通过 aptos.AdditionalSigners 参数组合所有代理签名并提交交易。

    submitResponse, err := client.SubmitTransaction(signedTxn)
  5. 最后等待交易完成。

    txnResult, err := client.WaitForTransaction(submitResponse.Hash)

NUMBER_OF_SIGNER_ARGUMENTS_MISMATCH:当你尝试为不需要该数量账户的函数进行多代理签名时出现。例如,若尝试为 0x1::aptos_account::transfer 函数使用多个签名,由于它只预期一个地址,提供多个地址便会产生错误。