機能
委任された権限
アセットに単一の権限を持つことは常に理想的ではありません。時々、これらの責任の一部を他のウォレットやプログラムに委任して、私たちの代わりに行動できるようにしたい場合があります。これがToken Metadataが異なるスコープを持つ一連の委任を提供する理由です。
MetadataとTokenの委任
Token Metadataによって提供される委任は、Metadata委任とToken委任の2つのカテゴリに分けることができます。以下でそれぞれについて詳しく説明しますが、まずそれらの違いを簡単に見てみましょう。
- Metadata委任は、アセットのMintアカウントに関連付けられ、委任された権限がMetadataアカウントで更新を実行できるようにします。これらはアセットの更新権限によって承認され、必要な数だけ存在できます。
- Token委任は、アセットのTokenアカウントに関連付けられ、委任された権限がトークンを転送、バーン、および/またはロックできるようにします。これらはアセットの所有者によって承認され、一度に1つのトークンアカウントにつき1つだけ存在できます。
Metadata委任
Metadata委任は、Metadataレベルで動作する委任です。これらの委任はMetadata Delegate Record PDA(シードは ["metadata", program id, mint id, delegate role, update authority id, delegate id])を使用して保存されます。
そのアカウントは、Delegate権限およびそれを承認したUpdate Authorityを追跡します。
Metadata委任の主要な特性は以下の通りです:
- 特定のアセットに対して必要な数だけMetadata委任を作成できます。
- Metadata委任はMintアカウントから派生されるため、アセットの所有者に関係なく存在します。そのため、アセットの転送はMetadata委任に影響しません。
- Metadata委任は、アセットの現在のUpdate Authorityからも派生されます。これは、アセットのUpdate Authorityが更新されるたびに、すべてのMetadata委任が無効になり、新しいUpdate Authorityによって使用できなくなることを意味します。ただし、Update Authorityが転送し直された場合、それに関連するすべてのMetadata委任は自動的に再アクティブ化されます。
- Metadata委任は、それを承認したUpdate Authorityによって取り消すことができます。
- Metadata委任は自分自身を取り消すこともできます。
7つの異なるタイプのMetadata委任が存在し、それぞれ異なる行動スコープを持っています。以下は、異なるタイプのMetadata委任を要約した表です:
| 委任 | セルフ更新 | コレクション内アイテム更新 | 更新スコープ |
|---|---|---|---|
| Authority Item | ✅ | ❌ | newUpdateAuthority ,primarySaleHappened ,isMutable ,tokenStandard |
| Collection | ✅ | ✅ | collection + アイテムでのコレクション検証/未検証 |
| Collection Item | ✅ | ❌ | collection |
| Data | ✅ | ✅ | data |
| Data Item | ✅ | ❌ | data |
| Programmable Configs | ✅ | ✅ | programmableConfigs |
| Programmable Configs Item | ✅ | ❌ | programmableConfigs |
名前がItemで終わるMetadata委任は、自分自身にのみ作用できるのに対し、他の委任は委任アセットのコレクションアイテムにも作用できることに注意してください。例えば、NFT BとCを含むCollection NFT Aがあるとします。AでData委任を承認すると、NFT A、B、Cのdataオブジェクトを更新できます。しかし、AでData Item委任を承認すると、NFT Aのdataオブジェクトのみを更新できます。
さらに、Collection委任は、コレクションのアイテムで委任されたNFTを検証/未検証できるため、少し特別です。上記の例では、AでCollection委任を承認すると、NFT BとCでそのコレクションを検証/未検証できます。
これらの各Metadata委任について詳しく見ていき、承認、取り消し、使用のコードサンプルを提供します。
Authority Item委任
- 委任された権限はアセットのサブセットを更新できます。Metadataアカウントの以下の属性を更新できます:
newUpdateAuthority:Update Authorityを別のアカウントに転送します。primarySaleHappened:アセットの一次販売が発生したときにtrueに切り替えます。isMutable:アセットを不変にするためにfalseに切り替えます。tokenStandard:アセットが設定が必須になる前に作成された場合、トークン標準を設定できます。
Collection委任
- 委任された権限はアセットのサブセットを更新できます。Metadataアカウントの
collection属性を設定できます。 - Collection NFTに適用された場合、委任された権限はそのコレクション内のアイテムに対して以下の操作を実行できます:
- アイテムでそのCollection NFTを検証および未検証できます。これはCollection NFTが既にアイテムに設定されている場合にのみ実行できます。そうでない場合、アイテムが委任されたCollection NFTの一部であるかどうかを知る方法がありません。
- アイテムからCollection NFTをクリアできます。
Collection Item委任
- 委任された権限はアセットのサブセットを更新できます。Metadataアカウントの
collection属性を設定できます。 - アセットがCollection NFTであっても、Collection委任とは異なり、Collection Item委任はそのコレクションのアイテムに影響を与えることができません。
Data委任
- 委任された権限はアセットのサブセットを更新できます。Metadataアカウントの
dataオブジェクト全体を更新できますが、それ以外は更新できません。これは、アセットのcreatorsを更新できることを意味します。 dataオブジェクト内のcreators配列を更新する場合、検証されていないクリエイターのみを追加および/または削除できることに注意してください。- Collection NFTに適用された場合、委任された権限はそのコレクション内のアイテムに対して同じ更新を実行できます。
Data Item委任
- 委任された権限はアセットのサブセットを更新できます。Metadataアカウントの
dataオブジェクト全体を更新できますが、それ以外は更新できません。これは、アセットのcreatorsを更新できることを意味します。 dataオブジェクト内のcreators配列を更新する場合、検証されていないクリエイターのみを追加および/または削除できることに注意してください。- アセットがCollection NFTであっても、Data委任とは異なり、Data Item委任はそのコレクションのアイテムに影響を与えることができません。
Programmable Config委任
- Programmable Config委任はプログラマブル非代替性トークンにのみ関連します。
- 委任された権限はMetadataアカウントの
programmableConfigs属性を更新できますが、それ以外は更新できません。これは、PNFTのruleSetを更新できることを意味します。 - Collection NFTに適用された場合、委任された権限はそのコレクション内のアイテムに対して同じ更新を実行できます。
Programmable Config Item委任
- Programmable Config委任はプログラマブル非代替性トークンにのみ関連します。
- 委任された権限はMetadataアカウントの
programmableConfigs属性を更新できますが、それ以外は更新できません。これは、PNFTのruleSetを更新できることを意味します。 - アセットがCollection NFTであっても、Programmable Config委任とは異なり、Programmable Config Item委任はそのコレクションのアイテムに影響を与えることができません。
Token委任
Token委任は、Tokenレベルで動作する委任です。これはSPL TokenプログラムのTokenアカウントに直接保存されるspl-token委任を意味します。そのため、Token委任は所有者に代わってトークンを転送およびバーンできるだけでなく、所有者が転送、バーン、または委任を取り消すことを防ぐためにトークンをロックおよびロック解除できます。これらの委任は、エスクローレスマーケットプレイス、ステーキング、アセットローンなどのアプリケーションに不可欠です。
SPL Tokenプログラムが提供する委任タイプは1つだけですが、プログラマブルNFT(PNFT)により、Token Metadataプログラムはケースバイケースで選択できるより細かい委任を提供できるようになりました。これはPNFTがSPL Tokenプログラム上で常に凍結されているため、その上に委任システムを構築できるためです。
その委任システムをToken Record PDAと呼ばれるPNFT固有のアカウントに保存します(シードは["metadata", program id, mint id, "token_record", token account id])。SPL Tokenプログラムでも委任された権限を同期しますが、トークンは常に凍結されています。アセットが本当にロックされているかどうかを追跡するのはToken Recordアカウントの責任です。
Token委任の主要な特性は以下の通りです:
- トークンアカウントごとに1つのToken委任のみ存在できます。同じトークンアカウントに新しいToken委任を設定すると、既存のものが上書きされます。
- Token委任は、アセットがロックされていない限り、アセットの所有者によって取り消すことができます。
- Token委任は、Tokenプログラムでも設定されているため、委任が自分自身を取り消すことを許可しないため、自分自身を取り消すことができません。
- Token委任は転送時にリセットされます。代替性アセットを扱う場合、委任されたすべてのトークンが転送されると、委任された権限がリセットされます。
- Standard委任は、プログラマブル非代替性トークンを除くすべてのアセットで使用できます。他のすべてのToken委任は、プログラマブル非代替性トークンでのみ使用できます。
- プログラマブル非代替性トークンで使用できるすべてのToken委任は、現在の委任された権限、その役割、およびその状態(ロックまたはロック解除)をPNFTのToken Recordアカウントに保存します。
6つの異なるタイプのToken委任が存在し、それぞれ異なる行動スコープを持っています。以下は、異なるタイプのToken委任を要約した表です:
| 委任 | ロック/ロック解除 | 転送 | バーン | 対象 | 注記 |
|---|---|---|---|---|---|
| Standard | ✅ | ✅ | ✅ | PNFT以外すべて | |
| Sale | ❌ | ✅ | ❌ | PNFTのみ | 委任を取り消すまで所有者は転送/バーンできない |
| Transfer | ❌ | ✅ | ❌ | PNFTのみ | 委任が設定されていても所有者は転送/バーンできる |
| Locked Transfer | ✅ | ✅ | ❌ | PNFTのみ | |
| Utility | ✅ | ❌ | ✅ | PNFTのみ | |
| Staking | ✅ | ❌ | ❌ | PNFTのみ |
Standard委任は、spl-token委任に単純に委任する必要があるため、他のPNFT固有の委任よりもはるかに多くの権限を持っていることに注意してください。ただし、他の委任はより細かく、より具体的なユースケースで使用できます。例えば、Sale委任は、委任が設定されている限り所有者がバーンまたは転送することを禁止するため、マーケットプレイスでアセットを出品するのに最適です。
これらの各Token委任について詳しく見ていき、承認、取り消し、使用のコードサンプルを提供します。
Standard委任
上記で述べたように、Standard委任はspl-token委任のラッパーです。Tokenプログラムに直接命令を送信することもできますが、この委任はトークン標準に関係なくToken Metadataで同じAPIを提供することを目的としています。さらに、Standard委任はネイティブのspl-token委任では不可能なアセットのロック/ロック解除ができます。
Standard委任の主要な特性は以下の通りです:
- この委任はプログラマブル非代替性トークンでは機能しません。
- 委任された権限はアセットを任意のアドレスに転送できます。そうすると委任された権限は取り消されます。
- 委任された権限はアセットをバーンできます。
- 委任された権限はアセットをロックできます(Tokenプログラムでアセットを「凍結」することとも呼ばれます)。委任された権限がアセットをロック解除(または「解凍」)するまで、所有者はそれを転送、バーン、または委任された権限を取り消すことができません。これはStandard委任に固有のものであり、ネイティブのspl-token委任では実行できません。
- 代替性アセットで使用する場合、委任された権限に委任するトークンの数を指定するために1より大きい金額を提供できます。
Sale委任(PNFTのみ)
- この委任はプログラマブル非代替性トークンでのみ機能します。
- 委任された権限はPNFTを任意のアドレスに転送できます。そうすると委任された権限は取り消されます。
- PNFTにSale委任が設定されている限り、PNFTは
Listedという特別なトークン状態に入ります。Listedトークン状態はLockedトークン状態のより軽いバリエーションです。その間、所有者はPNFTを転送またはバーンできません。ただし、所有者はいつでもSale委任を取り消すことができ、これによりListedトークン状態が削除され、PNFTは再び転送およびバーン可能になります。
Transfer委任(PNFTのみ)
- この委任はプログラマブル非代替性トークンでのみ機能します。
- 委任された権限はPNFTを任意のアドレスに転送できます。そうすると委任された権限は取り消されます。
- Sale委任とは異なり、Transfer委任が設定されている場合でも、所有者はPNFTを転送およびバーンできます。
Locked Transfer委任(PNFTのみ)
- この委任はプログラマブル非代替性トークンでのみ機能します。
- 委任された権限はPNFTをロックできます。委任された権限がPNFTをロック解除するまで、所有者はそれを転送、バーン、または委任された権限を取り消すことができません。
- 委任された権限はPNFTを任意のアドレスに転送できます。そうすると委任された権限は取り消され、ロックされていた場合はPNFTがロック解除されます。
Utility委任(PNFTのみ)
- この委任はプログラマブル非代替性トークンでのみ機能します。
- 委任された権限はPNFTをロックできます。委任された権限がPNFTをロック解除するまで、所有者はそれを転送、バーン、または委任された権限を取り消すことができません。
- 委任された権限はPNFTをバーンできます。
Staking委任(PNFTのみ)
- この委任はプログラマブル非代替性トークンでのみ機能します。
- 委任された権限はPNFTをロックできます。委任された権限がPNFTをロック解除するまで、所有者はそれを転送、バーン、または委任された権限を取り消すことができません。
レガシー委任
最後に、この委任システムの前に、コレクション委任は特定のCollection Authority Record PDAに保存されていたことに注意する価値があります。そのPDAはMetadata Delegate Recordに似ていますが、Collectionという1つの役割のみをサポートします。このレガシーコレクション委任は現在非推奨であり、代わりに新しい委任システムを使用することをお勧めします。
とはいえ、Token Metadataプログラムは、新しいCollection委任が期待される場所でこれらのレガシーコレクション委任を引き続き受け入れます。これは、これらのレガシー委任にまだ委任しているアセットとの下位互換性を確保するために行われます。
Token Metadataプログラムで直接詳細を学ぶことができます。
