mcpField
M
metaplex

metaplex

github.com/sendaifun开发131196 次安装14 周前更新
代码仓库

关于 metaplex

metaplex 是面向 Solana 开发者的数字资产协议开发指南,涵盖 NFT、代币和发行流程。它汇集多种标准与工具,支持从压缩 NFT、集合铸造到代币发行等开发任务。

主要功能

  1. 01创建 Core 和 Token Metadata NFT
  2. 02使用 Bubblegum 创建压缩 NFT
  3. 03通过 Candy Machine 管理 NFT 集合铸造
  4. 04借助 Genesis 构建代币发行活动
  5. 05用 DAS API 获取数字资产数据

适用场景

  1. 01为 Solana 应用创建和管理 NFT
  2. 02以压缩形式铸造大规模数字资产
  3. 03配置带有门控条件的 NFT 集合发行
  4. 04构建代币发行并查询不同标准的资产

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sendaifun/skills --skill metaplex

安装后在 Claude Code 中输入/metaplex确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

docs/
troubleshooting.md
examples/bubblegum/
compressed-nfts.ts
examples/candy-machine/
launch-collection.ts
examples/core/
create-nft.ts
examples/genesis/
token-launch.ts
examples/token-metadata/
create-nft.ts
resources/
program-ids.md
protocol-fees.md
sdk-packages.md
templates/
metaplex-client.ts

详细介绍

Metaplex 协议开发指南

一份全面的指南,介绍如何使用 Metaplex 协议在 Solana 上构建 NFT、数字资产和代币发行项目。Metaplex 协议是行业标准,为 99% 的 Solana NFT 和代币提供支持。

什么是 Metaplex?

Metaplex 是 Solana 上领先的代币化协议,提供用于创建、销售和管理数字资产的智能合约和工具。从简单的 NFT 到包含数十亿资产的压缩集合,从公平代币发行到混合代币/NFT 系统,Metaplex 都能提供基础设施。

关键统计数据
  • 99% 的 Solana NFT 使用 Metaplex 标准
  • 促成的交易金额超过 $10B
  • 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

核心程序(主网与开发网)
程序地址
MPL CoreCoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d
Token MetadatametaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s
BubblegumBGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY
Candy Machine V3CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR
Candy GuardGuard1JwRhJkVH6XZhzoYxeBVQe872VH6QggF4BWmS9g
Core Candy MachineCMACYFENjoBMHzapRXyo1JZkVS6EtaDDzkjMrmQLvr4J
Core Candy GuardCMAGAKJ67e9hRZgfC5SFTbZH8MgEmtqazKXjmkaJjWTJ
MPL HybridMPL4o4wMzndgh8T1NVDxELQCj5UQfYTYEkabX3wNKtb
Inscription1NSCRfGeyo7wPUazGbaPBUsTM49e1k2aXewHGARfzSo
SPL 程序(必需)
程序地址
SPL TokenTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Token 2022TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
Associated TokenATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL
Account CompressioncmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK

快速开始

安装
# 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 都使用 Umi,这是一个模块化的 Solana 框架:

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?
特性CoreToken Metadata
每个 NFT 的账户数14+
铸造成本~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

Solana 的原始 NFT 标准,使用程序派生地址(PDA)。

使用 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。

成本比较
Collection SizeBubblegum CostToken Metadata Cost
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);
铸造到 Collection
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);
可用守卫(21+)
GuardDescription
solPayment铸造时收取 SOL
tokenPayment收取 SPL 代币
nftPayment要求支付 NFT
startDate设置铸造开始时间
endDate设置铸造结束时间
mintLimit限制每个钱包的铸造数量
allowListMerkle Tree 许可名单
tokenGate要求持有代币
nftGate要求持有 NFT
botTax对铸造失败进行惩罚
gatekeeper验证码验证
freezeSolPayment冻结 SOL,直到满足条件
freezeTokenPayment冻结代币,直到满足条件
addressGate限制为指定地址
allocation限制每组的铸造总量
redeemedAmount铸造 X 次后停止
thirdPartySigner要求额外签名
token2022Payment使用 Token-2022 支付
nftBurn销毁 NFT 以进行铸造
tokenBurn销毁代币以进行铸造
programGate限制调用程序

Genesis(代币发行)

在 Solana 上进行公平的代币生成事件(TGE)。

发行类型
TypeDescriptionPrice Discovery
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);

铭文

直接在链上存储数据(最大 10MB)。

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)

协议费用

ProgramOperationFee
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创建免费
GenesisLaunch Pool存款/取款 2%,毕业时 5%
GenesisPresale存款 2%,毕业时 5%
MPL-Hybrid兑换0.005 SOL

最佳实践

选择合适的标准
Use CaseRecommended
新 NFT 系列Core
大型系列(10K+)Bubblegum
带版税的 PFPCore 或 pNFT
游戏道具Core(插件)
现有生态系统Token Metadata
代币发行Genesis
混合代币/NFTMPL-Hybrid
安全性
  1. 切勿分享私钥 - 在浏览器中使用钱包适配器
  2. 验证交易 - 签名前务必检查
  3. 在 devnet 上测试 - 使用 devnet,然后再使用 mainnet
  4. 审计智能合约 - 如果构建自定义守卫
性能
  1. 批量操作 - 使用交易构建器
  2. 缓存 DAS 响应 - 减少 API 调用
  3. 使用压缩 - 大型系列使用 Bubblegum
  4. 优先费用 - 网络拥堵时添加

资源

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

评论

支持 Markdown