跳转到内容

创建和管理账户

Kaptos 支持三种适用于生产应用的账户模式:

  • 传统 Ed25519 账户Ed25519Account / Account.generate() 默认值)
  • 使用统一认证密钥的 SingleKey 账户SingleKeyAccount
  • 用于阈值签名的 MultiKey 账户MultiKeyAccount

默认的 Account.generate() 路径会创建传统 Ed25519 账户。

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

您也可以从现有 Ed25519 私钥派生传统账户:

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

SingleKey 账户(Ed25519 或 Secp256k1)

Section titled “SingleKey 账户(Ed25519 或 Secp256k1)”

如果需要统一认证和密钥敏捷性,请使用 SingleKeyAccount

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

也可以通过 Account.generate(...) 请求单密钥账户:

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

从现有私钥派生账户:

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

MultiKeyAccount 可让您基于多个公钥定义一个阈值签名身份。

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),
)

在当前 API 中,signers.size 必须与 signaturesRequired 相同。

由于 MultiKeyAccount 扩展自 Account,因此它可以像其他账户类型一样签名交易:

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")

生成账户只会创建本地凭证。在获得资金并创建前,该地址无法在链上使用。

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

在测试网中,也可以通过水龙头页面铸造代币。