ERC6551: NFTと契約ウォレットの出会い
ERC -6551 プロトコルはコミュニティ内での議論が徐々に加熱しており、このプロトコルは NFT に大きな拡張の可能性をもたらします。 ERC -6551 はトークンバウンドアカウント(Token Bond Account, TBA)を通じて、各 NFT にユニークなコントラクトウォレットを作成し、資産を保有し関連する行動を記録できるようにします。これにより、非同質化トークン(Non-Fungible Token, NFT)の認証とコンバインド NFT の可能性が生まれます。深く探求すると、ERC -6551 は実際に NFT に完全な機能を持つウォレットを提供し、その「鍵」は NFT 自身であることがわかります。本稿では、NFT の標準の発展の歴史を振り返り、以前の NFT 拡張の試みについても触れます。TBA の核心がコントラクトウォレットであることを考慮し、コントラクトウォレットについても簡単に紹介します。最後に、このプロトコルの実装の詳細とその潜在的な応用の展望について深く探ります。
一、 NFT 標準の歴史と現状
NFT は特別な暗号通貨およびデジタルアート資産として、アート作品に新しいデジタルメディアを提供し、ブロックチェーン技術の応用シーンを拡大しました。従来の同質化トークンとは異なり、各 NFT は唯一無二であり、アート作品、ゲームアイテム、音楽などの特定のメタデータに関連付けられています。したがって、NFT は電子データの所有権証明書として、人々が収集または取引するために使用できます。2014年5月3日、デジタルアーティストのケビン・マッコイは、最初の既知の NFT 作品「Quantum」を創作しました。それはさまざまな形状で構成されたピクセル化された八角形であり、幻想的な方法で提示されました。しかし、ERC -721(Ethereum Request for Comments 721)が登場するまで、NFT は本当に統一された標準を持つことはありませんでした。これにより、さまざまなプロジェクトでの開発者の応用が容易になりました。
ERC -721
ERC -721 は CryptoPunks の発展と密接に関連しています。CryptoPunks は 2017 年に登場し、10000 個のユニークな 24x24 ピクセルアートキャラクターを含んでいます。その成功は開発者やコミュニティの広範な関心を引き寄せ、より多くの人々が NFT の巨大な可能性を認識するきっかけとなりました。その後、これが多くの NFT プロジェクトの基盤となり、ERC -721 標準の策定を促しました。この標準は CryptoKitties の CTO ディーター・シャーリーによって設立されました。2018 年 1 月、ウィリアム・エントリケン、ディーター・シャーリー、ジェイコブ・エバンス、ナスタシア・サックスが共同で ERC -721 標準を提案しました。この非同質化トークン標準は、スマートコントラクト内でトークン関連の ABI を実現し、イーサリアム上でユニークなデジタル資産を作成、管理、移転するための基盤を築き、アーティスト、コレクター、デジタルアート市場の新たな章を開きました。
ERC -721 の主な特徴は以下の通りです:
- 独自性:ERC -20 トークンとは異なり(それらは同質化されており、各トークンは他のトークンと完全に同じです)、各 ERC -721 トークンは唯一無二です。
- 所有権と移転:このトークン標準は、任意のトークンの所有者を特定できることを許可し、所有者または承認された個人がトークンを移転できることを許可します。
- メタデータの関連付け:各トークンにメタデータを関連付けることを許可し、これにはトークンの画像、説明、またはその他の関連属性が含まれる可能性があります。
その標準としての確実性を保証するために、ERC -721 は以下の重要なメソッドとイベントを定義しています:
balanceOf()、ownerOf()、approve()、getApproved()、setApprovalForAll()、isApprovedForAll()、transferFrom()、safeTransferFrom() などのメソッド。
および Transfer() や Approval() などのイベント。
要するに、ERC -721 標準はイーサリアム上のユニークな資産に対するメカニズムを提供し、各資産の独自性と所有権を保証し、それらが検証、取引、管理されることを可能にします。ERC -721 は非同質化トークンの標準として、デジタルアートやコレクションの分野で爆発的な成功を収めました。ERC -721 は重要なことを定義しましたが、NFT アプリケーションに多くの著名なプロジェクトをもたらしたにもかかわらず、代理操作として機能できない、または他のチェーン上の資産と直接関連付けることができないなどのいくつかの制限が依然として存在します。これらの問題を解決するために、コミュニティは一連の拡張と新しい標準を提案しました。その中で最も代表的なのが EIP3664 と EIP3525 です。
ERC -3664
早くも 2021 年 5 月、DRepublic チームは EIP -3664 という NFT 属性拡張プロトコルを提案しました。この提案は、主流の NFT 標準である ERC -721 や ERC -1155 の属性表現力の不足、NFT 同士の融合の難しさ、属性の保存の集中化などの制限を巧妙な方法で解決しました。
具体的には、EIP -3664 は既存の ERC -721 および ERC -1155 標準を変更する必要がありません。NFT の鋳造(mint)メソッドで I ERC 721 Receiver または I ERC 1155 Receiver インターフェースのコールバック関数を使用して、NFT に動的に属性を追加します。また、鋳造の方法を再定義することも可能です。このプロトコルを使用すると、1 つの NFT に無制限に任意の数の属性を追加できます。
EIP -3664 では、すべての属性が I ERC 3664 インターフェースを実装しています。基本属性には ID、名前、シンボル、URI アドレス、残高などの基本フィールドが含まれ、NFT のメタデータを説明します。EIP -3664 により、NFT の属性拡張はより柔軟でカスタマイズ可能になりました。これは NFT の属性機能に対する標準化された実装方法を提供し、既存の NFT エコシステムとシームレスに統合されます。
ERC -3525
EIP -3525 は半同質化トークン(SFT)を導入し、これは代替可能トークン(FT)と非代替可能トークン(NFT)の間に位置する資産と見なすことができます。NFT と同様に、SFT トークンはあるウォレットアドレスから別のアドレスに完全に移転できます。しかし、FT と同様に、SFT は異なるトークン間で部分的な価値の移転を許可します。たとえば、土地の一部の「使用年数」を別の土地に移転することができます。疑いなく、SFT はカスタマイズ性で FT を超え、効率性で NFT を超えています。
ERC3525 は多層の SFT 構造を構築することを許可し、ロシアのマトリョーシカのように、より複雑な仮想世界を実現し、異なるレベル間の相互作用のルールを定義します。ERC3525 を使用することで、NFT は任意のデジタル通貨を搭載できます。これは、NFT に経済的価値を持つトークンを埋め込むことを意味し、より豊かな機能と相互作用の方法を実現します。たとえば、SFT は価値を持つ NFT を含むことができ、NFT の中に他のトークンをネストすることもできます。ERC3525 により、開発者はスマートコントラクトを通じて SFT のルールとロジックを定義し、特定の行動ルールや取引ルールをカスタマイズできます。これらの特性により、ERC3525 は NFT 分野の重要な標準の一つとなり、開発者やプロジェクトチームにより多くの創造的なスペースを提供します。
二、 ERC -6551
紹介
NFT の拡張性と実用性を高めるために、ERC -6551 提案は各 NFT にイーサリアムユーザーと同じ権利を付与することを目指しています。これは、NFT が資産を保有できるだけでなく、取引履歴を記録できることを意味し、その応用範囲を大幅に拡大します。この提案の下で、NFT の保有者は、NFT のために TBA(Token Bond Account、トークンバウンドアカウント)と呼ばれる専用のコントラクトウォレットを作成し、チェーン上のさまざまな操作を行うことができます。これは、すべての NFT にユニークで固定されたスマートコントラクトアカウントアドレスを割り当て、そのアカウントの制御権が完全に NFT の保有者にあることを保証する統一されたレジストリ(Registry)を定義することによって実現されます。注意すべきは、この提案は既存の ERC -721 または 1155 標準と完全に互換性があり、変更を必要とせず、イーサリアムアカウントをサポートするほとんどのインフラストラクチャに適応できることです。
この革新は、NFT にイーサリアムアカウントと同じ機能を提供し、NFT に多くの新しい応用シーンを開きます。たとえば、現実の複雑な資産、ロールプレイングゲームのキャラクター、さまざまな部品で構成された車両、多様な投資ポートフォリオ、さらにはメンバーシップカードなども、この提案を通じて NFT 形式に変換できます。さらに、この提案はすべての既存のチェーン上の資産標準と互換性があり、将来の新しい資産標準に対する拡張の可能性を提供します。
前述のように、ERC -6551 は各 NFT にチェーン上の相互作用のための専用ウォレットを作成することを許可します。このウォレットは、私たちが Metamask などのプラットフォームで一般的に使用するウォレットとは異なり、実際にはイーサリアムネットワーク上にデプロイされたスマートコントラクトであるコントラクトウォレットです。その実装方法を深く探る前に、まずこの二つのウォレットの主な違いを理解しましょう。
コントラクトアカウント
イーサリアムアカウントは、イーサ(ETH)の残高を持ち、イーサリアムネットワーク上で取引を送信できる実体です。アカウントはユーザーによって制御されることもあれば、スマートコントラクトとしてデプロイされることもあります。
イーサリアムでは、アカウントは 4 つのフィールドを持っています:
- nonce:外部アカウントが送信した取引の数またはコントラクトアカウントが作成したコントラクトの数を示すカウンター。各アカウントは、特定のランダム数を持つ取引を一度だけ実行でき、リプレイ攻撃を防ぎます。リプレイ攻撃とは、署名された取引を何度も放送し、再実行することを指します。
- balance:残高記帳モデルで、このアドレスが保有する Wei の数。Wei はイーサの計数単位です。
- codeHash:このハッシュは、イーサリアム仮想マシン(EVM)上のアカウントコードを示します。コントラクトアカウントは、さまざまな操作を実行できるプログラムコードのスニペットを持っています。アカウントがメッセージ呼び出しを受け取ると、この EVM コードが実行されます。他のアカウントフィールドとは異なり、変更できません。すべてのコードスニペットは、状態データベースの対応するハッシュの下に保存され、後で取得されます。このハッシュ値は codeHash と呼ばれます。外部アカウントの場合、codeHash フィールドは空の文字列のハッシュです。
- storageRoot:ストレージハッシュ。Merkle Patricia trie のルートノードの 2^56 ビットハッシュは、アカウントのストレージ内容(2^56 ビット整数値マッピング)をエンコードし、Trie として、2^56 の Keccak 2^56 ビットハッシュのマッピング整数キーを使用して RLP エンコードされた 2^56 ビット整数値をエンコードします。この Trie は、このアカウントのストレージ内容のハッシュをエンコードし、デフォルトでは空です。
イーサリアムアカウントは、外部アカウント(ユーザーが秘密鍵を管理)とコントラクトアカウントの 2 種類に分かれます。
- 外部アカウント(Externally Owned Accounts, EOA):秘密鍵によって制御され、その codeHash は空です。このアカウントは暗号通貨を送受信し、スマートコントラクトと相互作用できます。私たちが一般的に使用する Metamask ウォレットはこのカテゴリに属します。
- コントラクトアカウント(Contract Account, CA):秘密鍵がなく、その codeHash は非空です。これはイーサリアムネットワーク上にデプロイされたスマートコントラクトであり、外部アカウントがそのコントラクトと相互作用することでコントラクトウォレットを制御します。
CA には標準コントラクトウォレットがあり、たとえば ERC4337 アカウント抽象ウォレットや、ZkSync や StarkNet などのネイティブ AA タイプのウォレットがあります。これらのチェーンには従来の取引がなく、すべてのアカウントはコントラクトアカウントです。現在、ウォレットには所有権と署名権の問題があり、たとえば秘密鍵の保護が難しく、ユーザーが秘密鍵を失うとすべての資産を失うことになります。また、署名アルゴリズムの権限が高すぎる問題や、手数料が ETH でのみ支払われる単一通貨決済の問題もあります。
コンセンサスプロトコル層を変更することなく、イーサリアムがアカウント抽象化の方向に進むのを助けるために、ERC4337 はスマートコントラクトを通じてアカウント抽象化のアップグレードを実現し、取引の発起からそれがブロックチェーン全体に含まれるまでのプロセスを更新し、UserOperation を導入しました。これは、ユーザーが送信するトランザクションの構造を表します。Bundler はこれらのメモリプール内の取引をパッケージ化し、ユーザーの取引コストを削減し、マルチシグのシナリオをより完全にし、ソーシャルリカバリーなどの機能のアップグレードを実現します。
実装
ERC -6551 標準の下で、NFT の保有者は Register Contract と相互作用することで、イーサリアムネットワークまたは他の EVM をサポートするブロックチェーン上に新しいスマートコントラクト、すなわち TBA をデプロイできます。TBA の所有権は NFT の保有者に属し、NFT の移転に伴って変更されます。NFT の保有者のみがこの TBA を制御できます。TBA のコード、すなわちそのルールは、実装コントラクト(Implementation Contract)の呼び出しから来ます。
以下の図は、ERC -6551 の動作原理を示しています。ユーザーが NFT の保有者であり、User Account が Contract A の #123 と Contract B の #456 の 2 つの NFT を保有していると仮定します。User Account は無許可のレジストリである登録コントラクト(Register Contract)と相互作用し、NFT 情報と実装コントラクトのアドレスを入力して TBA を作成します。User Account が登録コントラクトを呼び出すとき、Token #123 の NFT 情報と Implementation A(0x321 …)のアドレスを入力すると、コントラクトウォレット Account A(0x123 …)が作成されます。その所有権は NFT Token #123 の保有者に属し、その機能とルールは Implementation A の規定に基づきます。User Account が再度登録コントラクトを呼び出し、入力内容を変更すると、別の TBA が生成されます。ただし、特定の NFT と実装コントラクトに対しては、一意の対応する TBA のみが存在できます。
TBA の作成と動作は完全に登録コントラクトと実装コントラクトに依存しています。これらのコントラクト内のルールが TBA の特性と機能を決定します。EIP -6551 はこれらのコントラクトにコードテンプレートを提供します。後の部分でこれらのテンプレートを詳しく探りますが、これらのテンプレートは唯一の選択肢ではなく、コードが TBA のデプロイ方法と機能実現を決定します。これにより、開発者は広範な拡張の可能性を得ます。たとえば、登録コントラクトは、どの NFT がその登録コントラクトを使用して登録する資格があるかを設定できます。また、実装コントラクトは TBA の機能とルールを定義し、TBA の毎日の取引限度額を設定したり、保有できる資産の種類を指定したりできます。
実装コントラクト(Implementation Contract)
登録コントラクトを通じて作成されたすべての TBA は、アカウントに使用する実装コントラクトを選択できます。実装コントラクトは、スマートコントラクトアカウントの機能とルールを記録します。少なくとも実装コントラクトは以下の機能を提供する必要があります:
executeCall(): 外部コントラクトと相互作用する任意のスマートコントラクト関数を実行するための関数です。たとえば、NFT にバインドされたアカウントで含まれる資産を販売するには、Uniswap コントラクト内の関数を呼び出す必要があります。
- executeCall() は、スマートコントラクトアカウントを代表してその関数呼び出しを行うことを許可し、購入や交換を行うことができます。
- token(): このトークンにバインドされたアカウントの NFT の識別子を返す読み取り専用のビュー関数です。これはチェーン ID(NFT がメインネット、Polygon、Optimism などにあるかどうか)、NFT コントラクトアドレス、NFT トークン ID を返します。
- owner(): このトークンにバインドされたアカウントの NFT の所有者のアドレスを返します。上記の例に従えば、これは User Account のアドレスになります。
- nonce(): このスマートコントラクトウォレットの現在の nonce を返します。各成功した取引は nonce を 1 増加させ、初期値は 0 です。
最後に、関数呼び出しではありませんが、トークンバウンドアカウントの実装コントラクトには、原生資産(ETH など)をそのアドレスに直接受け取るための receive() 関数が必要です。
登録コントラクト(Register Contract)
以下は、Solidity 言語を使用して記述された Registry スマートコントラクトです:
このコードは、特定の NFT のアカウントを作成するために必要なパラメータには、implementation() 実行コントラクトのアドレス、chainId() 目標チェーンの ID、tokenContract() 対応する NFT 所属コントラクト、tokenId() 対応する NFT 所属 ID、混淆値 salt が含まれることを示しています。Fast Dapp のデモに基づいて、NFT アカウントを作成するには、NFT コントラクトアドレスと ID を入力するだけで、残りのフィールドは自動生成され、手順は非常に簡単です。
ERC -6551 提案は新しいトークン標準であり、既存の NFT 標準に対する破壊的なアップグレードに属します。ERC -6551 は、既存の ERC -721 NFT と互換性のある無許可のレジストリを使用しています。このレジストリは、TBA の工場およびディレクトリとして機能するスマートコントラクトです。誰でも、レジストリ上の関数を呼び出し、少額の手数料を支払うことで、任意の ERC -721 トークンの TBA を作成できます。レジストリのスマートコントラクトには 2 つの関数があります:
- createAccount(): 指定された ERC -721 NFT と特定の実装のために新しいトークンバウンドアカウントをデプロイします。
- account(): 指定された ERC -721 NFT のトークンバウンドアカウントのアドレスを返す読み取り専用のビュー関数で、その実装を示します。
潜在的な応用
Azuki イベント以降、単一の静的画像の NFT の魅力は大幅に低下し、多くのトッププロジェクトの価値が下落しました。しかし、高度なインタラクティブ性とコンバイナビリティを持つ NFT が市場の回復の鍵となる可能性があります。ブロックチェーンゲーム、音楽、DID、メタバースなど、これらの分野には無限の可能性が広がっています。
NFT は単なる資産ではありません。彼らは自身のチェーン上のアイデンティティとコンテナ属性を持ち、分散型アプリケーション(Dapps)と相互作用することができます。これは、NFT とのすべての相互作用が NFT 自身に直接記録され、保有者のアカウントではないことを意味します。さらに、NFT はスマートコントラクトに基づいているため、その行動と相互作用はコントラクトのルールによって定義および制御でき、柔軟性と安全性を提供します。
ERC -6551 プロトコルは NFT 分野に革命的な変化をもたらし、焦点をユーザーウォレットから NFT 自身に移し、取引、ゲーム、追跡、ガバナンスなどに新しい可能性を提供します。NFT のさらなる発展に伴い、このプロトコルは私たちをより個別化され、インタラクティブで意味のあるデジタル時代へと導くでしょう。
以下の 4 つの潜在的な応用方向を考慮してください:
- 資産パッケージ化:NFT は資産コンテナとして機能し、単一の NFT 内で複数の資産をパッケージ化して取引することを許可します。たとえば、音楽アルバム NFT は複数の曲 NFT を含むことができ、アートコレクション NFT は複数のアート作品 NFT を含むことができます。これにより、コレクションがより体系的になり、取引時のガス料金を削減できます。
- ポートフォリオ:NFT は資産管理ツールとして機能し、ユーザーが TBA 内にさまざまなトークンを保管および管理できるようにします。さらに、NFT 保有者は第三者の管理者に資産取引を委任し、スマートコントラクト内で管理者の権限を明確に定義して資産の安全性を確保できます。
- NFT アイデンティティ管理:NFT はそのチェーン上のすべての活動を記録し、真のチェーン上のアイデンティティとなります。ユーザーは単一の ENS ウォレットを使用して自分を代表し、異なる TBA を使用して異なるコミュニティやアプリケーションでの役割を表すことができます。
- モジュール式 NFT:主 NFT は TBA を生成し、そのコンポーネント NFT を保存します。たとえば、ゲーム内のキャラクター NFT はさまざまな装備 NFT を装備することができます。これにより、メタバースの実現がより可能になり、AI と組み合わせてよりリアルな NPC キャラクターを作成できます。
要するに、NFT の未来は無限の可能性に満ちています。資産管理からアイデンティティ検証、モジュール式ゲームデザインまで、デジタル世界で重要な役割を果たすでしょう。