# 核心概念

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

## 智能合约

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

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

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

## 账户

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

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

* 合约账户：存储执行的智能合约代码，只能被外部账户来调用激活；
* 外部账户：以太币拥有者账户，对应到某公钥。账户包括 nonce、balance、storageRoot、codeHash 等字段，由个人来控制。

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

*注：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），控制某次交易执行指令的上限。每执行一条合约指令会消耗固定的燃料。当某个交易还未执行结束，而燃料消耗完时，合约执行终止并回滚状态，已用于执行的 Gas 仍会被消耗。

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yeasy.gitbook.io/blockchain_guide/07_ethereum/concept.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
