REVM 解析 3 --- 新版本v97 的解析

新版本与之前的版本有了一些变化, 我们基于之前的解析来再次分析一下这个版本.

1. crates

先看 crate 有哪些变化

  • bytecode
  • database
  • ee-tests 略过
  • precompile
  • primitives
  • state
  • statetest-types
  • context
  • interpreter
  • inspector
  • handler
  • revm
  • op-revm
    总体看来没有变化, 像 ee-tests 这些都略过.
    我们按照顺序来看.

2. bytecode

逻辑结构没变

  • 主要结构体 Bytecode, 以及 opcode
  • Bytecode分为 legacy 和 eip7702, 去掉了 EOF

3. database

逻辑结构没变.

  • 基本没有变化.分为 interface 和一些默认实现
    可以参考之前的分析

4. precompile

逻辑结构没变.

  • 总体上没有太大变化, 核心结构体还是 Precompiles 和 Precompile.
  • 有了一些优化.

5. primitives

逻辑结构没变.

  • 多了一些 eip 相关的常量

6. state

逻辑结构没变.

  • 基本没变, 主要是 Account 和 AccountInfo

7. context

开始上难度了, 这里是分析的开始.

变化还挺大的.

  • ContextTr 依赖于 Host
  • Host 挪到了 context 这里, 之前是在 interpreter 那里, 而且方法有了变化
  • ContextTr 变简单了, 只有 get Txn Block 这些接口
  • 但是多了一个 Local 组件, 需要实现 LocalContextTr
  • 其他的 Block, Transaction, Cfg, Db, Chain 没有太大变化
  • JournalTr 也有变化, 跟随 Host 的变化

7.1 Host

在注释上分成了几大部分

  • Block
  • Transaction
  • Config
  • Database
  • Journal
    这个跟 ContextTr 是对应上的.

变化是多了一些 skip_cold_load, 意思是如果没有在缓存中, 就 skip 掉, 不要继续 load.

  • sstore_skip_cold_load
  • sload_skip_cold_load
  • load_account_info_skip_cold_load
    后面的 balance, load_account_delegated, load_account_code, load_account_code_hash 都依赖于此实现

7.2 Local

复制代码
Local context used for caching initcode from Initcode transactions.
  • Local 主要是 shared_memory 这个东西, 之前是在 frame (EthFrame)里面的
  • local 文件包含了一个结构体 FrameStack, 之前是没有特定类型的, 而且是在 handler 的 run_exe_loop 里面.
    这里放到了 Evm 里面了.

7.3 Journal

里面的方法比之前也多了不少.

8. interpreter

基本上也没太大变化,

  • 新增一个结构体 InstructionContext 来包裹 Interpreter 和 Host
  • 运行入口还是 run_plain
  • 我看到新增了很多的 halt 方法, 但是没有看到 resume 方法, 所以这个还是没办法退出的

9. inspector

略过

10. handler

跟之前的流程非常类似,

  • 还是分 4 步走, validation, pre, exe, post.
  • 多了 system_call 相关的
相关推荐
Yuyubow8 小时前
gpui step by step 5. FocusHandle 焦点处理与键盘点击事件
rust
techdashen9 小时前
在 Fly.io 上使用 Rust 构建远程开发环境:从 Tokio 到 eBPF
开发语言·后端·rust
星栈12 小时前
用 Rust + Makepad 做一个 JSON 查看器:从零到能用的全过程
前端·rust
日取其半万世不竭13 小时前
Rust《腐蚀》 服务器低成本怎么开?配置、端口和存档避坑
服务器·开发语言·rust
techdashen14 小时前
Cargo 1.93 开发周期动态全解析
rust
Vallelonga14 小时前
Rust 中的枚举
开发语言·rust
薛定谔的猫-菜鸟程序员14 小时前
从Electron到Tauri,Rust+Vue(Tauri) 实现超高性能桌面日志应用开发,以及开发避坑指南
vue.js·rust·electron
不爱学英文的码字机器1 天前
[鸿蒙PC命令行移植适配]移植rust三方库bottom到鸿蒙PC的完整实践
华为·rust·harmonyos
W_LuYi1851 天前
Tauri + Rust + Vue 3 打造极速轻量桌面应用
java·开发语言·vue.js·rust