纯前端且高度自定义的合约trace可视化工具:TraceView
🔍
纯前端且高度自定义的合约trace可视化工具:TraceView
在平常分析攻击事件的时候经常会用到类似ethtx.info、blocksec的txinfo,还有tenderly等工具,但是这些都有其局限性,特别是在分析小众链攻击的时候用tenderly只能一步一步跟,没法很直观的平面展开,很难受,所以就造了这个小轮子。
 

介绍

我这个小工具的理念很明确,就是纯粹的把合约trace以人能看懂且直观的方式view出来,所以更专注的是trace,而不是transaction,先来看一下界面
notion image
 
这里分别来解释一下每个框的作用:
  • Explorer address URL:这里填区块链浏览器的地址详情页面的URL,作用是在显示地址类型的文本的时候添加超链接,以便可以直接点击文本跳到对应的浏览器地址详情页面。ADDRESSFLAG是占位符,用于在运行时让实际的地址把它替换掉
  • Address map:用来给地址打标签的数据
  • Function map:ABI,用来给calldata解码的数据
    •  
交易的Raw traces拿到了,那Address mapFunction map怎么办呢,总不能人工来打标签,找ABI。所以我这里又写了一个爬虫脚本,根据trace中的信息去爬需要的信息,标签主要从区块链浏览器里爬,ABI从区块链浏览器和4bytes结合起来爬,这样解码率更高。
 
运行起来是这样
notion image
脚本很粗糙,但是能用。需要先将Raw traces写入rawtraces.txt文件,然后再运行脚本,脚本需要带上一个参数,这个参数是区块链浏览器的合约详情页面的URL,把实际的合约地址替换为ADDRESSFLAG,这是个占位符,在脚本运行时会用实际的地址把它替换掉。
为啥需要这个参数呢,因为需要在合约详情页面爬标签、ABI。
 
Ok,现在需要的信息都有了,正所谓自给自足丰衣足食,不需要人喂饭,如果爬不到信息检查一下是不是网络问题。我这里只是提供一个方案,可以根据实际情况做出调整,例如在github找到了ABI或者前端找ABI都行。
 
渲染一下看一下解析出来是啥样
notion image
 

对比

既然已经有ethtx.infoblocksecTxinfoTenderly这些工具了,为啥还要搞个TraceView
 
首先是多链支持的问题,ethtx只支持以太坊,Txinfo只支持以太坊和BSC。Tenderly支持更多的链,但是它更倾向于单步调试,在直观的平面分析这方面做得不是很好。
 
第二个问题是自定义问题。Txinfo支持一定程度的自定义,可以自定义标签和函数名,而Tenderlyethtx则不支持。
 
TraceView没有这些限制,虽然麻烦了点,但随心所欲,因为它只是将Raw traces可视化,只要你能拿到Raw traces,就可以分析交易,不限于哪条链,甚至是本地链的交易。
如果爬虫获得的信息不够,用户还可以自行决定添加和修改Address mapFunction map
 
拿前几天的fei protocol攻击事件看一下这几个产品对同一笔交易的trace解析有啥区别
 
blocksec:
notion image
 
ethtx.info:
notion image
 
tenderly:
notion image
 
TraceView:
notion image
 
其实都还不错,结合使用更好
 

下一步

这个工具最依赖的其实还是Raw traces,在没节点的情况下只能从外部获取,要么区块链浏览器,要么节点,而且据我观察,带debug模式的节点比存档节点还要少....如果外部实在拿不到,那就只能尝试内部生成。
 
本地EVM重放交易生成Raw traces其实可行,虽然说需要依赖存档节点,不过总比没有好,目前的问题是ganache虽然支持debug_traceTransaction,但还不支持解析出call trace,目前只能解析出字节码执行栈,所以写一个转换器应该是一个可行的方案。