Skip to content

ETH #3:Transaction(交易)

交易是区块链上唯一的"写操作"。理解交易的结构和生命周期,是理解区块链运作方式的关键。


学习目标

  1. 理解以太坊中交易的生命周期
  2. 掌握交易的结构及常见重要字段
  3. 了解交易的类型和执行过程
  4. 理解 EVM(以太坊虚拟机)的基本原理

交易的生命周期

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

EIP-1559 手续费机制

实际费用 = baseFee + priorityFee(不超过 maxFeePerGas)
  • baseFee:由网络自动计算,根据上一个区块的使用率动态调整,会被销毁
  • priorityFee(小费):用户额外支付给验证者的费用,用于激励优先打包
  • maxFeePerGas:用户愿意支付的最高单价

EVM(以太坊虚拟机)

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。

学习资源