先週、私は.nightドメインが実際にどのように機能するのかを理解しようと試みました。仕様書からではなく、チェーンに直接触れるものを構築することで理解しようとしたのです。その結果、小さなプロフィールビューアーができました。tomin.nightのような名前を入力すると、ブロックチェーンから直接プロフィールが解決(resolve)されます。レジストラAPIも、認証の壁もありません。あるのはスマートコントラクトと、いくつかのJavaScriptだけです。

以下に、その仕組み、学んだこと、そして私の午後の時間を奪った2つの具体的な罠について説明します。

なぜオンチェーン・ネームが重要なのか

Midnightでは、.nightドメインはMidnamesによって管理されています。企業のセントラルサーバーにクエリを投げる代わりに、チェーン上に存在するスマートコントラクトから直接読み取ります。レジストリ自体が、ドメイン、所有者、そして所有者が付与したあらゆるプロフィールフィールドを保持しています。そのデータはオンチェーンにあるため、アイデンティティはポータブル(持ち運び可能)です。利用規約を変更したり、サービスを停止したりする可能性のあるプラットフォームから借りているわけではありません。キーをコントロールしていれば、名前をコントロールできるのです。

この変化は、開発者にとっても重要です。従来のDNSシステムに対して構築する場合、レート制限、APIキー、稼働率の保証などに悩まされることになります。ここでは、コントラクトの状態(state)が信頼できる唯一の情報源(source of truth)となります。あなたのアプリケーションは、他のあらゆるアプリケーションと同じ方法でそれを読み取ります。特権的なAPIティアは存在しません。

コードはあまりにもシンプルすぎるほどだ

@midnames/sdkが重い処理を引き受けてくれます。ドメインをアドレスとプロフィールに解決するには、正確に2行必要です。

const provider = createDefaultProvider({ networkId: "mainnet" });
const result = await resolveDomain(provider, "tomin.night");

それだけです。プロバイダーがネットワークをターゲットにし、リゾルバーがコントラクトと通信します。SDKは、成功フラグを含む結果オブジェクトを返します。ドメインが存在しない場合、何層ものエラーハンドリングや、RPC

スタックはあえて、退屈なほどシンプルに保ちました。バックエンドはExpressを実行するNodeサーバーです。@midnames/sdkをインポートし、名前解決のロジックを実行し、複雑なシリアライゼーション処理を行い、クリーンなJSONを返します。フロントエンドはプレーンなHTMLとバニラJavaScriptです。ビルドステップも、フレームワークも、ウォレットアダプターもありません。

ブラウザではなくバックエンドでSDKを実行することを選択したのは、いくつかの実用的な理由があるからです。これにより、プロバイダーの設定をクライアントから隠すことができ、シリアライゼーションの煩雑な処理を一箇所に集約でき、フロントエンドはデータの取得とレンダリングだけに専念できるようになります。

最も驚いたのは、名前の解決がパブリックな読み取り操作であるという点です。ウォレットの接続も、署名も、ユーザーによるログインも必要ありません。ドメインが存在すれば、コントラクトの状態は誰でも確認できます。これは、あらゆるインタラクションが「ウォレットを接続」から始まる典型的なWeb3のフローとは大きく異なります。Midnightにおけるアイデンティティの読み取りは、公開ウェブサイトを閲覧するのと同様に、パーミッションレス(許可不要)なのです。

本質的な気づき

このビューアーを構築して改めて感じたのは、ブロックチェーン開発において最も難しい部分は、ブロックチェーンそのものであることは滅多にないということです。Midnightは、中央集権的なデータベースなしに、人々が自分の名前やプロフィールを所有できるようにするという困難な問題をすでに解決しています。ビルダーの視点から見て難しかったのは、どのネットワークを指しているかを忘れないようにすることと、データ型を整えるためのヘルパー関数を書くことでした。

プロトコルはポータブルなアイデンティティを提供してくれます。開発者の仕事は、単にそれを正しく読み取り、ユーザーの邪魔をしないことです。アーキテクチャをシンプルに保ち、チェーンに直接関わるロジックをUIから分離し、パブリックな読み取りを、単に分散型台帳上に存在する「通常のデータベースクエリ」として扱うことです。

コードを確認したり、自分で実行したりしたい場合は、こちらのURLからソースコードの全文を確認できます:https://github.com/tomiin/midnames-profile-viewer