プラグイン
Transfer Delegateプラグイン
Last updated January 31, 2026
Transfer Delegateプラグインは、指定されたauthorityがオーナーに代わってCore Assetsを転送できるようにします。エスクローレスマーケットプレイス販売、ゲームメカニクス、サブスクリプションサービスに不可欠です。
学べること
- AssetにTransfer Delegateプラグインを追加
- マーケットプレイスやプログラムに転送権限をデリゲート
- デリゲートとして転送を実行
- 転送時のauthority動作
概要
Transfer Delegateは、デリゲートがAssetを転送できるようにするOwner Managedプラグインです。デリゲートされると、authorityはオーナーの承認なしにAssetを任意のアドレスに転送できます。
- エスクローレスマーケットプレイスリスティングを有効化
- authorityは転送後に取り消される(一回限りの使用)
- 永続的な権限にはPermanent Transfer Delegateを使用
- 追加の引数は不要
対象外
永続的な転送権限(Permanent Transfer Delegateを参照)、コレクションレベルの転送、Token Metadata転送権限(別のシステム)。
クイックスタート
ジャンプ先: プラグインを追加 · 権限をデリゲート · デリゲートとして転送
- デリゲートアドレスでTransfer Delegateプラグインを追加
- デリゲートがAssetを一度転送可能に
- 転送後、authorityは自動的に取り消される
概要
Transfer Delegateプラグインは、Transfer DelegateプラグインのauthorityがいつでもAssetを転送できるようにするOwner Managedプラグインです。 Transfer Pluginは以下のような分野で機能します:
- Assetのエスクローレス販売:エスクローアカウントを必要とせずにNFTを買い手に直接転送
- ユーザーがイベントに基づいてアセットを交換/失うゲームシナリオ:ゲームイベント発生時にアセットを自動転送
- サブスクリプションサービス:サブスクリプションサービスの一部としてNFTを転送
Transfer vs Permanent Transfer Delegateの使い分け
| ユースケース | Transfer Delegate | Permanent Transfer Delegate |
|---|---|---|
| マーケットプレイスリスティング | ✅ 最適 | ❌ リスクが高すぎる |
| 一回限りの転送 | ✅ 最適 | ❌ 過剰 |
| レンタル返却 | ❌ 一回限り | ✅ 最適 |
| ゲームアセットスワップ | ✅ 最適 | ✅ 動作する |
| 転送後も権限が持続 | ❌ 取り消し | ✅ 持続 |
| Transfer Delegateを選択するのは、一回限りのエスクローレス販売(転送後にauthorityが取り消される)の場合です。 | ||
| Permanent Transfer Delegateを選択するのは、authorityが永続する必要がある場合です。 |
警告!
Transfer delegate authorityは一時的で、アセット転送時にリセットされます。
対応
| MPL Core Asset | ✅ |
| MPL Core Collection | ❌ |
引数
Transfer Pluginには渡す引数がありません。
関数
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 authorityを使用して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がコレクションの一部である場合はコレクションを取得
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 Authorityの更新
Transfer Delegateプラグインは更新するプラグインデータを含まないため(空のオブジェクト{})、主な「更新」操作はプラグインauthorityの変更です。これにより、異なるアドレスに転送権限をデリゲートできます。
Transfer Delegate Authorityの変更
approvePluginAuthority関数を使用して、転送権限を持つ人を変更できます:
Transfer Delegate Authorityの更新
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 Authorityの取り消し
転送権限はrevokePluginAuthority関数を使用して取り消すことができ、アセットオーナーに転送制御が戻ります。
Transfer Delegate Authorityの取り消し
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 authorityのみがAssetを転送できます。正しいキーペアで署名していることを確認してください。
Asset is frozen
フリーズされたAssetは転送できません。Freeze authorityがまずAssetを解凍する必要があります。
Transfer delegate not found
AssetにTransfer Delegateプラグインがないか、以前の転送後にauthorityがすでに取り消されています。
注意事項
- Owner Managed: 追加にはオーナーの署名が必要
- authorityは転送後に自動的に取り消される
- 各転送には新しいオーナーによる再デリゲートが必要
- フリーズされたAssetはデリゲートによって転送できない
- 永続的な権限にはPermanent Transfer Delegateを使用
クイックリファレンス
Authorityライフサイクル
| イベント | Authorityステータス |
|---|---|
| プラグイン追加 | アクティブ |
| Asset転送 | 取り消し |
| 新しいオーナーがプラグインを追加 | アクティブ(新しいデリゲート) |
誰が転送できる?
| Authority | 転送可能? |
|---|---|
| Assetオーナー | はい(常に) |
| Transfer Delegate | はい(一度) |
| Permanent Transfer Delegate | はい(常に) |
| Update Authority | いいえ |
FAQ
なぜ転送権限が取り消されたのですか?
Transfer Delegate authorityは転送後に自動的に取り消されます。これはマーケットプレイスの安全性のための設計です—デリゲートは一度しか転送できません。
エスクローレスリスティングを実装するにはどうすればよいですか?
- 売り手がマーケットプレイスをauthorityとしてTransfer Delegateを追加
- 買い手が支払うと、マーケットプレイスがAssetを買い手に転送
- authorityが取り消されるため、売り手は二重リスティングができない
Transfer DelegateとPermanent Transfer Delegateの違いは何ですか?
Transfer Delegateは1回の転送後に取り消されます。Permanent Transfer Delegateは永続し、Asset作成時にのみ追加できます。
デリゲートとしてフリーズされたAssetを転送できますか?
いいえ。フリーズされたAssetはデリゲート転送を含むすべての転送をブロックします。複雑なエスクローシナリオにはPermanent Transfer DelegateとPermanent Freeze Delegateを使用してください。
オーナーは各転送を承認する必要がありますか?
いいえ。Transfer Delegateが設定されると、デリゲートはオーナーの承認なしに転送できます。ただし、authorityが取り消される前に一度しかできません。
関連プラグイン
- Permanent Transfer Delegate - 取り消し不可能な転送権限
- Freeze Delegate - 転送を一時的にブロック
- Burn Delegate - デリゲートがAssetsをバーンできるようにする
用語集
| 用語 | 定義 |
|---|---|
| Transfer Delegate | 一回限りの転送権限を許可するOwner Managedプラグイン |
| Owner Managed | 追加にオーナーの署名が必要なプラグインタイプ |
| エスクローレス | 保持アカウントに転送せずに販売 |
| Permanent Transfer Delegate | 作成時に追加される取り消し不可能なバージョン |
