6. Metaplex Core 标准

Metaplex Core 标准:NFT 的重塑

1. 重新设计的动机

我们之前学习的 Token Metadata 标准虽然功能完善,但其建立在 SPL Token 之上的"增强式"设计带来了固有的效率问题:

  1. 账户开销:创建一个完整的 NFT 需要 Mint Account、Token Account、Metadata Account、Master Edition Account 至少 4 个账户,每个账户都需要支付租金。
  2. 交易复杂度:涉及多个账户的操作需要在一个交易中包含所有账户引用,增加了交易大小和计算成本。
  3. 冗余设计:SPL Token 的余额账本对 NFT 来说是过度设计——NFT 的数量永远是 0 或 1,不需要复杂的余额追踪。
  4. 扩展困难:添加新功能(如 pNFT 的 Token Record)意味着添加更多账户。

2. Core 标准的设计理念

2024 年推出的 Metaplex Core 采用了完全不同的方法:不再依赖 SPL Token,而是从零构建一个专门为 NFT 优化的程序。

核心设计原则:

  • 单账户存储:所有信息存储在一个 Asset 账户中。
  • 内置所有权:直接在账户中记录 owner,无需额外的 Token Account。
  • 插件系统:通过模块化插件扩展功能,而非添加新账户。
  • 按需分配:只在需要时分配存储空间。

3. Asset 账户结构

在 Core 标准中,NFT 就是一个 Asset 账户。

rust
pub struct AssetV1 { pub key: Key, // 账户类型标识 pub owner: Pubkey, // 当前所有者 (直接记录在这里!) pub update_authority: UpdateAuthority, // 更新权限 pub name: String, // 名称 pub uri: String, // 元数据 URI pub seq: Option<u64>, // 序列号(用于索引) } pub enum UpdateAuthority { None, // 不可更新 Address(Pubkey), // 单个地址 Collection(Pubkey), // 继承自集合 }

优势:所有权转移变得极其简单。转账只需更新 Asset 账户中的 owner 字段。不需要创建新的 Token Account,不需要关闭旧账户,也不需要多账户协调。


4. 插件系统 (The Plugin System)

Core 的插件系统是其最大的创新。插件数据直接附加在 Asset 账户数据的末尾,通过头部索引定位。这使得我们可以在不改变账户地址的情况下,动态地为 NFT 添加功能。

账户内存布局:

┌─────────────────────────────────────────────────────────┐ │ Asset Account │ ├─────────────────────────────────────────────────────────┤ │ Core Data (固定部分) │ │ ├─ key, owner, update_authority │ │ └─ name, uri, seq │ ├─────────────────────────────────────────────────────────┤ │ Plugin Header │ │ └─ 记录已安装的插件列表 │ ├─────────────────────────────────────────────────────────┤ │ Plugin Registry │ │ └─ 每个插件的 offset 和 authority │ ├─────────────────────────────────────────────────────────┤ │ Plugin Data │ │ ├─ [Royalties Plugin Data] │ │ ├─ [Freeze Plugin Data] │ │ └─ [Attributes Plugin Data] │ └─────────────────────────────────────────────────────────┘

常用插件:

插件功能典型用途
Royalties定义版税规则创作者收益,协议层强制执行。
FreezeDelegate允许指定地址冻结资产借贷抵押、托管、质押。
TransferDelegate允许指定地址转移资产市场挂单 (无需转移 NFT)。
BurnDelegate允许指定地址销毁资产游戏中的消耗品机制。
Attributes链上存储属性游戏道具、动态 NFT (完全上链)。
PermanentFreezeDelegate永久冻结灵魂绑定代币 (SBT)。

插件权限模型:

每个插件有独立的权限控制,这允许精细的权限分离。

rust
pub enum PluginAuthority { None, // 无法管理 Owner, // 资产所有者管理 UpdateAuthority, // 更新权限管理 (通常是项目方) Address(Pubkey), // 指定地址管理 (例如:质押合约) }

5. Collection 在 Core 中的简化

Core 中的集合管理更加直观。创建集合时生成一个 Collection Asset。 普通 Asset 通过设置 update_authority = UpdateAuthority::Collection(collection_address) 自动成为该集合的成员。

不需要额外的验证步骤,集合关系在创建时即确定,且天然防伪。


6. 成本对比

以创建一个带基本元数据的 NFT 为例:

项目Token Metadata (Legacy)Metaplex Core
账户数量4 (Mint, Token, Meta, Edition)1 (Asset)
大约租金成本~0.015 SOL~0.003 SOL
交易大小~800 bytes~400 bytes
计算单元 (CU)~150,000~50,000

Core 标准显著降低了成本,尤其适合大规模铸造场景(如游戏物品、DePIN 设备)。


7. 实战代码:使用 Umi 操作 Core Asset

typescript
import { createV1, fetchAssetV1, transferV1, addPluginV1, createPlugin, ruleSet, } from '@metaplex-foundation/mpl-core'; import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'; import { generateSigner, keypairIdentity, publicKey } from '@metaplex-foundation/umi'; // 1. 初始化 Umi const umi = createUmi('https://api.devnet.solana.com').use(keypairIdentity(yourKeypair)); // 2. 创建 Core Asset async function createCoreAsset() { const assetSigner = generateSigner(umi); await createV1(umi, { asset: assetSigner, name: 'My Core NFT', uri: 'https://example.com/metadata.json', plugins: [ { plugin: createPlugin({ type: 'Royalties', data: { basisPoints: 500, // 5% creators: [{ address: umi.identity.publicKey, percentage: 100 }], ruleSet: ruleSet('None'), }, }), authority: { type: 'UpdateAuthority' }, }, { plugin: createPlugin({ type: 'Attributes', // 链上属性 data: { attributeList: [ { key: 'rarity', value: 'legendary' }, { key: 'power', value: '100' }, ], }, }), authority: { type: 'UpdateAuthority' }, }, ], }).sendAndConfirm(umi); return assetSigner.publicKey; } // 3. 添加插件 (例如冻结委托) async function addFreezePlugin(assetAddress, delegate) { await addPluginV1(umi, { asset: publicKey(assetAddress), plugin: createPlugin({ type: 'FreezeDelegate', data: { frozen: false }, }), // 指定只有 delegate 地址可以操作此插件 initAuthority: { type: 'Address', address: publicKey(delegate) }, }).sendAndConfirm(umi); }

8. 标准选择指南

场景推荐标准原因
高价值艺术品Token Metadata (pNFT)生态兼容性最好,版税保障,市场支持最完善。
游戏道具Core低成本,高性能,可动态更新链上属性,易于集成。
大规模铸造Core成本优势明显 (0.003 SOL vs 0.015 SOL)。
已有市场集成Token Metadata部分老牌市场可能尚未完全支持 Core。
新项目起步Core更现代的架构,更简单的代码逻辑。
JSPlayground
EDITOR ACTIVE
Initializing JS Environment...

Metaplex Core 实验室

旧标准需要维护 4 个相互关联的账户来代表 1 个 NFT。这种“拼凑”的架构虽然有效,但成本高昂且难以扩展。
Mint
Master
Edition
Token
Account
Metadata
PDA