这是我第一次写教程,我其实不爱写东西,但是白嫖了各位大佬各种教程,也想对一些新入这个圈子的家人们做一些贡献。
我不是程序员出身,对代码可以说完成不在行,最初加入了DFarm社区,也是想白嫖一下科学家们使用的一些工具和方法,提高自己的撸毛效率。最近一直在看DFarm社区小伟哥的一些课程文章,并加入自己的实践,写得真的蛮好的,能给自己在撸毛道路上提供一些思想和方法,完全值回票价!
这段时间不是在炒作ens的各种3位数,4位数域名吗,当时我就在想,一个一个去ens官网查询,效率太低,该如何批量查询,下面提供了3种方法和思路。
使用现成的一些工具和网站,比如:
这些网站都能批量查询ens域名的一些注册情况。
这是我最初想到的一个办法,就是批量请求ens官网,查询注册结果。
<1> 首先我们输入一个123.eth的域名,在chrome上打开F12查看相应信息。
点击header界面,可以看到,在ens官网点击search的时候,实际上是执行了一个post请求去查询,请求网址是
<2>我们再来看下请求的参数,点击Payload界面,红框中这一串花里胡哨的就是post请求携带的参数,我们注意一下其中一个值,id:0x64e604787cbf194841e7b68d7cd28786f6c9a0a3ab9f8b0a0e87cb4387ab0107
<3>我们再看下返回的值,点击response界面,可以看到返回值有上面提到的id值,有123.eth值
PS:如果有对post,get不熟悉的,可以看看小伟哥这篇文章,我就是从这篇入门的。
<4>我们重复执行之前<1>---<3>的步骤,但是这次选取一个未注册过的域名,比如ddasdas.eth,查看header,payload,response 3个界面,对比之前的信息。
header:没啥区别,一模一样
payload:id值发生了变化
response:返回一个null值
到这里我们基本可以推断,一个id值应该对应了一个域名,那么我们可以批量post不同的id值,根据返回的结果,判断ens是否被注册,如果返回null,那域名是未被注册的。
可以看下python执行的2次结果。
第一次,返回了123.eth的值
第二次,修改id值,返回了null
那么问题来了,id值和域名的对应关系是啥???我也不知道,我查了下,水平太菜,没查出这个对应关系,如果有大佬明白,还请指点一下。。。
所以,第二条路其实是没走通的…这里是提供了一种思路,也许其他链能走通呢。
第二条路没走通后,想着还是把这个项目搞完吧,就又去看了下ens官方的文档,找到ens的对应python库---web3.py
当我们查看web3.py上ens的一些api接口,你会发现别人都给你写好了。。。直接用就是了。。。
ns.owner这个函数可以根据域名直接查出owner的eth地址,那么我们使用测试一下。
按照官方的文档,我们一步一步执行。
<1>首先我们要创建一个ens object,可以用3种方法创建。
我选的是第三种,因为第一种和第二种我没搞懂怎么用…..
点击api文档的providers
看文档的意思貌似是要连接到一个eth的provider节点,通过provider查询ens的相应信息。这个provider你可以自己搭建(走远了..),也可以连接remote node。
我们继续往下看,貌似可以免费注册infura,然后来进行api调用。infura大家是不是听着有些熟悉,对,就是前几天崩溃那个..
<2>我们先免费注册一个,注册流程我这里就不写了。
注册完成后,创建一个noder,选择ethereum,创建完成后,如下图,保留好你的keys
可以看到,这里提供了https和wss两种访问方式。
<3>我们继续按照api文档一步一步执行
首先我们pip安装web3.py库,然后from web3 import Web3, from ens import ENS
HTTPProvider('https://mainnet.infura.io/v3/xxx')) 后面https://这段网址就是之前infura注册后,创建ethereum noder后保存的endpoints的值
然后直接调用ns = ENS.fromWeb3(w3),ens的object就创建成功了。
<4>直接调用ns.owner('xxxx.eth'),括号内为需要查询的ens域名,如果返回值为0x0000000000000000000000000000000000000000,那么域名就未被注册,还是以123.eth和ddasdas.eth为例,以下是全部代码,我们看下运行结果。
这里可以看到,123.eth目前是注册了的,ddasdas.eth是可用的。
<5>写个循环,批量查询,即可得到我们想要查询的ens域名了,以下代码是查询51000--52000的ens域名情况,每执行一次查询,建议sleep 1s,不然会报连接错误。
最后我们再看看infura.io上的相关数据,可以看到一些请求量和方法。