cNFTで「EnumDiscriminatorOutOfRangeError」「DeserializingEmptyBufferError」エラー

@metaplex-foundation/mpl-bubblegum のv3.1.2と、v4.0.0で発生しているエラー。

現象

@metaplex-foundation/mpl-bubblegum のv3.1.2で、新規にcNFTをMintしてから「parseLeafFromMintToCollectionV1Transaction」を実行すると以下のエラー。

/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/umi-serializers/src/dataEnum.ts:159
        throw new EnumDiscriminatorOutOfRangeError(
              ^
EnumDiscriminatorOutOfRangeError: Enum discriminator out of range. Expected a number between 0 and 0, got 159.
    at Object.deserialize (/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/umi-serializers/src/dataEnum.ts:159:15)
    at parseLeafFromMintToCollectionV1Transaction (/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/mpl-bubblegum/src/leafAssetId.ts:57:44)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async parseLeafFromMintToCollectionSignature (/Users/bubblegum_CompressedNFT/src/parseLeafFromMintToCollectionSignature.ts:38:28)

一方で、@metaplex-foundation/mpl-bubblegum のv4.0.0で、v3.1.2でMint済みのcNFTで「parseLeafFromMintToCollectionV1Transaction」を実行すると以下のエラー。

/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/umi-serializers/src/publicKey.ts:38
        throw new DeserializingEmptyBufferError('publicKey');
              ^
DeserializingEmptyBufferError: Serializer [publicKey] cannot deserialize empty buffers.
    at Object.deserialize (/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/umi-serializers/src/publicKey.ts:38:15)
    at forEach (/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/umi-serializers/src/struct.ts:51:47)
    at Array.forEach (<anonymous>)
    at Object.deserialize (/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/umi-serializers/src/struct.ts:50:14)
    at Object.deserialize (/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/umi-serializers/src/dataEnum.ts:165:50)
    at parseLeafFromMintToCollectionV1Transaction (/Users/bubblegum_CompressedNFT/node_modules/@metaplex-foundation/mpl-bubblegum/src/leafAssetId.ts:57:44)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async parseLeafFromMintToCollectionSignature (/Users/bubblegum_CompressedNFT/src/parseLeafFromMintToCollectionSignature.ts:38:28)

原因

仕様変更があったらしく、v3系とv4系でcNFTの仕様が異なるっぽい。

対応

bubblegumを最新v4.0.0にして、cNFTをMintし直す。

または、バージョンとMint時期の組み合わせだけのため、バージョンを組み合わせて対応する。
整理すると、以下のような検証結果になった(2024年4月29日現在で、やや不安定のため、また状況変わる可能性大)。

2024年4月以前にMint 2024年4月以降にMint
v3.1.2 操作可能 操作不可
v4.0.0 操作可能 操作可能

参考

Metaplex Discord

Metaplex Bubblegum (Compressed NFT Program) has been deployed to devnet along with package v4.0.0 and crate v0.1.3.

This deployment removes a deprecated CPI to Token Metadata (consequently saving up 30K CU and removing two required accounts).

Please note that this resulted in a breaking change to the parseLeafFromMintToCollectionV1Transaction method, so users must upgrade to v4.0.0 to continue using the method.

No changes are required if the above is unused.

https://www.npmjs.com/package/@metaplex-foundation/mpl-bubblegum
https://crates.io/crates/mpl-bubblegum

Metaplex Bubblegum (圧縮 NFT プログラム) は、パッケージ v4.0.0 およびクレート v0.1.3 とともに devnet にデプロイされました。

この展開では、非推奨の CPI からトークン メタデータが削除されます (その結果、30,000 CU が節約され、2 つの必要なアカウントが削除されます)。

これにより、parseLeafFromMintToCollectionV1Transaction メソッドに重大な変更が加えられたため、このメソッドを引き続き使用するには、ユーザーは v4.0.0 にアップグレードする必要があることに注意してください。

上記を使用しない場合は変更の必要はありません。