在春节期间,某项目开启了送红包活动,奖池数量为8k个代币,其中领取奖励分为0.1,1,10,100,四个档位
首先进行一次正常领取红包交互,我们会发现项目方并没有做任何限制,只要向合约0xaaaffffffffffffffff8去调用0xffffffff方法,合约就会返回随机数量的代币。
注意这里项目方并没有做任何的限制,那么现在就意味着我们可以使用任意EVM地址调用合约领取一次红包。
至于奖池中代币数量如何查看,通过区块链浏览器中可以看到这个合约所持有的ERC20代币数量为8K。
开始编写代码, 思路很清晰
我需要:
生成N个地址
分发Gas到N个地址
调用合约领取红包
归集
第一个很简单,直接使用Ethers.js的createRandom()来生成1.2W个以太坊钱包,代码如下
从seeds.txt中读取地址后并发送交易,发送交易的方式每个人都有各自的实现方式,这里不多赘述
原理依旧是发送交易,但是增加一个data字段来调用领取红包方法(对,就是打铭文时的十六进制,只不过可以通过这个十六进制调用合约的方法)
最后的归集,因为归集的是ERC20代币,所以我直接通过对应合约的ABI方式来归集
给大家看一下hash,第一笔分发gas,第二笔调用合约,第三笔归集,十分简单明了
最后通过1.2w个地址拿到了N个币,本文结束