Metaplex Compressed NFTで「DeserializingEmptyBufferError」エラー

Metaplex Bubblegum(Compressed NFT)を使って、cNFT(Compressed NFT)のMint時のSignatureをもとにAsset IDを取得したい(MintだけするとAsset IDが取得できないので)。
そこで、Asset IDを取得するプログラムを実行していたところ、以下のようなエラーが発生した。

前提

  • Merkle Tree作成済み
  • cNFTをMint(Collection紐づけ)してSignatureを取得済み
  • Merkle TreeとSignatureの値が正しいことは確認済み(空の値だったり、存在しない値ではない)

現象

parseLeafFromMintSignature を実行すると以下のエラー。

DeserializingEmptyBufferError: Serializer [publicKey] cannot deserialize empty buffers.
    at Object.deserialize (/user/factory/node_modules/@metaplex-foundation/umi-serializers/src/publicKey.ts:38:15)
    at forEach (/user/factory/node_modules/@metaplex-foundation/umi-serializers/src/struct.ts:51:47)
    at Array.forEach (<anonymous>)
    at Object.deserialize (/user/factory/node_modules/@metaplex-foundation/umi-serializers/src/struct.ts:50:14)
    at Object.deserialize (/user/factory/node_modules/@metaplex-foundation/umi-serializers/src/dataEnum.ts:165:50)
    at parseLeafFromMintV1Transaction (/user/factory/node_modules/@metaplex-foundation/mpl-bubblegum/src/leafAssetId.ts:40:44)
import {
  LeafSchema,
  parseLeafFromMintV1Transaction,
  findLeafAssetIdPda,
} from '@metaplex-foundation/mpl-bubblegum';

原因

cNFTのSignatureからAsset IDを取得するには、以下2種類が用意されている。

  • parseLeafFromMintV1Transaction ← Collectionに紐づけないでcNFTをMintした場合
  • parseLeafFromMintToCollectionV1Transaction ← Collectionに紐づけてcNFTをMintした場合

Collectionに紐づけてcNFTをMintしていたのに、上記の1番目「Collectionに紐づけないでcNFTをMintした場合」の関数を読んでしまったことが原因だった。

対応

parseLeafFromMintToCollectionV1Transaction を読み込むようにする。

import {
  LeafSchema,
  parseLeafFromMintToCollectionV1Transaction, // ← 変更済み
  findLeafAssetIdPda,
} from '@metaplex-foundation/mpl-bubblegum';