# 核心概念

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

## 智能合约

智能合约（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：交易相关的字串，用于防止交易被重放。
* gasPrice：执行交易需要消耗的 Gas 价格。
* 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 价格等进行调节。
