SDK

JavaScript SDK

Last updated August 27, 2026

@metaplex-foundation/mpl-distro パッケージは Umi 命令ビルダー、アカウントシリアライザ、PDA ヘルパー、互換 Merkle ツリーユーティリティを提供します。

概要

MPL-Distro JavaScript SDK は、配布の作成、資金投入、クレーム、更新、確認のためのサポート対象 TypeScript インターフェイスです。

  • 命令を構築する前に Umi クライアントへ mplDistro() を登録します。
  • prepareDistribution でルートと証明を生成します。
  • 運用プログラム命令には生成済みビルダーを使います。
  • エクスポートされたヘルパーで決定的な配布とクレームレシートアカウントを取得します。

MPL-Distro JavaScript SDK のインストール

MPL-Distro 0.4.x を Umi と Toolbox のピア依存と一緒にインストールします。

Terminal
npm install @metaplex-foundation/mpl-distro@^0.4 \
@metaplex-foundation/mpl-core@^1.3 \
@metaplex-foundation/umi@^1.1 \
@metaplex-foundation/umi-bundle-defaults \
@metaplex-foundation/mpl-toolbox@^0.10

@metaplex-foundation/mpl-core は宣言されたピア依存であり、Core アセットサイナーヘルパーフロー をサポートします。

MPL-Distro Umi プラグインを登録する

アプリケーションの Umi インスタンスに mplDistro() を一度登録します。

setupUmi.ts
1import { mplDistro } from '@metaplex-foundation/mpl-distro'
2import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
3
4const rpcUrl = process.env.RPC_URL ?? 'https://api.devnet.solana.com'
5
6export const umi = createUmi(rpcUrl).use(mplDistro())
7
8// Umi is registered with the mplDistro plugin.

プラグインはプログラム名 mplDistroD1STRoZTUiEa6r8TLg2aAbG4nSRT5cDBmgG7jDqCZvU8 に登録します。

MPL-Distro 命令ビルダー

SDK は各運用プログラム命令に対するトランザクションビルダーを公開します。

ビルダー目的主な引数
createDistribution配布 PDA を作成ルート、高さ、期間、claimant 数、名前、タイプ、アクセスモード
updateDistribution任意の設定フィールドを変更配布と置き換えるフィールド
deposit配布トークンボールトに資金を入れる配布、mint、amount
withdraw非アクティブ時にトークンを回収配布、mint、amount
distributeウォレット割り当てをクレーム配布、mint、受取人、amount、証明、nonce
distributeToLegacyNftNFT mint 割り当てをクレーム配布、報酬 mint、NFT mint、所有者、amount、証明、nonce
withdrawSubsidy未使用レシート補助金を回収配布、受取人、lamports の amount

各ビルダーは Umi TransactionBuilder を返し、.sendAndConfirm(umi) で合成または送信できます。

MPL-Distro Merkle ヘルパー

SDK は受取人レコードから割り当て互換のルートと証明を生成します。

エクスポート目的
prepareDistribution(recipients)rootproofstreeHeight を返す
hashDistroLeaf(recipient)ハッシュ用に 1 つのアドレス、amount、nonce をシリアライズ
computeTreeHeight(leavesCount)リーフ数に対する最小内部高を返す
distributeToAssetAndClaimCore アセットサイナー へクレームし、Core Execute でトークンを転送
Recipientaddressamount、任意の nonce を含む型
LegacyNftアドレスが NFT mint のときの Recipient エイリアス
prepareDistribution.ts
1import { mplDistro, prepareDistribution } from '@metaplex-foundation/mpl-distro'
2import { publicKey } from '@metaplex-foundation/umi'
3import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
4
5const umi = createUmi(
6 process.env.RPC_URL ?? 'https://api.devnet.solana.com'
7).use(mplDistro())
8
9const allocations = [
10 { address: publicKey(process.env.RECIPIENT_1!), amount: 100n, nonce: 0n },
11 { address: publicKey(process.env.RECIPIENT_2!), amount: 200n, nonce: 0n },
12]
13
14const { root, proofs, treeHeight } = prepareDistribution(allocations)
15console.log(root, proofs, treeHeight)
16
17// root, one proof array per allocation, and treeHeight

証明はその割り当てと同じ配列インデックスで使います。その証明と一緒に amount と nonce を保存します。

MPL-Distro アカウント取得

アカウントヘルパーは配布状態と個々のクレームレシートをデシリアライズします。

エクスポート結果
fetchDistribution(umi, address)デコード済み配布 1 件
safeFetchDistribution(umi, address)配布または null
fetchAllDistribution(umi, addresses)複数のデコード済み配布
fetchClaimReceipt(umi, address)デコード済みレシート 1 件
safeFetchClaimReceipt(umi, address)レシートまたは null
fetchAllClaimReceipt(umi, addresses)複数のデコード済みレシート
getDistributionSize()現行の配布アカウントサイズ
getClaimReceiptSize()クレームレシートアカウントサイズ

SDK は権限者または mint ごとの全配布インデックスクエリを提供しません。アプリケーションは既知の PDA 入力、インデックス済みトランザクションデータ、または外部アカウントインデックスが必要です。

MPL-Distro 配布アカウント

配布アカウントは、1 つの mint と Merkle ルートの設定と集計帳簿を保存します。

フィールド意味
distributionTypeDistributionTypeWallet または LegacyNft
subsidizeReceiptsbooleanクレームにレシート家賃補填が必要か
allowedDistributorAllowedDistributor送信認可モード
treeHeightnumber受け付ける最大証明長
authoritypublic key管理署名者
mintpublic key配布する SPL トークン mint
merkleRoot32 bytes割り当てのコミットメント
startTime, endTimebigint包含的な Unix クレーム期間
totalClaimantsbigint宣言された割り当て数メタデータ
totalAmountbigint入金マイナス出金。クレームでは減らない
claimCountbigint記録されたクレーム数
claimAmountbigintクレーム済みトークン最小単位の合計
seedpublic key配布 PDA が使う seed 署名者
name32 bytesパディング済み UTF-8 配布名
permissionedDistributorpublic keypermissioned モードの必須署名者

MPL-Distro 列挙値

配布と認可の列挙は、クレーム identity と署名者規則を選びます。

列挙意味
DistributionType.Wallet0割り当て identity はウォレットまたは公開鍵
DistributionType.LegacyNft1割り当て identity はレガシー NFT mint
AllowedDistributor.Permissionless0任意の支払者が送信できる
AllowedDistributor.Recipient1受取人または NFT 所有者が署名する必要がある
AllowedDistributor.Permissioned2設定された distributor が署名する必要がある

MPL-Distro PDA ヘルパー

PDA ヘルパーは、プログラムの決定的な配布アドレスとレシートアドレスを導出します。

deriveDistroPdas.ts
1import {
2 findClaimReceiptPda,
3 findDistributionPda,
4 mplDistro,
5} from '@metaplex-foundation/mpl-distro'
6import { publicKey } from '@metaplex-foundation/umi'
7import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
8
9const umi = createUmi(
10 process.env.RPC_URL ?? 'https://api.devnet.solana.com'
11).use(mplDistro())
12
13const mint = publicKey(process.env.TOKEN_MINT!)
14const seedPublicKey = publicKey(process.env.DISTRIBUTION_SEED!)
15const recipient = publicKey(process.env.RECIPIENT_1!)
16const amount = 100_000n
17const nonce = 0n
18
19const [distribution] = findDistributionPda(umi, {
20 mint,
21 seed: seedPublicKey,
22})
23
24const [receipt] = findClaimReceiptPda(umi, {
25 distribution,
26 recipient,
27 amount,
28 nonce,
29})
30
31console.log(distribution, receipt)
32
33// Distribution PDA and claim-receipt PDA
PDASeeds
Distribution["distribution", mint, seed]
Claim receipt["claim_receipt", distribution, recipient, amount_le, nonce_le]

LegacyNft では、レシート導出時に NFT mint を recipient として渡します。

MPL-Distro エラーヘルパー

登録済み Umi プログラムはカスタムエラーコードを生成済み JavaScript エラークラスへマップします。

エラー典型的な原因
DistributionNotStarted開始タイムスタンプより前にクレームを送信した
DistributionEnded終了タイムスタンプより後にクレームを送信した
InvalidClaimProof割り当てフィールドまたは証明がルートと一致しない
AlreadyClaimedレシートがすでに存在する
CannotWithdrawDuringActiveDistributionアクティブ中にトークン回収を試みた
CannotWithdrawWhileActiveアクティブ中にレシート補助金回収を試みた
InsufficientFunds記録トークン残高がクレームより少ない
InsufficientFundsToSubsidizeReceipts配布 SOL がレシート家賃を補填できない
RecipientMustSignRecipient モードで受取人署名者が欠けている
InvalidDistributionTypeクレームビルダーが設定タイプと一致しない
InvalidDistributorPermissioned クレームが誤った署名者を使った

シミュレーションと確認失敗のデコードには getMplDistroErrorFromCode または登録プログラムのエラーマップを使います。

MPL-Distro JavaScript クイックリファレンス

JavaScript クライアントとデプロイ済みプログラムは次の安定識別子を使います。

項目
Package@metaplex-foundation/mpl-distro
Tested package range0.4.x
Umi peer dependency1.1.1 以降
Program IDD1STRoZTUiEa6r8TLg2aAbG4nSRT5cDBmgG7jDqCZvU8
Fee wallet9kFjQsxtpBsaw8s7aUyiY3wazYDNgFP4Lj5rsBVVF8tb
Sourcemetaplex-foundation/mpl-distro

注意事項

生成クライアントは低レベルの命令ビルダーを公開し、オフチェーン証明配信は管理しません。

  • prepareDistribution は 1,000 リーフ以上でメモリ最適化実装を使います。
  • 両方のクレームビルダーで nonce のデフォルトは 0 です。
  • 任意アカウントのデフォルトは Umi 支払者に依存するため、スポンサー付きフローでは明示的に渡してください。
  • SDK パッケージバージョン、Rust crate バージョン、内部プログラム crate バージョンは独立にリリースされます。
  • 権限者の作成、入金、取得、出金は Metaplex CLI からも実行できます。クレームは SDK 側です。
Previous
更新