플러그인

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 전송 권한 (다른 시스템)은 범위 외입니다.

빠른 시작

바로가기: 플러그인 추가 · 권한 위임 · 위임자로서 전송

  1. 위임자 주소로 Transfer Delegate 플러그인 추가
  2. 이제 위임자가 Asset을 한 번 전송 가능
  3. 전송 후 권한 자동 취소

개요

Transfer Delegate 플러그인은 Transfer Delegate 플러그인의 권한이 언제든지 Asset을 전송할 수 있게 하는 소유자 관리 플러그인입니다. Transfer 플러그인은 다음과 같은 영역에서 작동합니다:

  • Asset의 에스크로 없는 판매: 에스크로 계정 없이 NFT를 구매자에게 직접 전송
  • 사용자가 이벤트에 따라 자산을 교환/잃는 게임 시나리오: 게임 이벤트 발생 시 자산 자동 전송
  • 구독 서비스: 구독 서비스의 일부로 NFT 전송

Transfer vs Permanent Transfer Delegate 사용 시기

사용 사례Transfer DelegatePermanent 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 권한은 모든 전송 후 자동으로 취소됩니다. 이는 마켓플레이스 안전을 위해 의도된 설계입니다 - 위임자는 한 번만 전송할 수 있습니다.

에스크로 없는 리스팅을 어떻게 구현하나요?

  1. 판매자가 마켓플레이스를 권한으로 하여 Transfer Delegate 추가
  2. 구매자가 지불하면 마켓플레이스가 Asset을 구매자에게 전송
  3. 권한이 취소됨; 판매자는 이중 리스팅 불가

Transfer Delegate와 Permanent Transfer Delegate의 차이점은 무엇인가요?

Transfer Delegate는 한 번 전송 후 취소됩니다. Permanent Transfer Delegate는 영구적으로 유지되며 Asset 생성 시에만 추가할 수 있습니다.

위임자로서 동결된 Asset을 전송할 수 있나요?

아니요. 동결된 Asset은 위임자 전송을 포함한 모든 전송을 차단합니다. 복잡한 에스크로 시나리오에는 Permanent Transfer Delegate와 Permanent Freeze Delegate를 함께 사용하세요.

소유자가 각 전송을 승인해야 하나요?

아니요. Transfer Delegate가 설정되면 위임자는 소유자 승인 없이 전송할 수 있습니다. 하지만 권한이 취소되기 전에 한 번만 가능합니다.

관련 플러그인

용어집

용어정의
Transfer Delegate일회성 전송 권한을 허용하는 소유자 관리 플러그인
소유자 관리추가하려면 소유자 서명이 필요한 플러그인 유형
에스크로 없음보관 계정으로 전송하지 않고 판매
Permanent Transfer Delegate생성 시 추가되는 취소 불가능한 버전