見出し画像

ENSの名前解決

この記事では、ENS の「名前解決」について紹介します。

ENS の名前解決は、2 つのステップで行われます。名前解決したいユーザは、レジストリに問い合わせて正しいリゾルバを見つけ、次にリゾルバから解決結果を得る必要があります。

上記の例では、「foo.eth」が指す Ethereum アドレスを見つけようとしています。まず、レジストリに「foo.eth」を担当するリゾルバを問い合わせます。次に、そのリゾルバに対して「foo.eth」のアドレスを問い合わせます。

ENS の名前空間には、ENS のネイティブな .eth 名と、ENS にインポートされた DNS 名の両方が含まれます。名前にはさまざまな種類のデータを関連付けることができますが、最も一般的なのは暗号通貨のアドレスです。ENSは、任意のブロックチェーンのアドレスの保存と解決をサポートしています。Web3.py という Python ライブラリを使って名前解決をした例を以下に示します。

$ python3
>>> from web3 import Web3
>>> w3 = Web3(Web3.HTTPProvider('<作成したプロジェクトのエンドポイント>'))
>>> w3.isConnected()
True
>>> from ens import ENS
>>> ns = ENS.fromWeb3(w3)
>>> eth_address = ns.address("hashport.eth")
>>> eth_address
'0x8404A839Aca323e93b394E738061a3180386bed7'

名前解決のステップ

名前解決は以下のように行われます。(上の図と一緒に読んでみてください)

  1. 名前の正規化とハッシュ化をします。

  2. ENS レジストリの resolver() をコールし、手順1の出力を渡します。これにより、その名前に対応するリゾルバのアドレスが返されます。

  3. リゾルバインターフェイスを使用して、手順 2 で返されたリゾルバのアドレスに対して addr() をコールし、 手順 1 で計算したハッシュ化された名前を渡します。

イーサリアム以外のアドレスを解決するには、アドレスを解決したい暗号通貨のネームハッシュと SLIP44 チェーン ID の両方を指定します。例えば、Bitcoin のアドレスを解決するには、addr(hash, 0) を呼び出します。

その他のリソースの解決

ENS の利用状況についてはこちらの記事を参照してください。

ENS はブロックチェーンアドレスへのリンクの他に、ユーザがテキストレコードや web3 コンテンツハッシュなどをアップロードする機能も提供しています。

コンテンツハッシュ

コンテンツハッシュは IPFS と Swarm のコンテンツハッシュを保存するために使われます。このハッシュは、これらの分散ネットワークでホストされている分散コンテンツ(例えば、Web サイト)に ENS アドレスを解決することを可能にします。

テキストレコード

ENS では、ユーザーが任意のテキストレコードをあらかじめ定義されたキーを持つ Key-Value レコードの形で同時に設定することができます。ユーザが設定した暗号通貨アドレスやテキストレコードをすべてリストアップしたい場合は、Event から情報を取得するか、ENS subgraph 経由で問い合わせを行う必要がある。

下図は ENS subgraph で vitalik.eth を問い合わせた結果です(左がクエリ、右がレスポンス)。

参考文献


いいなと思ったら応援しよう!