这里的链针对的是 EVM
链。
得事先声明,我搜索全网资料的时候,并没有发现怎么从区块中获知是创建合约还是啥。
首先,每个人写的创建合约的方法可以是不同的,所以,你无法从单一的方法名字来判断,经过,我多次对比数据,我发现了下面的规律。
我并不知道下面的规律是否能适应所有的情况,如果,你有更好的方法,欢迎留言。
获取初始创建合约
首先,看一下新合约创建的时候的 transaction
。
通过直接对接 ETH 的 RPC 获取一整个区块的 transactions
.
这里给出一个创建合约的 transaction
的样子。
1 | { |
这里面最重要的就是 to
这个属性,它对应的是 None
。
因为,创建合约本来就不知道 to
是什么,所以,其一定是 None
。
但是,创建的合约,有的是 token
合约,有的是其他合约,所以,要进一步过滤。
获取合约的地址
因为,上面的 to
是 None
,即便是做过滤,你首先也应该知道合约的地址是什么。
通过获取 logs
的话,to
也是 None
,但是,观察 logs
的话,你可以发现
第一个 logs
的 address
总是创建的合约地址。
所以,合约地址现在也找到了。
过滤
因为符合 ERC20
的 token
合约,总有 symbol
、decimal
、amount
这些属性。
所以,只需要检查一下合约有没有这些属性就好了。
经过,这 3
个步骤,大部分新创建的合约就都能捕获了。