スマート・コントラクトの命名
スマート・コントラクトはイーサリアムの分散型インフラストラクチャの基盤であり、自律的なアプリケーションやプロトコルを可能にします。しかし、コントラクトの機能が進化しても、ユーザーや開発者は依然として、これらのコントラクトを識別して参照するために生の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.orgというウェブサイトでホストされていることを確認しますが、ユニスワップがスマート・コントラクトに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 App (opens in a new tab)を使用するか、Enscribe (opens in a new tab)を使用するかのいずれかです。これらの概要を以下に示します。
手動でのENS設定
ENS App (opens in a new tab)を使用すると、開発者は手動でサブネームを作成し、フォワードアドレスレコードを設定できます。ただし、ENSアプリを介して名前のリバースレコードを設定することで、スマート・コントラクトのプライマリ名を設定することはできません。ENSドキュメント (opens in a new tab)で説明されている手動の手順を実行する必要があります。
Enscribe
Enscribe (opens in a new tab)は、ENSを使用したスマート・コントラクトの命名を簡素化し、スマート・コントラクトに対するユーザーの信頼を高めます。以下の機能を提供します:
- アトミックなデプロイと命名: 新しいコントラクトをデプロイする際にENS名を割り当てる
- デプロイ後の命名: すでにデプロイされたコントラクトに名前を付ける
- マルチチェーンサポート: ENSがサポートされているイーサリアムおよびレイヤー2 (L2) ネットワーク全体で機能する
- コントラクト検証データ: ユーザーの信頼を高めるために、複数のソースから取得したコントラクト検証データを含める
Enscribeは、ユーザーが提供するENS名、またはユーザーがENS名を持っていない場合は独自のドメインをサポートします。
Enscribe App (opens in a new tab)にアクセスして、スマート・コントラクトの命名と表示を開始できます。
ベストプラクティス
- コントラクトのアップグレードを透明にするために、
v1.myapp.ethのような明確でバージョン管理された名前を使用する - ウォレットやブロックチェーンエクスプローラーなどのアプリでの可視性を高めるために、コントラクトをENS名にリンクするリバースレコードを設定する
- 所有権の偶発的な変更を防ぎたい場合は、有効期限を注意深く監視する
- ユーザーが名前付きのコントラクトが期待通りに動作すると信頼できるように、コントラクトのソースを検証する
リスク
スマート・コントラクトに名前を付けることは、イーサリアムのユーザーに大きなメリットをもたらしますが、ENSドメインの所有者はその管理に関して警戒を怠ってはなりません。主なリスクは以下の通りです:
- 有効期限: DNS名と同様に、ENS名の登録期間は有限です。したがって、所有者がドメインの有効期限を監視し、有効期限が切れる前に余裕を持って更新することが不可欠です。ENS AppとEnscribeの両方が、有効期限が近づいたときにドメイン所有者に視覚的なインジケーターを提供します。
- 所有権の変更: ENSレコードはイーサリアム上のNFTとして表され、特定の
.ethドメインの所有者は関連するNFTを所有しています。したがって、別のアカウントがこのNFTの所有権を取得した場合、新しい所有者は任意のENSレコードを自由に変更できます。
このようなリスクを軽減するために、.ethの第2レベルドメイン (2LD) の所有者アカウントは、マルチシグウォレットを介して保護し、コントラクトの命名を管理するためのサブドメインを作成する必要があります。そうすることで、サブドメインレベルで偶発的または悪意のある所有権の変更が発生した場合でも、2LDの所有者がそれらを上書きできます。
コントラクト命名の未来
ウェブ上でドメイン名がIPアドレスに取って代わったのと同様に、コントラクトの命名は分散型アプリケーション (dapp) 開発のベストプラクティスになりつつあります。ウォレット、エクスプローラー、ダッシュボードなどのより多くのインフラストラクチャがコントラクトのENS解決を統合するにつれて、名前付きのコントラクトはエコシステム全体の安全性を向上させ、エラーを減らすでしょう。
スマート・コントラクトを認識しやすく、理解しやすくすることで、命名はイーサリアム上のユーザーとアプリの間のギャップを埋めるのに役立ち、ユーザーの安全性とUXの両方を向上させます。