機能

アセットのバーン

アセットの所有者は、Token MetadataプログラムのBurn命令を使用してアセットをバーンできます。これにより、アセットに関連する可能性のあるすべてのアカウントが閉じられ、閉じられたアカウントで以前保持されていた様々な家賃免除手数料が所有者に転送されます。この命令は以下の属性を受け取ります:

  • Authority: バーンを承認する署名者。通常、これはアセットの所有者ですが、「委任された権限」ページで説明されているように、特定の委任された権限も所有者の代わりにアセットをバーンできることに注意してください。
  • Token Owner: アセットの現在の所有者の公開鍵。
  • Token Standard: バーンされるアセットの標準。この命令は、アセットをバーンするための統一されたインターフェースを提供するために、すべてのToken Standardで動作します。つまり、プログラマブルでないアセットはSPL TokenプログラムのBurn命令を直接使用してバーンできることに注意する価値があります。

Burn命令によって閉じられる正確なアカウントは、バーンされるアセットのToken Standardによって異なります。以下は、各Token Standardのアカウントを要約した表です:

Token StandardMintTokenMetadataEditionToken RecordEdition Marker
NonFungible
NonFungibleEdition✅ 全プリントがバーンされた場合
Fungible and FungibleAsset✅ 全トークンがバーンされた場合
ProgrammableNonFungible

SPL TokenプログラムがMintアカウントの閉じることを許可しないため、Mintアカウントは決して閉じられないことに注意してください。

以下は、Token MetadataでアセットをバーンするためのSDKの使用方法です。

NFTバーン

1import { publicKey } from '@metaplex-foundation/umi';
2import { burnV1, TokenStandard } from '@metaplex-foundation/mpl-token-metadata';
3
4// Assuming umi is set up with mplTokenMetadata plugin
5// See getting-started for full setup
6
7const mintAddress = publicKey('mintAddress...');
8
9// Burn the NFT (removes all accounts and closes token account)
10await burnV1(umi, {
11 mint: mintAddress,
12 authority: umi.identity,
13 tokenOwner: umi.identity.publicKey,
14 tokenStandard: TokenStandard.NonFungible,
15}).sendAndConfirm(umi);
16
17console.log('NFT burned:', mintAddress);

pNFTバーン

pNFTでは、命令が動作するために追加のアカウントを渡す必要がある場合があります。これらには以下が含まれる場合があります:

  • tokenAccount
  • tokenRecord
  • authorizationRules
  • authorizationRulesProgram
1import { publicKey } from '@metaplex-foundation/umi';
2import { burnV1, TokenStandard } from '@metaplex-foundation/mpl-token-metadata';
3
4// Assuming umi is set up with mplTokenMetadata plugin
5
6const mintAddress = publicKey('mintAddress...');
7
8// Burn the Programmable NFT
9// Note: pNFTs have Token Record accounts that are also cleaned up
10await burnV1(umi, {
11 mint: mintAddress,
12 authority: umi.identity,
13 tokenOwner: umi.identity.publicKey,
14 tokenStandard: TokenStandard.ProgrammableNonFungible,
15}).sendAndConfirm(umi);
16
17console.log('pNFT burned:', mintAddress);