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 相关的
相关推荐
DongLi011 天前
rustlings 学习笔记 -- exercises/05_vecs
rust
番茄灭世神2 天前
Rust学习笔记第2篇
rust·编程语言
shimly1234562 天前
(done) 速通 rustlings(20) 错误处理1 --- 不涉及Traits
rust
shimly1234562 天前
(done) 速通 rustlings(19) Option
rust
@atweiwei2 天前
rust所有权机制详解
开发语言·数据结构·后端·rust·内存·所有权
shimly1234562 天前
(done) 速通 rustlings(24) 错误处理2 --- 涉及Traits
rust
shimly1234562 天前
(done) 速通 rustlings(23) 特性 Traits
rust
shimly1234563 天前
(done) 速通 rustlings(17) 哈希表
rust
shimly1234563 天前
(done) 速通 rustlings(15) 字符串
rust
shimly1234563 天前
(done) 速通 rustlings(22) 泛型
rust