ETH网络中的账户

Externally owned accounts (EOA) – 外部账户

由用户控制,我们导入助记词创建的账户就属于此类账户。

Contract accounts (smart contracts) – 合约账户

合约账户由以太坊虚拟机执行的代码控制。它也被称为智能合约。合约帐户有相关的代码和数据存储,但没有私钥。这些账户的控制方式由他们的智能合约代码决定。
合约账户一般是由外部账户创建的,账户地址产生自创建人的地址和从创建人地址发送的交易数量(“nonce”)。

两种账户类型对比

外部账户合约账户
balance
⛰️nonce
codeHash
storageRoot
控制权用户合约代码
创建是否需要费用不需要需要
是否可以主动发起交易可以不可以,只有合约代码被调用才会触发交易
是否有私钥没有
  • codeHash : 该哈希表示以太坊虚拟机 (EVM) 上的代码。 合约帐户具有编程的代码片段,可以执行不同的操作。 如果帐户收到消息调用,则执行此 EVM 代码。 与其他帐户字段不同,不能更改。 所有代码片段都被保存在状态数据库的相应哈希下,供后续检索。 此哈希值称为 codeHash对于外部所有的帐户,codeHash 字段是空字符串的哈希。
  • storageRoot : 有时被称为 storageHash(存储哈希)。它是存储在以太坊区块头中的一个字段。具体而言,以太坊使用默克尔树(Merkle Trie)来组织和表示账户状态。

关注我,一起进入Web3的世界