功能

打印版本

当 NFT 的 Master Edition 账户配置正确时,每个 NFT 都有可能被打印为多个版本。在本页面,我们将学习如何创建可打印的 NFT 以及如何从中打印版本。

可打印的 NFTs

可打印 NFT 的所有者可以从中打印任意数量的版本,只要其最大供应量尚未达到。

每个非同质化资产 — 即 NonFungibleProgrammableNonFungible 代币标准 — 在创建时都可以成为可打印的 NFT。这是通过配置资产 Master Edition 账户的 Max Supply 属性来完成的。此属性是可选的,可以有以下值之一:

  • None:NFT 没有固定供应量。换句话说,NFT 是可打印的,并且具有无限供应量
  • Some(x):NFT 有固定的 x 个版本供应量。
    • x = 0 时,这意味着 NFT 不可打印
    • x > 0 时,这意味着 NFT 是可打印的,并且有 x 个版本的固定供应量

每当从可打印 NFT 创建新的打印版本时,会发生以下几件事:

  • 创建一个全新的版本 NFT,其数据与原始 NFT 匹配。唯一的区别是打印版本使用与原始 NFT 不同的代币标准。
    • 对于 NonFungible 资产,打印版本使用 NonFungibleEdition 代币标准。
    • 对于 ProgrammableNonFungible 资产,打印版本使用 ProgrammableNonFungibleEdition 代币标准。
  • 新版本 NFT 不使用 Master Edition 账户,而是使用 Edition 账户,该账户通过存储其父级 Master Edition 账户的地址来跟踪其版本号和父 NFT。
  • Master edition 账户的 Supply 属性增加 1。当 Supply 属性达到 Max Supply 属性时,NFT 将不再可打印。

设置 Master Edition NFT

要创建可打印的 NFT,我们需要配置 Token Metadata 程序 Create 指令Print Supply 属性。这将如上一节所示配置 Master Edition 账户的 Max Supply 属性。此属性可以是:

  • Zero:NFT 不可打印。
  • Limited(x):NFT 是可打印的,并且有 x 个版本的固定供应量。
  • Unlimited:NFT 是可打印的,并且具有无限供应量。

以下是如何使用我们的 SDK 创建可打印 NFT。

1import { percentAmount, generateSigner } from '@metaplex-foundation/umi';
2import { createNft, printSupply } from '@metaplex-foundation/mpl-token-metadata';
3
4// Assuming umi is set up with mplTokenMetadata plugin
5
6const mint = generateSigner(umi);
7
8await createNft(umi, {
9 mint,
10 name: 'My Master Edition NFT',
11 uri: 'https://example.com/my-nft.json',
12 sellerFeeBasisPoints: percentAmount(5.5),
13 printSupply: printSupply('Limited', [100]), // Or printSupply('Unlimited')
14}).sendAndConfirm(umi);
15
16console.log('Master Edition NFT created:', mint.publicKey);

从 Master Edition NFT 打印版本

一旦我们有了尚未达到其 Max Supply 的可打印 NFT,我们就可以从中打印新版本。这是通过调用 Token Metadata 程序的 Print 指令来完成的。此指令接受以下属性:

  • Master Edition Mint:可打印 NFT 的 Mint 账户地址。
  • Edition Mint:新版本 NFT 的 Mint 账户地址。这通常是一个新生成的 Signer,因为如果账户不存在,指令将创建它。
  • Master Token Account Owner:可打印 NFT 的所有者作为签名者。只有可打印 NFT 的所有者才能从中打印新版本。
  • Edition Token Account Owner:新版本 NFT 所有者的地址。
  • Edition Number:要打印的新版本 NFT 的版本号。这通常是 Master Edition 账户当前的 Supply 加 1。
  • Token Standard:可打印 NFT 的代币标准。可以是 NonFungibleProgrammableNonFungible

以下是如何使用我们的 SDK 从可打印 NFT 打印新版本。

1import { generateSigner } from '@metaplex-foundation/umi';
2import {
3 printV1,
4 fetchMasterEditionFromSeeds,
5} from '@metaplex-foundation/mpl-token-metadata';
6
7// Assuming umi, masterEditionMint, originalOwner, and ownerOfThePrintedEdition are set up
8
9const editionMint = generateSigner(umi);
10
11// (Optional) Fetch the master edition account to mint the next edition number.
12const masterEdition = await fetchMasterEditionFromSeeds(umi, {
13 mint: masterEditionMint,
14});
15
16await printV1(umi, {
17 masterTokenAccountOwner: originalOwner,
18 masterEditionMint,
19 editionMint,
20 editionTokenAccountOwner: ownerOfThePrintedEdition,
21 editionNumber: masterEdition.supply + 1n,
22 tokenStandard: TokenStandard.NonFungible,
23}).sendAndConfirm(umi);
24
25console.log('Edition printed:', editionMint.publicKey);