以太坊作为全球第二大区块链平台,其核心架构之一是“账户系统”,与比特币基于UTXO(未花费交易输出)的模型不同,以太坊采用“账户”概念,直接记录用户的状态(如余额、代码、存储数据等),从而支持更复杂的智能合约和去中心化应用(DApp),本文将详细解析以太坊账户的构成、类型及核心机制,帮助读者全面理解这一基础概念。
以太坊账户的基本构成
以太坊中的账户是区块链状态的基本单位,每个账户都有一个唯一的地址,并由以下几个关键部分组成:
-
地址(Address)
账户的唯一标识符,由20字节(40个十六进制字符)组成,地址通过公钥生成(外部账户)或直接指定(合约账户),用于接收资产、调用合约等操作。0x742d35Cc6634C0532925a3b844Bc454e4438f44e就是一个典型的以太坊地址。 -
余额(Balance)
账户中持有的以太币(ETH)数量,以“wei”为最小单位(1 ETH = 10¹⁸ wei),余额可通过交易转移,是账户最直观的状态数据。 -
nonce(序列号)
一个递增的计数器,用于防止“重放攻击”并确保交易顺序,对于外部账户,nonce记录该账户发起的交易数量;对于合约账户,nonce记录其创建的合约数量(仅在合约部署时使用)。 -
代码(Code)
仅合约账户包含的字段,存储智能合约的字节码(Bytecode),当外部账户调用合约时,EVM(以太坊虚拟机)会执行这段代码,实现预设逻辑(如代币转账、投票等),外部账户的代码字段为空。 -
存储(Storage)
仅合约账户包含的字段,用于持久化存储合约运行时的数据(如变量值、映射关系等),存储是以太坊状态树的一部分,但访问成本较高(需消耗Gas)。
以太坊账户的两大类型
根据功能和结构,以太坊账户分为外部账户(Externally Owned Account, EOA)和合约账户(Contract Account)两大类,二者在所有权、交互方式和应用场景上存在显著差异。
外部账户(EOA):用户操作的“入口”
外部账户由用户通过私钥控制,相当于传统区块链中的“用户账户”,常见于个人钱包(如MetaMask、Ledger)或交易所提现地址,其核心特征包括:
- 私钥控制:用户通过私钥对交易签名,证明账户所有权,私钥丢失意味着账户资产无法找回。
- 无代码和存储:不包含智能合约代码和存储字段,功能仅限于发起交易(如转账ETH、调用合约)。
- 主动发起交易:EOA是区块链上所有交易的“起点”,例如用户从EOA向另一个账户发送ETH,或调用智能合约的函数。
合约账户:智能合约的“载体”
合约账户由智能合约代码控制,其地址通常通过EOA部署合约时生成,相当于“链上程序”的运行实例,其核心特征包括:
- 代码驱动:账户行为由预部署的智能合约代码决定,例如ERC-20代币合约会自动处理转账和授权逻辑。
- 被动响应:合约账户无法主动发起交易,只能响应EOA或其他合约的调用(通过触发交易执行)。
