플러그인
Update Delegate 플러그인
Last updated April 28, 2026
Update Delegate 플러그인을 사용하면 추가 주소에 업데이트 권한을 부여할 수 있습니다. 제3자가 기본 업데이트 권한이 아니면서 Asset 메타데이터를 수정하거나 컬렉션 멤버십을 관리해야 할 때 유용합니다.
학습 내용
- Asset 및 Collection에 Update Delegate 플러그인 추가
- 추가 주소에 업데이트 권한 부여
- 추가 위임자가 할 수 있는 것과 없는 것 이해
- 위임자 목록 업데이트 및 관리
- 위임자로서 Collection에 Asset 추가 및 제거
요약
Update Delegate는 업데이트 권한이 다른 주소에 업데이트 권한을 부여할 수 있게 하는 권한 관리 플러그인입니다. 추가 위임자는 대부분의 Asset 데이터를 수정할 수 있지만 핵심 권한 설정은 변경할 수 없습니다.
- 제3자에게 업데이트 권한 부여
- 여러 추가 위임자 추가
- Asset 및 Collection 모두에서 작동
- Collection 권한을 가진 위임자는 컬렉션 멤버십을 관리할 수 있음
- 위임자는 루트 업데이트 권한을 수정할 수 없음
범위 외
영구 업데이트 위임, 소유자 수준 권한 (이것은 권한 관리임), Token Metadata 업데이트 권한 (다른 시스템)은 범위 외입니다.
빠른 시작
바로가기: Asset에 추가 · 위임자 업데이트 · Collection · 컬렉션 멤버십
- 위임자 주소로 Update Delegate 플러그인 추가
- 선택적으로 추가 위임자 추가
- 이제 위임자가 Asset 메타데이터를 업데이트할 수 있음
Update Delegate 사용 시기
| 시나리오 | 솔루션 |
|---|---|
| 제3자가 메타데이터를 업데이트해야 함 | ✅ Update Delegate |
| 게임 프로그램이 스탯을 수정해야 함 | ✅ Update Delegate (프로그램에 위임) |
| 여러 팀원이 업데이트 액세스 필요 | ✅ 추가 위임자 |
| 영구적으로 취소 불가능한 업데이트 액세스 | ❌ 지원되지 않음 (멀티시그 권한 사용) |
| 소유자가 업데이트를 제어해야 함 | ❌ 기본 권한 사용 |
| Update Delegate 사용: 루트 권한을 이전하지 않고 프로그램이나 제3자에게 업데이트 권한을 부여해야 할 때. |
일반적인 사용 사례
- 제3자 서비스: 플랫폼이 귀하를 대신하여 메타데이터를 업데이트하도록 허용
- 게임 프로그램: 게임 프로그램에 Asset 속성 수정 권한 부여
- 팀 협업: 여러 팀원이 키 공유 없이 업데이트 가능
- 마켓플레이스: 마켓플레이스가 리스팅 관련 메타데이터를 업데이트하도록 허용
- 동적 콘텐츠: Asset 데이터를 자동으로 업데이트하는 서비스
호환성
| MPL Core Asset | ✅ |
| MPL Core Collection | ✅ |
인수
| additionalDelegates | publickey[] |
additionalDelegates
추가 위임자를 사용하면 updateDelegate 플러그인에 하나 이상의 위임자를 추가할 수 있습니다. 추가 위임자는 업데이트 권한이 할 수 있는 모든 것을 할 수 있지만 다음은 예외입니다:
- 추가 위임자 배열 추가 또는 변경 (자신을 제거하는 것은 제외).
- updateAuthority 플러그인의 플러그인 권한 변경.
- Collection의 루트 업데이트 권한 변경.
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 플러그인은 추가 위임자 목록을 수정하거나 플러그인 권한을 변경하도록 업데이트할 수 있습니다.
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 플러그인은 루트 업데이트 권한의 서명 없이 Collection에 Asset을 추가하고 제거할 수 있는 권한을 부여합니다. 게임 서버가 Asset을 길드에 할당하거나 런치패드가 Collection에 직접 민팅하는 프로그램과 서비스의 주요 패턴입니다.
- 제거 — Collection에서 Asset을 제거하려면 Collection
UpdateDelegate만 있으면 됩니다. - 추가 — Asset을 Collection에 추가하려면 Collection
UpdateDelegate외에도 Asset에 대한 권한(업데이트 권한으로서, 또는 Asset의UpdateDelegate플러그인 경유)이 필요합니다.
멤버십을 제어하는 것은 Asset의 UpdateDelegate가 아닌 Collection의 UpdateDelegate 플러그인입니다. Asset의 위임자만으로는 Collection에 추가하거나 제거할 수 없으며 Collection 측 권한이 필요합니다.
Collection Update Delegate로서 Collection에 Asset 추가
서명자는 Collection의 UpdateDelegate additionalDelegates 배열에 등록되어 있어야 하며, Asset에 대한 권한(Asset의 업데이트 권한 또는 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 Delegate 플러그인을 추가/수정할 수 있습니다.
Cannot modify root authority
추가 위임자는 루트 업데이트 권한을 변경하거나 추가 위임자 목록을 수정할 수 없습니다 (자신을 제거하는 것은 예외).
참고 사항
- 권한 관리: 업데이트 권한이 소유자 서명 없이 추가 가능
- 추가 위임자는 거의 모든 업데이트 권한을 가짐
- Collection
UpdateDelegate는 Collection에서 Asset을 제거하고 권한을 가진 Asset을 추가할 수 있음 - 위임자는 루트 업데이트 권한을 변경할 수 없음
- 위임자는 추가 위임자 목록을 수정할 수 없음 (자신을 제거하는 것은 예외)
- Asset 및 Collection 모두에서 작동
빠른 참조
Asset Update Delegate 권한
| 작업 | 허용됨? |
|---|---|
| 이름/URI 업데이트 | ✅ |
| 플러그인 추가 | ✅ |
| 플러그인 업데이트 | ✅ |
| 플러그인 제거 | ✅ |
| 루트 업데이트 권한 변경 | ❌ |
| 추가 위임자 수정 | ❌ (자기 제거 제외) |
| 플러그인 권한 변경 | ❌ |
Collection Update Delegate 권한
| 작업 | 허용됨? |
|---|---|
| Collection에서 Asset 제거 | ✅ |
| 권한을 가진 Asset을 Collection에 추가 | ✅ |
| Collection 메타데이터 업데이트 | ✅ |
| Collection 플러그인 업데이트 | ✅ |
| Collection 루트 업데이트 권한 변경 | ❌ |
| Collection 추가 위임자 수정 | ❌ (자기 제거 제외) |
FAQ
추가 위임자는 무엇을 할 수 있나요?
업데이트 권한이 할 수 있는 거의 모든 것: 메타데이터 업데이트, 플러그인 추가/제거 등. 루트 업데이트 권한 변경, 추가 위임자 목록 수정, Update Delegate 플러그인 권한 변경은 할 수 없습니다.
추가 위임자가 더 많은 위임자를 추가할 수 있나요?
아니요. 루트 업데이트 권한(또는 플러그인 권한)만 추가 위임자를 추가하거나 제거할 수 있습니다.
추가 위임자에서 자신을 제거하려면 어떻게 하나요?
추가 위임자는 additionalDelegates 배열에 자신의 주소 없이 플러그인을 업데이트하여 목록에서 자신을 제거할 수 있습니다.
추가 위임자에 제한이 있나요?
하드 제한은 없지만 위임자가 많을수록 계정 크기와 렌트가 증가합니다. 목록을 적절하게 유지하세요.
Update Delegate가 Collection에서 작동하나요?
네. Collection에 Update Delegate를 추가하면 위임자가 Collection 메타데이터와 Collection 수준 플러그인을 업데이트할 수 있습니다.
Collection Update Delegate가 Collection에 Asset을 추가/제거할 수 있나요?
네. Collection의 UpdateDelegate 플러그인에 등록된 위임자는 Collection에서 Asset을 제거할 수 있으며, 권한을 가진 Asset을 Collection에 추가할 수 있습니다. Update Delegate를 사용한 Collection 멤버십 관리를 참조하세요.
Collection에서 Asset을 제거하기 위해 Collection Update Delegate가 Asset 권한이 필요한가요?
아니요. Collection 수준의 위임자 권한만으로 Collection에서 Asset을 제거할 수 있습니다. Asset 수준 권한은 Asset을 추가할 때만 필요합니다.
관련 플러그인
- Attributes - 위임자가 업데이트할 수 있는 온체인 데이터 저장
- ImmutableMetadata - 메타데이터를 변경 불가능하게 만듦 (위임자 재정의)
- AddBlocker - 위임자가 새 플러그인을 추가하지 못하도록 방지
용어집
| 용어 | 정의 |
|---|---|
| Update Delegate | 업데이트 권한을 부여하기 위한 권한 관리 플러그인 |
| 추가 위임자 | 업데이트 권한이 있는 추가 주소 |
| 권한 관리 | 업데이트 권한에 의해 제어되는 플러그인 유형 |
| 루트 업데이트 권한 | Asset/Collection의 기본 업데이트 권한 |
