紹介
FAQ
Bubblegum V2とは何ですか?
Bubblegum V2は、いくつかの改良と新機能を導入するBubblegumプログラムの新しい反復です。 これは既知のBubblegumプログラムの一部ですが、命令とデータ構造は異なります。 Bubblegum V2では、cNFTはMetaplex Token Metadataコレクションの代わりにMPL-Coreコレクションを使用してコレクションにグループ化されます。また、凍結、解凍、ソウルバウンドNFTなどの新機能と以下のような追加機能も導入しています:
- 凍結・解凍機能: プロジェクト作成者は、特定のイベント中の転送を防ぐことや権利確定メカニズムの実装など、さまざまなユースケースでアセットをより詳細に制御するためにcNFTを凍結・解凍できるようになりました。
- MPL-Coreコレクション統合: Bubblegum V2 NFTは、トークンメタデータコレクションに限定されることなく、MPL-Coreコレクションに追加できるようになり、より大きなMetaplexエコシステムとの柔軟性と統合を可能にします。
- ロイヤリティ強制: Bubblegum V2はMPL-Coreコレクションを使用しているため、
ProgramDenyListなどを使用してcNFTにロイヤリティを強制することが可能です。 - ソウルバウンドNFT: cNFTをソウルバウンド(転送不可)にすることが可能になり、所有者のウォレットに永続的に紐づけられます。これは資格、出席証明、身元確認などに最適です。コレクションで
PermanentFreezeDelegateプラグインを有効にする必要があります。 - 永続転送の許可: コレクションで
PermanentTransferDelegateプラグインが有効になっている場合、永続転送デリゲートはリーフ所有者の相互作用なしにcNFTを新しい所有者に転送できます。
転送、デリゲート、バーンなどの操作に必要な引数はどのように見つけますか?
転送、デリゲート、バーンなどのBubblegumツリー内のリーフを置き換える命令を使用するたびに、プログラムは現在のリーフが有効で更新できることを確認するために使用される多くのパラメータを必要とします。これは、圧縮NFTのデータがオンチェーンアカウント内で利用できないため、プログラムがピースを埋めるために証明、リーフインデックス、ノンスなどの追加パラメータが必要だからです。
すべての情報は、getAssetとgetAssetProofの両方のRPCメソッドを使用してMetaplex DAS APIから取得できます。ただし、これらのメソッドからのRPCレスポンスと命令で期待されるパラメータは全く同じではなく、一方から他方への解析は簡単ではありません。
幸いなことに、私たちのSDKは、以下のコード例で見ることができるように、すべての重い作業を行うヘルパーメソッドを提供します。圧縮NFTのアセットIDを受け入れ、バーン、転送、更新などのリーフを置き換える命令に直接注入できる多くのパラメータを返します。
とはいえ、その解析を自分で行う必要がある場合のために、命令で期待されるパラメータとMetaplex DAS APIからそれらを取得する方法の簡単な内訳を以下に示します。ここでは、getAssetとgetAssetProof RPCメソッドの結果が、それぞれrpcAssetとrpcAssetProof変数を介してアクセス可能であると仮定します。
- リーフ所有者:
rpcAsset.ownership.ownerを介してアクセス可能。 - リーフデリゲート:
rpcAsset.ownership.delegateを介してアクセス可能で、nullの場合はrpcAsset.ownership.ownerにデフォルト設定する必要があります。 - マークルツリー:
rpcAsset.compression.treeまたはrpcAssetProof.tree_idを介してアクセス可能。 - ルート:
rpcAssetProof.rootを介してアクセス可能。 - データハッシュ:
rpcAsset.compression.data_hashを介してアクセス可能。 - 作成者ハッシュ:
rpcAsset.compression.creator_hashを介してアクセス可能。 - ノンス:
rpcAsset.compression.leaf_idを介してアクセス可能。 - インデックス:
rpcAssetProof.node_index - 2^max_depthを介してアクセス可能。ここでmax_depthはツリーの最大深度で、rpcAssetProof.proof配列の長さから推測できます。 - 証明:
rpcAssetProof.proofを介してアクセス可能。 - メタデータ: 現在、
rpcAssetレスポンス内のさまざまなフィールドから再構築する必要があります。
リーフを置き換える命令のパラメータを取得
Bubblegum UmiライブラリはPATHの説明に適合するgetAssetWithProofヘルパーメソッドを提供します。以下はtransfer命令を使用した使用例です。この場合、leafOwnerパラメータをSignerである必要があり、assetWithProofは所有者をPublic Keyとして提供するため、オーバーライドしています。
キャノピーサイズによっては、getAssetWithProofヘルパーのtruncateCanopy: trueパラメータを使用することが意味がある場合があります。これによりツリー設定を取得し、不要な証明を切り捨てます。これはトランザクションサイズが大きくなりすぎる場合に役立ちます。
import { getAssetWithProof, transfer } from '@metaplex-foundation/mpl-bubblegum'
const assetWithProof = await getAssetWithProof(umi, assetId,
// { truncateCanopy: true } // 証明を剪定するためのオプション
);
await transferV2(umi, {
...assetWithProof,
leafOwner: leafOwnerA, // 署名者として。
newLeafOwner: leafOwnerB.publicKey,
}).sendAndConfirm(umi);
await transferV2(umi, {
...assetWithProof,
