Saltearse al contenido

SDK de Go - Transacciones Multi-Agente

Las transacciones multi-agente permiten que múltiples cuentas participen en la lógica de un contrato Move.

Esto se puede usar para requerir que múltiples partes estén de acuerdo con una transacción antes de ejecutarla o para usar recursos de múltiples cuentas.

Crear y ejecutar una transacción multi-agente sigue un flujo similar al flujo de transacción regular, pero con varias diferencias notables.

  1. Construir la transacción incluyendo aptos.AdditionalSigners con una lista de cada firmante adicional.

    transaction, err := client.BuildTransactionMultiAgent(alice.AccountAddress(), aptos.TransactionPayload{
    Payload: &aptos.EntryFunction{
    // Reemplaza módulo y función con tu función multi-agente
    Module: aptos.ModuleId{
    Address: aptos.AccountOne,
    Name: "aptos_account",
    },
    Function: "transfer",
    ArgTypes: []aptos.TypeTag{},
    Args: [][]byte{
    accountBytes,
    amountBytes,
    },
    },
    AdditionalSigners: []aptos.AccountAddress{bob.AccountAddress()},
    })
  2. Firmar una vez para cada firmante.

    Combinarás estas firmas en el siguiente paso.

    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. Combinar las firmas con la transacción raw para crear una transacción multi-agente firmada.

    signedTxn, ok := rawTxn.ToMultiAgentSignedTransaction(aliceAuth, []crypto.AccountAuthenticator{bobAuth})
  4. Enviar la transacción combinando todas las firmas de agentes a través del parámetro aptos.AdditionalSigners.

    submitResponse, err := client.SubmitTransaction(signedTxn)
  5. Finalmente, esperar a que la transacción se resuelva.

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

NUMBER_OF_SIGNER_ARGUMENTS_MISMATCH - Esto sucede cuando intentas hacer firma multi-agente para una función que no requiere ese número de cuentas. Por ejemplo, si intentas usar múltiples firmas para una función 0x1::aptos_account::transfer - solo espera una dirección, y por eso produce un error cuando se proporciona más de una.