metaplex について
metaplex は、デジタルアセット、NFT、トークンを開発する Solana 開発者向けの Metaplex Protocol ガイドです。複数の規格とツールを扱い、圧縮 NFT やコレクションのミントからトークンローンチまでを支援します。
主な機能
- 01Core と Token Metadata の NFT 作成
- 02Bubblegum による圧縮 NFT の作成
- 03Candy Machine による NFT コレクションのミント管理
- 04Genesis によるトークンローンチの構築
- 05DAS API によるデジタルアセットの取得
活用シーン
- 01Solana アプリ向け NFT の作成と管理
- 02圧縮形式での大規模デジタルアセットのミント
- 03アクセス条件付き NFT コレクションローンチの設定
- 04トークンローンチの構築と規格横断のアセット照会
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sendaifun/ skills --skill metaplexインストール後、Claude Code で/metaplexを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
docs/troubleshooting.mdexamples/bubblegum/compressed-nfts.tsexamples/candy-machine/launch-collection.tsexamples/core/create-nft.tsexamples/genesis/token-launch.tsexamples/token-metadata/create-nft.tsresources/program-ids.mdprotocol-fees.mdsdk-packages.mdtemplates/metaplex-client.ts詳細
Metaplex Protocol 開発ガイド
Solana 上で Metaplex Protocol を使用して NFT、デジタル資産、トークンローンチを構築するための包括的なガイドです。Metaplex Protocol は、Solana の NFT とトークンの 99%を支える業界標準です。
Metaplex とは?
Metaplex は Solana を代表するトークン化プロトコルで、デジタル資産の作成、販売、管理に必要なスマートコントラクトとツールを提供します。シンプルな NFT から数十億個の圧縮コレクション、公正なトークンローンチからハイブリッド型のトークン/NFT システムまで、Metaplex はそのためのインフラを提供します。
主な統計
- 99% の Solana NFT が Metaplex の標準を使用
- 100 億ドル以上 の取引額を実現
- 78% の Solana NFT が Candy Machine を通じてミント(2022 年時点)
- 最小限のコストで 数十億個 の圧縮 NFT を作成可能
概要
Metaplex はさまざまなユースケースに対応する複数の製品を提供します。
NFT 標準
| 製品 | 説明 | ミントあたりのコスト |
|---|---|---|
| Core | 次世代の単一アカウント NFT 標準 | 約 0.0029 SOL |
| Token Metadata | PDA を使用する従来の NFT 標準 | 約 0.022 SOL |
| Bubblegum v2 | 圧縮 NFT(cNFT) | 約 0.00009 SOL |
ローンチと配布
| 製品 | 説明 |
|---|---|
| Candy Machine | ガード付き NFT コレクションのミント |
| Core Candy Machine | Core 資産向けの Candy Machine |
| Genesis | トークン生成イベント(TGE)プラットフォーム |
ユーティリティ
| 製品 | 説明 |
|---|---|
| MPL-Hybrid | 代替可能トークンと非代替性トークンを交換 |
| Inscriptions | オンチェーンデータストレージ(最大 10MB) |
| DAS API | デジタル資産を取得するための統合 API |
| Umi | Solana クライアント向け JavaScript フレームワーク |
プログラム ID
主要プログラム(Mainnet および Devnet)
| プログラム | アドレス |
|---|---|
| MPL Core | CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d |
| Token Metadata | metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s |
| Bubblegum | BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY |
| Candy Machine V3 | CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR |
| Candy Guard | Guard1JwRhJkVH6XZhzoYxeBVQe872VH6QggF4BWmS9g |
| Core Candy Machine | CMACYFENjoBMHzapRXyo1JZkVS6EtaDDzkjMrmQLvr4J |
| Core Candy Guard | CMAGAKJ67e9hRZgfC5SFTbZH8MgEmtqazKXjmkaJjWTJ |
| MPL Hybrid | MPL4o4wMzndgh8T1NVDxELQCj5UQfYTYEkabX3wNKtb |
| Inscription | 1NSCRfGeyo7wPUazGbaPBUsTM49e1k2aXewHGARfzSo |
SPL プログラム(必須)
| プログラム | アドレス |
|---|---|
| SPL Token | TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA |
| Token 2022 | TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb |
| Associated Token | ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL |
| Account Compression | cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK |
クイックスタート
インストール
# Core NFTs (Recommended for new projects)
npm install @metaplex-foundation/mpl-core \
@metaplex-foundation/umi \
@metaplex-foundation/umi-bundle-defaults
# Token Metadata NFTs
npm install @metaplex-foundation/mpl-token-metadata \
@metaplex-foundation/umi \
@metaplex-foundation/umi-bundle-defaults
# Compressed NFTs (Bubblegum)
npm install @metaplex-foundation/mpl-bubblegum \
@metaplex-foundation/umi \
@metaplex-foundation/umi-bundle-defaults
# Candy Machine
npm install @metaplex-foundation/mpl-candy-machine \
@metaplex-foundation/umi \
@metaplex-foundation/umi-bundle-defaults
# Core Candy Machine
npm install @metaplex-foundation/mpl-core-candy-machine \
@metaplex-foundation/umi \
@metaplex-foundation/umi-bundle-defaults
# Genesis (Token Launches)
npm install @metaplex-foundation/mpl-genesis \
@metaplex-foundation/umi \
@metaplex-foundation/umi-bundle-defaults
# File uploads (Arweave via Irys)
npm install @metaplex-foundation/umi-uploader-irys
Umi のセットアップ
すべての Metaplex SDK は、モジュール式の Solana フレームワークである Umi を使用します。
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import { mplCore } from '@metaplex-foundation/mpl-core';
import {
keypairIdentity,
generateSigner
} from '@metaplex-foundation/umi';
// Create Umi instance
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(mplCore());
// Option 1: Use generated keypair
const signer = generateSigner(umi);
umi.use(keypairIdentity(signer));
// Option 2: Use existing keypair
import { createSignerFromKeypair } from '@metaplex-foundation/umi';
const keypair = umi.eddsa.createKeypairFromSecretKey(secretKeyBytes);
const signer = createSignerFromKeypair(umi, keypair);
umi.use(keypairIdentity(signer));
// Option 3: Use wallet adapter (browser)
import { walletAdapterIdentity } from '@metaplex-foundation/umi-signer-wallet-adapters';
umi.use(walletAdapterIdentity(wallet));
MPL Core(推奨)
単一アカウント設計、低コスト、組み込みプラグインを備えた次世代 NFT 標準です。
Core を選ぶ理由
| 機能 | Core | Token Metadata |
|---|---|---|
| NFT あたりのアカウント数 | 1 | 4 以上 |
| ミントコスト | 約 0.0029 SOL | 約 0.022 SOL |
| コンピュートユニット | 約 17,000 | 約 205,000 |
| ロイヤリティの強制 | はい | いいえ |
| プラグインシステム | はい | いいえ |
Core NFT の作成
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import {
mplCore,
create,
fetchAsset
} from '@metaplex-foundation/mpl-core';
import {
generateSigner,
keypairIdentity
} from '@metaplex-foundation/umi';
import { irysUploader } from '@metaplex-foundation/umi-uploader-irys';
// Setup
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(mplCore())
.use(irysUploader());
// Upload metadata
const metadata = {
name: 'My Core NFT',
description: 'A next-gen NFT on Solana',
image: 'https://arweave.net/your-image',
attributes: [
{ trait_type: 'Background', value: 'Blue' },
{ trait_type: 'Rarity', value: 'Legendary' }
]
};
const metadataUri = await umi.uploader.uploadJson(metadata);
// Create NFT
const asset = generateSigner(umi);
await create(umi, {
asset,
name: 'My Core NFT',
uri: metadataUri,
}).sendAndConfirm(umi);
console.log('Asset created:', asset.publicKey);
// Fetch the asset
const fetchedAsset = await fetchAsset(umi, asset.publicKey);
console.log('Asset data:', fetchedAsset);
プラグインを使った Core
import {
create,
ruleSet,
plugin,
} from '@metaplex-foundation/mpl-core';
// Create with royalty enforcement
await create(umi, {
asset,
name: 'Royalty Enforced NFT',
uri: metadataUri,
plugins: [
{
type: 'Royalties',
basisPoints: 500, // 5%
creators: [
{ address: creatorAddress, percentage: 100 }
],
ruleSet: ruleSet('None'), // or 'ProgramAllowList', 'ProgramDenyList'
},
{
type: 'FreezeDelegate',
frozen: false,
authority: { type: 'Owner' },
},
{
type: 'TransferDelegate',
authority: { type: 'Owner' },
},
],
}).sendAndConfirm(umi);
Core コレクション
import {
createCollection,
create,
fetchCollection,
} from '@metaplex-foundation/mpl-core';
// Create collection
const collection = generateSigner(umi);
await createCollection(umi, {
collection,
name: 'My Collection',
uri: collectionUri,
}).sendAndConfirm(umi);
// Create asset in collection
const asset = generateSigner(umi);
await create(umi, {
asset,
name: 'Collection Item #1',
uri: assetUri,
collection: collection.publicKey,
}).sendAndConfirm(umi);
転送とバーン
import { transfer, burn } from '@metaplex-foundation/mpl-core';
// Transfer
await transfer(umi, {
asset: assetPublicKey,
newOwner: recipientPublicKey,
}).sendAndConfirm(umi);
// Burn
await burn(umi, {
asset: assetPublicKey,
}).sendAndConfirm(umi);
Token Metadata
Program Derived Address(PDA)を使用する、従来の Solana NFT 標準です。
Token Metadata を使った NFT の作成
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import {
mplTokenMetadata,
createNft,
fetchDigitalAsset,
} from '@metaplex-foundation/mpl-token-metadata';
import { generateSigner, percentAmount } from '@metaplex-foundation/umi';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(mplTokenMetadata());
// Create NFT
const mint = generateSigner(umi);
await createNft(umi, {
mint,
name: 'My NFT',
symbol: 'MNFT',
uri: 'https://arweave.net/metadata.json',
sellerFeeBasisPoints: percentAmount(5.5), // 5.5% royalty
creators: [
{ address: umi.identity.publicKey, share: 100, verified: true }
],
}).sendAndConfirm(umi);
// Fetch NFT
const asset = await fetchDigitalAsset(umi, mint.publicKey);
console.log(asset);
プログラマブル NFT(pNFT)の作成
import {
createProgrammableNft,
TokenStandard,
} from '@metaplex-foundation/mpl-token-metadata';
// pNFTs have enforced royalties
const mint = generateSigner(umi);
await createProgrammableNft(umi, {
mint,
name: 'My pNFT',
uri: metadataUri,
sellerFeeBasisPoints: percentAmount(10), // 10% royalty
ruleSet: ruleSetPublicKey, // Optional: custom rules
}).sendAndConfirm(umi);
メタデータ付き代替可能トークンの作成
import {
createFungible,
mintV1,
TokenStandard,
} from '@metaplex-foundation/mpl-token-metadata';
// Create fungible token
const mint = generateSigner(umi);
await createFungible(umi, {
mint,
name: 'My Token',
symbol: 'MTK',
uri: 'https://arweave.net/token-metadata.json',
sellerFeeBasisPoints: percentAmount(0),
decimals: 9,
}).sendAndConfirm(umi);
// Mint tokens
await mintV1(umi, {
mint: mint.publicKey,
amount: 1_000_000_000n, // 1 token with 9 decimals
tokenOwner: recipientPublicKey,
tokenStandard: TokenStandard.Fungible,
}).sendAndConfirm(umi);
メタデータの更新
import { updateV1 } from '@metaplex-foundation/mpl-token-metadata';
await updateV1(umi, {
mint: mintPublicKey,
data: {
name: 'Updated Name',
symbol: 'UPDT',
uri: 'https://arweave.net/new-metadata.json',
sellerFeeBasisPoints: 500,
creators: null, // Keep existing
},
}).sendAndConfirm(umi);
Bubblegum(圧縮 NFT)
Merkle ツリー圧縮を使用して、最小限のコストで数十億個の NFT を作成します。
コスト比較
| コレクションサイズ | Bubblegum のコスト | Token Metadata のコスト |
|---|---|---|
| 10,000 | ~0.27 SOL | ~220 SOL |
| 1,000,000 | ~50 SOL | ~22,000 SOL |
| 1,000,000,000 | ~5,007 SOL | ~22,000,000 SOL |
Merkle Tree の作成
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import {
mplBubblegum,
createTree,
} from '@metaplex-foundation/mpl-bubblegum';
import { generateSigner } from '@metaplex-foundation/umi';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(mplBubblegum());
// Create tree (max depth determines capacity)
// maxDepth 14 = 16,384 NFTs, maxDepth 20 = 1,048,576 NFTs
const merkleTree = generateSigner(umi);
await createTree(umi, {
merkleTree,
maxDepth: 14,
maxBufferSize: 64,
}).sendAndConfirm(umi);
console.log('Tree created:', merkleTree.publicKey);
圧縮 NFT のミント
import { mintV1 } from '@metaplex-foundation/mpl-bubblegum';
await mintV1(umi, {
leafOwner: recipientPublicKey,
merkleTree: merkleTreePublicKey,
metadata: {
name: 'Compressed NFT #1',
symbol: 'CNFT',
uri: 'https://arweave.net/metadata.json',
sellerFeeBasisPoints: 500,
collection: { key: collectionMint, verified: false },
creators: [
{ address: umi.identity.publicKey, share: 100, verified: true }
],
},
}).sendAndConfirm(umi);
コレクションへのミント
import { mintToCollectionV1 } from '@metaplex-foundation/mpl-bubblegum';
await mintToCollectionV1(umi, {
leafOwner: recipientPublicKey,
merkleTree: merkleTreePublicKey,
collectionMint: collectionMintPublicKey,
metadata: {
name: 'Collection cNFT #1',
symbol: 'CCNFT',
uri: metadataUri,
sellerFeeBasisPoints: 500,
creators: [
{ address: umi.identity.publicKey, share: 100, verified: true }
],
},
}).sendAndConfirm(umi);
圧縮 NFT の転送
import { transfer } from '@metaplex-foundation/mpl-bubblegum';
import { getAssetWithProof } from '@metaplex-foundation/mpl-bubblegum';
// Get asset with proof from DAS API
const assetWithProof = await getAssetWithProof(umi, assetId);
await transfer(umi, {
...assetWithProof,
leafOwner: currentOwner,
newLeafOwner: newOwner,
}).sendAndConfirm(umi);
通常の NFT への展開
import { decompressV1 } from '@metaplex-foundation/mpl-bubblegum';
// Decompress creates on-chain Token Metadata NFT
await decompressV1(umi, {
...assetWithProof,
mint: mintSigner,
}).sendAndConfirm(umi);
Candy Machine
公平なコレクションのローンチに適した、主要な NFT ミントシステムです。
Candy Machine の作成
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import {
mplCandyMachine,
create,
addConfigLines,
} from '@metaplex-foundation/mpl-candy-machine';
import { generateSigner, some, sol, dateTime } from '@metaplex-foundation/umi';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(mplCandyMachine());
// Create candy machine
const candyMachine = generateSigner(umi);
const collection = generateSigner(umi);
await create(umi, {
candyMachine,
collection: collection.publicKey,
collectionUpdateAuthority: umi.identity,
itemsAvailable: 1000,
sellerFeeBasisPoints: percentAmount(5),
creators: [
{ address: umi.identity.publicKey, percentageShare: 100, verified: true }
],
configLineSettings: some({
prefixName: 'My NFT #',
nameLength: 4,
prefixUri: 'https://arweave.net/',
uriLength: 43,
isSequential: false,
}),
guards: {
botTax: some({ lamports: sol(0.01), lastInstruction: true }),
solPayment: some({ lamports: sol(0.5), destination: treasury }),
startDate: some({ date: dateTime('2024-01-01T00:00:00Z') }),
mintLimit: some({ id: 1, limit: 3 }),
},
}).sendAndConfirm(umi);
Candy Machine へのアイテムの追加
await addConfigLines(umi, {
candyMachine: candyMachine.publicKey,
index: 0,
configLines: [
{ name: '0001', uri: 'abc123...' },
{ name: '0002', uri: 'def456...' },
{ name: '0003', uri: 'ghi789...' },
],
}).sendAndConfirm(umi);
Candy Machine からのミント
import {
mintV1,
fetchCandyMachine,
fetchCandyGuard,
} from '@metaplex-foundation/mpl-candy-machine';
const candyMachine = await fetchCandyMachine(umi, candyMachinePublicKey);
const candyGuard = await fetchCandyGuard(umi, candyMachine.mintAuthority);
const nftMint = generateSigner(umi);
await mintV1(umi, {
candyMachine: candyMachine.publicKey,
candyGuard: candyGuard.publicKey,
nftMint,
collectionMint: candyMachine.collectionMint,
collectionUpdateAuthority: candyMachine.authority,
mintArgs: {
solPayment: some({ destination: treasury }),
mintLimit: some({ id: 1 }),
},
}).sendAndConfirm(umi);
利用可能な Guard(21 種類以上)
| Guard | 説明 |
|---|---|
solPayment | ミントに SOL を請求します |
tokenPayment | SPL トークンを請求します |
nftPayment | NFT による支払いを必須にします |
startDate | ミント開始時刻を設定します |
endDate | ミント終了時刻を設定します |
mintLimit | ウォレットごとのミント数を制限します |
allowList | Merkle tree の許可リストです |
tokenGate | トークンの所有を必須にします |
nftGate | NFT の所有を必須にします |
botTax | ミント失敗時にペナルティを課します |
gatekeeper | CAPTCHA による検証です |
freezeSolPayment | 条件が満たされるまで SOL を凍結します |
freezeTokenPayment | 条件が満たされるまでトークンを凍結します |
addressGate | 特定のアドレスに制限します |
allocation | グループごとのミント総数を制限します |
redeemedAmount | X 回のミント後に停止します |
thirdPartySigner | 追加の署名を必須にします |
token2022Payment | Token-2022 による支払いです |
nftBurn | ミント時に NFT をバーンします |
tokenBurn | ミント時にトークンをバーンします |
programGate | 呼び出し元のプログラムを制限します |
Genesis(トークンローンチ)
Solana 上で公平なトークン生成イベント(TGE)を実施できます。
ローンチの種類
| 種類 | 説明 | 価格発見 |
|---|---|---|
| Presale | 固定価格でのトークン販売 | 事前決定 |
| Launch Pool | 預け入れ額によって価格が決まります | 終了時 |
| Uniform Price Auction | 入札方式 | 清算価格 |
Presale の作成
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import {
mplGenesis,
createGenesis,
addBucket,
finalize,
} from '@metaplex-foundation/mpl-genesis';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(mplGenesis());
// Create genesis account
const genesis = generateSigner(umi);
await createGenesis(umi, {
genesis,
name: 'My Token',
symbol: 'MTK',
uri: 'https://arweave.net/token-metadata.json',
decimals: 9,
totalSupply: 1_000_000_000n * 10n ** 9n, // 1 billion tokens
}).sendAndConfirm(umi);
// Add presale bucket
await addBucket(umi, {
genesis: genesis.publicKey,
bucket: {
type: 'Presale',
price: sol(0.001), // 0.001 SOL per token
maxTokens: 100_000_000n * 10n ** 9n, // 100M tokens
startTime: dateTime('2024-06-01T00:00:00Z'),
endTime: dateTime('2024-06-07T00:00:00Z'),
},
}).sendAndConfirm(umi);
// Finalize (locks configuration)
await finalize(umi, {
genesis: genesis.publicKey,
}).sendAndConfirm(umi);
ローンチへの参加
import { deposit, claim } from '@metaplex-foundation/mpl-genesis';
// Deposit SOL
await deposit(umi, {
genesis: genesisPublicKey,
amount: sol(10), // 10 SOL
}).sendAndConfirm(umi);
// After launch ends, claim tokens
await claim(umi, {
genesis: genesisPublicKey,
}).sendAndConfirm(umi);
MPL-Hybrid(MPL-404)
代替可能トークンと NFT の間でスワップします。
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import {
mplHybrid,
createEscrow,
swapNftToToken,
swapTokenToNft,
} from '@metaplex-foundation/mpl-hybrid';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(mplHybrid());
// Create escrow for swapping
await createEscrow(umi, {
escrow: escrowSigner,
collection: collectionPublicKey,
token: tokenMint,
feeWallet: feeWallet,
name: 'My Hybrid Collection',
uri: 'https://arweave.net/escrow-metadata.json',
max: 10000n,
min: 0n,
amount: 1000n, // Tokens per NFT
feeAmount: sol(0.005),
path: 0,
}).sendAndConfirm(umi);
// Swap NFT for tokens
await swapNftToToken(umi, {
escrow: escrowPublicKey,
asset: nftPublicKey,
}).sendAndConfirm(umi);
// Swap tokens for NFT
await swapTokenToNft(umi, {
escrow: escrowPublicKey,
}).sendAndConfirm(umi);
Inscriptions
データをオンチェーンに直接保存します(最大 10 MB)。
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import {
mplInscription,
initializeFromMint,
writeData,
fetchInscription,
} from '@metaplex-foundation/mpl-inscription';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(mplInscription());
// Initialize inscription for existing NFT
const inscriptionAccount = findInscriptionPda(umi, { mint: nftMint });
await initializeFromMint(umi, {
mintAccount: nftMint,
}).sendAndConfirm(umi);
// Write JSON metadata
await writeData(umi, {
inscriptionAccount: inscriptionAccount[0],
value: Buffer.from(JSON.stringify({
name: 'On-chain NFT',
description: 'Fully on-chain!',
})),
offset: 0,
}).sendAndConfirm(umi);
// Write image in chunks
const imageBytes = fs.readFileSync('./image.png');
const chunkSize = 800;
for (let i = 0; i < imageBytes.length; i += chunkSize) {
const chunk = imageBytes.slice(i, i + chunkSize);
await writeData(umi, {
inscriptionAccount: associatedInscriptionAccount,
value: Buffer.from(chunk),
offset: i,
}).sendAndConfirm(umi);
}
// Access via Inscription Gateway
const gatewayUrl = `https://igw.metaplex.com/mainnet/${inscriptionAccount[0]}`;
DAS API
Metaplex のすべての規格にわたってデジタルアセットを取得するための統合 API です。
DAS API の使用
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(dasApi());
// Get single asset
const asset = await umi.rpc.getAsset(assetId);
// Get assets by owner
const assets = await umi.rpc.getAssetsByOwner({
owner: ownerPublicKey,
limit: 100,
});
// Get assets by collection
const collectionAssets = await umi.rpc.getAssetsByGroup({
groupKey: 'collection',
groupValue: collectionPublicKey,
limit: 1000,
});
// Search assets
const searchResults = await umi.rpc.searchAssets({
owner: ownerPublicKey,
burnt: false,
compressed: true,
});
// Get asset proof (for compressed NFTs)
const proof = await umi.rpc.getAssetProof(assetId);
DAS 互換の RPC プロバイダー
- Helius
- Triton
- Shyft
- QuickNode
- Alchemy(DAS 対応)
プロトコル手数料
| プログラム | 操作 | 手数料 |
|---|---|---|
| Core | 作成 | 0.0015 SOL |
| Core | 実行 | 0.00004872 SOL |
| Token Metadata | 作成 | 0.01 SOL |
| Bubblegum v2 | 作成 | 0.00009 SOL |
| Bubblegum v2 | 転送 | 0.000006 SOL |
| Bubblegum v1 | 作成 | 無料 |
| Genesis | Launch Pool | 預け入れ/引き出しに 2%、卒業時に 5% |
| Genesis | Presale | 預け入れに 2%、卒業時に 5% |
| MPL-Hybrid | スワップ | 0.005 SOL |
ベストプラクティス
適切な規格の選択
| ユースケース | 推奨 |
|---|---|
| 新しい NFT コレクション | Core |
| 大規模コレクション(10K 以上) | Bubblegum |
| ロイヤリティ付き PFP | Core または pNFT |
| ゲームアイテム | Core(プラグイン) |
| 既存のエコシステム | Token Metadata |
| トークンローンチ | Genesis |
| トークンと NFT のハイブリッド | MPL-Hybrid |
セキュリティ
- 秘密鍵は絶対に共有しないでください - ブラウザーではウォレットアダプターを使用します
- トランザクションを確認してください - 署名する前に必ず内容を確認します
- devnet でテストしてください - mainnet の前に devnet を使用します
- スマートコントラクトを監査してください - カスタム Guard を構築する場合
パフォーマンス
- 操作をバッチ処理します - トランザクションビルダーを使用します
- DAS の応答をキャッシュします - API 呼び出しを減らします
- 圧縮を使用します - 大規模コレクションには Bubblegum を使用します
- 優先手数料 - 混雑時に追加します
リソース
Documentation
GitHub Repositories
API References
Community
Skill Structure
metaplex/
├── SKILL.md # This file
├── resources/
│ ├── program-ids.md # All program addresses
│ ├── sdk-packages.md # NPM packages reference
│ └── protocol-fees.md # Fee schedule
├── examples/
│ ├── core/
│ │ └── create-nft.ts # Core NFT examples
│ ├── token-metadata/
│ │ └── create-nft.ts # Token Metadata examples
│ ├── bubblegum/
│ │ └── compressed-nfts.ts # cNFT examples
│ ├── candy-machine/
│ │ └── launch-collection.ts # Candy Machine examples
│ └── genesis/
│ └── token-launch.ts # Genesis TGE examples
├── templates/
│ └── metaplex-client.ts # Ready-to-use client
└── docs/
└── troubleshooting.md # Common issues