Accounts

账户在 Conflux 区块链网络中是一个非常重要的实体对象,可用来存放 CFX (账户有 CFX 余额),以及发送 Conflux 交易。账户以及账户余额被存储在 Conflux VM 的一个大数据表中,它们是 Conflux 账本全状态的一部分。

账户的类型

Conflux 有两种类型账户:

备注:Conflux 网络中有一种特殊的智能合约账户 -- 内置合约, 他们是网络启动或升级时自动创建,而非通过合约代码部署创建,目前 Conflux 网络有 6 个内置合约。

相同点

异同点

外部账户
智能合约

外部账户与公私钥对

一个外部账户是由一对加密公私钥产生的,它们可以用来证明一个交易真的是由某个账户签署的,防止交易伪造。私钥是用户用来签署交易的,它可以给你操作私钥对应账户上资金的权利。 本质上用户并不持有 CFX 或 token,而是持有私钥,CFX 永远存在于 Conflux 的账本中。

这种机制可以避免恶意的人员,广播假交易,因为我们随时可以验证交易的发送地址。

举个例子。Alice 想从自己拥有的账户发送 CFX 给 Bob 的账户,Alice 需要创建一个交易,并发送到网络中进行验证。Conflux 使用公开秘钥加密机制来确保 Alice 可以证明这笔交易就是由 Alice 本人发出的。没有这个机制一个恶意的第三用户 Eve 可以直接广播一笔交易 ”从 Alice 的账户发送 5 CFX 到 Eve 账户“ 并且也没有人能够验证交易是由 Alice 发出来的。

外部账户创建

当你想创建一个外部账户,你可以使用钱包比如 FluentWallet,也可以使用开发语言的库,本质上他们是随机生成了一个私钥。

一个私钥包含 64 个 hex 字符,可以使用密码进行加密。

fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f

公钥则是通过椭圆曲线加密算法从私钥计算出来的,然后对公钥进行 Keccak-256 哈希计算,取最后 20 字节,然后进行base32 编码即是 Conflux 地址。

// 主网地址
cfx:aatktb2te25ub7dmyag3p8bbdgr31vrbeackztm2rj
// 测试网地址
cfxtest:aatktb2te25ub7dmyag3p8bbdgr31vrbeajcg9pwkc

通过私钥可以推算出公钥,但反之则不行,私钥需要用户自己妥善保管

智能合约账户

合约账户同样有一个 base32 编码的地址

cfx:acf2rcsh8payyxpg6xj7b0ztswwh81ute60tsw35j7

该地址是在合约被部署时确定的,是通过部署交易发送账户地址,及其 nonce 以及合约的代码计算出来的。

注:内置合约账户地址是由网络自行分配的,比较特殊

账户详解

Conflux 的全局状态是由一个个账户状态组成,每个账户是一个 账户地址-账户状态对(key pair)

一个 Conflux 账户状态包含五部分:

其中账户的基本状态又由如下八个字段组成:

关于账户的更详细介绍可参看 Conflux 黄皮书的 Accounts 部分


Revision #5
Created 26 July 2022 02:11:27 by Pana
Updated 27 July 2022 06:03:58 by Pana