> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/blockchain_guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/blockchain_guide/07_ethereum/concept.md).

# 核心概念

基于比特币网络的核心思想，以太坊项目提出了许多创新的技术概念，包括智能合约、基于账户的交易、以太币和燃料等。

## 智能合约

智能合约（Smart Contract）是以太坊中最为重要的一个概念，即以计算机程序的方式来缔结和运行各种合约。最早在上世纪 90 年代，Nick Szabo 等人就提出过类似的概念，但一直因为缺乏可靠执行智能合约的环境，而被作为一种理论设计。区块链技术的出现，恰好补充了这一缺陷。

以太坊支持通过图灵完备的高级语言来开发智能合约，目前主流开发语言为 Solidity（占据绝大多数合约开发份额），此外还有面向安全性的替代语言 Vyper（早期还有 Serpent，现已弃用）。智能合约作为运行在以太坊虚拟机（Ethereum Virtual Machine，EVM）中的应用，可以接受来自外部的交易请求和事件，通过触发运行提前编写好的代码逻辑，进一步生成新的交易和事件，可以进一步调用其他智能合约。

智能合约的执行结果可能对以太坊网络上的账本状态进行更新。这些修改由于经过了以太坊网络中的共识，一旦确认后无法被伪造和篡改。

## 账户

在之前章节中，笔者介绍过比特币在设计中并没有账户（Account）的概念，而是采用了 UTXO 模型记录整个系统的状态。任何人都可以通过交易历史来推算出用户的余额信息。而以太坊则采用了不同的做法，直接用账户来记录系统状态。每个账户存储余额信息、智能合约代码和内部数据存储等。以太坊支持在不同的账户之间转移数据，以实现更为复杂的逻辑。

具体来看，以太坊账户分为两种类型：合约账户（Contracts Accounts）和外部账户（Externally Owned Accounts，或 EOA）。

* 合约账户：存储智能合约代码及其内部状态，没有对应的私钥，行为完全由代码决定。它既可以被外部账户发起的交易触发，也可以被其他合约调用；
* 外部账户：以太币拥有者账户，对应到某公钥，由持有私钥的个人控制。只有外部账户能够发起交易。

两类账户在状态树中都由 nonce、balance、storageRoot、codeHash 四个字段描述。区别在于外部账户的 storageRoot 为空树根、codeHash 为空内容的 Hash，而合约账户的这两个字段分别指向其存储树和代码。

当合约账户被调用时，存储其中的智能合约会在验证者节点的虚拟机中自动执行，并消耗一定的燃料。燃料通过外部账户中的以太币进行购买。

*注：2022 年 9 月合并后，以太坊已从 PoW 转为 PoS 共识，“矿工”角色已被“验证者”取代。*

## 交易

交易（Transaction），在以太坊中是指从一个账户到另一个账户的消息数据。消息数据可以是以太币或者合约执行参数。

以太坊采用交易作为执行操作的最小单位。每个交易包括如下字段：

* to：目标账户地址。
* value：可以指定转移的以太币数量。
* nonce：交易相关的字串，用于防止交易被重放。
* maxFeePerGas：用户愿意为每单位 Gas 支付的最高费用。
* maxPriorityFeePerGas：给验证者的优先费（小费），用于提高交易被打包的吸引力。
* gasLimit：交易最多可消耗的 Gas 数量。
* data: 交易附带字节码信息，可用于创建/调用智能合约。
* signature：基于椭圆曲线加密的签名信息，包括 R，S，V 三个字段。

类似比特币网络，在发送交易时，用户需要缴纳一定的交易费用，通过以太币方式进行支付和消耗。以太坊 Layer 1 的交易速率约为每秒 15-30 笔，但通过 Layer 2 Rollup 方案（如 Arbitrum、Optimism、zkSync 等），整体生态的交易处理能力已大幅提升。

## 以太币

以太币（Ether）是以太坊网络中的货币。

以太币主要用于购买燃料，支付给验证者，以维护以太坊网络运行智能合约的费用。以太币最小单位是 wei，一个以太币等于 10^18 个 wei。

2022 年 9 月“合并”（The Merge）之前，以太币通过 PoW 挖矿生成，矿工获得区块奖励和燃料费用。合并后，以太坊转为 PoS 共识，验证者通过质押 ETH 参与区块验证并获得奖励。同时，EIP-1559 引入的基础费用销毁机制使 ETH 在网络活跃时可能呈通缩状态。用户可以通过交易市场直接购买以太币。

*注：以太币价格波动较大，读者可通过 CoinGecko、CoinMarketCap 等平台查询最新市场数据。*

## 燃料

燃料（Gas），控制某次交易执行指令的上限。每条指令都有对应的燃料开销，但并非都是固定值：SSTORE、SLOAD 等存储操作会随槽位是首次访问（冷）还是已访问（热）、以及新旧值是否相同而变化，内存扩展、带转账的 CALL 等也按实际用量计价。当某个交易还未执行结束，而燃料消耗完时，合约执行终止并回滚状态，已用于执行的 Gas 仍会被消耗。

Gas 费用用 ETH 支付。EIP-1559 之后，交易费用主要由协议自动调整并销毁的 `base fee`、用户设置给验证者的 `priority fee`，以及用户可接受的 `max fee` 共同决定。钱包通常会根据当前网络拥堵情况自动估算这些参数。
