# 账户

本文档描述了BMC的账户系统,账户是一个拥有BTM余额的实体,可以在BMC上发送交易。账户可以由用户控制或部署为智能合约。

# BMC账户类型

BMC主要有两种账户类型:

  • 外部拥有 - 由任何拥有私钥的人控制。

  • 合约 - 部署到网络的智能合约,由代码控制。

两种类型的账户都可以进行以下操作:

  • 接收、持有和发送资产(BTM)

  • 与已部署的智能合约交互

# 主要区别

  • 外部账户

    • 创建帐户无需任何费用
    • 可以发起交易
    • 外部拥有账户之间的交易只能是 BTM或其他token 转账
  • 合约账户

    • 创建合约是有成本的,因为您使用的是网络存储
    • 只能发送交易以响应接收交易
    • 从外部账户到合约账户的交易可以触发可以执行许多不同操作的代码,例如转移代币甚至创建新合约

# 账户详细信息

BMC账户有四个字段:

  • nonce – 指示从帐户发送的交易数量的计数器。这确保事务只处理一次。在合约账户中,这个数字代表该账户创建的合约数量。

  • balance – 该地址的BTM余额。

  • codeHash – 此哈希是账户代码。合约账户具有编程的代码片段,可以执行不同的操作。如果帐户收到消息调用,则会执行此代码。与其他帐户字段不同,它无法更改。所有这些代码片段都包含在状态数据库中相应的哈希下,以供以后检索。该哈希值称为 codeHash。对于外部拥有的账户,codeHash 字段是空字符串的哈希值。

  • storageRoot – 有时称为存储哈希。Merkle Patricia trie 根节点的 256 位散列,用于编码帐户的存储内容(256 位整数值之间的映射),作为来自 256 的 Keccak 256 位散列的映射编码到树中RLP 编码的 256 位整数值的位整数键。该 trie 对该账户的存储内容进行哈希编码,默认为空。

# 账户及密钥

# 外部账户和密钥对

一个帐户由一对加密密钥组成:公钥和私钥。它们有助于证明交易实际上是由发件人签署的,并防止伪造。您的私钥是您用来签署交易的,因此它授予您对与您的帐户相关联的资金的保管权。

这可以防止恶意行为者广播虚假交易,因为您始终可以验证交易的发送者。

如果 Alice 想从她自己的账户向 Bob 的账户发送BTM,Alice 需要创建一个交易请求并将其发送到网络进行验证。BMC对公钥加密的使用确保了 Alice 可以证明她最初发起了交易请求。如果没有加密机制,恶意对手 Dav 可以简单地公开广播一个看起来像“从 Alice 的账户向 Dav 的账户发送 5 BTM”的请求,并且没有人能够验证它不是来自 Alice。

# 创建账户

当您想创建一个帐户时,系统会为您生成一个随机私钥。

私钥由 64 位十六进制字符串组成,可以使用密码进行加密。

例如:

fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f

公钥是使用椭圆曲线数字签名算法 (opens new window)从私钥生成的。通过获取公钥的 Keccak-256 散列的最后 20 个字节并添加0x到开头,您可以获得您帐户的公共地址,您可以从私钥派生新的公钥,但不能从公钥派生私钥。

这是使用 GETH 在控制台中创建帐户的示例 personal_newAccount

> personal.newAccount()
Passphrase:
Repeat passphrase:
"0x5e97870f263700f46aa00d967821199b9bc5a120"

> personal.newAccount("h4ck3r")
"0x3d80b31a78c30fc628f20b2c89d7ddbf6e53cedc"

# 合约账户

合约账户也有一个 42 个字符的十六进制地址:

例如:

0x06012c8cf97bead5deae237070f9587f8e7a266d

合约地址通常在将合约部署到BMC区块链时给出。地址来自创建者的地址和从该地址发送的交易数量(“nonce”)。

上次更新: 2022/1/13下午4:47:56