機能

エディションの印刷

すべてのNFTは、そのMaster Editionアカウントが適切に設定されている場合、複数のエディションとして印刷される可能性を持っています。このページでは、印刷可能なNFTを作成し、そこからエディションを印刷する方法を学びます。

印刷可能NFT

印刷可能NFTの所有者は、その最大供給量に達していない限り、そこから好きなだけエディションを印刷できます。

すべての非代替可能アセット(すなわち、NonFungibleおよびProgrammableNonFungibleトークン標準)は、作成時に印刷可能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トークン標準を使用します。
  • Master Editionアカウントを使用する代わりに、新しいエディションNFTはEditionアカウントを使用し、そのエディション番号と親NFTを追跡するために、親のMaster Editionアカウントのアドレスを保存します。
  • 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: Signerとしての印刷可能なNFTの所有者。印刷可能なNFTの所有者のみが、そこから新しいエディションを印刷できます。
  • Edition Token Account Owner: 新しいエディションNFTの所有者のアドレス。
  • Edition Number: 印刷する新しいエディションNFTのエディション番号。これは通常、Master Editionアカウントの現在のSupplyに1を加えた値です。
  • Token Standard: 印刷可能なNFTのトークン標準。NonFungibleまたはProgrammableNonFungibleです。

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);