機能

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をループ)、マーケットプレイス販売(エスクロープログラムを使用)。

クイックスタート

ジャンプ先: 基本転送 · コレクション転送 · デリゲート転送

  1. インストール:npm install @metaplex-foundation/mpl-core @metaplex-foundation/umi
  2. Assetを取得して所有権とコレクションメンバーシップを確認
  3. transfer(umi, { asset, newOwner })を呼び出す
  4. 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を受け取る受取人ウォレット
CollectionAssetが属するCollection(転送要件に影響)