Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

以太坊基础

以太坊是支持智能合约的分布式状态机。节点依据相同的交易顺序和执行规则计算状态变化,共识协议确定区块历史。执行层负责交易和 EVM 执行,共识层负责区块提议、分叉选择与最终性。

智能合约与 EVM

智能合约由部署后的字节码和账户状态组成。Solidity、Vyper 等语言编译为 EVM 字节码,EVM 按操作码执行。合约函数由交易或调用触发,不会仅因某个时间点到达而自行运行。

每次执行都受 Gas 预算限制。EVM 支持通用计算,但一笔交易无法无限执行。节点重放交易需要得到相同结果,合约不能任意访问本地文件或外部网络。

合约业务可以通过代理实现升级:代理保存状态并委托给实现合约执行。升级替换实现地址,不等同于任意改写已经部署的字节码。权限、存储兼容与调用语义分别影响升级安全。

账户与状态

账户控制方式交易与调用
外部账户(EOA)由私钥签署交易和授权能发起协议层交易;EIP-7702 允许设置代码委托标记
合约账户由合约代码规定操作条件在交易执行中接收调用并发出消息调用,没有与账户天然对应的私钥

EIP-7702 下的 EOA 仍保留私钥控制能力,因此代码是否为空不能单独作为账户权限或签名方式的判断依据。合约钱包的授权规则由其代码定义,可通过 ERC-1271 等接口验证签名。

账户状态包含 nonce、ETH 余额、代码哈希和存储根。ERC-20 余额通常保存在代币合约的映射中,与账户的原生 ETH 余额不同。账户结构与地址派生见账户模型。

交易、Gas 与 ETH

交易包含发送者签名、nonce、目标地址、价值、调用数据及费用参数。nonce 约束同一发送账户的交易顺序;执行失败会回滚业务状态变化,但已经消耗的 Gas 仍需付费。

EIP-1559 交易通过 maxFeePerGas 和 maxPriorityFeePerGas 约束费用。基础费由协议根据区块使用情况调整并销毁;优先费支付给区块的执行层费用接收地址。

在费用上限足以覆盖基础费时,执行 Gas 的有效单价为:

$$ \text{effectiveGasPrice}=\min(\text{maxFeePerGas},\text{baseFeePerGas}+\text{maxPriorityFeePerGas}) $$

Gas 是资源计量单位,ETH 是支付资产,二者不能混为同一单位。1 ETH = 10^{18} Wei,1 Gwei = 10^9 Wei。Blob 交易另有独立的数据费用,见 EIP-4844。

ETH 的供应变化受共识奖励发行和费用销毁共同影响。基础费销毁不保证每个时期的 ETH 总供应都下降。

区块与节点职责

合并后的信标区块包含共识层信息及执行载荷。执行载荷包含交易和执行结果承诺;执行层区块头记录状态根、交易根、收据根等字段。完整状态树和收据树不是逐份嵌入区块的内容。

节点从交易和历史状态计算新状态,并校验其根与区块承诺一致。日志属于执行收据,查询日志与读取合约存储是不同操作。PoW 时代的挖矿和叔块规则属于历史机制。

执行客户端和共识客户端通过 Engine API 协作。验证者客户端承担提议与证明签署;运行普通节点本身不要求质押,参与独立验证者激活则有最低质押要求。

权益证明与最终性

以太坊于 2022 年合并后使用权益证明。主网时间划分为 slot 和 epoch;一个 slot 为 12 秒,一个 epoch 为 32 个 slot。某些 slot 可能没有区块,因此 slot 长度不是每两个实际区块之间必然相同的时间间隔。

验证者根据质押权重参与区块提议和证明。LMD-GHOST 选择链头,Casper FFG 通过检查点投票提供最终性。链头确认与检查点最终确认具有不同含义,机制见 Gasper。

扩容与数据可用性

Rollup 在链外执行交易,并将验证状态转换所需的承诺、证明或数据按其协议发布到结算层。安全性同时依赖证明机制、数据可用性、升级权限和退出路径。

以太坊早期路线图曾讨论多个执行分片。以 Rollup 为中心的扩容强调数据供给,EIP-4844 引入 Blob,后续数据可用性采样等机制继续扩展该能力。执行分片旧规划不能当作已经运行的主网结构。

侧链具有独立的共识和安全假设。Polygon PoS、Gnosis Chain 等侧链不能仅因与以太坊有桥接关系,就视为具有与 Rollup 相同的结算安全性。

主要历史升级

升级时间主要变化
Frontier2015 年主网启动
Byzantium2017 年新增椭圆曲线等预编译,支持更高效的证明验证
London2021 年EIP-1559 基础费与销毁机制
The Merge2022 年主网从 PoW 转为 PoS
Shanghai / Capella2023 年质押提款
Cancun / Deneb2024 年Blob 交易与瞬态存储等机制
Prague / Electra(Pectra)2025 年EOA 代码委托与验证者机制调整等变化

这些升级分别改变执行或共识规则,不能把某次升级概括为自动提供隐私、无限吞吐量或消除合约风险。

合约生态与开发环境

ERC-20、ERC-721、ERC-1155 分别定义常见代币接口,ERC-4626 定义代币化金库接口。接口兼容性与业务安全、价格可靠性、管理员权限属于不同问题。

开发工具包括 Remix、Hardhat 和 Foundry;链上交互可使用 ethers.js 等库。Sepolia 用于合约和应用测试,Hoodi 用于验证者及质押基础设施测试。Goerli、Holesky 属于已停用的历史测试网络。

参考资料