機能
Assetの転送
Last updated January 31, 2026
このガイドでは、Metaplex Core SDKを使用してSolana上でウォレット間でCore Assetを転送する方法を説明します。単一の命令で他のユーザーにNFTを送信します。
学習内容
- Assetを新しい所有者に転送する
- Collection内のAssetの転送を処理する
- 許可された転送にTransfer Delegateを使用する
- 転送権限要件を理解する
概要
transfer命令を使用してCore Assetを新しい所有者に転送します。現在の所有者(または許可されたTransfer Delegate)のみが転送を開始できます。
- 受取人のアドレスで
transfer(umi, { asset, newOwner })を呼び出す - Collection Asset の場合、
collectionパラメータを含める - Transfer Delegateは所有者に代わって転送可能
- 転送は無料(トランザクション手数料のみ)
対象外
Token Metadata転送(mpl-token-metadataを使用)、バッチ転送(Assetをループ)、マーケットプレイス販売(エスクロープログラムを使用)。
クイックスタート
ジャンプ先: 基本転送 · コレクション転送 · デリゲート転送
- インストール:
npm install @metaplex-foundation/mpl-core @metaplex-foundation/umi - Assetを取得して所有権とコレクションメンバーシップを確認
transfer(umi, { asset, newOwner })を呼び出すfetchAsset()で所有権が変更されたことを確認
前提条件
- Assetを所有する(またはTransfer Delegateである)署名者で構成されたUmi
- 転送するAssetのAssetアドレス
- 新しい所有者の受取人アドレス(公開鍵) Core Assetの所有者は、MPL Coreプログラムへの
transfer命令を使用して、別のアカウントに所有権を転送できます。
Core Assetの転送
1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { transfer } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { publicKey } from '@metaplex-foundation/umi'
5
6// Initialize UMI
7const umi = createUmi('https://api.devnet.solana.com')
8 .use(mplCore())
9
10// Transfer an existing NFT asset to a new owner
11const result = await transfer(umi, {
12 asset: publicKey('AssetAddressHere...'),
13 newOwner: publicKey('RecipientAddressHere...'),
14}).sendAndConfirm(umi)
15
16console.log('Asset transferred:', result.signature)
Collection内のCore Assetの転送
コレクションを持つAssetを転送する場合、コレクションアドレスを渡す必要があります。 AssetがCollection内にあるかどうかの確認方法
Collectionの一部であるAssetを転送
import { publicKey } from '@metaplex-foundation/umi'
import { transferV1 } from '@metaplex-foundation/mpl-core'
const asset = publicKey('11111111111111111111111111111111')
await transferV1(umi, {
asset: asset.publicKey,
newOwner: newOwner.publicKey,
collection: colleciton.publicKey,
}).sendAndConfirm(umi)
AssetのTransfer Delegateの場合は?
Transfer Delegateプラグインを通じてAssetのTransfer Delegateである場合、Assetの所有者であるかのようにtransferV1関数を呼び出すことができます。
よくあるエラー
Authority mismatch
Assetの所有者またはTransfer Delegateではありません。所有権を確認してください:
const asset = await fetchAsset(umi, assetAddress)
console.log(asset.owner) // 署名者と一致する必要があります
Asset is frozen
AssetにFreeze Delegateプラグインがあり、現在フリーズされています。転送前にフリーズ権限者が解除する必要があります。
Missing collection parameter
Collection内のAssetの場合、collectionアドレスを渡す必要があります。Assetにコレクションがあるかどうかを確認してください:
const asset = await fetchAsset(umi, assetAddress)
if (asset.updateAuthority.type === 'Collection') {
console.log('Collection:', asset.updateAuthority.address)
}
注意事項
- 転送は無料 - レントコストなし、トランザクション手数料のみ(約0.000005 SOL)
- 新しい所有者はAssetの完全な制御を受け取ります
- Transfer、Burn、Freeze Delegateは転送成功後に取り消されます
- フリーズされたAssetは解除されるまで転送できません
- コレクションメンバーシップを確認するために常に最初にAssetを取得してください
クイックリファレンス
転送パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
asset | はい | Assetアドレスまたは取得したオブジェクト |
newOwner | はい | 受取人の公開鍵 |
collection | コレクション内の場合 | Collectionアドレス |
authority | いいえ | デフォルトは署名者(デリゲート用) |
誰が転送できるか?
| 権限 | 転送可能? |
|---|---|
| Asset所有者 | はい |
| Transfer Delegate | はい(転送後に取り消し) |
| Update Authority | いいえ |
| Collection Authority | いいえ |
FAQ
AssetがCollection内にあるかどうかはどうやってわかりますか?
Assetを取得してupdateAuthorityを確認します:
const asset = await fetchAsset(umi, assetAddress)
if (asset.updateAuthority.type === 'Collection') {
// asset.updateAuthority.addressをcollectionパラメータとして渡す
}
自分自身に転送できますか?
はい。自分のアドレスへの転送は有効です(ウォレットの統合やテストに便利)。
転送後、Transfer Delegateはどうなりますか?
Transfer Delegateプラグインは転送が完了すると自動的に取り消されます。新しい所有者は必要に応じて新しいデリゲートを割り当てる必要があります。
転送をキャンセルできますか?
いいえ。転送はアトミックです - トランザクションが確認されると、所有権は変更されています。キャンセルする保留状態はありません。
複数のAssetを一度に転送できますか?
単一の命令ではできません。1つのトランザクションに複数の転送命令をバッチ処理できます(トランザクションサイズ制限内で)が、各Assetには独自の転送呼び出しが必要です。
転送するとupdate authorityは変更されますか?
いいえ。転送は所有権のみを変更します。update authorityはupdate命令で明示的に変更されない限り同じままです。
用語集
| 用語 | 定義 |
|---|---|
| 所有者 | 現在Assetを所有しているウォレット |
| Transfer Delegate | 所有者に代わって転送する権限を持つアカウント |
| フリーズ | 転送がブロックされるAssetの状態 |
| 新しい所有者 | Assetを受け取る受取人ウォレット |
| Collection | Assetが属するCollection(転送要件に影響) |
