高度
マークルツリーキャノピー
はじめに
SolanaのネットワーキングスタックはMTUサイズ1280バイトを使用し、ヘッダーを考慮すると、データに1232バイトが残ります。これが圧縮NFT(cNFT)に与える影響は、必要な証明がトランザクションサイズを占有しすぎるため、現在深度24を超えるマークルツリーの変更は不可能になることです。
これらの証明サイズの制限を回避するために、SPLアカウント圧縮は、マークルツリーの最上位ノードをキャッシュする機能を提供します。これはキャノピーと呼ばれ、同時マークルツリーアカウントの最後に保存されます。
深度dのツリーの上位nレベルをキャッシュすることで、証明を最初のd - nノードに切り捨てることができます。これにより、アカウント圧縮トランザクションのサイズを削減し、10億以上のcNFTを保存できる深度31までのツリーの変更を可能にします。
マークルツリーアカウントにキャノピーを初期化するには、追加のバイトでアカウントを初期化する必要があります。必要な追加バイト数は(2ⁿ⁺¹ - 1)* 32です。ここでnは、キャノピーにキャッシュしたいマークルツリーのレベル数です。
キャノピーは、同時マークルツリーが変更されるたびに更新されます。追加の作業は必要ありません。ただし、ツリーの作成後にキャノピーサイズを変更することはできません。
組み合わせやすさ vs. コスト削減
以下の表はcompressed.appの協力で生成され、キャノピーサイズによって1,000,000個のcNFTをミントする総コストがいかに大きく異なるかを示しています。
様々なキャノピー深度での1,000,000 cNFTのコスト
深度20のマークルツリーは1,048,576個のcNFTを保存できます。
| キャノピー深度 | 証明バイト | ストレージコスト | ミントコスト(LUTで3ミント/tx) | 総コスト |
|---|---|---|---|---|
| 0 | 640 | 0.3091 | 1.6667 | 1.9758 |
| 14 | 192 | 7.6067 | 1.6667 | 9.2734 |
| 17 | 96 | 58.6933 | 1.6667 | 60.36 |
キャノピー深度をゼロにする理由は、可能な限り安いミントを行うためです。ただし、これにはtransfer、delegate、burnなどの命令で大量の証明データを送信する必要があります。ゼロ深度キャノピーの場合、トランザクションサイズ制限の半分以上が証明データで消費され、Bubblegum命令を他のプログラム命令と組み合わせる能力に悪影響を与えます。
最終的に、キャノピーサイズの決定は、コストと組み合わせやすさのトレードオフを考慮する必要があります。この評価では、cNFTの使用目的、開発プラットフォームの互換性、ツリーの所有権構造などの要因を考慮に入れる必要があります。
