使用python批量查询未注册ens域名
May 3rd, 2022

这是我第一次写教程,我其实不爱写东西,但是白嫖了各位大佬各种教程,也想对一些新入这个圈子的家人们做一些贡献。

我不是程序员出身,对代码可以说完成不在行,最初加入了DFarm社区,也是想白嫖一下科学家们使用的一些工具和方法,提高自己的撸毛效率。最近一直在看DFarm社区小伟哥的一些课程文章,并加入自己的实践,写得真的蛮好的,能给自己在撸毛道路上提供一些思想和方法,完全值回票价!

这段时间不是在炒作ens的各种3位数,4位数域名吗,当时我就在想,一个一个去ens官网查询,效率太低,该如何批量查询,下面提供了3种方法和思路。

方法1:

使用现成的一些工具和网站,比如:

这些网站都能批量查询ens域名的一些注册情况。

方法2:

这是我最初想到的一个办法,就是批量请求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值和域名的对应关系是啥???我也不知道,我查了下,水平太菜,没查出这个对应关系,如果有大佬明白,还请指点一下。。。

所以,第二条路其实是没走通的…这里是提供了一种思路,也许其他链能走通呢。

方法3:

第二条路没走通后,想着还是把这个项目搞完吧,就又去看了下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上的相关数据,可以看到一些请求量和方法。

Subscribe to 0x210
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from 0x210

Skeleton

Skeleton

Skeleton