ENSの空きドメイン名を一気に取得する
ENS本家のドキュメントにJavaScript, Python, Goなどのライブラリを使った名前解決の例が載っている。
JavaScriptだと下のライブラリが使えそう。
ensjs - https://github.com/ensdomains/ensjs
ethers - https://github.com/ethers-io/ethers.js/
web3.js - https://github.com/ChainSafe/web3.js
embark.io - https://github.com/embarklabs/embark
それぞれのpackage.jsonを見た感じ、依存関係はこうなっているっぽい。
ethers
↑
web3
↑ ↑
ensjs embark.io
とりあえず一番元になっている ethers でやってみる。
ちなみに eth.link というサイトでは ENSに対応したDNS-over-HTTPS のサービスを提供しているので、curlコマンドでクエリーを実行可能。これならプログラミング不要。
例)
curl -H 'content-type: application/dns-json' 'https://eth.link/dns-query?type=TXT&name=wealdtech.eth'
CloudFlareのブログの情報も大変参考になる。
JavaScript(Node.js)の場合とりあえずこれで名前解決は出来た。
const { ethers } = require('ethers');
const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY;
const network = 'homestead';
const provider = ethers.getDefaultProvider(network, { etherscan: ETHERSCAN_API_KEY });
const name = 'hogehoge.eth';
provider.resolveName(name).then((address) => {
console.log({ name, address });
});
実行例)
> ETHERSCAN_API_KEY=xxxxxxxxxxxxxxxxx node index.js
{
name: 'hogehoge.eth',
address: '0xEbb8f70d40D62864EAb334c66Bb5B88cE558054F'
}
う〜ん、上のコードだと、Resolverが登録されていないけどOwnerは存在している(ドメインはすでに取得されている)場合にnullが返ってくる。
今やりたいのはドメインが取得されているか空いているかの判定なので、provider.resolveName() ではダメかも。
ethersではなくweb3.jsで再挑戦。
Node接続にはInfuraの無料アカウントを利用。
const Web3 = require('web3');
const web3 = new Web3(`https://mainnet.infura.io/v3/${process.env.API_KEY}`);
resolve(process.argv[2]);
async function resolve(name) {
const owner = await web3.eth.ens.getOwner(name);
console.log({ name, owner });
}
これで行けそう。
> API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx node index.js examplename
{
name: 'examplename',
owner: '0x0000000000000000000000000000000000000000'
}
あとは、チェックしたいドメイン名の一覧をテキストファイルに入れて、シェルコマンドのループで回せば一気に使用可能なENSドメイン名が収穫できるはず。
しばらくいろいろやってみた感想。
アルファベット3文字のドメイン名でもまだまだ結構空いている。eof とか tty とか。
3文字ドメイン名は、26×26×26で、17576個限定。サルの画像を買うよりは実用性があって良いのでは?
スクリプトで全探索した結果、現時点では1万1千個以上が空いている模様。笑)
ただ3文字の名前は割高になっているようで、1年分で0.182ETH(約7万円)もする。ガス代を入れると約9万2千円。気軽に取得するには結構敷居が高い。
4文字になると1年分が0.042ETH(約1万6千円)に下がり、ガス代を入れて約3万5千円。
5文字以上になるとさらに価格が下がって、1年分で0.001ETH(約600円)になる。ただしこれにガス代として0.04ETHほど加算されるので、合計すると約1万6千円。
4〜5文字で良さそうな名前を探すのはありかも。dict とか monst とか。
他にも基本英単語の組み合わせ、世界の主要都市名、人名、一般名詞・形容詞などで一覧を作ればいろいろ見つかりそう。
英語ではない言語(日本語のローマ字表記やフランス語など)の簡単な単語でも結構空きが見つかった。この辺りも穴場かも。
しばらくの間、珠玉のENSドメイン名探しを楽しめそうだ。