Construir y Enviar Transacciones
Kaptos cuenta con una API expresiva y type-safe estilo DSL para construir y enviar transacciones en cadena. Esta guía te llevará a través del proceso de construir y enviar transacciones usando Kaptos.
El flujo típico para enviar una transacción es el siguiente:
- Crear una cuenta (si no tienes una ya).
- Construir la transacción.
- Firmar la transacción.
- Enviar la transacción.
- 
Crear una Cuenta Para crear una nueva cuenta, primero generas nuevas credenciales luego financias la cuenta. En devnet, puedes financiar una cuenta programáticamente pidiendo a un “faucet”. val aliceAccount = Account.generate()val bobAccount = Account.generate()O Si tienes una clave privada, puedes usarla para crear un objeto Accountpara gestionar esas credenciales.val privateKey = Ed25519PrivateKey("myEd25519privatekeystring")val account = Account.fromPrivateKey(privateKey)En testnet puedes acuñar en la página de acuñar. 
- 
Construir la Transacción Kaptos proporciona un método buildTransaction.simplepara construir una transacción. Puedes especificar el remitente, datos de función de entrada como el nombre de función, argumentos de tipo, y argumentos de función. También puedes configurar la transacción con el precio de gas y cantidad máxima de gas. Sin embargo, valores predeterminados razonables se proporcionan para estos valores en caso de que no los especifiques.val txn = aptos.buildTransaction.simple(sender = aliceAccount.accountAddress,data = entryFunctionData {function = "0x1::coin::transfer"typeArguments = typeArguments {+TypeTagStruct("0x1::aptos_coin::AptosCoin")}functionArguments = functionArguments {+bobAccount.accountAddress+U64(SEND_AMOUNT)}},)
- 
Firmar la Transacción Una vez que hayas construido una transacción, puedes firmarla usando el método sign.val aliceAuthenticator = aptos.sign(sender = aliceAccount,transaction = txn,)
- 
Enviar la Transacción Finalmente, puedes enviar la transacción a la red usando el método submit.val committedTransaction = aptos.submitTransaction.simple(transaction = signedTransaction,senderAuthenticator = aliceAuthenticator,)
- 
Esperar a que la Transacción se Ejecute Luego puedes esperar a que la transacción sea ejecutada usando el método waitForTransaction.val executedTransaction = aptos.waitForTransaction(HexInput.fromString(committedTransaction.expect("Transaction failed").hash))
Ejemplo Completo de Kotlin
Sección titulada «Ejemplo Completo de Kotlin»Lo siguiente es un ejemplo completo de cómo construir y enviar una transacción para transferir APT:
const val FUNDING_AMOUNT = 100_000_000Lconst val SEND_AMOUNT_APT = 0.5fconst val UNIT_CONVERSION = 100_000_000const val SEND_AMOUNT_UNITS = (SEND_AMOUNT_APT * UNIT_CONVERSION)const val SEND_AMOUNT = 1_000_000UL
/** * Este ejemplo demuestra cómo transferir APT de una cuenta a otra. * * Cada ejecución genera y crea nuevas cuentas en cadena usando financiamiento de faucet. Después del financiamiento, el * balance APT de cada cuenta se imprime; si el financiamiento falla, se arroja un error. * * A continuación, se construye una transacción para enviar 0.5 APT de Alice a Bob. La transacción se * firma y envía usando el método de un paso `signAndSubmitTransaction`. Esperamos a que la * transacción se complete e imprimimos los balances actualizados de Alice y Bob. Si la transacción * falla, se arroja un error. */fun main() = runBlocking {  val aptos = Aptos(AptosConfig(AptosSettings(network = Network.DEVNET)))
  println("Generando las cuentas de Alice y Bob")
  val alice = Account.generate()  val bob = Account.generate()
  aptos.fundAccount(alice.accountAddress, FUNDING_AMOUNT).expect("Failed to fund Alice's account")  aptos.fundAccount(bob.accountAddress, FUNDING_AMOUNT).expect("Failed to fund Bob's account")
  println("Cuentas creadas en cadena")  println("Balance de Alice: ${aptos.getAccountAPTAmount(alice.accountAddress)}")  println("Balance de Bob: ${aptos.getAccountAPTAmount(bob.accountAddress)}")  println("=============================================")  println(    "Construyendo transacción para enviar ${SEND_AMOUNT / 100_000_000u} APT a Bob: ${bob.accountAddress}"  )
  val txn =    aptos.buildTransaction.simple(      sender = alice.accountAddress,      data =        entryFunctionData {          function = "0x1::coin::transfer"          typeArguments = typeArguments { +TypeTagStruct("0x1::aptos_coin::AptosCoin") }          functionArguments = functionArguments {            +bob.accountAddress            +U64(SEND_AMOUNT_UNITS.toULong())          }        },    )
  // Firmar y enviar la transacción  val committedTransaction = aptos.signAndSubmitTransaction(alice, txn)
  val executedTransaction =    aptos.waitForTransaction(      HexInput.fromString(committedTransaction.expect("Transaction failed").hash)    )
  println(    "Respuesta de espera de transacción: $executedTransaction\n============================================="  )
  val aliceNewBalance =    aptos.getAccountAPTAmount(alice.accountAddress).expect("Alice's account does not exist")  val bobNewBalance =    aptos.getAccountAPTAmount(bob.accountAddress).expect("Bob's account does not exist")
  println("Nuevo balance de Alice: $aliceNewBalance")  println("Nuevo balance de Bob: $bobNewBalance")}