OpTrace:一个高性能的本地 EVM 调试器

前言之前阅读了REVM,想写个项目加深对REVM的理解.选择了做OpCode级别的调试器.现有的EVM调试器大多是命令行,操作起来不够灵活.看数据也不方便.OpTrace是一个基于Tauri2+REVM的调试器.可以对任意Ethereum上的交易进行模拟重放,

前言

之前阅读了 REVM, 想写个项目加深对 REVM 的理解.
选择了做 OpCode 级别的调试器.
现有的 EVM 调试器大多是命令行,操作起来不够灵活.看数据也不方便.

OpTrace 是一个基于 Tauri2 + REVM 的调试器.
可以对任意 Ethereum 上的交易进行模拟重放,也可以调整模拟参数.
最大的特点是:

  • 高性能,支持加载上百万步不卡顿.
  • 支持时间旅行,可以随意拖动进度条到指定步骤不用一步一步走.
  • What-If 模式,在交易过程中可以修改 Stack, Memory尝试新走向.
  • PauseOp,PauseConv 支持在指定 Opcode 或者 指定条件暂停.
  • 支持 JS 分析数据.
  • 支持 Solidity 源码高亮

Github: https://github.com/tanghaosuan11/op_trace 刚开源, 只有3颗🌟, 但是已经被 REVMawesome list 收录. https://bluealloy.github.io/revm/awesome.html

基本介绍

optrace_main_img.png Main分为这几个区域:

  1. MainTab.
  2. 用于输入模拟交易的 RPC, Scan, Tx.
  3. 按钮组
    • Info 显示 Tx 的基本信息
    • CallTree
    • Frame 可以设置显隐指定地址的 Frame.
    • Balance Change 显示这次交易各种代币的增减.
  4. Tx的基本信息, 初始可以随意修改并开始模拟.
  5. Tx的Block信息.
  6. 软件的配置.
    • AlloyDB Cache 开启后会缓存本次 Tx 执行过程中读取的 Rpc 数据.下次模拟直接从本地读取,加快速度.
    • Prestate 模拟的 Tx 不一定在 Block 中的第一位,开启后模拟前面的 Tx 执行后的状态.
    • Fork Mode What-If功能,开启后就能在模拟过程中修改 Stack, Memory 数据重跑交易.
    • PauseOp Jump 开启后勾选 PauseOpOpcode, 点击播放按钮直接跳转而不用一步步走.
    • PauseConv Jump 功能同上.

optrace_frame_img.png

Frame分为几个区域:

  1. Frame 列表,每次 CallCreate 都会创建一个 Frame.
  2. 调试按钮.
  3. 功能按钮.
    • Tree 从底部打开 CallTree.
    • Logs 显示Tx执行过程中的所有 Event.
    • Utils 小工具集合
    • Analysis JS 脚本分析系统.
  4. 步数进度条,可以直接拖动而不用一步一步走.
  5. OpcodeView 当前合约的 Opcode 列表,执行到哪步蓝色三角到对应的 PC.
  6. 内容区域,可以查看执行到当前步时的Stack, Memory, Storage.
  7. 参数区域,可以看Frame的基本信息,RetuanData, CallData, Log, SourceCode

功能介绍

开始调试

在Main界面,输入Tx,点击GetTx获取Tx 的基本.
可以在下方的Transaction和Block进行修改参数.
点击Start Debug开始调试.

optrace_fetch_tx.gif

调试工具组

  • Step Into 前进一步
  • Step Back 后退一步
  • Continue/Pause 可以自动播放,暂停
  • Step Over 遇到 Call ,StaicaCall, DelegateCall 直接跳到本Frame的下一步,不进入具体调用.
  • Step Out 结束当前 Frame.
  • PauseOp 可以勾选指定 OpCode,播放到指定 OpCode 的时候会暂停.
  • PauseConv 可以设置指定条件,设定后点击 Scan,运行到指定条件会暂停.

optrace_debug_button.gif

OpCode View

  • 左一按钮, 过滤显示 OpCode.
  • 左二按钮, 断点列表.
  • 右一按钮, 开启后,在 StackView 显示当前指令操作的行.
  • 右二按钮, 对当前 PC 指的 OpCode 进行解释.
  • 右三按钮, 定位当前 PC 指的 OpCode.

optrace_opcode_viewer.gif

Stack View

显示执行到当前步骤时的 Stack 数据.
Find Last Show 找出指定数据最近一次出现在栈顶的 Step.

optrace_stack_view.gif

Storage View

显示当前 Frame 执行到当前 Step 时,加载和修改过的 Storage.
点击地址后的小图标,可以设置 Storage 的地址, 方便后面分析.

optrace_storage_view.gif

Frame Info

顶部显示调用面包屑.
点击 Frame标签 可以跳转到指定Frame,点击右上角的后退按钮可以退出来.
点击 Frame 的起始步数可以指定步数.

optrace_frame_info.gif

CallTree

点击 Tree 按钮可以查看当前 TxCallTree.
点击调用可以跳到具体步骤.

optrace_calltree.gif

Analysis

分析系统,用JS进行编写.
在模拟执行后,可以获取所有步骤的所有数据, Frame数据, Storage写入数据.
脚本支持多种过滤和返回多种类型的数据.

optrace_analysis.gif

Balance Change

在这里显示当前 Tx 结束后,所有地址的代币余额变化.
因为同名 Token 较多,所以没有自动获取 SymbolDecimals, 由用户自己手动点击获取.

optrace_balance_change.gif

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
唐好酸
唐好酸
江湖只有他的大名,没有他的介绍。