功能
创建 Asset
Last updated January 31, 2026
本指南展示如何使用 Metaplex Core SDK 在 Solana 上创建 Core Asset(NFT)。您将上传链下元数据,创建链上 Asset 账户,并可选择将其添加到 Collection 或附加插件。
您将构建
包含以下内容的 Core Asset:
- 存储在 Arweave 上的链下元数据(名称、图像、属性)
- 具有所有权和元数据 URI 的链上 Asset 账户
- 可选:Collection 成员资格
- 可选:插件(版税、冻结、属性)
摘要
通过将元数据 JSON 上传到去中心化存储,然后使用 URI 调用 create() 来创建 Core Asset。Asset 可以独立铸造或铸造到 Collection 中,并且可以在创建时包含插件。
- 将元数据 JSON 上传到 Arweave/IPFS,获取 URI
- 使用 name、URI 和可选插件调用
create() - 对于收藏:传递
collection参数 - 每个资产成本约 0.0029 SOL
范围外
Token Metadata NFT(使用 mpl-token-metadata)、压缩 NFT(使用 Bubblegum)、同质化代币(使用 SPL Token)和 NFT 迁移。
快速开始
跳转至: 上传元数据 · 创建 Asset · 带 Collection · 带插件
- 安装:
npm install @metaplex-foundation/mpl-core @metaplex-foundation/umi - 上传元数据 JSON 以获取 URI
- 调用
create(umi, { asset, name, uri }) - 在 core.metaplex.com 验证
前提条件
- 配置了签名者和 RPC 连接的 Umi
- 用于交易费用的 SOL(每个资产约 0.003 SOL)
- 准备上传的 元数据 JSON(名称、图像、属性)
创建流程
- 上传链下数据。 存储包含名称、描述、图像 URL 和属性的 JSON 文件。文件必须通过公共 URI 可访问。
- 创建链上 Asset 账户。 使用元数据 URI 调用
create指令来铸造 Asset。
上传链下数据
使用任何存储服务(Arweave、IPFS、AWS)上传您的元数据 JSON。Umi 为常见服务提供上传器插件。有关所有可用元数据字段,请参阅 JSON Schema。
import { irysUploader } from '@metaplex-foundation/umi-uploader-irys'
// 配置上传器(Irys、AWS 等)
umi.use(irysUploader())
// 首先上传图像
const [imageUri] = await umi.uploader.upload([imageFile])
// 上传元数据 JSON
const uri = await umi.uploader.uploadJson({
name: 'My NFT',
description: 'This is my NFT',
image: imageUri,
attributes: [
{ trait_type: 'Background', value: 'Blue' },
],
})
获得 URI 后,您可以创建 Asset。
创建 Asset
使用 create 指令铸造新的 Core Asset。
1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { create } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4
5// Initialize UMI
6const umi = createUmi('https://api.devnet.solana.com')
7 .use(mplCore())
8
9// Create a new NFT asset
10const asset = await create(umi, {
11 name: 'My NFT',
12 uri: 'https://example.com/metadata.json'
13}).sendAndConfirm(umi)
14
15console.log('Asset created:', asset.publicKey)
将 Asset 创建到 Collection 中
要将 Asset 作为 Collection 的一部分创建,请传递 collection 参数。Collection 必须已经存在。
1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { create, fetchCollection } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { generateSigner, publicKey } from '@metaplex-foundation/umi'
5
6// Initialize UMI
7const umi = createUmi('https://api.devnet.solana.com')
8 .use(mplCore())
9
10const collectionAddress = publicKey('YOUR_COLLECTION_ADDRESS')
11
12// Fetch the existing collection
13const collection = await fetchCollection(umi, collectionAddress)
14
15// Generate a new keypair for the asset
16const assetSigner = generateSigner(umi)
17
18// Create asset in the collection
19await create(umi, {
20 asset: assetSigner,
21 collection,
22 name: 'Collection Item #1',
23 uri: 'https://example.com/item1.json',
24}).sendAndConfirm(umi)
25
26console.log('Asset created in collection:', assetSigner.publicKey)
有关创建 Collection,请参阅 Collection。
使用插件创建 Asset
通过在 plugins 数组中传递来在创建时添加插件。此示例添加 Royalties 插件:
1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { create, ruleSet } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { generateSigner, publicKey } from '@metaplex-foundation/umi'
5
6// Initialize UMI
7const umi = createUmi('https://api.devnet.solana.com')
8 .use(mplCore())
9
10const creator = publicKey('YOUR_CREATOR_ADDRESS')
11
12// Generate a new keypair for the asset
13const assetSigner = generateSigner(umi)
14
15// Create asset with Royalties plugin
16await create(umi, {
17 asset: assetSigner,
18 name: 'NFT with Royalties',
19 uri: 'https://example.com/metadata.json',
20 plugins: [
21 {
22 type: 'Royalties',
23 basisPoints: 500, // 5%
24 creators: [
25 { address: creator, percentage: 100 },
26 ],
27 ruleSet: ruleSet('None'),
28 },
29 ],
30}).sendAndConfirm(umi)
31
32console.log('Asset created with plugins:', assetSigner.publicKey)
常用插件
以下是一些常用的插件。完整列表请参阅 插件概述。
- Royalties - 创作者版税强制
- Freeze Delegate - 允许冻结/解冻
- Burn Delegate - 允许销毁
- Transfer Delegate - 允许转移
- Update Delegate - 允许元数据更新
- Attributes - 链上键/值数据 完整列表请参阅 插件概述。
常见错误
Asset account already exists
资产密钥对已被使用。生成新的签名者:
const assetSigner = generateSigner(umi) // 必须唯一
Collection not found
收藏地址不存在或不是有效的 Core Collection。验证地址并确保您已先创建 Collection。
Insufficient funds
您的付款钱包需要约 0.003 SOL 用于租金。使用以下命令添加资金:
solana airdrop 1 <WALLET_ADDRESS> --url devnet
注意事项
asset参数必须是 新密钥对 - 不能重用现有账户- 如果铸造给不同的所有者,请传递
owner参数 - 创建时添加的插件比之后添加更便宜(一个交易 vs 两个)
- 在立即获取资产的脚本中创建资产时使用
commitment: 'finalized'
快速参考
程序 ID
| 网络 | 地址 |
|---|---|
| Mainnet | CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d |
| Devnet | CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d |
最小代码
import { generateSigner } from '@metaplex-foundation/umi'
import { create } from '@metaplex-foundation/mpl-core'
const asset = generateSigner(umi)
await create(umi, { asset, name: 'My NFT', uri: 'https://...' }).sendAndConfirm(umi)
成本明细
| 项目 | 成本 |
|---|---|
| Asset 账户租金 | ~0.0029 SOL |
| 交易费用 | ~0.000005 SOL |
| 总计 | ~0.003 SOL |
FAQ
Core Asset 和 Token Metadata NFT 有什么区别?
Core Asset 使用单个账户,成本降低约 80%。Token Metadata 使用 3 个以上账户(mint、metadata、token)。新项目推荐使用 Core。
可以在一个交易中创建多个资产吗?
不可以。每个 create 指令创建一个资产。大量铸造请使用 Core Candy Machine 或批量交易。
需要先创建 Collection 吗?
不需要。Asset 可以不属于 Collection 而存在。但是,Collection 可以启用收藏级别的版税和操作。
如何铸造到不同的钱包?
传递 owner 参数:
await create(umi, { asset, name, uri, owner: recipientAddress })
应该使用什么元数据格式?
使用标准 NFT 元数据格式,包含 name、description、image 和可选的 attributes 数组。请参阅 JSON Schema。
术语表
| 术语 | 定义 |
|---|---|
| Asset | 代表 NFT 的 Core 链上账户 |
| URI | 指向链下元数据 JSON 的 URL |
| 签名者 | 签署交易的密钥对(资产在创建时必须是签名者) |
| Collection | 将相关 Asset 分组的 Core 账户 |
| Plugin | 为 Asset 添加行为的模块化扩展 |
| 租金 | 在 Solana 上保持账户活跃所需的 SOL |
