前言之前阅读了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颗🌟, 但是已经被 REVM 的 awesome list 收录.
https://bluealloy.github.io/revm/awesome.html
Main分为这几个区域:
MainTab.RPC, Scan, Tx.Info 显示 Tx 的基本信息CallTree Frame 可以设置显隐指定地址的 Frame.Balance Change 显示这次交易各种代币的增减.AlloyDB Cache 开启后会缓存本次 Tx 执行过程中读取的 Rpc 数据.下次模拟直接从本地读取,加快速度.Prestate 模拟的 Tx 不一定在 Block 中的第一位,开启后模拟前面的 Tx 执行后的状态.Fork Mode What-If功能,开启后就能在模拟过程中修改 Stack, Memory 数据重跑交易.PauseOp Jump 开启后勾选 PauseOp 的 Opcode, 点击播放按钮直接跳转而不用一步步走.PauseConv Jump 功能同上.
Frame分为几个区域:
Frame 列表,每次 Call 和 Create 都会创建一个 Frame.Tree 从底部打开 CallTree.Logs 显示Tx执行过程中的所有 Event.Utils 小工具集合Analysis JS 脚本分析系统.OpcodeView 当前合约的 Opcode 列表,执行到哪步蓝色三角到对应的 PC.Stack, Memory, Storage.RetuanData, CallData, Log, SourceCode 在Main界面,输入Tx,点击GetTx获取Tx 的基本.
可以在下方的Transaction和Block进行修改参数.
点击Start Debug开始调试.

Step Into 前进一步Step Back 后退一步Continue/Pause 可以自动播放,暂停Step Over 遇到 Call ,StaicaCall, DelegateCall 直接跳到本Frame的下一步,不进入具体调用.Step Out 结束当前 Frame.PauseOp 可以勾选指定 OpCode,播放到指定 OpCode 的时候会暂停.PauseConv 可以设置指定条件,设定后点击 Scan,运行到指定条件会暂停.
OpCode.StackView 显示当前指令操作的行.PC 指的 OpCode 进行解释.PC 指的 OpCode.
显示执行到当前步骤时的 Stack 数据.
Find Last Show 找出指定数据最近一次出现在栈顶的 Step.

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

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

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

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

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

如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!