Ir al contenido

Crear y Gestionar Cuentas

Kaptos soporta tres patrones de cuenta importantes para producción:

  • Cuenta legacy Ed25519 (Ed25519Account / Account.generate() por defecto)
  • Cuenta SingleKey (SingleKeyAccount) con auth key unificada
  • Cuenta MultiKey (MultiKeyAccount) para firmas por umbral

La ruta por defecto Account.generate() crea una cuenta legacy Ed25519.

val legacy = Account.generate()
val explicitLegacy = Account.generate(
scheme = SigningSchemeInput.Ed25519,
legacy = true,
)

También puedes derivar una cuenta legacy desde una clave privada Ed25519 existente:

val legacyFromPrivateKey =
Account.fromPrivateKey(
Ed25519PrivateKey("0x...")
)

Usa SingleKeyAccount cuando necesitas autenticación unificada y flexibilidad de esquema.

val ed25519Single = SingleKeyAccount.generate(SigningSchemeInput.Ed25519)
val secp256k1Single = SingleKeyAccount.generate(SigningSchemeInput.Secp256k1)

También puedes pedir una cuenta single-key vía Account.generate(...):

val singleViaAccount = Account.generate(
scheme = SigningSchemeInput.Ed25519,
legacy = false,
)

Para derivar desde claves privadas existentes:

val ed25519SingleFromPrivateKey =
SingleKeyAccount(
privateKey = Ed25519PrivateKey("0x...")
)
val secp256k1SingleFromPrivateKey =
SingleKeyAccount(
privateKey = Secp256k1PrivateKey(HexInput.fromString("0x..."))
)

MultiKeyAccount te permite definir una identidad de firma por umbral desde varias claves públicas.

val signerA = SingleKeyAccount.generate(scheme = SigningSchemeInput.Ed25519)
val signerB = SingleKeyAccount.generate(scheme = SigningSchemeInput.Secp256k1)
val signerC = SingleKeyAccount.generate(scheme = SigningSchemeInput.Ed25519)
val multiKeyAccount =
MultiKeyAccount.fromPublicKeysAndSigners(
publicKeys = listOf(signerA.publicKey, signerB.publicKey, signerC.publicKey),
signaturesRequired = 2,
signers = listOf(signerA, signerC),
)

En la API actual, signers.size debe coincidir con signaturesRequired.

Como MultiKeyAccount extiende Account, puede firmar transacciones igual que otros tipos de cuenta:

val txn =
aptos.buildSimpleTransaction(sender = multiKeyAccount.accountAddress) {
function = "0x1::coin::transfer"
typeArgs("0x1::aptos_coin::AptosCoin")
args(Account.generate().accountAddress, 1_000_000UL)
}
val pending = aptos.signAndSubmitTransaction(signer = multiKeyAccount, transaction = txn).expect("Failed to submit transaction")

Generar una cuenta solo crea credenciales locales. La dirección no existe en cadena hasta que la financias/creas.

aptos
.fundAccount(accountAddress = legacy.accountAddress, amount = 100_000_000L)
.expect("Failed to fund account")

En testnet también puedes usar la página del faucet.