機能

プログラマブルNFT

Token Metadataのバージョン1.7では、特にクリエイターがセカンダリセールでロイヤルティを執行できるプログラマブルNFTと呼ばれる新しいアセットクラスが導入されました。

Candy Machine Coreのバージョン1.0とCandy Guardのバージョン1.0以降、Candy MachineからプログラマブルNFTをミントすることが可能になり、既存のCandy Machineのトークン標準を更新することもできます。

新しいCandy Machineの場合

initializeV2と呼ばれる新しい命令がCandy Machine Coreプログラムに追加されました。この命令はinitialize命令に似ていますが、Candy Machineで使用したいトークン標準を指定できます。この命令は、新しく作成されたCandy MachineをV2とマークして、トークン標準を保存しないV1 Candy Machineと区別します。これらの新しいフィールドは、Candy Machineのシリアライゼーションロジックでの破壊的変更を避けるために、Candy Machineアカウントデータの既存のパディングを使用しています。

initializeV2命令は、通常のNFTをミントするCandy Machineを作成するためにも使用でき、したがってinitialize命令は非推奨になりました。NFTをミントする際にCandy Machine Coreに委譲するため、Candy Guardプログラムでは変更が不要であることに注意してください。

また、選択したトークン標準によっては、いくつかのオプションアカウントが必要になる場合があることに注意してください。例えば、すべてのミントされたプログラマブルNFTに特定のルールセットを割り当てるためにruleSetアカウントが提供される場合があります。ruleSetアカウントが提供されない場合、コレクションNFTのルールセット(存在する場合)を使用します。それ以外の場合、ミントされたプログラマブルNFTには単純にルールセットが割り当てられません。一方、通常のNFTをミントする際はruleSetアカウントは無視されます。

さらに、collectionDelegateRecordアカウントは、Token Metadataの新しいメタデータ委譲記録を参照するようになります。

詳細については、このドキュメントの「Candy Machineの作成」セクションを読むことをお勧めしますが、プログラマブルNFTをミントする新しいCandy Machineを作成するためにSDKを使用する方法の例を以下に示します。

新しいPNFT Candy Machineの作成

import { TokenStandard } from '@metaplex-foundation/mpl-token-metadata'
import { create } from '@metaplex-foundation/mpl-candy-machine'
import { generateSigner } from '@metaplex-foundation/umi'
await create(umi, {
// ...
tokenStandard: TokenStandard.ProgrammableNonFungible,
}).sendAndConfirm(umi)

APIリファレンス: create

既存のCandy Machineの場合

新しいsetTokenStandard命令を使用して、既存のCandy Machineのトークン標準を更新することが可能です。Candy Machine V1でこの命令を呼び出すと、Candy MachineもV2にアップグレードし、トークン標準をアカウントデータに保存します。

詳細については、このドキュメントの「トークン標準の更新」セクションを読むことをお勧めしますが、既存のCandy Machineのトークン標準をプログラマブルNFTに更新するためにSDKを使用する方法の例を以下に示します。

Candy Machineのトークン標準の変更

import { TokenStandard } from '@metaplex-foundation/mpl-token-metadata'
import { setTokenStandard } from '@metaplex-foundation/mpl-candy-machine'
await setTokenStandard(umi, {
candyMachine: candyMachine.publicKey,
collectionMint: candyMachine.collectionMint,
collectionUpdateAuthority,
tokenStandard: TokenStandard.ProgrammableNonFungible,
}).sendAndConfirm(umi)

APIリファレンス: setTokenStandard

さらに、プログラマブルNFTと互換性のあるコレクションの設定をサポートするために、新しいsetCollectionV2命令が追加されました。この命令は通常のNFTでも動作し、setCollection命令を非推奨にします。

ここでも、詳細についてはこのドキュメントの「コレクションの更新」セクションで読むことができます。

Candy Machineのコレクションの更新

import { setCollectionV2 } from '@metaplex-foundation/mpl-candy-machine'
await setCollectionV2(umi, {
candyMachine: candyMachine.publicKey,
collectionMint: candyMachine.collectionMint,
collectionUpdateAuthority: collectionUpdateAuthority.publicKey,
newCollectionMint: newCollectionMint.publicKey,
newCollectionUpdateAuthority,
}).sendAndConfirm(umi)

APIリファレンス: setCollectionV2

新しいミント命令

Candy Machine CoreとCandy Guardプログラムの両方のmint命令は、プログラマブルNFTのミントをサポートするように更新されました。この新しい命令はmintV2と呼ばれ、mint命令に似ていますが、追加のアカウントが渡される必要があります。ここでも、新しいmintV2命令は通常のNFTをミントするために使用でき、したがって既存のmint命令を非推奨にします。

ミント」ページ全体が新しいmintV2命令を使用するように更新されましたが、プログラマブルNFTでの使用方法の簡単な例を以下に示します。

Candy Machineからのミント

import { mintV2 } from '@metaplex-foundation/mpl-candy-machine'
import { setComputeUnitLimit } from '@metaplex-foundation/mpl-toolbox'
import { transactionBuilder, generateSigner } from '@metaplex-foundation/umi'
const nftMint = generateSigner(umi)
await transactionBuilder()
.add(setComputeUnitLimit(umi, { units: 800_000 }))
.add(
mintV2(umi, {
candyMachine: candyMachine.publicKey,
nftMint,
collectionMint: collectionNft.publicKey,
collectionUpdateAuthority: collectionNft.metadata.updateAuthority,
})
)
.sendAndConfirm(umi)

APIリファレンス: mintV2

Candy Guardプログラムが提供するガードのいくつかは、プログラマブルNFTをサポートするように更新されていることに注意してください。更新は通常のNFTをミントする際に破壊的変更を導入しませんが、トークン標準によってはミント時により多くの残りのアカウントが必要になる場合があります。

これらの変更の影響を受けるガードは以下のとおりです:

  • nftBurnnftPaymentガードは、燃焼/送信されるNFTがプログラマブルNFTである場合を許可するようになりました。
  • FreezeSolPaymentFreezeTokenPaymentガード。プログラマブルNFTは定義上常に凍結されているため、Utilityデリゲートを介してミントされた場合はロックされ、解凍条件が満たされた場合はアンロックされます。

追加の読み物

プログラマブルNFTとCandy Machineに関する以下のリソースが役立つ場合があります: