プラグイン
Update Delegateプラグイン
Last updated April 28, 2026
Update Delegateプラグインは、追加のアドレスに更新権限を付与できます。サードパーティがプライマリupdate authorityでなくてもAssetメタデータを変更したりコレクションメンバーシップを管理したりする場合に便利です。
学べること
- AssetsとCollectionsにUpdate Delegateプラグインを追加
- 追加のアドレスに更新権限を付与
- 追加デリゲートができることとできないことを理解
- デリゲートリストの更新と管理
- デリゲートとしてCollectionにAssetを追加・削除
概要
Update Delegateは、update authorityが他のアドレスに更新権限を付与できるAuthority Managedプラグインです。追加デリゲートはほとんどのAssetデータを変更できますが、コアauthority設定は変更できません。
- サードパーティに更新権限を付与
- 複数の追加デリゲートを追加
- AssetsとCollectionsの両方で動作
- Collection権限を持つデリゲートはCollectionのメンバーシップを管理可能
- デリゲートはルートupdate authorityを変更不可
対象外
永続的な更新デリゲーション、オーナーレベルの権限(これはauthority managed)、Token Metadata update authority(別のシステム)。
クイックスタート
ジャンプ先: Assetに追加 · デリゲートを更新 · Collection · コレクションメンバーシップ
- デリゲートアドレスでUpdate Delegateプラグインを追加
- オプションで追加デリゲートを追加
- デリゲートがAssetメタデータを更新可能に
Update Delegateを使用するタイミング
| シナリオ | 解決策 |
|---|---|
| サードパーティがメタデータを更新する必要がある | ✅ Update Delegate |
| ゲームプログラムがステータスを変更する必要がある | ✅ Update Delegate(プログラムにデリゲート) |
| 複数のチームメンバーが更新アクセスを必要とする | ✅ 追加デリゲート |
| 永続的な取り消し不可能な更新アクセス | ❌ サポートされていない(マルチシグauthorityを使用) |
| オーナーが更新を制御すべき | ❌ デフォルトauthorityを使用 |
| Update Delegateを使用するのは、ルートauthorityを移転せずにプログラムやサードパーティに更新権限を付与する必要がある場合です。 |
一般的なユースケース
- サードパーティサービス: プラットフォームがあなたに代わってメタデータを更新できるようにする
- ゲームプログラム: ゲームプログラムにAsset属性を変更する権限を付与
- チームコラボレーション: 複数のチームメンバーがキーを共有せずに更新可能
- マーケットプレイス: マーケットプレイスがリスティング関連のメタデータを更新できるようにする
- 動的コンテンツ: Assetデータを自動更新するサービス
対応
| MPL Core Asset | ✅ |
| MPL Core Collection | ✅ |
引数
| additionalDelegates | publickey[] |
additionalDelegates
追加デリゲートにより、updateDelegateプラグインに複数のデリゲートを追加できます。 追加デリゲートは、update authorityができることをすべてできますが、以下を除きます:
- 追加デリゲート配列の追加または変更(自分を削除する以外)
- updateAuthorityプラグインのプラグインauthorityの変更
- Collectionのルートupdate authorityの変更
AssetへのUpdate Delegateプラグインの追加
MPL Core AssetへのUpdate Delegateプラグインの追加
import { publicKey } from '@metaplex-foundation/umi'
import { addPlugin } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
const delegate = publicKey('22222222222222222222222222222222')
await addPlugin(umi, {
asset: assetAddress,
plugin: {
type: 'UpdateDelegate',
authority: { type: 'Address', address: delegate },
additionalDelegates: [],
},
}).sendAndConfirm(umi)
Update Delegateプラグインの更新
Update Delegateプラグインは、追加デリゲートのリストを変更したり、プラグインauthorityを変更したりするために更新できます。
AssetのUpdate Delegateプラグインの更新
import { publicKey } from '@metaplex-foundation/umi'
import { updatePlugin } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
const newDelegate = publicKey('33333333333333333333333333333333')
const existingDelegate = publicKey('22222222222222222222222222222222')
await updatePlugin(umi, {
asset: assetAddress,
plugin: {
type: 'UpdateDelegate',
additionalDelegates: [existingDelegate, newDelegate], // デリゲートを追加または削除
},
}).sendAndConfirm(umi)
CollectionのUpdate Delegateプラグインの更新
CollectionのUpdate Delegateプラグインの更新
import { publicKey } from '@metaplex-foundation/umi'
import { updateCollectionPlugin } from '@metaplex-foundation/mpl-core'
const collectionAddress = publicKey('11111111111111111111111111111111')
const delegate1 = publicKey('22222222222222222222222222222222')
const delegate2 = publicKey('33333333333333333333333333333333')
await updateCollectionPlugin(umi, {
collection: collectionAddress,
plugin: {
type: 'UpdateDelegate',
additionalDelegates: [delegate1, delegate2], // 更新されたデリゲートリスト
},
}).sendAndConfirm(umi)
Update DelegateによるCollectionメンバーシップの管理
CollectionのUpdateDelegateプラグインは、ルートupdate authorityの署名なしでCollectionにAssetを追加・削除する権限を付与します。ゲームサーバーがAssetをギルドに割り当てたり、ローンチパッドがCollectionに直接ミントしたりするプログラムやサービスの主要なパターンです。
- 削除 — CollectionからAssetを削除するにはCollection
UpdateDelegateのみで十分です。 - 追加 — AssetをCollectionに追加するにはCollection
UpdateDelegateに加え、Assetに対する権限(update authorityとして、またはAssetのUpdateDelegateプラグイン経由)も必要です。
メンバーシップを制御するのはAssetのUpdateDelegateではなくCollectionのUpdateDelegateプラグインです。Asset上のデリゲートのみではCollectionへの追加・削除はできません。
Collection Update DelegateとしてAssetをCollectionに追加
署名者はCollectionのUpdateDelegate additionalDelegates配列に登録されており、かつAssetに対する権限(Assetのupdate authorityとして、またはAssetのUpdateDelegateプラグインのデリゲートとして)も持っている必要があります。
1import { publicKey } from '@metaplex-foundation/umi'
2import {
3 update,
4 fetchAsset,
5 updateAuthority,
6} from '@metaplex-foundation/mpl-core'
7
8const assetId = publicKey('11111111111111111111111111111111')
9const collectionId = publicKey('22222222222222222222222222222222')
10
11const asset = await fetchAsset(umi, assetId)
12
13// umi.identity must be in the Collection's UpdateDelegate additionalDelegates
14// AND hold the Asset's update authority (or be in the Asset's UpdateDelegate additionalDelegates)
15await update(umi, {
16 asset,
17 newCollection: collectionId,
18 newUpdateAuthority: updateAuthority('Collection', [collectionId]),
19}).sendAndConfirm(umi)
20
21console.log('Asset added to collection')
1use mpl_core::{instructions::UpdateV2Builder, types::UpdateAuthority};
2use solana_sdk::{pubkey::Pubkey, signer::Signer};
3
4let asset = Pubkey::from_str("AssetAddressHere...").unwrap();
5let collection = Pubkey::from_str("CollectionAddressHere...").unwrap();
6
7// Signer must be in the Collection's UpdateDelegate additionalDelegates
8// AND hold the Asset's update authority (or be in its UpdateDelegate additionalDelegates)
9let update_ix = UpdateV2Builder::new()
10 .asset(asset)
11 .new_collection(Some(collection))
12 .payer(delegate.pubkey())
13 .authority(Some(delegate.pubkey()))
14 .new_update_authority(UpdateAuthority::Collection(collection))
15 .instruction();
16
17println!("Asset added to collection");
Collection Update DelegateとしてCollectionからAssetを削除
署名者はCollectionのUpdateDelegate additionalDelegates配列に登録されているだけで十分です。Assetを削除するためにAssetレベルの権限は不要です。
1import { publicKey } from '@metaplex-foundation/umi'
2import {
3 update,
4 fetchAsset,
5 fetchCollection,
6 collectionAddress,
7 updateAuthority,
8} from '@metaplex-foundation/mpl-core'
9
10const assetId = publicKey('11111111111111111111111111111111')
11
12const asset = await fetchAsset(umi, assetId)
13
14const currentCollectionId = collectionAddress(asset)
15if (!currentCollectionId) {
16 throw new Error('Asset does not belong to a collection')
17}
18const collection = await fetchCollection(umi, currentCollectionId)
19
20// collectionDelegate only needs to be in the Collection's UpdateDelegate additionalDelegates
21const collectionDelegate = umi.identity // replace with your delegate signer if different
22await update(umi, {
23 asset,
24 collection,
25 newUpdateAuthority: updateAuthority('Address', [umi.identity.publicKey]),
26 authority: collectionDelegate,
27}).sendAndConfirm(umi)
28
29console.log('Asset removed from collection')
1use mpl_core::{instructions::UpdateV2Builder, types::UpdateAuthority};
2use solana_sdk::{pubkey::Pubkey, signer::Signer};
3
4let asset = Pubkey::from_str("AssetAddressHere...").unwrap();
5let collection = Pubkey::from_str("CollectionAddressHere...").unwrap();
6let new_authority = Pubkey::from_str("NewAuthorityHere...").unwrap();
7
8// Signer only needs to be in the Collection's UpdateDelegate additionalDelegates
9let update_ix = UpdateV2Builder::new()
10 .asset(asset)
11 .collection(Some(collection))
12 .payer(delegate.pubkey())
13 .authority(Some(delegate.pubkey()))
14 .new_update_authority(UpdateAuthority::Address(new_authority))
15 .instruction();
16
17println!("Asset removed from collection");
一般的なエラー
Authority mismatch
Update authority(または既存のプラグインauthority)のみがUpdate Delegateプラグインを追加/変更できます。
Cannot modify root authority
追加デリゲートはルートupdate authorityの変更や追加デリゲートリストの変更(自分を削除する以外)はできません。
注意事項
- Authority Managed: update authorityはオーナーの署名なしで追加可能
- 追加デリゲートはほぼ完全な更新権限を持つ
- Collection
UpdateDelegateはCollectionからAssetを削除でき、権限を持つAssetを追加できる - デリゲートはルートupdate authorityを変更不可
- デリゲートは追加デリゲートリストを変更不可(自分を削除する以外)
- AssetsとCollectionsの両方で動作
クイックリファレンス
Asset Update Delegateの権限
| アクション | 許可? |
|---|---|
| 名前/URIの更新 | ✅ |
| プラグインの追加 | ✅ |
| プラグインの更新 | ✅ |
| プラグインの削除 | ✅ |
| ルートupdate authorityの変更 | ❌ |
| 追加デリゲートの変更 | ❌(自己削除を除く) |
| プラグインauthorityの変更 | ❌ |
Collection Update Delegateの権限
| アクション | 許可? |
|---|---|
| CollectionからAssetを削除 | ✅ |
| 権限を持つAssetをCollectionに追加 | ✅ |
| Collectionメタデータの更新 | ✅ |
| Collectionプラグインの更新 | ✅ |
| CollectionのルートUpdate Authorityの変更 | ❌ |
| Collectionの追加デリゲートの変更 | ❌(自己削除を除く) |
FAQ
追加デリゲートは何ができますか?
Update authorityができることのほとんど(メタデータの更新、プラグインの追加/削除など)ができます。ルートupdate authorityの変更、追加デリゲートリストの変更、Update Delegateプラグインauthorityの変更はできません。
追加デリゲートはより多くのデリゲートを追加できますか?
いいえ。ルートupdate authority(またはプラグインauthority)のみが追加デリゲートを追加または削除できます。
追加デリゲートとして自分を削除するにはどうすればよいですか?
追加デリゲートは、additionalDelegates配列に自分のアドレスを含めずにプラグインを更新することで、リストから自分を削除できます。
追加デリゲートに制限はありますか?
ハードリミットはありませんが、デリゲートが増えるとアカウントサイズとレントが増加します。リストを適切な数に保ってください。
Update DelegateはCollectionsで機能しますか?
はい。CollectionにUpdate Delegateを追加すると、デリゲートがCollectionメタデータとCollectionレベルのプラグインを更新できます。
Collection Update DelegateはCollectionにAssetを追加/削除できますか?
はい。CollectionのUpdateDelegateプラグインに登録されたデリゲートはCollectionからAssetを削除でき、権限を持つAsset(update authorityとして、またはAssetのUpdateDelegateプラグイン経由)をCollectionに追加できます。Update DelegateによるCollectionメンバーシップの管理を参照してください。
CollectionからAssetを削除するためにCollection Update DelegateはAssetの権限が必要ですか?
いいえ。Collectionレベルのデリゲート権限のみでCollectionからAssetを削除できます。Assetレベルの権限はAssetを追加する際のみ必要です。
関連プラグイン
- Attributes - デリゲートが更新できるオンチェーンデータを保存
- ImmutableMetadata - メタデータを変更不可にする(デリゲートを上書き)
- AddBlocker - デリゲートが新しいプラグインを追加するのを防止
用語集
| 用語 | 定義 |
|---|---|
| Update Delegate | 更新権限を付与するAuthority Managedプラグイン |
| 追加デリゲート | 更新権限を持つ追加アドレス |
| Authority Managed | Update authorityによって制御されるプラグインタイプ |
| ルートUpdate Authority | Asset/Collectionのプライマリupdate authority |
