Execution Trace(执行追踪)

按调用层级阅读交易,理解每一步如何推动资产和状态变化。

Execution Trace 用来回答:一笔交易是怎样一步步执行的?

它把合约调用组织成树:父节点表示发起调用的上下文,子节点表示该调用执行期间发生的下一步操作。

先看一个例子

跟着这笔交易读 Trace

1. 从最外层开始

先看 Transaction,再展开 CREATE。它表示交易先创建了一个中间合约,后续调用都从这条执行路径展开。

2. 找到资产进入的位置

展开 UniswapV3Pool.flash(...),可以看到 XPEPE.transfer(...)。这说明 XPEPE 从 Pool 转入中间合约,是后续操作的资产来源。

3. 查看中间合约做了什么

同一分支下的 TokenStaker.stake(...) / withdrawAll() 表示中间合约与 TokenStaker 发生多次质押和提取。继续向下看 SwapRouter02 / Pool.swap(...),可以把这些操作和 WETH 的获得关联起来。

4. 找到资产最终转出的调用

展开 WETH.withdraw(...),可看到 WETH 被 unwrap 为 ETH;最后的 ETH transfer 则把 ETH 发给交易发起方和费用接收方。

怎么读 Trace

  • 从最外层节点开始,逐层展开与问题相关的分支。
  • 每一行先看操作类型,例如 CALLCREATESTATICCALL,再看调用目标与函数名。
  • 使用顶部工具栏筛选调用类型、展开层级或搜索函数、地址和参数。
  • 点击节点左侧的详情图标,查看参数、返回值、Gas 和错误信息。
  • 不确定某次调用为什么发生时,回到它的父节点查看调用上下文。

注意

  • 缩进表示调用层级,不表示时间间隔;同一层节点按执行顺序排列。
  • 内部调用失败不一定导致整笔交易失败,父调用可能捕获错误并继续执行。
  • 函数名和参数依赖 ABI、源码或签名解码;无法解码时,地址和原始数据仍然可以作为分析依据。

下一步