Bubblegum

圧縮NFTの解凍

v1機能

Token Metadata NFTへの解凍は、Bubblegum v1でのみ利用可能です。

圧縮NFTの所有者が、それを通常のNFTに解凍することが可能です。

これは、Mintアカウント、Metadataアカウント、Master EditionアカウントなどのオンチェーンアカウントがそのNFT用に作成されることを意味します。これにより、NFTは圧縮NFTではできない特定の操作を実行し、圧縮NFTをサポートしていないプラットフォームとやりとりし、一般的にNFTエコシステムとの相互運用性を向上させることができます。

解凍プロセス

圧縮NFTの解凍は、NFTの所有者によって開始される2段階のプロセスです。

  1. まず、所有者は圧縮NFTをVoucherとRedeem(償還)する必要があります。これにより、Bubblegum treeからリーフが削除され、そのリーフが一度treeに存在していたことの証明として機能するVoucherアカウントが作成されます。

  2. 次に、所有者はVoucherを通常のNFTにDecompress(解凍)する必要があります。この時点で、通常のNFTのすべてのアカウントが圧縮NFTと同じデータで作成されます。あるいは、所有者はCancel Redeem命令を使用してプロセスを逆転させることができ、これによりBubblegum tree上でリーフが復元され、Voucherアカウントが閉じられます。cNFTが完全に解凍されると、Cancel Redeem命令はもはや使用できず、したがってプロセスは逆転できなくなることに注意してください。

圧縮NFTの償還

解凍プロセスの最初のステップを開始するために、圧縮NFTの所有者はRedeem命令を送信し、トランザクションに署名する必要があります。これにより、解凍プロセスの次のステップで使用されるcNFT用のVoucherアカウントが作成されます。

この命令はBubblegum TreeからリーフKを削除することに注意してください。したがって、削除する圧縮NFTの整合性を検証するために追加のパラメータを提供する必要があります。これらのパラメータはリーフを変更するすべての命令に共通であるため、以下のFAQに文書化されています。幸い、Metaplex DAS APIを使用してこれらのパラメータを自動的に取得するヘルパーメソッドを使用できます。

圧縮NFTの償還

import { getAssetWithProof, redeem } from '@metaplex-foundation/mpl-bubblegum'
const assetWithProof = await getAssetWithProof(umi, assetId)
await redeem(umi, {
...assetWithProof,
leafOwner: currentLeafOwner,
}).sendAndConfirm(umi)

償還されたNFTの解凍

解凍プロセスを完了するために、cNFTの所有者は償還されたVoucherアカウントを通常のNFTに変換するDecompress命令を送信する必要があります。以下のパラメータを提供する必要があります:

  • Mint: 作成するNFTのmintアドレス。これは圧縮NFTのAsset ID、つまりMerkle Treeアドレスとリーフのインデックスから派生したPDAでなければなりません。
  • Voucher: 前のステップで作成されたVoucherアカウントのアドレス。このアドレスも、Merkle Treeアドレスとリーフのインデックスから派生します。
  • Metadata: cNFTのすべてのデータを含むメタデータオブジェクト。この属性は圧縮NFTのデータと正確に一致する必要があります。そうでないと、ハッシュが一致せず、解凍が失敗します。

ここでも、SDKが提供するヘルパー関数を使用して、Metaplex DAS APIからこれらの属性のほとんどを取得し、解析できます。

償還された圧縮NFTの解凍

import {
getAssetWithProof,
findVoucherPda,
decompressV1,
} from '@metaplex-foundation/mpl-bubblegum'
const assetWithProof = await getAssetWithProof(umi, assetId)
await decompressV1(umi, {
...assetWithProof,
leafOwner: currentLeafOwner,
mint: assetId,
voucher: findVoucherPda(umi, assetWithProof),
}).sendAndConfirm(umi)

償還されたNFTのキャンセル

所有者がcNFTの解凍について気が変わった場合、Cancel Redeem命令を送信することで解凍プロセスをキャンセルできます。これにより、リーフがtreeに追加され、Voucherアカウントが閉じられます。Decompress命令と同様に、Voucherアドレスを提供する必要があり、Metaplex DAS APIを使用して取得できる他の属性も必要です。

償還された圧縮NFTの解凍をキャンセル

import {
getAssetWithProof,
findVoucherPda,
cancelRedeem,
} from '@metaplex-foundation/mpl-bubblegum'
const assetWithProof = await getAssetWithProof(umi, assetId)
await cancelRedeem(umi, {
...assetWithProof,
leafOwner: currentLeafOwner,
voucher: findVoucherPda(umi, assetWithProof),
}).sendAndConfirm(umi)