플러그인
Transfer Delegate 플러그인
Last updated January 31, 2026
Transfer Delegate 플러그인은 지정된 권한이 소유자를 대신하여 Core Asset을 전송할 수 있게 합니다. 에스크로 없는 마켓플레이스 판매, 게임 메카닉, 구독 서비스에 필수적입니다.
학습 내용
- Asset에 Transfer Delegate 플러그인 추가
- 마켓플레이스 또는 프로그램에 전송 권한 위임
- 위임자로서 전송 실행
- 전송 시 권한 동작
요약
Transfer Delegate는 위임자가 Asset을 전송할 수 있게 하는 소유자 관리 플러그인입니다. 일단 위임되면 권한이 소유자 승인 없이 Asset을 모든 주소로 전송할 수 있습니다.
- 에스크로 없는 마켓플레이스 리스팅 가능
- 전송 후 권한 취소 (일회용)
- 영구적 권한을 위해 Permanent Transfer Delegate 사용
- 추가 인수 필요 없음
범위 외
영구 전송 권한 (Permanent Transfer Delegate 참조), Collection 수준 전송, Token Metadata 전송 권한 (다른 시스템)은 범위 외입니다.
빠른 시작
바로가기: 플러그인 추가 · 권한 위임 · 위임자로서 전송
- 위임자 주소로 Transfer Delegate 플러그인 추가
- 이제 위임자가 Asset을 한 번 전송 가능
- 전송 후 권한 자동 취소
개요
Transfer Delegate 플러그인은 Transfer Delegate 플러그인의 권한이 언제든지 Asset을 전송할 수 있게 하는 소유자 관리 플러그인입니다. Transfer 플러그인은 다음과 같은 영역에서 작동합니다:
- Asset의 에스크로 없는 판매: 에스크로 계정 없이 NFT를 구매자에게 직접 전송
- 사용자가 이벤트에 따라 자산을 교환/잃는 게임 시나리오: 게임 이벤트 발생 시 자산 자동 전송
- 구독 서비스: 구독 서비스의 일부로 NFT 전송
Transfer vs Permanent Transfer Delegate 사용 시기
| 사용 사례 | Transfer Delegate | Permanent Transfer Delegate |
|---|---|---|
| 마켓플레이스 리스팅 | ✅ 최선의 선택 | ❌ 너무 위험 |
| 일회성 전송 | ✅ 최선의 선택 | ❌ 과도함 |
| 렌탈 반환 | ❌ 일회용 | ✅ 최선의 선택 |
| 게임 자산 교환 | ✅ 최선의 선택 | ✅ 작동함 |
| 전송 시 권한 유지 | ❌ 취소됨 | ✅ 유지됨 |
| Transfer Delegate 선택: 일회성 에스크로 없는 판매에 사용 (전송 후 권한 취소). | ||
| Permanent Transfer Delegate 선택: 권한이 영구적으로 유지되어야 할 때. |
경고!
Transfer delegate 권한은 일시적이며 자산 전송 시 재설정됩니다.
호환성
| MPL Core Asset | ✅ |
| MPL Core Collection | ❌ |
인수
Transfer 플러그인은 전달할 인수가 없습니다.
함수
Asset에 Transfer Delegate 플러그인 추가
addPlugin 명령은 Asset에 Transfer Delegate 플러그인을 추가합니다. 이 플러그인을 통해 위임자가 언제든지 Asset을 전송할 수 있습니다.
MPL Core Asset에 Transfer 플러그인 추가
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: 'TransferDelegate',
authority: { type: 'Address', address: delegate },
},
}).sendAndConfirm(umi)
전송 권한 위임
approvePluginAuthority 명령은 전송 권한을 다른 주소에 위임합니다. 이를 통해 다른 주소가 소유권을 유지하면서 Asset을 전송할 수 있습니다.
전송 권한 위임
import { publicKey } from '@metaplex-foundation/umi'
import { approvePluginAuthority } from '@metaplex-foundation/mpl-core'
const asset = publicKey("11111111111111111111111111111111");
const collection = publicKey("22222222222222222222222222222222");
const delegateAddress = publicKey("33333333333333333333333333333333");
await approvePluginAuthority(umi, {
asset: asset,
collection: collection,
plugin: { type: "TransferDelegate" },
newAuthority: { type: "Address", address: delegateAddress },
}).sendAndConfirm(umi);
위임자로서 Asset 전송
transfer 명령어는 Transfer delegate 권한을 사용하여 Asset을 다른 주소로 전송합니다.
MPL Core Asset 전송
import {
fetchAsset,
fetchCollection,
transfer,
} from "@metaplex-foundation/mpl-core";
import { publicKey } from "@metaplex-foundation/umi";
// 전송할 Asset ID
const assetId = publicKey("11111111111111111111111111111111");
// Asset 가져오기
const assetItem = await fetchAsset(umi, assetId);
// Asset이 Collection의 일부인 경우 Collection 가져오기
const collectionItem =
assetItem.updateAuthority.type == "Collection" &&
assetItem.updateAuthority.address
? await fetchCollection(umi, assetItem.updateAuthority.address)
: undefined;
// Core NFT Asset 전송
const { signature } = await transfer(umi, {
asset: assetItem,
newOwner: publicKey("22222222222222222222222222222222"),
collection: collectionItem,
})
.sendAndConfirm(umi);
Transfer Delegate 권한 업데이트
Transfer Delegate 플러그인은 업데이트할 플러그인 데이터가 없으므로 (빈 객체 {}), 주요 "업데이트" 작업은 플러그인 권한을 변경하는 것입니다. 이를 통해 다른 주소에 전송 권한을 위임할 수 있습니다.
Transfer Delegate 권한 변경
approvePluginAuthority 함수를 사용하여 전송 권한이 있는 사람을 변경할 수 있습니다:
Transfer Delegate 권한 업데이트
import { publicKey } from '@metaplex-foundation/umi'
import { approvePluginAuthority } from '@metaplex-foundation/mpl-core'
(async () => {
const assetAddress = publicKey('11111111111111111111111111111111')
const newDelegate = publicKey('44444444444444444444444444444444')
// Transfer delegate를 새 주소로 변경
await approvePluginAuthority(umi, {
asset: assetAddress,
plugin: { type: 'TransferDelegate' },
newAuthority: { type: 'Address', address: newDelegate },
}).sendAndConfirm(umi)
})();
Transfer Delegate 권한 취소
revokePluginAuthority 함수를 사용하여 전송 권한을 취소하고 전송 제어를 자산 소유자에게 반환할 수 있습니다.
Transfer Delegate 권한 취소
import { publicKey } from '@metaplex-foundation/umi'
import { revokePluginAuthority } from '@metaplex-foundation/mpl-core'
const assetAddress = publicKey('11111111111111111111111111111111')
await revokePluginAuthority(umi, {
asset: assetAddress,
plugin: { type: 'TransferDelegate' },
}).sendAndConfirm(umi)
일반적인 오류
Authority mismatch
Transfer delegate 권한만 Asset을 전송할 수 있습니다. 올바른 키페어로 서명하고 있는지 확인하세요.
Asset is frozen
동결된 Asset은 전송할 수 없습니다. 동결 권한이 먼저 Asset을 해동해야 합니다.
Transfer delegate not found
Asset에 Transfer Delegate 플러그인이 없거나 이전 전송 후 권한이 이미 취소되었습니다.
참고 사항
- 소유자 관리: 추가하려면 소유자 서명 필요
- 전송 후 권한 자동 취소
- 각 전송마다 새 소유자에 의한 재위임 필요
- 동결된 Asset은 위임자가 전송 불가
- 영구적 권한을 위해 Permanent Transfer Delegate 사용
빠른 참조
권한 라이프사이클
| 이벤트 | 권한 상태 |
|---|---|
| 플러그인 추가 | 활성 |
| Asset 전송됨 | 취소됨 |
| 새 소유자가 플러그인 추가 | 활성 (새 위임자) |
누가 전송할 수 있나요?
| 권한 | 전송 가능? |
|---|---|
| Asset 소유자 | 예 (항상) |
| Transfer Delegate | 예 (한 번) |
| Permanent Transfer Delegate | 예 (항상) |
| 업데이트 권한 | 아니요 |
FAQ
왜 전송 권한이 취소되었나요?
Transfer Delegate 권한은 모든 전송 후 자동으로 취소됩니다. 이는 마켓플레이스 안전을 위해 의도된 설계입니다 - 위임자는 한 번만 전송할 수 있습니다.
에스크로 없는 리스팅을 어떻게 구현하나요?
- 판매자가 마켓플레이스를 권한으로 하여 Transfer Delegate 추가
- 구매자가 지불하면 마켓플레이스가 Asset을 구매자에게 전송
- 권한이 취소됨; 판매자는 이중 리스팅 불가
Transfer Delegate와 Permanent Transfer Delegate의 차이점은 무엇인가요?
Transfer Delegate는 한 번 전송 후 취소됩니다. Permanent Transfer Delegate는 영구적으로 유지되며 Asset 생성 시에만 추가할 수 있습니다.
위임자로서 동결된 Asset을 전송할 수 있나요?
아니요. 동결된 Asset은 위임자 전송을 포함한 모든 전송을 차단합니다. 복잡한 에스크로 시나리오에는 Permanent Transfer Delegate와 Permanent Freeze Delegate를 함께 사용하세요.
소유자가 각 전송을 승인해야 하나요?
아니요. Transfer Delegate가 설정되면 위임자는 소유자 승인 없이 전송할 수 있습니다. 하지만 권한이 취소되기 전에 한 번만 가능합니다.
관련 플러그인
- Permanent Transfer Delegate - 취소 불가능한 전송 권한
- Freeze Delegate - 일시적으로 전송 차단
- Burn Delegate - 위임자가 Asset 소각 허용
용어집
| 용어 | 정의 |
|---|---|
| Transfer Delegate | 일회성 전송 권한을 허용하는 소유자 관리 플러그인 |
| 소유자 관리 | 추가하려면 소유자 서명이 필요한 플러그인 유형 |
| 에스크로 없음 | 보관 계정으로 전송하지 않고 판매 |
| Permanent Transfer Delegate | 생성 시 추가되는 취소 불가능한 버전 |
