Ethereum TPS 与 Gas Limit 机制
引言
上个月(2022年9月15日) 以太坊完成了The Merge 升级,从工作量证明(PoW)转向权益证明(PoS)。这次升级让以太坊网络的出块时间更加稳定,从之前通过难度调整算法动态维持 12-15 秒出块,变为通过固定 Slot 时间稳定在 12 秒出块。然而,这个改变对整个网络的 TPS(每秒交易数)性能影响并不明显。
当前两个主流公链的 TPS 数据:
- Bitcoin: 5-7 TPS
- Ethereum L1: 12-17 TPS
- Ethereum Layer 2: 数千 TPS(Arbitrum、Optimism 等)
TPS 的决定因素
那么,是什么决定了以太坊的 TPS 性能?我们先看一下 TPS 的计算公式:
TPS = 区块包含的交易数量 / 区块时间(12秒)因此,在区块时间(分母)固定的前提下,要提升 TPS,就只能增加区块大小(分子),从而增加单位时间内的交易数量。
而增加区块大小并非没有代价,需要考虑以下技术限制因素:1. 计算资源限制
根据以太坊扩容文档:
- 所有交易必须在 12 秒内执行完成
- 验证者需要足够的计算能力处理更大的区块
- 约 50 万验证者需要实时执行和投票
2. 网络传播限制
- 区块必须在 4-8 秒内快速传播到全网
- 更大的区块传播时间更长,影响网络同步效率
- 延迟过高会导致更多的分叉和孤块
3. 存储要求
- 全节点存储: ~1-2 TB(Pruned Mode,只保留最近 128 个区块的状态)
- 归档节点存储: ~12+ TB(保留所有历史状态,持续增长)
- 存储成本: 更大的区块意味着链上数据增长越快,成本越高
4. 去中心化平衡
- 更大的区块会提高节点运行门槛(计算、存储、网络带宽)
- 节点运行成本过高可能导致节点数量减少
- 需要在性能和去中心化之间找到平衡
"The larger the block, the greater the computing power required to process them in time for the next slot. This is a centralizing force, which is resisted by capping block sizes."
综合以上限制因素,单个区块的容量不能随意增大,需要合理控制。
Gas Limit: 灵活的区块容量控制
与比特币通过硬编码常量将区块大小固定在代码中不同,以太坊采用了更灵活的 Gas Limit 机制来控制区块大小。可以简单理解为:
Gas Limit = 区块容量上限 下表回顾了以太坊从创世区块到现在的 Gas Limit 增长历程:
| 时间 | Gas Limit | 变化说明 |
|---|---|---|
| 2015-07-30 | 5,000 | 世区块(不包含交易) |
| 2015-08-07 | 21,000 | ↗ 首次提升 |
| 2015-08-08 | 3,141,592 | ↑ 24小时内快速提升 |
| 2016-03-04 | 4,712,388 | ↗ 继续提升 |
| 2016-09-22 | 1,000,000 | ↘ DDoS 攻击,紧急降低 |
| 2016-10-14 | 500,000 | ↘ 准备硬分叉,再次降低 |
| 2016-10-23 | 2,000,000 | ↗ 硬分叉后恢复 |
| 2016-12-04 | 4,000,000 | ↗ 恢复到攻击前水平 |
| 2017-05-31 | 4,712,388 | ↗ |
| 2017-06-30 | 6,720,000 | ↗ |
| 2017-12-10 | 8,000,000 | ↗ |
| 2019-09-14 | 10,000,000 | ↗ +25% |
| 2020-06-19 | 12,000,000 | ↗ |
| 2020-07-24 | 12,500,000 | ↗ |
| 2021-04-19 | 15,000,000 | ↗ |
| 2021年后 | 30,000,000 | ↗ 翻倍(为 Layer 2 铺路) |
| 2022-09-15 | 30,000,000 | The Merge,保持不变 |
从历史数据可以看出明显的阶段性特征,在早期(2015-2017),由于用户少,提升 Gas Limit 风险小,2年内从 21K → 8M(380倍增长),到 2017-2022 开始放缓,随着网络规模增大(节点数量增多),5年内从 8M → 30M(3.75倍增长),之后的增加将会更加谨慎。
渐进式调整机制
历史上的每一次gas limit调整并非某个时刻突然发生,而是基于以太坊协议的原生特性——渐进式调整机制实现的。该机制从创世区块(2015年7月30日)就存在,在以太坊黄皮书中有明确定义:
验证者可通过共识调整,每个区块的 Gas Limit 可以在父区块 Gas Limit 的基础上 ±1/1024
举个具体例子,如果要从 45M 提升到 150M:
理论最快时间 = (150M - 45M) / (45M / 1024) ≈ 2,389 个区块 ≈ 8 小时
但实际上需要数天甚至数周,因为:
- 不是所有验证者都会立即投票增加
- 需要社区讨论达成共识
- 客户端需要更新配置
- 需要观察网络表现
为什么采用渐进式机制?
- 防止单点控制:单个验证者无法突然大幅改变网络参数
- 给节点反应时间:节点运营者有时间升级硬件或调整配置
- 应急响应能力:可以快速降低 Gas Limit 应对攻击(2016年 DDoS 攻击证明)
- 市场化共识:验证者用"脚"投票,多数倾向决定方向
Gas 消耗机制
接下来我们看一下 Gas Limit 如何控制区块大小。根据以太坊 Gas 文档,所有链上交易都会消耗 Gas,例如:
- 简单 ETH 转账: 21,000 Gas
- ERC-20 代币转账: ~65,000 Gas
- Uniswap 交易: ~150,000 Gas
- 复杂智能合约: 200,000+ Gas
- 实际平均: ~150,000 Gas(混合交易类型)
以太坊对 Gas 费计算有一套严格的官方定义,详见 Gavin Wood 编写的以太坊黄皮书(Yellow Paper),其中对每个 EVM 操作都有精确定义的 Gas 消耗。
Gas 费计算公式
Gas 费 = Gas 使用量 × Gas 价格(Gwei)
EVM 操作码 Gas 消耗表
基于官方技术规范,每个操作的固定成本:
// 基础操作(低成本)
const basicOperations = {
ADD: 3, // 加法运算
SUB: 3, // 减法运算
MUL: 5, // 乘法运算
DIV: 5, // 除法运算
LT: 3, // 比较运算
POP: 2, // 栈操作
PUSH1: 3, // 推入数据
};
// 存储操作(高成本)
const storageOperations = {
SLOAD: 800, // 从存储读取
SSTORE: 20000, // 写入新存储槽
SSTORE_RESET: 5000, // 修改现有存储槽
};
// 系统操作(最高成本)
const systemOperations = {
CALL: 700, // 调用合约
CREATE: 32000, // 创建合约
SELFDESTRUCT: 5000, // 销毁合约
};
常见交易类型 Gas 分解
简单 ETH 转账(21,000 Gas)
- 基础交易成本:21,000 Gas(协议层优化的固定值)
- 包含:签名验证、状态更新、余额修改等所有操作
ERC-20 代币转账(~65,000 Gas)
- 基础交易成本:21,000 Gas
- 合约调用:700 Gas
- 存储读写:~43,000 Gas(读取和更新余额)
- 事件日志:~300 Gas
复杂 DeFi 操作(200,000+ Gas)
- 多个合约调用
- 大量存储读写操作
- 复杂计算逻辑
- 多个事件日志
基于 Gas Limit 的 TPS 计算
现在我们可以更准确地计算 TPS:
TPS = (Gas Limit / 平均每笔交易 Gas 消耗) / Slot 时间(12秒)
参考Chainspect 实时数据,以当前 Gas Limit 45,000,000 为例:
- 理论最大 TPS: (45,000,000 / 21,000) / 12 ≈ 179 TPS
- 实际 TPS: (45,000,000 / 150,000) / 12 ≈ 25 TPS
可以看到实际 TPS 远低于基于简单 ETH 转账评估的理论最大值,主要原因是交易类型多样化,复杂合约调用占比高:
| 操作类型 | Gas 消耗 | 相对倍数 |
|---|---|---|
| ETH 转账 | 21,000 | 1x(基准) |
| ERC-20 转账 | 65,000 | 3x |
| Uniswap Swap | 150,000 | 7x |
| 复杂合约调用 | 500,000+ | 24x+ |
以太坊的价值在于智能合约,而非简单支付。网络上充斥着各种复杂操作,如:
- DeFi 协议(Uniswap、Aave、Compound)
- NFT 交易(OpenSea)
- 稳定币转账(USDT、USDC)
- 跨链桥操作
- DAO 治理投票
这些复杂交易拉高了平均 Gas 消耗,导致实际 TPS 显著低于理论值。
结语
通过以上原理探讨,我们可以得出一些关键结论:
- Gas Limit 是区块容量的核心控制机制
- 直接决定每个区块能包含多少交易
- 通过渐进式调整机制(±1/1024)实现去中心化治理
- TPS 受多重因素制约
- 固定的 12 秒区块时间(PoS 共识机制设计)
- 交易复杂度差异巨大(21K - 500K+ Gas)
- 实际 TPS 远低于理论值是正常现象
- 性能与去中心化的权衡
- 更大的区块需要更强的硬件支持
- 节点运行成本上升可能损害去中心化
- 以太坊选择优先保证去中心化和安全性
- Layer 2 将是ETH主要扩容方向
- L1 专注于安全性和去中心化
- L2 提供高性能执行环境(数千 TPS)
- 两层协同实现整体扩容目标
Ethereum 的 17-25 TPS 不是"慢",而是"复杂"。每笔交易执行的是图灵完备的智能合约,需要全网几十万验证者独立验证,并永久存储状态变化。这是在去中心化 + 可编程性 + 安全性三角平衡下的理性选择。