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 相关的
相关推荐
微小冷9 小时前
Rust异步编程详解
开发语言·rust·async·await·异步编程·tokio
鸿乃江边鸟10 小时前
Spark Datafusion Comet 向量化Rust Native--CometShuffleExchangeExec怎么控制读写
大数据·rust·spark·native
明飞19871 天前
tauri
rust
咚为1 天前
Rust tokio:Task ≠ Thread:Tokio 调度模型中的“假并发”与真实代价
开发语言·后端·rust
天天进步20151 天前
Motia性能进阶与未来:从现有源码推测 Rust 重构之路
开发语言·重构·rust
Hello.Reader2 天前
Rocket 0.5 响应体系Responder、流式输出、WebSocket 与 uri! 类型安全 URI
websocket·网络协议·安全·rust·rocket
FreeBuf_2 天前
黑客利用React Native CLI漏洞(CVE-2025-11953)在公开披露前部署Rust恶意软件
react native·react.js·rust
鸿乃江边鸟2 天前
Spark Datafusion Comet 向量化Rust Native--Native算子(CometNativeExec)怎么串联执行
大数据·rust·spark·native
mit6.8242 天前
[]try catch no | result yes
rust
Ivanqhz2 天前
向量化计算
开发语言·c++·后端·算法·支持向量机·rust