# 主要设计

以太坊项目的基本设计与比特币网络类似。为了支持更复杂的智能合约，以太坊在不少地方进行了改进，包括交易模型、共识、对攻击的防护和可扩展性等。

## 智能合约相关设计

### 运行环境

以太坊采用以太坊虚拟机作为智能合约的运行环境。以太坊虚拟机是一个隔离的轻量级虚拟机环境，运行在其中的智能合约代码无法访问本地网络、文件系统或其它进程。

对同一个智能合约来说，往往需要在多个以太坊虚拟机中同时运行多份，以确保整个区块链数据的一致性和高度的容错性。另一方面，这也限制了整个网络的容量。

### 开发语言

以太坊为编写智能合约设计了图灵完备的高级编程语言，降低了智能合约开发的难度。

目前 Solidity 是最常用的以太坊合约编写语言之一。

智能合约编写完毕后，用编译器编译为以太坊虚拟机专用的二进制格式（EVM bytecode），由客户端上传到区块链当中，之后在网络中验证者节点的以太坊虚拟机中执行。

*注：在 2022 年“合并”（The Merge）之前，合约由矿工执行；此后改由 PoS 验证者执行。*

## 交易模型

出于智能合约的便利考虑，以太坊采用了账户的模型，状态可以实时的保存到账户里，而无需像比特币的 UTXO 模型那样去回溯整个历史。

UTXO 模型和账户模型的对比如下。

| 特性      | UTXO 模型 | 账户模型         |
| ------- | ------- | ------------ |
| 状态查询和变更 | 需要回溯历史  | 直接访问         |
| 存储空间    | 较大      | 较小           |
| 易用性     | 较难处理    | 易于理解和编程      |
| 安全性     | 较好      | 需要处理好重放攻击等情况 |
| 可追溯性    | 支持历史    | 不支持追溯历史      |

## 账户抽象 （Account Abstraction）

长期以来，以太坊账户分为外部拥有账户（EOA，由私钥控制）和合约账户（CA，由代码控制）。EOA 是发起交易的唯一方式，但面临私钥管理困难的问题。

**ERC-4337** 标准的引入实现了账户抽象（Account Abstraction），它允许用户通过智能合约钱包（Smart Contract Wallet）来作为主账户，从而实现了：

* **社交恢复**：无需助记词，可通过信任的联系人恢复账户。
* **Gas 代付 (Paymaster)**：应用方可以为用户支付 Gas 费，降低门槛。
* **批量交易**：一次签名可批准多笔操作。

这被认为是将以太坊推向 10 亿用户的关键 UX 改进。

## 共识

2022 年 9 月，以太坊完成了历史性的“合并”（The Merge）升级，正式从工作量证明（PoW）转向权益证明（PoS）共识机制。

在 PoS 机制下：

* **验证者 (Validator)** 取代了矿工，通过质押至少 32 ETH 成为验证者。
* 验证者被随机选中来提议新区块并验证其他区块。
* 诚实的验证者会获得 ETH 奖励，而恶意行为（如双签）会导致质押被罚没（Slashing）。
* **能耗降低超过 99%**，解决了 PoW 长期被诟病的高能耗问题。

区块生成时间从 PoW 时代的约 13 秒缩短到固定的 **12 秒**一个 slot。

*注：以太坊早期（2015-2022）采用 PoW 机制和 Ethash 算法，现已完全淘汰。*

## 降低攻击

以太坊网络中的交易更加多样化，也就更容易受到攻击。

以太坊网络在降低攻击方面的核心设计思想，仍然是通过经济激励机制防止少数人作恶：

* 所有交易都要提供交易费用，避免 DDoS 攻击；
* 程序运行指令数通过 Gas 来限制，所消耗的费用超过设定上限时就会被取消，避免出现恶意合约。

这就确保了攻击者试图消耗网络中虚拟机的计算资源时，需要付出经济代价（支付大量的以太币）；同时难以通过构造恶意的循环或不稳定合约代码来对网络造成破坏。

## 提高扩展性

可扩展性是以太坊网络承接更多业务量的关键挑战。

以太坊的扩容路线图已从早期的“分片执行”调整为 **“以 Rollup 为中心”** 的策略。当前的扩容主要依赖 Layer 2 解决方案：

* **Rollups**：在链下批量处理交易，然后将压缩的交易数据和证明提交到 Layer 1。包括 Optimistic Rollups（如 Arbitrum、Optimism）和 ZK Rollups（如 zkSync、Starknet）。
* **Proto-Danksharding (EIP-4844)**：2024 年 3 月的 Dencun 升级引入了 Blob 数据类型，专门用于存储 Rollup 的数据，大幅降低了 Layer 2 的交易成本。

未来，以太坊仍计划实现完整的 Danksharding，进一步扩大数据可用性容量。
