以太坊作为全球第二大区块链网络,早已超越了“比特币替代品”的范畴,而是构建了一个去中心化的“世界计算机”,它通过独特的区块链架构、虚拟机设计和共识机制,支持开发者部署智能合约、构建去中心化应用(DApps),并推动DeFi、NFT、DAO等生态的爆发,要理解以太坊如何运行,需从其核心组件——区块链基础、虚拟机执行、共识机制、账户模型以及数据存储——逐一拆解。
区块链基础:不止于“账本”,更是“状态机”
与比特币专注于记录交易不同,以太坊的核心是一个状态机(State Machine),它维护一个不断变化的“全球状态”(Global State),记录网络中所有账户的实时数据(如余额、合约代码等),这一状态通过“区块”串联成链,形成可追溯、不可篡改的历史记录。
- 区块结构:每个区块包含区块头(前一个区块的哈希、时间戳、难度值、随机数、状态根、交易根、收据根)和交易列表。“状态根”是当前全球状态的哈希值,“交易根”和“收据根”则分别对应交易列表和交易执行结果的哈希,确保数据完整性。
- 状态转换:每笔交易都会触发状态转换,用户A向用户B转账1 ETH,会更新A和B的账户余额,生成新的状态根,并将这一变更记录在区块中,以太坊的状态转换函数(
THE EVM STATE TRANSITION FUNCTION)是规范交易执行的核心逻辑,确保所有节点对状态变更达成一致。
账户模型:外部账户与合约账户的协同
以太坊的账户分为两类,它们共同构成了网络的基础单元:
- 外部账户(Externally Owned Account, EOA):由用户私钥控制,类似于传统银行账户,每个EOA有唯一的地址(由公钥生成),可以发起交易(如转账、调用合约)、持有ETH,EOA的“状态”仅包含余额和nonce(交易计数器,防止重放攻击)。
- 合约账户(Contract Account):由代码控制,没有私钥,其地址由创建者地址和交易nonce生成,合约账户的状态包括代码(Code)和存储(Storage),存储是合约内部的“变量空间”,用于持久化数据(如DeFi协议中的用户存款记录)。
两类账户的交互是以太坊运行的核心:EOA通过交易触发合约账户的代码执行,而合约账户的执行结果可能进一步改变其他账户的状态。
以太坊虚拟机(EVM):智能合约的“运行引擎”
如果说区块链是“硬件”,那么以太坊虚拟机(EVM)就是运行智能合约的“操作系统”,EVM是一个去中心化的、图灵完备的虚拟机,部署在以太坊网络的每个全节点中,负责执行所有智能合约代码(目前以Solidity语言为主)。
- 执行环境:当一笔交易调用合约时,EVM会在全节点中创建一个“执行上下文”,包含发送者地址、接收者地址、Gas限制、交易数据等参数,EVM通过“堆栈”(Stack)处理临时数据,“内存”(Memory)存储执行过程中的临时变量,“存储”(Storage)持久化合约数据(读写速度较慢但永久保存)。
- Gas机制:为防止无限循环攻击和资源滥用,EVM引入了Gas概念,每笔交易执行都需要消耗Gas(计算复杂度越高,Gas消耗越大),发送者需在交易中预付Gas费用(以ETH支付),如果执行过程中Gas耗尽,交易会回滚,但已消耗的Gas不会退还(作为对验证者的激励),Gas机制确保了EVM的“图灵完备性”不会变成“无限计算陷阱”。
- 字节码执行:智能合约代码(如Solidity)会被编译成EVM能理解的字节码(Bytecode),EVM通过操作码(Opcode)逐行执行这些字节码。
ADD操作码实现加法,SSTORE操作码将数据写入合约存储,CALL操作码则调用其他合约。
共识机制:从PoW到PoS的演进
以太坊网络需要一种机制,让所有节点对“哪个区块是合法的”达成一致,这便是共识机制,以太坊的共识机制经历了两次重大升级:
