使用 web3.py 扫描 ENS 域名

最近 ENS 大火,数字域名成了抢手货,10k Club 已经被注册完了,接下来战场来到了 100K Club。

为了能够扫描到还有哪些 ENS 域名未注册,我们需要一个工具。

首选的工具肯定是 web3.py,它是一个 Python 库,可以用来扫描 ENS 域名。

具体操作如下:

安装 web3.py

打开帮助文档快速开始

1
pip install web3

注册 Infura

由于我们需要访问 Ethereum 主网,所以需要配置 Web3 的 RPC 地址。前往 Infura 注册自己的账户,然后在页面右上角复制地址。

使用 Web3

1
2
3
4
5
6
7
8
9
from web3 import Web3
from ens import ENS

w3 = Web3(Web3.HTTPProvider('https://<your-provider-url>'))
# w3 = Web3(Web3.WebsocketProvider('wss://<your-provider-url>'))
ens = ENS.fromWeb3(w3)

owner = ens.owner('xwaer.eth')
print(owner)

填写你的 Infura 地址,然后执行代码,查看结果。

这个时候会返回这个 ENS 的 owner 地址。

如果需要 ENS 的更多方法,可以查看 ENS API

扫描 ENS 域名

这里我以扫描100k 以内的质数为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from web3 import Web3
from ens import ENS
import time
import os

w3 = Web3(Web3.HTTPProvider('https://<your-provider-url>'))
# w3 = Web3(Web3.WebsocketProvider('wss://<your-provider-url>'))
ens = ENS.fromWeb3(w3)

owner = ens.owner('xwaer.eth')
print(owner)

origin_file = open("primes-to-100k.txt")
unavailable_file = open("unavailable.txt", "a+")
available_file = open("available.txt", "a+")
line = origin_file.readline()
while line:
print(line)
line = line.strip()
owner = ens.owner(line + '.eth')
if owner == '0x0000000000000000000000000000000000000000':
available_file.write(line + '\n')
else:
unavailable_file.write(line + '\t' + owner + '\n')
os.sync()
time.sleep(0.1)
line = origin_file.readline()

判断是否注册可以判断 owner 是否为 0x0000000000000000000000000000000000000000 地址。