【完全保存版】Metaplexのバブルガムツリーを作ってみよう!
この記事は、こちらを翻訳・編集したものです。
なお、こちらで簡単な実装を行っています。
よかったら試してみてください。
1 はじめに
Compressed NFTのデータはトランザクション内に保存され、オンチェーンアカウントには保存されません。
Merkle Treeとその設定を追跡するためにいくつかのオンチェーンアカウントが必要です。
そのため、Compressed NFTをミントする前に以下の2つのアカウントを作成する必要があります。
1 Merkle Treeアカウント
このアカウントは一般的なMerkle Treeを保持し、データの真正性を検証するために使用されます。
Solanaが作成し維持しているAccount Compression Programによって所有されます。
Compressed NFTの真正性を検証するために使用します。
2 ツリー設定アカウント
この2つ目のアカウントは、Merkle Treeアカウントのアドレスから派生したPDAです。
Compressed NFTに特有の追加設定(ツリークリエーター、ミントされたcNFTの数など)を保存できます。
これら2つのアカウントがあれば、Compressed NFTをミントするために必要な全てが揃います。
メルクルツリーアカウントとそれに関連するツリー設定アカウントを「バブルガムツリー」と呼びます。
2 バブルガムツリーの作成
ここでは、バブルガムツリーを作成するために、2つのアカウントを作成する方法を見ていきます。
幸い、ライブラリが提供するCreate Tree操作を使用すると、このプロセスは簡単です。
この操作は様々なパラメータ(ほとんどはオプション)を受け取り、バブルガムツリーをカスタマイズできます。
最も重要なパラメータは次の通りです。
1 Merkle Tree
Merkle Treeアカウントを作成するために使用される新しく生成されたサインナー。
このアカウントはこのアドレスでアクセス可能になります。
2 ツリークリエーター
バブルガムツリーを管理し、Compressed NFTをミントできるアカウントのアドレス。
3 最大深度と最大バッファサイズ
最大深度パラメータはメルクルツリーが保持できるリーフの最大数(2^maxDepth)を計算するために使用されます。
最大バッファサイズパラメータはメルクルツリーの最小並行制限を示します。
つまり、ツリー内で並行して発生できる変更の数を定義します。
これらのパラメータは任意に選択できず、以下の表に示す事前定義された値から選択する必要があります。
4 公開設定
バブルガムツリーを公開するかどうか。この設定が公開されている場合、誰でもCompressed NFTをミントできます。
そうでない場合は、ツリークリエーターまたはツリーデリゲートのみがCompressed NFTをミントできます。
以下のコードは、ライブラリを使用してバブルガムツリーを作成する方法を示しています。
3 バブルガムツリーの取得
バブルガムツリーは2つのオンチェーンアカウントで構成されているため、どちらかのアカウントを取得する方法を見ていきます。
1 Merkle Treeの取得
Merkle Treeアカウントには、次のようなツリーに関する様々な情報が含まれています。
1 ツリーヘッダー
最大深度、最大バッファサイズ、ツリーの権限、およびツリーが作成されたときの作成スロットを格納します。
2 ツリー本体
ツリーの変更ログ(またはルーツ)、シーケンス番号などの低レベル情報を格納します。
Concurrent Merkle Treesについては専用のドキュメントページで詳しく説明しています。
3キャノピー
Merkle Treesキャノピーのページで説明されているように、キャノピーを格納します。
以下のコードは、ライブラリを使用してこれらのデータを取得する方法を示しています。
2 ツリー設定の取得
ツリー設定アカウントには、Compressed NFTに特有のデータが含まれています。次の情報を格納します。
1 バブルガムツリーのクリエーター
バブルガムツリーのクリエーター
2 バブルガムツリーのデリゲート
デリゲートが設定されていない場合はツリークリエーター。
3 バブルガムツリーの総容量
ツリーからミントできる最大のcNFT数。
4 ミントされた数
ツリー内にミントされたcNFTの数を追跡します。
この値は、メルクルツリーのリーフが一意であることを保証するためのNonce(「一度使用された番号」)値として使用されます。
したがって、このNonceは資産のツリースコープ一意識別子として機能します。
5 公開設定
誰でもツリーからcNFTをミントできるかどうかを示します。
以下のコードは、ライブラリを使用してこれらのデータを取得する方法を示しています。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊