以太坊账户的字段构成与地址生成机制
以太坊账户包含 nonce、balance、codeHash 和 storageRoot 四个字段,分别用于交易计数、余额存储、代码哈希和存储根哈希。外部账户由私钥控制,合约账户由代码控制,地址生成方式不同。账户与钱包是两个独立概念,钱包是交互工具,账户是网络实体。
以太坊账户的四种字段及其功能
以太坊账户包含四个核心字段:nonce、balance、codeHash 和 storageRoot。nonce 是一个计数器,用于记录从外部账户发出的交易数量或合约账户创建的合约数量,防止重放攻击。balance 表示账户拥有的 wei 数量,wei 是以太币的最小单位。codeHash 是合约账户的代码哈希值,用于标识其在 EVM 中执行的代码。storageRoot 是存储内容的默克尔帕特里夏树根哈希,用于存储账户的键值对数据。
外部账户与合约账户的差异
外部账户(EOA)由私钥控制,可以发起交易,且创建成本为零。合约账户由代码控制,创建时需支付网络存储费用。外部账户的 codeHash 是空字符串,而合约账户的 codeHash 是其代码的哈希值。外部账户可以发送 ETH 或代币,而合约账户只能在接收到交易后执行代码,例如转移代币或创建新合约。
账户地址的生成方式
外部账户的地址由私钥生成,通过椭圆曲线数字签名算法(ECDSA)得到公钥,再对公钥进行 Keccak-256 哈希,取后 20 字节并添加 0x 前缀得到地址。合约账户的地址由创建者地址和该地址的交易次数(nonce)生成,或通过 CREATE2 操作符,结合创建者地址、盐值和合约创建代码哈希生成。
账户与钱包的关系
账户是 Ethereum 网络中的实体,而钱包是用户与账户交互的工具。钱包可以管理多个账户,但账户本身并不等同于钱包。用户通过钱包发送交易,但账户的私钥是交易签名的核心,钱包仅作为接口,不直接控制账户的资产。
资料与延伸阅读
你可以通过以下原始资料核对文中概念,并继续深入阅读。