账户(Account)
Last updated
Last updated
账户代表 Aptos 区块链上可以发送交易的资源。 每个帐户由一个特定的 16 字节帐户地址标识,并且是 Move 模块和 Move 资源的容器。
每个账户的状态包括 Code 和 Data:
Code: Move 模块包含 Code(类型和过程声明),但它们不包含 data。 该模块的程序对更新区块链全局状态的规则进行编码。
Data: Move 资源包含数据但没有 Code。 每个资源值都有一个在区块链分布式数据库中发布的模块中声明的类型。
一个帐户可能包含任意数量的 Move 资源和 Move 模块。
Aptos 帐户由一个帐户地址引用,该地址是一个 32 字节的值。 帐户地址源自该帐户的初始公共验证密钥。 具体来说,帐户地址是与签名方案标识符字节连接的初始公共验证密钥的 SHA-3 256 加密散列的最后 32 个字节。 Aptos 区块链支持两种签名方案: 和 MultiEd25519(用于多重签名交易)。 帐户的私钥是签署交易所必需的。
每个账户还存储一个 sequence_number
,代表下一个交易的序列号,防止交易重放攻击。 在创建帐户时将其初始化为 0。
每个帐户都存储一个身份验证密钥。此身份验证密钥使帐户所有者能够轮换与帐户关联的私钥,而无需更改托管其帐户的地址。在轮换期间,身份验证密钥会根据新生成的私有、公共密钥对进行更新。
要生成身份验证密钥和帐户地址:
生成密钥对:生成新的密钥对 (pubkey_A
, privkey_A
)。Aptos 区块链在 Ed25519 曲线上使用 PureEdDSA 方案,如 RFC 8032 中所定义。
派生一个 32 字节的身份验证密钥:派生一个 32 字节的身份验证密钥 auth_key = sha3-256(pubkey_A | 0x00)
, 其中 | 表示连接。 0x00
是一个 1 字节的签名方案标识符,其中 0x00 表示单签名。 auth_key 的前 16 个字节是“认证密钥前缀”。 auth_key 的最后 16 个字节是账户地址。任何创建账户的交易都需要账户地址和认证密钥前缀,但与现有账户交互的交易只需要地址。
帐户的身份验证密钥可能需要单个签名或多个签名(“multisig”)。使用 K-of-N 多重签名身份验证时,帐户总共有 N 个签名者,并且必须使用这 N 个签名中的至少 K 个来对交易进行身份验证。
创建 K-of-N 多重签名认证密钥类似于创建单个签名密钥:
生成密钥对:生成 N 个 ed25519 公钥 p_1
, ..., p_n
.
派生一个 32 字节的身份验证密钥:计算 auth_key = sha3-256(p_1 | … | p_n | K | 0x01)
。如上所述派生地址和身份验证密钥前缀。 K 表示验证交易所需的 K-of-N。 0x01 是一个 1 字节的签名方案标识符,其中 0x01 表示多重签名。
Aptos 上的每个帐户都可以存储数据,它在资源中存储。初始资源是帐户数据本身(身份验证密钥和序列号)。可以在创建帐户后添加其他资源,例如货币或 NFT。为了创建帐户,Aptos 测试网需要帐户的公钥和一定数量的 TestCoin 才能添加到该帐户,从而使用这两种资源创建一个新帐户。