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 相关的
相关推荐
doiito14 小时前
【Agent Harness】Gliding Horse 设计细节 -- 不跟风开发自己的AI Agent
架构·rust·agent
doiito16 小时前
【Agent Harness】Gliding Horse 核心设计理念,不跟风开发自己的AI Agent
ai·rust·架构设计·系统设计·ai agent
花褪残红青杏小1 天前
Rust图像处理第6节- 均值模糊 & 中值模糊:3×3 邻域的两种经典玩法
rust·webassembly·图形学
子兮曰1 天前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
星栈1 天前
写 Dioxus Demo 不难,难的是把它写成项目
前端·rust·前端框架
mCell1 天前
【锐评】桌面端技术营销:别拿跑分当工程判断
前端·rust·electron
武子康2 天前
调查研究-201 Rust 里的 dev build 和 release build:为什么同一份代码性能差这么多?
后端·架构·rust
doiito2 天前
【Agent Harness】Gliding Horse 的 L2 作战地图:让多 Agent 协作从“摸黑”变成“透明”
ai·rust·架构设计·系统设计·ai agent
星栈2 天前
我用 Rust + Dioxus 做了个全栈跨平台笔记应用:再把新建、编辑和交付补上
前端·rust·前端框架
独孤留白3 天前
从C到Rust:基本类型 C 的隐式不确定 vs Rust 的显式确定
rust