以太坊协议

以太坊:PoS、EVM 与智能合约

基于以太坊白皮书与协议规范的深度教程。涵盖账户模型、状态转换函数、以太坊虚拟机(EVM)、Gas 与费用机制、智能合约生命周期、从 PoW 到 PoS 的合并、权益证明共识、最终性与罚没机制 — 配有交互式演示。

1. 引言与背景

以太坊由 Vitalik Buterin 于 2013 年提出,旨在将比特币的区块链概念从单纯的去中心化货币扩展为一个通用的去中心化计算平台。比特币证明了无需信任的价值转移是可行的,而以太坊则进一步追问:我们能否在区块链上运行任意程序?

比特币的局限性

比特币的脚本语言功能有限:它不支持循环,缺乏图灵完备性,状态管理受限于 UTXO 模型。虽然这些限制是出于安全考量的有意设计,但它们使得在比特币上构建复杂的去中心化应用变得极为困难。比特币脚本只能表达简单的支付条件,无法实现链上的复杂业务逻辑。

以太坊的愿景

以太坊旨在创建一台「世界计算机」— 一个去中心化的、图灵完备的计算平台,任何人都可以在上面部署和执行智能合约。这些合约一旦部署就自动按照预定规则运行,不受任何个人或组织的控制,实现真正的「代码即法律」。

核心原则

世界计算机

一个全球共享的、不可停止的计算平台 — 任何人都可以部署程序,所有节点共同执行并验证结果

账户模型

使用类似银行账户的状态模型取代比特币的 UTXO 模型 — 每个账户有余额、nonce 和存储,更直观地支持复杂交互

图灵完备

以太坊虚拟机(EVM)支持循环、条件分支和任意计算 — 理论上可以执行任何可计算的程序

智能合约

自动执行的代码程序存储在区块链上 — 一旦部署,按照预定义规则自主运行,无人可以篡改或停止

可编程货币

ETH 不仅仅是数字货币,更是驱动整个平台的「燃料」 — 用于支付计算费用、部署合约和参与治理

社区治理

协议通过 EIP(以太坊改进提案)进行升级 — 由开发者、验证者和社区共同讨论与决策

📄 白皮书:引言、'比特币作为状态转换系统'

2. 以太坊账户

与比特币的 UTXO 模型不同,以太坊采用账户模型来管理状态。以太坊中有两种类型的账户,它们共享相同的地址空间(20 字节 / 160 位),但具有不同的功能和属性。

外部拥有账户(EOA)

由用户通过私钥控制的账户。EOA 可以发起交易、转移 ETH 和调用合约。每个 EOA 由一对密钥(公钥/私钥)控制,地址由公钥的 Keccak-256 哈希的最后 20 个字节导出。EOA 没有关联的代码,是唯一能发起交易的账户类型。

合约账户

由部署在区块链上的代码控制的账户。合约账户不能主动发起交易 — 只能在收到交易或消息时被动触发执行。合约拥有自己的代码和持久化存储,可以持有 ETH、调用其他合约以及创建新合约。合约地址在部署时由创建者地址和 nonce 确定性地计算得出。

账户状态

nonce

对于 EOA,表示该账户发送的交易数量;对于合约账户,表示该合约创建的合约数量。nonce 防止交易重放攻击

balance(余额)

该账户拥有的 Wei 数量(1 ETH = 10^18 Wei)。余额可以通过交易和合约执行来增减

storageRoot(存储根)

一棵 Merkle Patricia Trie 的根哈希,编码了账户的持久化存储内容。EOA 的存储为空,合约账户用它存储状态变量

codeHash(代码哈希)

账户代码的 Keccak-256 哈希。对于 EOA,这是空字符串的哈希;对于合约,这是不可变的 EVM 字节码的哈希

EOA vs 合约账户

EOA 由私钥控制,合约由代码逻辑控制
只有 EOA 能发起交易(签名交易),合约只能被动响应
EOA 没有代码和存储,合约拥有不可变的代码和持久化存储
EOA 创建成本为零(生成密钥对即可),合约部署需要消耗 Gas
EOA 地址由公钥派生,合约地址由创建者地址和 nonce 计算得出(CREATE)或由 salt 和 initCode 计算得出(CREATE2)

📄 白皮书:'以太坊账户'

3. 消息与交易

以太坊中的「交易」是由 EOA 签名的数据包,它触发状态变更。交易可以是 ETH 转账、合约调用或合约部署。合约之间还可以发送内部「消息」,但消息不是链上记录的独立交易。

交易字段

nonce

发送者账户的交易计数器,防止交易重放

gasPrice / maxFeePerGas

发送者愿意支付的每单位 Gas 价格(Legacy 交易使用 gasPrice,EIP-1559 交易使用 maxFeePerGas 和 maxPriorityFeePerGas)

gasLimit

该交易允许消耗的最大 Gas 数量

to

接收方地址。若为空(null),表示这是一笔合约创建交易

value

随交易转移的 ETH 数量(以 Wei 为单位)

data

附加数据。对于合约调用,包含函数选择器和编码参数;对于合约创建,包含初始化字节码

v, r, s

ECDSA 签名组件,用于验证发送者身份和交易完整性

内部消息(Internal Messages)

当合约执行过程中调用另一个合约时,会产生内部消息(也称为内部交易)。这些消息不会在区块链上作为独立交易记录,但会影响状态变更。内部消息包含发送方、接收方、value、data 和 Gas 限制,与外部交易类似,但没有签名(因为它们是由 EVM 执行产生的)。

交易收据

status

交易执行是否成功(1 为成功,0 为失败)

cumulativeGasUsed

区块中截至该交易的累计 Gas 消耗

logs

交易执行过程中产生的事件日志(用于 DApp 监听链上事件)

logsBloom

事件日志的 Bloom 过滤器,用于高效搜索和过滤

📄 白皮书:'消息与交易'

4. 状态转换函数

以太坊的核心可以被理解为一个状态转换函数:APPLY(S, TX) -> S'。给定当前世界状态 S 和一笔交易 TX,函数产生新的世界状态 S'。每个区块包含一系列交易,逐一应用状态转换函数,将旧状态转换为新状态。

APPLY 函数

状态转换函数是以太坊协议的心脏。它定义了每笔交易如何修改全局状态。与比特币简单的 UTXO 消费/创建不同,以太坊的状态转换涉及余额变更、存储修改、代码执行等复杂操作。

状态转换步骤

  1. 验证交易格式正确、签名有效、nonce 与发送者账户的 nonce 匹配
  2. 计算预付费用:gasLimit × gasPrice。从发送者余额中扣除预付费用和转账 value
  3. 如果发送者余额不足以覆盖预付费用加转账 value,回滚并返回错误
  4. 初始化 Gas 计数器,设为 gasLimit。根据交易数据大小扣除基础 Gas 费用(每个零字节 4 Gas,每个非零字节 16 Gas)
  5. 将 value 从发送者转移到接收者。如果接收者不存在,创建新账户
  6. 如果接收者是合约账户,执行合约代码直至完成或 Gas 耗尽
  7. 如果执行失败(Gas 不足或其他错误),回滚所有状态变更(除了 Gas 支付)
  8. 将未使用的 Gas 退还给发送者,将已消耗的 Gas 对应的费用发送给区块验证者

交易验证规则

  • 交易必须是格式正确的 RLP 编码数据
  • 交易签名必须有效(可恢复出合法的发送者地址)
  • 交易 nonce 必须等于发送者账户的当前 nonce
  • Gas 限制必须大于或等于交易所需的固有 Gas
  • 发送者余额必须足以覆盖 gasLimit × gasPrice + value

交互式:状态转换可视化

状态转换可视化
地址余额Nonce存储
0xAlice...10.0000 ETH0
0xBob...5.0000 ETH2
0xToken...[Contract]0.0000 ETH1totalSupply: 1000000, balances_alice: 500
0xDave...2.5000 ETH0

📄 白皮书:'以太坊状态转换函数'

5. 以太坊虚拟机

以太坊虚拟机(EVM)是以太坊的运行时环境,负责执行智能合约的字节码。EVM 是一个基于栈的、准图灵完备的虚拟机(通过 Gas 限制防止无限循环),每个以太坊节点都运行着完全相同的 EVM 实例,确保了确定性的执行结果。

架构概述

EVM 是一个简单但强大的基于栈的虚拟机。它具有 256 位的字长(与 Keccak-256 哈希和椭圆曲线密码学自然契合),最大栈深度为 1024 个元素。EVM 的设计优先考虑了安全性和确定性 — 相同的输入在任何节点上总是产生相同的输出。

核心组件

栈(Stack)

LIFO 数据结构,最大深度 1024,每个元素 256 位。所有 EVM 计算通过栈操作完成(PUSH、POP、DUP、SWAP 等)

内存(Memory)

可扩展的字节寻址临时存储。每次合约调用时分配,调用结束后清除。访问成本随大小线性增长,加上二次方的扩展成本

存储(Storage)

键值对映射(256 位 → 256 位)的持久化存储。存储在区块链上,跨交易持久存在。读写成本极高(SSTORE 消耗 20,000 Gas 写入新值,SLOAD 消耗 2,100 Gas 读取)

程序计数器(PC)

指向当前正在执行的字节码指令的位置

Gas 计数器

追踪剩余可用 Gas。每条指令消耗预定的 Gas 量,Gas 耗尽时执行终止

调用数据(Calldata)

只读的交易输入数据区域,包含函数调用的参数

操作码示例

ADD / MUL / SUB / DIV

算术运算 — 对栈顶两个元素执行加、乘、减、除操作(各消耗 3-5 Gas)

PUSH1 ... PUSH32

将 1-32 字节的常量值压入栈顶

MLOAD / MSTORE

内存读写 — 从内存加载 32 字节到栈 / 将栈顶 32 字节写入内存

SLOAD / SSTORE

存储读写 — 从持久化存储读取 / 写入。这是 EVM 中最昂贵的操作之一

CALL / DELEGATECALL

调用外部合约。CALL 在目标合约上下文中执行,DELEGATECALL 在调用者上下文中执行(用于代理模式)

CREATE / CREATE2

部署新合约。CREATE 使用 nonce 计算地址,CREATE2 使用 salt 实现确定性地址

REVERT

终止执行并回滚所有状态变更,退还剩余 Gas

SELFDESTRUCT

销毁合约并将余额转移到指定地址(EIP-6780 后已被限制)

交互式:EVM 字节码步进器

EVM 字节码步进器
600360050100
程序计数器: 0
剩余 Gas: 10000
当前操作: PUSH1(0x60)
运行中
(empty)
0x00:
00000000000000000000000000000000
0x10:
00000000000000000000000000000000
0x20:
00000000000000000000000000000000
0x30:
00000000000000000000000000000000
(empty)

📄 白皮书:'代码执行'

6. Gas 与费用机制

Gas 是以太坊中衡量计算工作量的单位。每个 EVM 操作都有固定的 Gas 成本。用户必须为交易消耗的 Gas 付费,这一机制同时解决了停机问题(防止无限循环)和资源滥用问题(防止垃圾攻击)。

为什么需要 Gas

图灵完备的系统面临停机问题 — 无法在执行前判断程序是否会终止。Gas 提供了一种优雅的解决方案:每条指令消耗 Gas,当 Gas 耗尽时执行被强制终止。这确保了每笔交易的计算资源消耗是有界的,同时也创建了一个计算资源的市场定价机制。

EIP-1559:费用市场改革

EIP-1559(2021 年伦敦升级引入)彻底改革了以太坊的费用机制。它用动态基础费用 + 优先费用取代了原来的简单竞价模式。基础费用由协议根据区块利用率自动调整:当区块超过 50% 容量时基础费用上升,低于 50% 时下降。这使得费用更可预测,同时基础费用被销毁(而非支付给验证者),创造了 ETH 的通缩压力。

费用组成

基础费用(Base Fee)

由协议根据前一个区块的使用率自动计算。每个区块最多变化 12.5%。这部分费用被销毁(永久移除出流通)

优先费用(Priority Fee / Tip)

用户自愿支付给验证者的小费,激励验证者优先打包该交易。在网络拥堵时,更高的优先费用意味着更快的确认

最大费用(Max Fee)

用户愿意支付的每单位 Gas 最高价格。实际支付 = min(maxFee, baseFee + priorityFee)。差额退还给用户

基础费用销毁

EIP-1559 的一个革命性特征是基础费用被销毁而非支付给验证者。这意味着每笔交易都会永久减少 ETH 的流通供应量。当网络活动足够高时(基础费用销毁量超过 PoS 发行量),ETH 变为净通缩资产。这创造了一个正向反馈循环:更多的网络使用 → 更多 ETH 被销毁 → ETH 更稀缺。

操作成本

转账(ETH Transfer)21,000 Gas — 最基础的交易类型
SSTORE(新值写入)20,000 Gas — 写入新的存储槽位
SSTORE(更新现有值)5,000 Gas — 修改已有的存储值
SLOAD(存储读取)2,100 Gas — 冷访问读取存储
CALL(合约调用)变化很大 — 基础成本 + 被调用合约的执行成本
CREATE(合约部署)32,000 Gas + 每字节代码 200 Gas + 初始化代码执行
LOG(事件日志)375 Gas + 每个 topic 375 Gas + 每字节数据 8 Gas

交互式:Gas 与费用计算器

Gas 与费用计算器
1 Gwei200 Gwei
0.1 Gwei50 Gwei

有效价格32.0 Gwei
总成本 (ETH)0.000672 ETH
美元成本$2.0160

销毁量0.000630 ETH
验证者小费0.000042 ETH
退款0.001428 ETH
销毁量 30%
退款 68%
销毁量验证者小费退款

操作名称Gas 消耗美元成本
ETH 转账21,000$2.0160
ERC-20 转账65,000$6.2400
ERC-20 授权46,000$4.4160
Uniswap 兑换150,000$14.4000
NFT 铸造150,000$14.4000
合约部署1,000,000+$96.0000

📄 白皮书:'费用' + EIP-1559

7. 智能合约生命周期

智能合约是部署在以太坊区块链上的自执行程序。一旦部署,合约代码不可变更,按照预定义的逻辑自动执行。合约可以持有资产、与其他合约交互,并实现从代币到去中心化金融的各种应用。

Solidity 与合约开发

Solidity 是以太坊最主流的智能合约编程语言,语法类似 JavaScript/C++。开发者用 Solidity 编写高级代码,然后通过编译器将其转换为 EVM 字节码。其他合约语言包括 Vyper(类 Python 语法,强调安全性和简洁性)和 Yul(低级中间语言,接近 EVM 操作码)。

生命周期

编写开发者使用 Solidity 或 Vyper 编写合约源代码,定义状态变量、函数和事件
编译源代码通过编译器转换为 EVM 字节码和 ABI(应用二进制接口)。ABI 描述了合约的外部接口
部署发送一笔 to 字段为空的交易,data 字段包含合约初始化字节码。部署消耗 Gas,合约被分配一个确定性地址
交互用户和其他合约通过发送交易调用合约函数。合约根据代码逻辑执行并修改状态
升级(可选)由于合约代码不可变,升级通常通过代理模式(Proxy Pattern)实现 — 代理合约将调用委托给可更换的逻辑合约
销毁(已弃用)SELFDESTRUCT 操作码曾允许合约自毁并转移余额,但在 EIP-6780(Dencun 升级)后,该功能已被限制为仅在合约创建的同一笔交易内有效

安全问题

重入攻击(Reentrancy)

攻击合约在原始调用完成前反复回调易受攻击的合约,最著名的案例是 2016 年 The DAO 事件(损失约 6000 万美元)。防御:使用 Checks-Effects-Interactions 模式或 ReentrancyGuard

整数溢出/下溢

在 Solidity 0.8.0 之前,算术运算不检查溢出。攻击者可以利用此漏洞操纵余额。Solidity 0.8+ 默认启用溢出检查

未检查的外部调用

对其他合约的 call 返回 false 而非抛出异常。如果不检查返回值,可能导致静默失败

访问控制缺陷

缺少适当的权限检查(如 onlyOwner 修饰符),导致未授权用户可以调用敏感函数

闪电贷攻击

利用单笔交易内的大额无抵押贷款操纵价格预言机或治理投票,造成巨大损失

前端运行(Frontrunning)

攻击者监视内存池中的待处理交易,通过提高 Gas 价格抢先执行获利交易(MEV 问题)

代币标准

ERC-20

同质化代币标准 — 定义了 transfer、approve、transferFrom 等接口。USDT、LINK、UNI 等数千种代币遵循此标准

ERC-721

非同质化代币(NFT)标准 — 每个代币具有唯一 ID。用于数字艺术、游戏道具、域名等独特资产

ERC-1155

多代币标准 — 在一个合约中同时支持同质化和非同质化代币。批量操作更节省 Gas

ERC-4626

代币化金库标准 — 为收益聚合器和借贷协议定义了统一接口

ERC-6551

代币绑定账户 — 允许 NFT 拥有自己的以太坊账户,可以持有资产和执行交易

交互式:ERC-20 代币模拟器

ERC-20 代币模拟器
请先部署合约

📄 白皮书:'应用'

8. 从 PoW 到 PoS(合并)

以太坊的「合并」(The Merge)是加密货币历史上最重大的协议升级之一。它将以太坊的共识机制从工作量证明(PoW)切换为权益证明(PoS),在不中断网络运行的情况下将能源消耗降低了约 99.95%。

发展历程

2015年7月主网上线以太坊以 PoW 共识机制启动(类似比特币的 Ethash 挖矿算法)。创世区块生成,去中心化智能合约平台开始运行
2020年12月信标链PoS 信标链(Beacon Chain)作为独立链启动,验证者开始质押 ETH。信标链与执行层并行运行,为合并做准备
2022年9月合并执行层(原 PoW 主网)与共识层(信标链)合并。以太坊从 PoW 正式切换到 PoS,矿工被验证者取代,区块产生方式从计算竞赛变为质押选举
2023年4月Shanghai/Capella启用质押 ETH 提款功能。此前质押的 ETH 处于锁定状态,此次升级允许验证者部分或全部提取其质押的 ETH

影响

能源消耗

降低约 99.95%。从每年消耗约等同一个小国家电力的 PoW 挖矿,变为仅需运行验证者节点的极低能耗

发行量

新 ETH 发行量减少约 90%。PoW 每天发行约 13,000 ETH,PoS 仅发行约 1,600 ETH。结合 EIP-1559 的费用销毁,ETH 在高活动期间可能处于净通缩状态

安全模型

从依赖算力(硬件 + 电力)转变为依赖经济质押(锁定 ETH)。攻击成本从购买硬件变为质押大量 ETH,且恶意行为导致质押被罚没

准入门槛

不再需要昂贵的专用挖矿硬件(GPU/ASIC)。质押 32 ETH 即可成为验证者,或通过流动性质押协议(如 Lido)参与任意金额的质押

出块时间

从 PoW 时代平均约 13 秒的变动出块时间,变为固定的每 12 秒一个时隙(slot),更具可预测性

📄 白皮书:'区块链与挖矿' + The Merge

9. 权益证明机制

以太坊的权益证明(Proof-of-Stake, PoS)用经济质押取代了计算竞赛。验证者锁定 ETH 作为保证金来参与区块提议和证明。诚实行为获得奖励,恶意或不活跃行为导致质押被罚没。

验证者

验证者是以太坊 PoS 网络的核心参与者。每个验证者运行共识客户端和执行客户端软件,负责提议新区块和证明(投票确认)其他验证者提议的区块。验证者的行为受到密码学和经济激励的双重约束。

成为验证者

质押 32 ETH存入信标链存款合约的保证金。这笔 ETH 处于锁定状态,作为验证者诚实行为的经济担保
运行节点需要同时运行执行层客户端(如 Geth、Nethermind)和共识层客户端(如 Prysm、Lighthouse)。节点必须保持在线和同步
稳定的网络连接验证者应保持高可用性。长时间离线会导致不活跃惩罚,持续扣除质押余额
激活队列新的验证者需要经过激活队列等待。队列长度取决于当前激活率限制,旨在控制验证者集合的变化速度

时隙与纪元

以太坊 PoS 的时间被划分为 12 秒的时隙(slot)和 32 个时隙组成的纪元(epoch,共 6.4 分钟)。每个时隙由一个被随机选中的验证者提议一个区块,同时由一个验证者委员会对区块进行证明(attestation)。纪元边界是检查点(checkpoint)发生的位置,用于最终性确定。

委员会

在每个纪元开始时,所有活跃验证者被伪随机地打散(使用 RANDAO 随机数)并分配到各个时隙的委员会中。每个委员会负责在其分配的时隙中证明区块。委员会的随机性确保了攻击者无法预测或操纵特定时隙的验证者组成。每个纪元中,每个验证者恰好被分配到一个委员会,执行一次证明任务。

交互式:质押与纪元模拟器

质押与纪元模拟器
纪元: 0时隙: 0/32
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
验证者 ID余额状态已证明已错过证明率
V132.0000 ETH活跃00
V232.0000 ETH活跃00
V332.0000 ETH活跃00
V432.0000 ETH活跃00
V532.0000 ETH活跃00
V632.0000 ETH活跃00
V732.0000 ETH活跃00
V832.0000 ETH活跃00

📄 信标链规范

10. 最终性与共识

以太坊 PoS 结合了两种协议来实现共识和最终性:LMD-GHOST 用于分叉选择(选择「正确」的链头),Casper FFG 用于最终性确定(使区块不可逆转)。这种组合被称为 Gasper。

Casper FFG(友好的最终性小工具)

Casper FFG 是以太坊的最终性机制。它在纪元边界的检查点(checkpoint)上运行,通过验证者的超级多数投票(至少 2/3 的质押 ETH 投票)来实现最终性。Casper FFG 提供了经济最终性 — 逆转一个最终确定的区块需要销毁至少 1/3 的总质押 ETH。

LMD-GHOST(最近消息驱动的 GHOST)

LMD-GHOST 是以太坊的分叉选择规则。当链出现分叉时,它通过计算每个分支收到的最新证明(attestation)的权重来选择「最重」的分支。每个验证者的最新消息(Latest Message Driven)被用作投票,而不是所有历史消息,这使得协议更高效且更难被操纵。

证明(Justification)

当一个纪元的检查点收到至少 2/3 活跃验证者质押 ETH 的证明投票时,该检查点被「证明」(justified)。证明是最终确定的前置步骤。一个检查点只有在被证明后才有可能被最终确定。

最终确定(Finalization)

当一个已被证明的检查点的下一个纪元检查点也被证明时,前一个检查点被「最终确定」(finalized)。最终确定意味着该检查点及其之前的所有区块永远不会被逆转(除非攻击者愿意销毁至少 1/3 的总质押 ETH)。在正常情况下,最终确定在 2 个纪元后达成(约 12.8 分钟)。

对比

比特币 PoW概率性最终性 — 6 次确认(约 60 分钟)被认为足够安全,但理论上永远可逆
以太坊 PoS经济最终性 — 约 12.8 分钟后最终确定,逆转需要销毁数十亿美元的质押 ETH
传统 BFT(如 PBFT)即时最终性 — 单个区块确认即不可逆,但验证者数量通常受限
Raft确定性最终性 — 日志条目提交后不可逆,但仅容忍崩溃故障,无法处理拜占庭行为

交互式:区块提议与最终性

区块提议与最终性
1
第一步:使用 RANDAO 随机数从活跃验证者中选择本时隙的区块提议者
2
第二步:提议者从交易池中收集待处理交易,组装执行载荷
3
第三步:提议者构建并签名新区块,将其广播到网络
4
第四步:委员会中的验证者验证区块并提交证明投票(attestation)
5
第五步:当检查点收到 2/3 以上质押的证明投票后,区块被最终确定
ID余额 (ETH)有效余额概率状态
Validator-A (0x1a2b)32327.8%
Validator-B (0x3c4d)643215.7%
Validator-C (0x5e6f)483211.8%
Validator-D (0x7a8b)963223.5%
Validator-E (0x9c0d)40329.8%
Validator-F (0xbe1f)1283231.4%

📄 Casper FFG / LMD-GHOST

11. 罚没与安全

罚没(Slashing)是以太坊 PoS 中对恶意验证者的经济处罚机制。当验证者被检测到违反协议规则时,其质押的 ETH 将被部分或全部没收。这一机制使得攻击网络的经济成本极高,从而保障了系统安全。

罚没条件

双重提议(Double Proposing)

同一个验证者在同一个时隙提议了两个不同的区块。这是一种试图制造分叉的攻击行为

双重投票(Double Voting)

同一个验证者在同一个纪元对两个不同的检查点进行了证明投票。这违反了 Casper FFG 的投票规则

环绕投票(Surround Voting)

验证者的一次投票「包围」了另一次投票(即投票的源检查点和目标检查点范围包含了另一次投票的范围)。这是一种更隐蔽的攻击方式

处罚力度

初始罚没至少 1/32 的有效余额(约 1 ETH)被立即扣除
关联惩罚如果在同一时期有大量验证者被罚没(表明协调攻击),惩罚按比例增加,最高可达全部质押。公式:验证者有效余额 × 3 × 同期罚没比例
强制退出被罚没的验证者被标记为退出,在约 36 天的惩罚期内持续受到扣款,之后才能提取剩余余额
证明奖励丧失在退出等待期间,被罚没的验证者不再获得任何证明或提议奖励

不活跃惩罚

除了罚没之外,验证者因不活跃(离线或未能及时提交证明)也会受到惩罚。在网络正常运行时,不活跃惩罚较轻(每个错过的纪元损失少量余额)。但如果链未能最终确定(即超过 4 个纪元没有检查点被最终确定),不活跃泄漏(inactivity leak)机制启动 — 不活跃验证者的质押将被加速扣除,直到活跃验证者的质押占比恢复到 2/3 以上,使链重新能够最终确定。

安全优势

可量化的攻击成本

攻击者需要控制至少 1/3 的质押 ETH 来阻止最终确定,或 2/3 来制造冲突的最终确定。按当前质押量计算,这意味着数百亿美元的风险

攻击可溯源

与 PoW 不同,PoS 中的恶意行为可以追溯到具体的验证者身份并实施惩罚。PoW 攻击者在攻击后保留硬件,PoS 攻击者会失去质押

自动恢复

不活跃泄漏机制确保即使大量验证者离线,网络也能最终自动恢复最终性

无规模经济

PoW 挖矿存在规模效应(大型矿场更高效),而 PoS 中每个 32 ETH 验证者的回报率基本相同,促进了去中心化

📄 PoS 安全模型

12. 修改版 GHOST 协议

以太坊采用了修改版的 GHOST(Greedy Heaviest Observed SubTree)协议作为其分叉选择规则。原始 GHOST 协议由 Sompolinsky 和 Zohar 于 2013 年提出,旨在解决快出块时间导致的安全性下降问题。

问题

当出块时间较短时(以太坊约 12 秒 vs 比特币约 10 分钟),区块在传播到全网之前,可能已经有新的区块被产生,导致大量短暂分叉。比特币的「最长链」规则在高分叉率下会降低安全性,因为诚实算力(或质押)被分散在多个分支上,而攻击者可以集中在单一链上。

解决方案

GHOST 协议不是简单地选择最长链,而是选择「最重子树」— 即包含最多区块(或证明)的子树。当遇到分叉时,GHOST 从创世区块开始,在每个分叉点选择拥有更多后代区块的分支。这确保了即使存在大量分叉,诚实网络的全部权重都被计入。

以太坊中的 LMD-GHOST

以太坊 PoS 使用的 LMD-GHOST(Latest Message Driven GHOST)是原始 GHOST 的改进版本。它不是计算子树中的区块数量,而是计算每个验证者的最新证明(attestation)的权重。具体来说:在每个分叉点,选择收到更多最新证明投票(按质押 ETH 加权)的分支。「最新消息驱动」意味着只考虑每个验证者最新的一条消息,避免了历史消息的干扰。

与比特币最长链规则的对比

分叉处理:比特币忽略非最长链上的所有区块(孤块),GHOST 将分叉分支上的权重也计入决策
安全性:在高出块率下,GHOST 比最长链规则提供更好的安全性,因为诚实节点的贡献不会被浪费
适用场景:比特币 10 分钟出块时间下最长链规则足够安全;以太坊 12 秒出块时间需要 GHOST 来维持等效安全性
权重度量:比特币用累计工作量证明,以太坊 PoS 用质押加权的证明投票

📄 白皮书:'修改版 GHOST 实现'

13. 计算与图灵完备性

以太坊虚拟机被设计为图灵完备的 — 理论上,它可以执行任何可计算的程序。这是以太坊与比特币脚本的根本区别,也带来了强大的能力和独特的挑战。

图灵完备

图灵完备意味着 EVM 可以模拟任何图灵机 — 即执行任何算法,只要给予足够的时间和资源。EVM 支持条件分支(JUMPI)、循环(通过条件跳转实现)、读写内存和存储 — 这些是实现图灵完备所需的基本能力。相比之下,比特币脚本故意避免循环,是非图灵完备的。

停机问题

图灵完备性带来了一个根本性的理论问题:停机问题。数学已经证明,不存在通用算法可以在程序运行之前判断它是否会终止。这意味着无法静态分析一个以太坊合约是否会无限循环。如果没有某种机制来限制执行,一个恶意或有缺陷的合约可能会消耗无限的计算资源,使整个网络瘫痪。

Gas 限制方案

以太坊通过 Gas 机制优雅地解决了停机问题。每条 EVM 指令消耗预定义数量的 Gas,交易发送者必须预先指定 Gas 限制(gasLimit)并支付费用。如果执行过程中 Gas 耗尽,EVM 立即终止执行并回滚所有状态变更(但已消耗的 Gas 费用不退还)。这确保了:(1) 每个计算都是有界的,(2) 资源使用者必须付费,(3) 网络不会被无限循环攻击。

实际限制

区块 Gas 限制每个区块有一个总 Gas 上限(目标为 1500 万,最大约 3000 万)。这限制了每个区块能包含的总计算量
栈深度限制EVM 调用栈最大深度为 1024。深度嵌套的合约调用可能触发栈溢出
合约代码大小EIP-170 限制部署的合约字节码最大为 24,576 字节(约 24 KB)。EIP-3860 限制了初始化代码的大小
存储成本持久化存储极其昂贵(写入 20,000 Gas),这是有意为之 — 防止状态膨胀,因为存储数据必须被所有节点永久保存
确定性约束EVM 不支持浮点运算、随机数生成或直接访问外部数据 — 所有节点必须得到完全相同的执行结果

📄 白皮书:'计算与图灵完备性'

14. 隐私与身份

以太坊的账户模型与比特币的 UTXO 模型在隐私特性上有显著差异。以太坊的透明性是其去信任特性的基础,但也带来了严峻的隐私挑战。理解这些权衡对于用户和开发者都至关重要。

账户模型与隐私

以太坊使用基于账户的模型,每个账户有一个持久的地址。这意味着账户的所有交易历史、余额变更和合约交互都关联到同一个地址,形成一个完整的活动图谱。与比特币建议每笔交易使用新地址不同,以太坊中频繁切换地址更加困难 — 因为 DeFi 交互、代币持有和 NFT 收藏等都绑定在特定账户上。

与 UTXO 模型对比

比特币的 UTXO 模型天然支持为每笔交易生成新地址,未使用的 UTXO 没有直接的链接关系。虽然链分析仍然可以通过输入聚类和找零检测推断关联,但 UTXO 模型提供了比账户模型更好的基线隐私。以太坊的账户模型牺牲了部分隐私以换取更好的状态管理和智能合约交互体验。

隐私技术

Tornado Cash(混币协议)

使用零知识证明(zk-SNARK)打破存款和取款之间的链上链接。用户存入固定面额的 ETH,之后使用零知识证明从另一个地址提取,无法追踪资金流向。但因监管原因已被 OFAC 制裁

零知识证明(ZK Proofs)

允许证明某事为真而不揭露具体信息。在以太坊生态中用于隐私交易(如 Aztec Protocol)、身份验证和扩容方案(zkRollup)

隐身地址(Stealth Addresses)

EIP-5564 提案。发送者为每笔交易生成一个一次性地址,只有接收者能用自己的私钥识别和花费该地址的资金。类似于为每笔交易创建新地址,但无需接收者预先公布多个地址

Railgun / Privacy Pools

新一代隐私协议,在提供交易隐私的同时允许用户证明其资金来源合法(通过关联集合或排除列表),尝试在隐私和合规之间找到平衡

账户抽象(ERC-4337)

虽然不是直接的隐私技术,但通过允许多种账户逻辑(如社交恢复、批量交易),可以间接改善隐私,例如通过中继者代付 Gas 来隐藏发送者身份

链上身份

以太坊正在发展丰富的链上身份生态系统。以太坊域名服务(ENS)将人类可读名称映射到地址(如 vitalik.eth)。灵魂绑定代币(Soulbound Tokens, SBTs)提供不可转让的身份凭证。去中心化身份标准(DIDs)和可验证凭证(VCs)允许用户选择性地展示身份属性而无需暴露全部信息。这些技术共同构建了一个自主权身份(Self-Sovereign Identity)框架,让用户完全控制自己的数字身份。

📄 隐私考虑

15. 总结与参考文献

关键要点

  1. 以太坊将区块链从去中心化货币扩展为通用计算平台 — 支持图灵完备的智能合约和去中心化应用
  2. 账户模型(EOA + 合约账户)取代了 UTXO 模型,提供更直观的状态管理和合约交互
  3. 状态转换函数 APPLY(S, TX) -> S' 是以太坊的核心 — 每笔交易确定性地将世界状态从一个版本转换为下一个版本
  4. EVM 是基于栈的虚拟机,通过 Gas 机制限制计算来解决停机问题,确保所有执行都是有界的
  5. EIP-1559 引入了动态基础费用 + 优先费用机制,基础费用被销毁,创造了 ETH 的通缩压力
  6. 智能合约一旦部署不可变更,安全审计和形式化验证对于保护用户资金至关重要
  7. 合并(The Merge)将以太坊从 PoW 切换到 PoS,能耗降低 99.95%,发行量降低约 90%
  8. PoS 验证者质押 32 ETH 参与共识 — 通过时隙、纪元和委员会组织出块和证明流程
  9. Casper FFG + LMD-GHOST(Gasper)共同实现共识和最终性 — 约 12.8 分钟后区块被最终确定
  10. 罚没机制使恶意行为的经济成本极高 — 攻击者不仅失败,还会损失大量质押 ETH
  11. 修改版 GHOST 协议解决了快出块时间下的分叉问题,确保所有诚实验证者的贡献都被计入
  12. Gas 机制优雅地解决了图灵完备带来的停机问题,同时创建了计算资源的市场定价
  13. 以太坊的账户模型在状态管理便利性和隐私之间做出了权衡,新兴的零知识证明技术正在弥补隐私不足

参考文献与延伸阅读

以太坊白皮书Vitalik Buterin(2013)的下一代智能合约与去中心化应用平台
以太坊黄皮书Gavin Wood 的以太坊形式化规范 — 定义了 EVM 的完整技术细节
EIP-1559 规范以太坊费用市场改革提案 — 引入基础费用销毁机制
信标链规范以太坊 PoS 共识层的完整技术规范
Casper FFG 论文Vitalik Buterin 和 Virgil Griffith 的最终性小工具论文
精通以太坊Andreas Antonopoulos 和 Gavin Wood 的全面著作 — 在线免费阅读
Solidity 官方文档以太坊智能合约语言的完整参考文档
ethereum.org 开发者文档以太坊官方的开发者学习资源和教程
EVM 操作码参考EVM 所有操作码的完整列表和 Gas 成本
Etherscan 区块浏览器以太坊链上数据的实时查询和分析工具