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