紹介

AnchorでMetaplex Coreを使用する

Last updated July 15, 2026

Anchorを使用してCore Assetsと対話するオンチェーンプログラムを構築します。このガイドでは、インストール、アカウントのデシリアライゼーション、プラグインアクセス、CPIパターンについて説明します。

学べること

  • AnchorプロジェクトでのMpl-coreのインストールと設定
  • プログラムでのCore AssetsとCollectionsのデシリアライズ
  • プラグインデータ(Attributes、Freezeなど)へのアクセス
  • Assetsの作成、転送、管理のためのCPI呼び出し

概要

mpl-core Rustクレートは、AnchorプログラムからCoreと対話するために必要なすべてを提供します。ネイティブAnchorアカウントのデシリアライゼーションのためにanchorフィーチャーフラグを有効にします。

  • default-features = falseと適切なAnchor機能でmpl-coreを追加
  • anchor-lang 0.32.xとともにfeatures = ["anchor", "anchor-0-32"]を使用
  • anchor-lang 0.31.xとともにfeatures = ["anchor"]を使用
  • Accounts構造体でAssets/Collectionsをデシリアライズ
  • fetch_plugin()を使用してプラグインデータを読み取り
  • CPIビルダーが命令呼び出しを簡素化

対象外

クライアントサイドJavaScript SDK(JavaScript SDKを参照)、スタンドアロンRustクライアント(Rust SDKを参照)、およびクライアントからのCore Assetsの作成。

クイックスタート

ジャンプ先: インストール · アカウントのデシリアライゼーション · プラグインアクセス · CPI例

  1. default-features = falseとAnchor機能でmpl-coreをCargo.tomlに追加
  2. rust-toolchain.tomlでRust 1.89.0以降を固定
  3. Account<'info, BaseAssetV1>でAssetsをデシリアライズ
  4. fetch_plugin::<BaseAssetV1, PluginType>()でプラグインにアクセス
  5. CreateV2CpiBuilderTransferV1CpiBuilderなどでCPI呼び出し

インストール

AnchorプログラムのCargo.tomlmpl-coreを追加します。デフォルトのborsh-v1機能はAnchor統合と互換性がないため、anchorを有効にする際は常にデフォルト機能を無効にしてください。

フィーチャーフラグ

機能説明
anchoranchor-lang 0.31.1とSolana 2.x型でAnchorアカウントのデシリアライゼーションを有効化
anchor-0-32anchor-lang 0.32.xサポートのオプトイン機能; anchorが必要
serdeオフチェーンツール用のオプションserdeサポート

Anchor 0.32.x(推奨)

プログラムがanchor-lang 0.32.xに依存する場合:

[dependencies]
anchor-lang = "0.32.1"
mpl-core = { version = "x.x.x", default-features = false, features = ["anchor", "anchor-0-32"] }

Anchor 0.31.x(レガシー)

プログラムがanchor-lang 0.31.xに依存する場合:

[dependencies]
anchor-lang = "0.31.1"
mpl-core = { version = "x.x.x", default-features = false, features = ["anchor"] }

重要

  • anchor-0-32だけでは不十分です — anchorと組み合わせて使用する必要があります。
  • default-features = falseが必要です。設定しないと、デフォルトのborsh-v1機能がAnchor統合と競合します。
  • AnchorパスはPubkeyAccountInfoおよび関連するAnchor traitにSolana 2.x型を使用します。

Rustツールチェーン

mpl-coreにはRust 1.89.0以降が必要です。Anchorワークスペースにrust-toolchain.tomlファイルを追加してください:

[toolchain]
channel = "1.89.0"

base64ctなどの推移的依存関係によりedition2024エラーが発生した場合は、Rust 1.89.0以降にアップグレードしてください。

Core Rust SDKモジュール

Core Rust SDKはいくつかのモジュールで構成されています:

  • accounts: プログラムのアカウントを表します
  • errors: プログラムのエラーを列挙します
  • instructions: 命令、命令引数、CPI命令の作成を容易にします
  • types: プログラムで使用される型を表します 異なる命令がどのように呼び出され、使用されるかの詳細については、mpl-core docs.rsウェブサイトを参照するか、命令上でcmd + 左クリック(mac)またはctrl + 左クリック(windows)を使用して展開できます。

アカウントのデシリアライゼーション

デシリアライズ可能なアカウント

以下のアカウント構造体は、mpl-coreクレート内でデシリアライゼーションに使用できます:

- BaseAssetV1
- BaseCollectionV1
- HashedAssetV1
- PluginHeaderV1
- PluginRegistryV1

Anchor内でCoreアカウントをデシリアライズするには2つの方法があります。

  • AnchorのAccountリスト構造体を使用(ほとんどの場合に推奨)
  • <Account>::from_bytes()を使用して命令関数の本体内で直接

Anchor Accountsリストメソッド

anchorフラグを有効にすることで、Anchor Accountsリスト構造体でBaseAssetV1BaseCollectionV1アカウントの両方を直接デシリアライズできるようになります:

アカウントのデシリアライゼーション

#[derive(Accounts)]
pub struct ExampleAccountStruct<'info> {
...
pub asset: Account<'info, BaseAssetV1>,
}

Account from_bytes()メソッド

try_borrow_data()関数を使用してアセット/コレクションアカウント内のデータを借用し、それらのバイトからアセット/コレクション構造体を作成します:

アカウントのデシリアライゼーション

let data = ctx.accounts.asset.try_borrow_data()?;
let base_asset: BaseAssetV1 = BaseAssetV1::from_bytes(&data.as_ref())?;

プラグインのデシリアライズ

AssetまたはCollectionアカウント内の個々のプラグインにアクセスするには、fetch_plugin()関数を使用します。この関数は、プラグインデータを返すか、ハードエラーをスローせずにnullレスポンスを返すため、データにアクセスせずにプラグインが存在するかどうかを確認できます。 fetch_plugin()関数は、AssetsとCollectionsアカウントの両方に使用でき、適切な型を指定することですべてのプラグインタイプを処理できます。プラグイン内のデータにアクセスする場合は、この関数が返す中間値を使用します。

プラグインのデシリアライゼーション

let (_, attribute_list, _) = fetch_plugin::<BaseAssetV1, Attributes>(&ctx.accounts.asset.to_account_info(), mpl_core::types::PluginType::Attributes)?;

注意: fetch_plugin()関数は非外部プラグインにのみ使用されます。外部プラグインを読み取るには、fetch_plugin()と同じ方法で動作するfetch_external_plugin()関数を使用します。

CPI命令ビルダー

Coreクレートの各命令にはCpiBuilderバージョンが付属しています。CpiBuilderバージョンは命令の名前 + CpiBuilderを使用して作成され、多くのボイラープレートコードを抽象化してコードを大幅に簡素化します! Coreで利用可能なすべての命令について詳しく知りたい場合は、mpl-core docs.rsウェブサイトで見つけることができます。

CPIの例

CreateCollectionV2CpiBuilder命令を例にしてみましょう CpiBuildernewを呼び出し、CoreプログラムをAccountInfoとして渡すことでビルダーを初期化します:

CreateCollectionV2CpiBuilder::new(ctx.accounts.mpl_core_program.to_account_info);

次に、Cmd + 左クリック(Windowsユーザーの場合はCtrl + 左クリック)を使用して、このCPI呼び出しに必要なすべてのCPI引数を表示します:

CreateCollectionV2CpiBuilder::new(&ctx.accounts.core_program)
.collection(&ctx.accounts.collection)
.payer(&ctx.accounts.payer)
.system_program(&ctx.accounts.system_program)
.name("Test Collection".to_string())
.uri("https://test.com".to_string())
.invoke()?;

一般的なエラー

AccountNotInitialized

AssetまたはCollectionアカウントが存在しないか、まだ作成されていません。

PluginNotFound

取得しようとしているプラグインがAssetに存在しません。安全にNoneを返すfetch_plugin()で確認してください。

InvalidAuthority

署名者がこの操作の権限を持っていません。正しい権限が署名していることを確認してください。

注意事項

  • Anchor機能を有効にする際は常にdefault-features = falseを設定
  • anchor-lang 0.32.xとともにfeatures = ["anchor", "anchor-0-32"]を使用
  • anchor-lang 0.31.xとともにfeatures = ["anchor"]を使用
  • rust-toolchain.tomlでRust 1.89.0以降を固定
  • 組み込みプラグインにはfetch_plugin()を、外部にはfetch_external_plugin()を使用
  • CPIビルダーがアカウント順序の複雑さを抽象化
  • 完全なAPIリファレンスはdocs.rs/mpl-coreを確認

クイックリファレンス

一般的なCPIビルダー

操作CPIビルダー
Assetの作成CreateV2CpiBuilder
Collectionの作成CreateCollectionV2CpiBuilder
Assetの転送TransferV1CpiBuilder
AssetのバーンBurnV1CpiBuilder
Assetの更新UpdateV1CpiBuilder
プラグインの追加AddPluginV1CpiBuilder
プラグインの更新UpdatePluginV1CpiBuilder

アカウントタイプ

アカウント構造体
AssetBaseAssetV1
CollectionBaseCollectionV1
Hashed AssetHashedAssetV1
Plugin HeaderPluginHeaderV1
Plugin RegistryPluginRegistryV1

FAQ

anchorフィーチャーフラグは必要ですか?

はい、Accounts構造体での直接デシリアライゼーションには必要です。なしの場合は、from_bytes()を手動で使用します。anchorを有効にする際は常にdefault-features = falseを設定してください。

どのAnchorバージョンを使用すべきですか?

anchor-lang 0.32.xの場合は、default-features = falsefeatures = ["anchor", "anchor-0-32"]を使用します。anchor-lang 0.31.xの場合は、features = ["anchor"]のみを使用します。

どのRustバージョンが必要ですか?

mpl-coreにはRust 1.89.0以降が必要です。Anchorプロジェクトのrust-toolchain.tomlでバージョンを固定してください。

プラグインが存在するかどうかを確認するにはどうすればよいですか?

Optionを返すfetch_plugin()を使用します。プラグインが存在しない場合でもエラーをスローしません。

外部プラグイン(Oracle、AppData)にアクセスできますか?

はい。適切なキーでfetch_plugin()の代わりにfetch_external_plugin()を使用します。

利用可能なすべての命令はどこで見つけられますか?

mpl-core docs.rs命令モジュールを参照してください。

用語集

用語定義
CPICross-Program Invocation - あるプログラムから別のプログラムを呼び出すこと
CpiBuilderCPI呼び出しを構築するためのヘルパー構造体
BaseAssetV1デシリアライゼーション用のCore Assetアカウント構造体
fetch_plugin()アカウントからプラグインデータを読み取る関数
anchorフィーチャーAnchorネイティブデシリアライゼーションを有効にするCargoフィーチャー
anchor-0-32フィーチャーanchor-lang 0.32.xサポートのオプトインCargoフィーチャー

関連ページ