交易是区块链上唯一的"写操作"。理解交易的结构和生命周期,是理解区块链运作方式的关键。
sequenceDiagram
participant User as 用户
participant Wallet as 钱包
participant Node as RPC 节点
participant Mempool as 交易池
participant Validator as 验证者
participant Chain as 区块链
User->>Wallet: 发起交易
Wallet->>Wallet: 构建交易数据
Wallet->>Wallet: 用私钥签名
Wallet->>Node: 提交已签名交易
Node->>Mempool: 进入交易池等待
Validator->>Mempool: 选取交易打包
Validator->>Validator: 执行交易(EVM)
Validator->>Chain: 写入区块
Chain-->>User: 交易确认 ✅
graph TB
TX["📝 Transaction"] --> NONCE["nonce<br/>交易计数器(防重放)"]
TX --> GAS["gasPrice / maxFeePerGas<br/>Gas 单价"]
TX --> LIMIT["gasLimit<br/>Gas 上限"]
TX --> TO["to<br/>目标地址"]
TX --> VALUE["value<br/>转账金额(Wei)"]
TX --> DATA["data<br/>合约调用数据"]
TX --> V["v, r, s<br/>签名数据"]
| 字段 | 说明 |
|---|---|
nonce | 发送方的交易计数器,从 0 开始递增,防止重放攻击 |
gasLimit | 本次交易愿意消耗的最大 Gas 量 |
maxFeePerGas | 每单位 Gas 愿意支付的最高费用(EIP-1559) |
maxPriorityFeePerGas | 给验证者的小费(EIP-1559) |
to | 目标地址;若为空则表示创建合约 |
value | 转账的 ETH 数量(以 Wei 为单位,1 ETH = 10^18 Wei) |
data | 合约调用的 ABI 编码数据;普通转账时为空 |
graph LR
subgraph "Type 0 — Legacy"
T0["传统交易<br/>gasPrice 固定"]
end
subgraph "Type 1 — EIP-2930"
T1["带访问列表<br/>预声明存储槽"]
end
subgraph "Type 2 — EIP-1559"
T2["基础费用 + 小费<br/>baseFee 动态调整"]
end
T0 -->|"2021 伦敦升级"| T2
T0 -->|"2021 柏林升级"| T1
实际费用 = baseFee + priorityFee(不超过 maxFeePerGas)EVM 是以太坊的计算引擎,负责执行智能合约代码。
graph TB
subgraph EVM["⚙️ EVM 执行引擎"]
STACK["栈 Stack<br/>256位 × 1024深"]
MEM["内存 Memory<br/>按字节寻址"]
STORAGE["存储 Storage<br/>持久化 Key-Value"]
CODE["代码 Code<br/>操作码 Opcodes"]
end
TX["交易 data 字段"] -->|"输入"| CODE
CODE -->|"PUSH/POP"| STACK
CODE -->|"MLOAD/MSTORE"| MEM
CODE -->|"SLOAD/SSTORE"| STORAGE
STORAGE -->|"状态变更"| STATE["世界状态"]
EVM 是一个基于栈的虚拟机,用操作码(Opcode)执行指令,每个操作消耗一定量的 Gas。