スマートコントラクトの命名
最終更新: 2025年9月9日
スマートコントラクトはイーサリアムの分散型インフラストラクチャの礎であり、自律的なアプリケーションやプロトコルを可能にします。 しかし、コントラクトの機能が進化しても、ユーザーやデベロッパーは依然として生の16進数アドレスに依存してこれらのコントラクトを識別・参照しています。
Ethereum Name Service (ENS) (opens in a new tab)でスマートコントラクトに名前を付けることで、16進数のコントラクトアドレスが不要になり、ユーザーエクスペリエンスが向上します。また、アドレス汚染やなりすまし攻撃などの攻撃によるリスクも低減します。 このガイドでは、スマートコントラクトの命名がなぜ重要なのか、どのように実装できるのか、そしてプロセスを簡素化し、デベロッパーがこの慣行を採用するのに役立つEnscribe (opens in a new tab)のような利用可能なツールについて説明します。
なぜスマートコントラクトに名前を付けるのか?
人間が読める識別子
デベロッパーとユーザーは、0x8f8e...f9e3のような分かりにくいコントラクトアドレスと対話する代わりに、v2.myapp.ethのような人間が読める名前を使用できます。 これにより、スマートコントラクトの対話が簡素化されます。
これは、イーサリアムアドレスに分散型の命名サービスを提供するEthereum Name Service (opens in a new tab)によって可能になります。 これは、ドメインネームサービス(DNS)によって、インターネットのユーザーが104.18.176.152などのIPアドレスではなく、ethereum.orgのような名前を使用してネットワークアドレスにアクセスできるのと似ています。
セキュリティと信頼性の向上
名前付きのコントラクトは、間違ったアドレスへの誤ったトランザクションを減らすのに役立ちます。 また、ユーザーが特定のアプリやブランドに関連付けられたコントラクトを特定するのにも役立ちます。 これにより、評判による信頼のレイヤーが追加されます。特にuniswap.ethのような有名な親ドメインに名前が付けられている場合にそうなります。
イーサリアムアドレスは42文字の長さであるため、数文字が変更された場合にユーザーがアドレスのわずかな変更を識別することは非常に困難です。 例えば、0x58068646C148E313CB414E85d2Fe89dDc3426870のようなアドレスは、ウォレットなどのユーザー向けアプリケーションによって、通常0x580...870に短縮されて表示されます。 ユーザーは、数文字が変更された悪意のあるアドレスに気づく可能性は低いでしょう。
この種の手法は、アドレスのなりすましや汚染攻撃で用いられます。これらの攻撃では、実際には正しいアドレスに似ているだけで同一ではないにもかかわらず、ユーザーは正しいアドレスと対話したり資金を送ったりしていると信じ込まされてしまいます。
ウォレットやコントラクトのENS名は、これらのタイプの攻撃から保護します。 DNSのなりすまし攻撃と同様、ENSのなりすまし攻撃も行われる可能性があります。しかし、ユーザーは16進数アドレスのわずかな変更よりも、ENS名のスペルミスに気づく可能性の方が高いでしょう。
ウォレットとエクスプローラーのUX向上
スマートコントラクトにENS名が設定されている場合、ウォレットやブロックチェーンエクスプローラーなどのアプリは、16進数アドレスの代わりにスマートコントラクトのENS名を表示できます。 これはユーザーにとって、ユーザーエクスペリエンス(UX)を大幅に向上させます。
例えば、Uniswapのようなアプリと対話する際、ユーザーは通常、対話しているアプリがウェブサイトuniswap.orgでホストされていることを確認しますが、UniswapがスマートコントラクトにENSで名前を付けていない場合、16進数のコントラクトアドレスが表示されることになります。 コントラクトに名前が付けられていれば、代わりにv4.contracts.uniswap.ethと表示され、はるかに便利です。
デプロイ時の命名とデプロイ後の命名
スマートコントラクトに名前を付けることができる時点は2つあります。
- デプロイ時: コントラクトがデプロイされる際に、ENS名を割り当てます。
- デプロイ後: 既存のコントラクトアドレスを新しいENS名にマッピングします。
どちらのアプローチも、ENSレコードを作成および設定できるように、ENSドメインへの所有者または管理者アクセス権を持っている必要があります。
コントラクトに対するENS命名の仕組み
ENS名はオンチェーンで保存され、ENSリゾルバを介してイーサリアムアドレスに解決されます。 スマートコントラクトに名前を付けるには、次のようにします。
- 親ENSドメイン(例:
myapp.eth)を登録または管理する - サブドメイン(例:
v1.myapp.eth)を作成する - サブドメインの
addressレコードをコントラクトアドレスに設定する - コントラクトの逆引きレコードをENSに設定して、そのアドレスから名前を検索できるようにする
ENS名は階層的であり、無制限のサブネームをサポートしています。 これらのレコードを設定するには、通常、ENSレジストリおよびパブリックリゾルバコントラクトとの対話が必要です。
コントラクト命名のためのツール
スマートコントラクトに名前を付けるには2つのアプローチがあります。 ENSアプリ (opens in a new tab)をいくつかの手動手順で使用するか、Enscribe (opens in a new tab)を使用します。 これらについて以下に概説します。
手動でのENS設定
ENSアプリ (opens in a new tab)を使用すると、デベロッパーは手動でサブネームを作成し、正引きアドレスレコードを設定できます。 しかし、ENSアプリを介して名前の逆引きレコードを設定することによって、スマートコントラクトのプライマリ名を設定することはできません。 ENSドキュメント (opens in a new tab)で説明されている手動の手順を実行する必要があります。
Enscribe
Enscribe (opens in a new tab)は、ENSによるスマートコントラクトの命名を簡素化し、スマートコントラクトに対するユーザーの信頼を高めます。 次の機能を提供します。
- アトミックなデプロイと命名: 新しいコントラクトをデプロイする際にENS名を割り当てます
- デプロイ後の命名: すでにデプロイ済みのコントラクトに名前を付けます
- マルチチェーン対応: ENSがサポートされているイーサリアムおよびL2ネットワークで動作します
- コントラクト検証データ: 複数のソースから取得したコントラクト検証データを含み、ユーザーの信頼を高めます
Enscribeは、ユーザーが提供するENS名、またはユーザーがENS名を持っていない場合は独自のドメインをサポートします。
Enscribeアプリ (opens in a new tab)にアクセスして、スマートコントラクトの命名と表示を開始できます。
ベストプラクティス
- 明確でバージョン管理された名前を使用する:
v1.myapp.ethのような名前を使い、コントラクトのアップグレードを透過的にします - 逆引きレコードを設定する: コントラクトをENS名にリンクし、ウォレットやブロックチェーンエクスプローラーなどのアプリで表示されるようにします。
- 有効期限を注意深く監視する: 意図しない所有権の変更を防ぎたい場合は、有効期限を注意深く監視します
- コントラクトのソースを検証する: ユーザーが、名前の付けられたコントラクトが期待どおりに動作することを信頼できるようにします
リスク
スマートコントラクトの命名はイーサリアムのユーザーに大きなメリットをもたらしますが、ENSドメインの所有者はその管理に注意を払う必要があります。 注目すべきリスクは次のとおりです。
- 有効期限: DNS名と同様に、ENS名の登録には有効期間があります。 したがって、所有者はドメインの有効期限を監視し、有効期限が切れるかなり前に更新することが不可欠です。 ENSアプリとEnscribeの両方で、有効期限が近づくとドメイン所有者に視覚的なインジケータが表示されます。
- 所有権の変更: ENSレコードはイーサリアム上でNFTとして表され、特定の
.ethドメインの所有者は関連するNFTを所有しています。 したがって、別のアカウントがこのNFTの所有権を取得した場合、新しい所有者は、必要に応じて任意のENSレコードを変更できます。
このようなリスクを軽減するために、.ethの第2レベルドメイン(2LD)の所有者アカウントは、マルチシグウォレットを介して安全に保護し、コントラクトの命名を管理するためのサブドメインを作成する必要があります。 そうすることで、サブドメインレベルで所有権の偶発的または悪意のある変更があった場合でも、2LD所有者が上書きできます。
コントラクト命名の未来
コントラクトの命名は、Web上でドメイン名がIPアドレスに取って代わったのと同様に、dapp開発のベストプラクティスになりつつあります。 ウォレット、エクスプローラー、ダッシュボードなどのインフラストラクチャがコントラクトのENS解決を統合するにつれて、名前付きコントラクトはエコシステム全体の安全性を向上させ、エラーを減らすでしょう。
スマートコントラクトを認識しやすく、推論しやすくすることで、命名はイーサリアム上のユーザーとアプリの間のギャップを埋めるのに役立ち、ユーザーの安全性とUXの両方を向上させます。