以太坊作为全球第二大加密货币平台,以及最具代表性的智能合约平台,其成功背后离不开一套精心设计且不断演进的底层架构,理解以太坊的基本架构,是把握其如何支撑去中心化应用(DApps)运行、实现价值传递与逻辑自动执行的关键,本文将深入剖析以太坊的核心架构,涵盖其核心组件、数据组织、共识机制以及虚拟机等关键方面。

核心理念:世界计算机与状态转换

以太坊的核心理念是构建一个“世界计算机”——一个全球性的、去中心化的、由所有参与者共同维护的单一虚拟计算机,任何人都可以在这台计算机上运行程序(即智能合约),而无需依赖中央服务器,其运作基础是状态转换系统

  • 状态(State):以太坊的当前状态可以理解为一个巨大的、分布式的数据库,记录了网络上所有账户(外部账户和合约账户)的余额、代码、存储等信息,它是一个Merkle Patricia Trie(Merkle Patricia前缀树)结构,高效且易于验证。
  • 交易(Transaction):由外部账户发起,用于改变状态的操作,发送ETH、调用智能合约函数等。
  • 区块(Block):包含一系列交易以及对前一个区块的引用(形成链式结构),由矿工(或验证者)打包生成。
  • 状态转换函数(State Transition Function, Ψ):给定一个前状态S和一个交易T,Ψ(S,T) = S',即应用交易T到前状态S,产生新的状态S',以太坊的目标就是确保所有节点对状态转换的结果达成一致。

核心组件

以太坊的架构主要由以下几个核心组件构成:

  1. 账户(Accounts)

    • 外部账户(Externally Owned Accounts, EOAs):由用户通过私钥控制,类似于传统银行账户,可以发送ETH和发起智能合约调用,每个EOA由地址唯一标识。
    • 合约账户(Contract Accounts):由智能合约代码控制,不能主动发起交易,只能响应来自EOA或其他合约账户的调用,合约账户存储了代码(Code)和存储数据(Storage),也由地址标识。
  2. 交易(Transactions): 交易是状态改变的载体,包含以下关键信息:

    • 发送者(Sender):EOA的地址。
    • 接收者(Recipient):可以是EOA地址或合约地址。
    • 值(Value):发送的ETH数量。
    • 数据(Data):对于普通转账为空;对于合约调用,包含调用函数签名和参数。
    • Gas Limit( gas限制):发送者愿意为此次交易支付的最大计算量。
    • Gas Price( gas价格):发送者愿意为每单位Gas支付的价格。
    • Nonce(随机数):发送者账户发出的交易序号,防止重放攻击。
  3. 区块(Blocks): 区块是交易的容器,结构如下:

    • 区块头(Block Header):包含父区块哈希、叔父区块哈希(用于提升安全性,现已基本弃用)、Coinbase地址(矿工收益地址)、根状态哈希(Merkle Patricia Trie的根哈希,代表当前状态)、交易列表哈希、区块号、时间戳、难度、混合哈希(Mixhash,用于工作量证明)等关键元数据。
    • 交易列表(Transaction List):区块包含的所有交易。
  4. 随机配图