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 相关的
相关推荐
程序员爱钓鱼2 小时前
Rust String 与 &str 详解:字符串所有权、借用与转换
前端·后端·rust
段一凡-华北理工大学15 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
大卫小东(Sheldon)20 小时前
小鹤音形词典:一个用 Rust 写的离线编码查询桌面工具
ai·rust
就业发动机21 小时前
我用 Tauri 做了一个约 1.5 MB 的开源屏幕标注工具:MarkerOn
vue.js·rust
2601_954526751 天前
【硬核架构】打破 IT 与 OT 的数据孤岛!基于 Rust 异步协程的工业 IoT 网关重构,兼谈顶级自动化智能仪表厂家选型指南
物联网·架构·rust
white_ant1 天前
17- 文本统计/处理工具使用指南
rust·个人开发·tauri
独孤留白1 天前
Rust 类型转换全景指南 —— 从引用转换到序列化
rust
独孤留白1 天前
从C到Rust:Trait TryFrom TryInto 可能失败的类型转换
rust
雨师@1 天前
python通过rust编写组件扩展自己的能力
python·rust
程序员爱钓鱼1 天前
Rust 切片 Slice 详解:安全访问连续数据
前端·后端·rust