一些关于ETH和EVM的笔记
以太坊知识体系
mindmap
root((以太坊知识体系))
核心概念
区块链基础
什么是智能合约?
以太坊虚拟机 (EVM)
账户与钱包
EOA vs 合约账户
私钥、公钥、地址
Gas 机制
技术实践
开发工具链
Remix IDE
Hardhat / Foundry
智能合约开发
Solidity 语言
测试与部署
Web3 前端
ethers.js / web3.js
与DApp交互
生态与应用
去中心化金融 (DeFi)
去中心化交易所 (DEX)
借贷协议
非同质化代币 (NFT)
标准: ERC-721, ERC-1155
市场与应用
去中心化自治组织 (DAO)
第二层扩展方案 (L2)
Rollups
侧链
安全与最佳实践
常见安全漏洞
代码审计
安全开发模式
核心数据结构
- 状态树
- 交易树
- 收据树
- 数据结构使用 MPT(Modified-Merkle-Paricia-Trie)
以太币(ETH):以太坊的原生加密货币。它有两个主要用途:
- 支付交易手续费(Gas Fee):在网络上执行任何操作(如转账、运行智能合约)都需要支付Gas费,以ETH计价
- 价值存储:类似于比特币,它也被视为一种数字资产
单位
下表从上到下,每个单位是下一个的 1,000倍 (10³)
| 名称 | 换算关系 | 以 Wei 为单位 | 主要用途与说明 |
|---|---|---|---|
| Wei | - | 1 Wei | 最基本单位,智能合约和底层交易处理时使用 |
| Kwei / Babbage | = 1,000 Wei | 10³ Wei | 较少使用 |
| Mwei / Lovelace | = 1,000,000 Wei | 10⁶ Wei | 较少使用 |
| Gwei / Shannon | = 1,000,000,000 Wei | 10⁹ Wei | 最常用、最重要的单位,主要用于表示 Gas 价格 |
| Szabo | = 1,000 Gwei | 10¹² Wei | 较少使用,1 Szabo = 10⁶ Wei |
| Finney | = 1,000 Szabo | 10¹⁵ Wei | 接近一个ETH的单位,1 Finney = 10⁻³ ETH |
| Ether (ETH) | = 1,000 Finney | 10¹⁸ Wei | 标准交易单位,我们在交易所买卖、用于标价的就是它 |
账户和钱包
- 外部拥有账户(EOA)和合约账户(主要代码控制)
关于EVM
EVM (Ethereum Virtual Machine), Watch this video, It’s very helpful,https://www.youtube.com/watch?v=kCswGz9naZ,EVM负责管理以太坊的全局状态。它根据输入(交易)和预定义规则(智能合约代码),从一个状态计算出下一个新的有效状态
EVM Introduce: https://ethereum.org/zh/developers/docs/evm/
基础架构
flowchart TD
subgraph A [EVM 执行上下文]
direction TB
TX[交易数据] --> EVM
SC[智能合约字节码] --> EVM
B[区块链状态
Block Number, Coinbase, etc.] --> EVM
subgraph EVM [EVM 核心运行时]
direction LR
Stack[堆栈 Stack
LIFO, 1024深度] --> M[内存 Memory
易失性, 按字扩展]
M --> Stack
end
EVM -- 读写 --> Storage[持久化存储 Storage
合约账户状态]
end
Gas[Gas 供给] -- 为每条指令消耗 --> EVM
EVM -- 执行完毕 --> R[结果状态变更或回滚]
EVM数据区域详解
| 区域 | 生命周期 | Gas成本 | 用途 |
|---|---|---|---|
| 堆栈 (Stack) | 执行期间 | 低 | 执行计算和操作的主要场所。存放局部变量、函数参数。 |
| 内存 (Memory) | 单次交易执行 | 需要支付(扩展时) | 用于存储临时数据,如数组、结构体,或传递给外部调用的数据。 |
| 存储 (Storage) | 永久(直到修改) | 非常昂贵 | 存储合约的关键状态变量。写入操作尤其耗Gas。 |
| Calldata | 单次交易执行 | 只读,成本低 | 存储传入交易的原始输入数据,通常是函数选择器和参数。 |
| 代码 (Code) | 永久 | 只读,成本低 | 存储当前合约的不可执行字节码。 |
EVM状态转换函数
$$
Y(S, T)= S’
$$
EVM执行流程
- 交易触发:一笔交易(来自用户或另一个合约)被发送到合约地址
- 上下文设置:EVM创建一个新的执行上下文,包括:
- 剩余
Gas calldata(输入数据)- 发送者 (
msg.sender)、价值 (msg.value) 等全局变量
- 剩余
- 字节码解释:EVM读取合约的字节码,并开始逐条解释执行操作码(OPCODE)
- Gas 检查:在执行每条指令前,EVM检查剩余Gas是否足够。如果不足,将抛出 “out of gas” 错误,并回滚所有状态变更(但已消耗的Gas费不退)
- 执行循环:
- 从堆栈弹出参数
- 执行操作(如
ADD,SSTORE,CALL),这里有操作码 https://ethereum.org/zh/developers/docs/evm/opcodes/ - 将结果压回堆栈或写入内存/存储
- 执行结束:当遇到
STOP、RETURN或REVERT指令时,执行停止STOP/RETURN:正常结束,状态变更被确认REVERT:主动回滚,状态变更无效,但剩余Gas退回