EthTx是一款好用的以太坊交易分析工具,用来分析攻击事件不错,Peckshield经常用。
0x1 搭建
准备环境python3、pipenv、docker。
先把源码拉下来
git clone https://github.com/EthTx/ethtx_ce.git
然后看看官方文档怎么搭建
先make populate-db,然而Makefile根本没有中根本没有这个命令
经过研究,发现没有这个步骤不影响,直接进行下一步,make run-database
好吧(抓头),又报错了,这里直接新建个.docker_env文件,内容留空,然后再运行上一步。
可以,mongo数据库是跑起来了,不过提示各种变量是空,那好,新建个.env文件。
然后pipenv install,没什么问题,最后make run-local
不出意外,又报错了,看看Makefile里run-local命令的内容吧
好家伙,根本没有run.py这个文件,直接把run.py改成wsgi.py在跑试试。
OK!终于跑起来了,但是目前肯定是不能正常用的,要进行配置。
0x2 配置
可以看到有这些配置项,这里踩过的坑就不说了,分别说明一下这些配置项
- mongo_connection_string:MongoDB数据库的连接字符串,默认填mongodb://127.0.0.1:27017/就行
- mongo_database:数据库名,之前在.env文件中将数据库名定位了ethtx,这里也填ethtx
- etherscan_api_key:etherscan的apikey,去etherscan上注册个账号申请就可以了
- web3nodes:各个链的RPC接口,需要支持debug方法,要么自己搭全节点开个允许debug的RPC,要么用网上的共享节点,但是infura这类共享节点一般不支持debug方法
- default_chain:默认选用的链
- etherscan_urls:各个链的etherscan api链接,用于获取合约的ABI等信息
可以看到很多配置项都是从环境变量里面取,很麻烦,设临时变量又会很长,所以把配置项写到.env文件里好一点,之前正好新建了个.docker_env文件,这个文件是用来给docker容器里塞环境变量的,内容和.env文件相同即可
然后make run-local那就算跑起来了。
0x3 二开
如果只是要解析以太坊上面的交易,那直接使用https://ethtx.info/就可以了,主网测试网都有,所以如果需要分析其他类以太坊链(如BSC、HECO、Polygon)上的交易的话,就需要二开。
首先需要先弄到各个链的RPC接口,我只找到BSC和Polygon带debug模式的RPC接口,HECO的我没找到,就先不支持了。BSC的和Polygon的直接到getblock.io注册个号,我只找到他们家是提供免费支持debug方法的RPC的,申请个api_key就行了。然后把RPC链接放到.env里
因为主要是需要支持BSC和Polygon,以太坊主网、测试网的RPC我就没有去找了,也用不着,所以相关变量留空。ETHERSCAN_KEY也需要留空,后面会讲。
修改wsgi.py
增加了BSC和Polygon的Web3node,然后去bscscan和polygonscan上分别注册号并申请apikey,然后将apikey直接拼接到BSC和Polygon的浏览器api链接里面,因为他们的apikey是不同的,所以不能使用同一个apikey,ETHERSCAN_KEY留空的原因就是这个。
修改index.html
增加两个选项,没什么好说的。
修改config.py
蓝线部分加了两个配置项 CHAINID_NATIVECOIN和CHAINID_EXPLORERURL,写死就行,主要是把各个链的原生币还有区块浏览器链接对应上
修改transactions.py
绿线部分是新增的,主要是获取当前交易的原生币和区块浏览器链接,因为ethtx默认把ETH当原生币,所以需要把原生币进行一个替换,然后把原生币和区块浏览器链接传给模板。
修改transaction.html,主要把原生币ETH替换成传过去nativecoin,然后把区块浏览器链接替换成传过去的explorerurl。
改完之后简单测试下看
可以看到支持BSC链上的交易分析了。
0x4 开源地址
https://github.com/Rivaill/ethtx_ce