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.
Escribir Transacciones Multi-Agente
Sección titulada «Escribir Transacciones Multi-Agente»Crear y ejecutar una transacción multi-agente sigue un flujo similar al flujo de transacción regular, pero con varias diferencias notables.
-
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-agenteModule: aptos.ModuleId{Address: aptos.AccountOne,Name: "aptos_account",},Function: "transfer",ArgTypes: []aptos.TypeTag{},Args: [][]byte{accountBytes,amountBytes,},},AdditionalSigners: []aptos.AccountAddress{bob.AccountAddress()},}) -
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())} -
Combinar las firmas con la transacción raw para crear una transacción multi-agente firmada.
signedTxn, ok := rawTxn.ToMultiAgentSignedTransaction(aliceAuth, []crypto.AccountAuthenticator{bobAuth}) -
Enviar la transacción combinando todas las firmas de agentes a través del parámetro aptos.AdditionalSigners.
submitResponse, err := client.SubmitTransaction(signedTxn) -
Finalmente, esperar a que la transacción se resuelva.
txnResult, err := client.WaitForTransaction(submitResponse.Hash)
Errores Comunes
Sección titulada «Errores Comunes»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.