Ir al contenido

Construir y Enviar Transacciones

Kaptos ofrece dos formas de ejecutar transacciones:

  • un flujo componible (buildSimpleTransaction -> sign -> submitTransaction.simple)
  • un flujo de una llamada (execute) para ejecución común con un solo firmante

Esta guía usa la API lean más reciente (typeArgs(...), args(...)).

Primero genera credenciales y luego financia la dirección en una red de prueba.

val aptos = Aptos(AptosConfig(AptosSettings(network = Network.DEVNET)))
val alice = Account.generate()
val bob = Account.generate()
aptos.fundAccount(accountAddress = alice.accountAddress, amount = 100_000_000L).expect("Failed to fund Alice")
aptos.fundAccount(accountAddress = bob.accountAddress, amount = 100_000_000L).expect("Failed to fund Bob")

Para cuentas derivadas desde clave privada, revisa Cuentas.

Usa buildSimpleTransaction con el builder lean de entry function.

val txn =
aptos.buildSimpleTransaction(sender = alice.accountAddress) {
function = "0x1::coin::transfer"
typeArgs("0x1::aptos_coin::AptosCoin")
args(
bob.accountAddress,
1_000_000UL,
)
}

args(...) hace coerción automática Kotlin -> Move para tipos comunes (Boolean, Int, ULong, String, ByteArray, List<T>, AccountAddress, etc.), por lo que normalmente no necesitas wrappers explícitos.

Si necesitas ajustar parámetros de gas/secuencia:

val txn =
aptos.buildSimpleTransaction(
sender = alice.accountAddress,
options = InputGenerateTransactionOptions(maxGasAmount = 20_000),
) {
function = "0x1::coin::transfer"
typeArgs("0x1::aptos_coin::AptosCoin")
args(bob.accountAddress, 1_000_000UL)
}

Usa sign cuando quieres controlar explícitamente la autenticación antes del envío.

val senderAuthenticator = aptos.sign(signer = alice, transaction = txn)

Envía la transacción raw junto con el autenticador del remitente.

val pendingTxn =
aptos
.submitTransaction.simple(
transaction = txn,
senderAuthenticator = senderAuthenticator,
)
.expect("Failed to submit transaction")

Espera confirmación en cadena con el hash pendiente.

val executedTxn =
aptos
.waitForTransaction(HexInput.fromString(pendingTxn.hash))
.expect("Transaction did not execute successfully")

Si no necesitas inspeccionar objetos intermedios (transacción/autenticador), usa execute:

val pendingTxn =
aptos
.execute(signer = alice) {
function = "0x1::coin::transfer"
typeArgs("0x1::aptos_coin::AptosCoin")
args(bob.accountAddress, 1_000_000UL)
}
.expect("Failed to build/sign/submit transaction")

Luego espera confirmación de forma normal:

val executedTxn =
aptos
.waitForTransaction(HexInput.fromString(pendingTxn.hash))
.expect("Transaction did not execute successfully")