Closed9

ENSの空きドメイン名を一気に取得する

Makoto IshidaMakoto Ishida

それぞれのpackage.jsonを見た感じ、依存関係はこうなっているっぽい。

       ethers
          ↑
        web3 
       ↑     ↑
   ensjs   embark.io

とりあえず一番元になっている ethers でやってみる。

Makoto IshidaMakoto Ishida

ちなみに eth.link というサイトでは ENSに対応したDNS-over-HTTPS のサービスを提供しているので、curlコマンドでクエリーを実行可能。これならプログラミング不要。
https://eth.link/

例)
curl -H 'content-type: application/dns-json' 'https://eth.link/dns-query?type=TXT&name=wealdtech.eth'
Makoto IshidaMakoto Ishida

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'
}
Makoto IshidaMakoto Ishida

う〜ん、上のコードだと、Resolverが登録されていないけどOwnerは存在している(ドメインはすでに取得されている)場合にnullが返ってくる。

今やりたいのはドメインが取得されているか空いているかの判定なので、provider.resolveName() ではダメかも。

Makoto IshidaMakoto Ishida

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'
} 
Makoto IshidaMakoto Ishida

あとは、チェックしたいドメイン名の一覧をテキストファイルに入れて、シェルコマンドのループで回せば一気に使用可能なENSドメイン名が収穫できるはず。

Makoto IshidaMakoto Ishida

しばらくいろいろやってみた感想。

アルファベット3文字のドメイン名でもまだまだ結構空いている。eof とか tty とか。

https://app.ens.domains/

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ドメイン名探しを楽しめそうだ。

このスクラップは2022/03/15にクローズされました