追踪交易中的资产流向
结合 Balance Changes、Token Flow 和 Execution Trace,用精确金额还原资产路径与最终净变化。
案例目标
回答谁的资产最终增加或减少、资产经过哪些合约,以及每次关键转移由哪次调用触发。
示例交易与背景
本例分析一笔包含闪电贷、Token 往返、WETH 解包和 ETH 分配的 Ethereum 交易:
0xbdec39a74e620fc624f90483aff067b17044f81138e6c30038daf7f873159db4主要地址包括执行合约 0x64dc84...5999、池 0x58e278...e163、质押合约 0x444156...1423、交易发起人 0x269ff4...f46c 和费用接收方 0x952222...afe5。
预期回答的问题
- 池借出和收回了多少 XPEPE?
- WETH 在哪里被解包成 ETH?
- 解包后的 ETH 最终分配给了谁?
分析步骤
- 从 Balance Changes 记录各地址的最终净变化,不把中间往返重复计算。
- 在 Token Flow 中按 Token 和方向追踪路径;打开 Raws 核对未经聚合的原始数量。
- 在 Execution Trace 中搜索 WETH、池和执行合约地址,验证
flash、stake、withdrawAll、swap与withdraw的先后顺序。 - 对关键边逐项核对调用参数、Token decimals 和 Trace 编号。
- 检查所有入口、出口是否能解释 Balance Changes 的净结果。
关键证据
| Trace | 资产路径 | 原始数量 | 格式化数量 |
|---|---|---|---|
39 | 池 → 执行合约,XPEPE | 49498286779167448503344113631 | 49,498,286,779.167448503344113631 XPEPE |
70 | 执行合约 → 质押合约,XPEPE | 49498286779167448503344113631 | 49,498,286,779.167448503344113631 XPEPE |
100 | 质押合约 → 执行合约,XPEPE | 49498286779167448503344113631 | 49,498,286,779.167448503344113631 XPEPE |
486 | 执行合约 → 池,XPEPE | 199373286778715393708823565786 | 199,373,286,778.715393708823565786 XPEPE |
610–616 | 池/WETH → 执行合约 | 680568466516036487 wei | 0.680568466516036487 ETH |
618 | 执行合约 → 费用接收方 | 1000000000000000 wei | 0.001 ETH |
619 | 执行合约 → 交易发起人 | 679568466516036487 wei | 0.679568466516036487 ETH |
最后两笔 ETH 转出之和正好等于解包金额:
0.001 + 0.679568466516036487 = 0.680568466516036487 ETH这项守恒检查把 Token Flow 的视觉路径、Execution Trace 的执行顺序和最终余额结果连接在一起。
案例结论
执行合约先通过池获得 XPEPE,在质押合约中完成一次往返,随后向池返还更多 XPEPE。池向执行合约输出
0.680568466516036487 WETH,该资产被解包后分成0.001 ETH费用和0.679568466516036487 ETH发起人收入。两笔输出与解包金额完全相等。
注意事项
- Event 由合约主动发出,异常 Token 的日志可能与真实余额不一致。
- Token Flow 展示路径,不自动判断获利、损失或攻击行为。
- 大额原始数值必须结合 Token decimals 格式化。
- mint、burn、wrap、unwrap 和已回滚的内部转移需要单独归类。
