---
title: "圧縮NFTとは?"
description: "圧縮NFTとその仕組みについて解説"
---

# 圧縮NFTとは?

Solana上の圧縮NFT（Compressed NFTs）は、データを元帳自体に格納することで、大量のNFTのミントおよび管理コストを削減します。圧縮NFTのミントは従来型のNFTのミントに比べて大幅にコスト効率が良く、これにより新たなユースケースやSolanaのアクティブユーザーを増やす手段が生まれます。

この記事では、圧縮NFTとは何か、どのように機能するか、そして既存または新規のNFTを圧縮する方法について説明します。

## **圧縮NFTとは何か？**

**圧縮NFTとは、データをMerkleツリー構造で保存するSolana上のNFTのことで、Merkleルートはオンチェーンのアカウントに存在し、Merkleリーフはconsensusの対象ではあるもののオフチェーンであるSolanaの元帳に格納されます。これは従来型のNFTのように完全にオンチェーンで保存されるのとは異なります。**

**‍**通常のNFTと同様に、圧縮NFTもオンチェーンで発行・確認されますが、[Solana RPCプロバイダー](https://www.alchemy.com/overviews/solana-rpc)を使用してデータをオフチェーンで保存・処理することで、ストレージコストを最小限に抑えています。

圧縮NFTはインデクサーを使用してトランザクションデータを管理し、RPCとオンチェーンのスマートコントラクト間のデータクエリを可能にします。既存のスマートコントラクトが圧縮NFTと相互作用するためには、変更を加える必要があります。あるいは、圧縮NFTを解凍（decompress）することで、変更されていないSolanaプログラムと動作させることもできます。

### **圧縮NFTを作ったのは誰か？**

圧縮NFTは、[Solana Labs](https://www.alchemy.com/dapps/solana)のMerkleツリープログラム（[**account-compression**](https://github.com/solana-labs/solana-program-library/tree/master/account-compression)として知られる）と、[Metaplex](https://www.alchemy.com/dapps/metaplex)財団の圧縮NFTプログラム（Bubblegumとして知られる）が組み合わさって生まれたものです。

[Metaplex](https://www.alchemy.com/overviews/metaplex)はSolana向けのNFT標準を策定し、その創設チームはSolana Labsからスピンアウトしました。2021年のローンチ以来、Metaplexは2,200万件以上のNFTのミントを実現し、33億6,000万ドルのNFT売上を生み出しています。Solana上のMerkleツリープログラムにより、[Metaplex経由で作成された圧縮NFT](https://www.metaplex.com/posts/expanding-digital-assets-with-compression-for-nfts)がSolanaブロックチェーンの元帳にエンコードされます。

### **圧縮NFTの一般的なユースケースは？**

**圧縮NFTにより、企業や個人は従来型のNFTと比較して法外なコストをかけることなく、大規模にNFTをミントできるようになります。** 圧縮NFTを活用できる業界としては、ゲーム、音楽、イベント、メタバース、企業などが挙げられます。

#### **1. ゲーム**

圧縮NFTは、数百万人のプレイヤー向けのゲーム内アセットとして機能する可能性があります。web3ゲームの規模の大きさを考えると、圧縮NFTはweb3ゲーム開発企業が数百万件のゲーム内NFTを発行する際のコストを削減できます。

#### **2. 音楽とイベント**

毎年数百万枚のコンサートやイベントのチケットが販売されている中、圧縮NFTはチケット販売企業のコストを削減し、web3製品の持つセキュリティと真正性を提供しながら、イベント参加者向けのデジタルコレクティブルとして機能します。

#### **3. メタバース**

メタバースやメタバース的なゲームの人気が高まる中、圧縮NFTによりメタバース開発企業は世界中の数百万人向けに大量のゲーム内コレクティブルをデジタル化できます。

#### **4. エンタープライズレベルのシステム**

サプライチェーン全体での商品追跡から公的記録のデジタル化まで、圧縮NFTにより大規模な組織は、現在のNFT実装のごく一部のコストで大量のNFTをミント、保存、取得できるようになります。

### **圧縮NFTはいつ使うべきか？**

圧縮NFTは、大規模にNFTをミントする際に使用すべきです。データをオフチェーンで保存することで、すべてのSolanaアカウントがデータ管理のために支払う必要のある[**アカウントスペースのレンタルコスト**](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs)を大幅に削減できるためです。

## **圧縮NFT vs 非圧縮NFT**

圧縮NFTと非圧縮NFTはどちらもオンチェーンで発行・検証されますが、主な違いはNFTのメタデータがどこに保存されるかです。圧縮NFTはメタデータをオフチェーンに保存し、従来型のSolana NFTはデータをオンチェーンに保存します。

### **圧縮NFTは従来型のNFTとどう違うのか？**

圧縮NFTは、4つの主要な点で従来型のNFTと異なります。

#### **1. NFTメタデータの保存**

圧縮NFTはデータをMerkleツリーにオフチェーンで保存し、[Solana RPC](https://www.alchemy.com/dapps/list-of/rpc-node-providers-on-solana)プロバイダー経由でアクセスされます。

#### **2. コスト**

データをオフチェーンで保存するため、圧縮NFTは大幅にコスト効率が良くなります。

#### **3. データの所有権**

圧縮NFTを変更したい場合、オフチェーンデータを変更する権限を暗号学的に証明する必要があり、これによりオフチェーンのデータストレージの信頼性が確保されます。

#### **4. プログラムとの相互作用**

既存の[プログラム](https://www.alchemy.com/overviews/solana-data-vs-program-accounts)（すなわちSolanaのスマートコントラクト）は、NFT自体が解凍（decompress）されない限り、圧縮NFTと相互作用するために変更が必要です。

### **圧縮NFTでどれだけのコストが節約できるか？**

100万件の従来型NFTをミントするには約12,000 SOLが必要ですが、同数の圧縮NFTをミントするには5 SOLしかかかりません。これは99.9%のコスト削減に相当します。

実際、NFTコレクションの規模が大きいほど、圧縮によるミントコストの削減幅は大きくなります。以下の画像でその点を示しています。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Collection Size", dataType: "object" },
      { key: "2", width: 200, title: "Cost w/o compression", dataType: "object" },
      { key: "3", width: 200, title: "Cost w/ compression", dataType: "object" },
      { key: "4", width: 200, title: "How much cheaper?", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>1M NFTs</p>", tooltip: "", icon: "" },
        "2": { title: "<p>12K SOL</p>", tooltip: "", icon: "" },
        "3": { title: "<p>5 SOL</p>", tooltip: "", icon: "" },
        "4": { title: "<p>2,400x</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>1B NFTs</p>", tooltip: "", icon: "" },
        "2": { title: "<p>12M SOL</p>", tooltip: "", icon: "" },
        "3": { title: "<p>500 SOL</p>", tooltip: "", icon: "" },
        "4": { title: "<p>24,000x</p>", tooltip: "", icon: "" },
        id: 1,
      },
    ],
  }}
/>

従来型NFTをミントする際の最大の支出はSolana上のストレージスペースに対する支払いであり、圧縮NFTはこれを不要にするため、残りのコストのほとんどは単純なトランザクション手数料となります。

#### **10,000件のSolana NFTコレクションをミントするコストは？**

新規プロジェクトの標準的なNFTコレクションサイズである10,000件の圧縮NFTをミントするコストは、約3.5 SOLです。以下の表は、10,000件から10億件までの数量における圧縮NFTコレクションのミントコストを詳細に示しています。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Quantity", dataType: "object" },
      { key: "2", width: 200, title: "Tree rent (SOL)", dataType: "object" },
      { key: "3", width: 200, title: "Tree TX cost (SOL)", dataType: "object" },
      { key: "4", width: 200, title: "Total cost (SOL)", dataType: "object" },
      { key: "5", width: 200, title: "Cost per NFT (SOL)", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>10k</p>", tooltip: "", icon: "" },
        "2": { title: "<p>3.48</p>", tooltip: "", icon: "" },
        "3": { title: "<p>0.01</p>", tooltip: "", icon: "" },
        "4": { title: "<p>3.49</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0.000349</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>100k</p>", tooltip: "", icon: "" },
        "2": { title: "<p>4.17</p>", tooltip: "", icon: "" },
        "3": { title: "<p>0.05</p>", tooltip: "", icon: "" },
        "4": { title: "<p>4.22</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0.0000422</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>1m</p>", tooltip: "", icon: "" },
        "2": { title: "<p>4.85</p>", tooltip: "", icon: "" },
        "3": { title: "<p>0.5</p>", tooltip: "", icon: "" },
        "4": { title: "<p>5.35</p>", tooltip: "", icon: "" },
        "5": { title: "<p>0.00000053</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>100m</p>", tooltip: "", icon: "" },
        "2": { title: "<p>6.45</p>", tooltip: "", icon: "" },
        "3": { title: "<p>50</p>", tooltip: "", icon: "" },
        "4": { title: "<p>56.45</p>", tooltip: "", icon: "" },
        "5": { title: "<p>6e-7</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>1b</p>", tooltip: "", icon: "" },
        "2": { title: "<p>7.13</p>", tooltip: "", icon: "" },
        "3": { title: "<p>500</p>", tooltip: "", icon: "" },
        "4": { title: "<p>507.13</p>", tooltip: "", icon: "" },
        "5": { title: "<p>5e-7</p>", tooltip: "", icon: "" },
        id: 4,
      },
    ],
  }}
/>

## **圧縮NFTはどのように機能するか？**

NFTが圧縮される仕組みは以下の通りです。

1. MetaplexのBubblegumプログラムを使用して、NFTに関連付けられたメタデータを検証する
1. Bubblegumがaccount-compressionを呼び出し、Merkleツリーに新しいリーフを追加する
1. account-compressionがオンチェーンのMerkleツリーを更新し、最新の状態を反映する
1. 新規NFTの追加など、Merkleツリーへの変更はSolanaブロックチェーンに書き込まれる

オフチェーンのインデクサーは、Merkleツリーへの変更を追跡し、[アプリ](https://www.alchemy.com/dapps/top/defi-dapps)やプログラムをサポートするために必要な情報と権限を管理します。

### 圧縮NFTのオーソリティ（authorities）とは何か？

**オーソリティとは、NFTアカウントに関連付けられた属性で、そのアカウントが何をできるかを指定するものです。** すべてのNFTアカウントには、その下に3つの他のアカウントがあります。

1. ミントアカウント
1. [associated token account](https://www.alchemy.com/overviews/associated-token-account)
1. ウォレットアカウント

これらの下位アカウントにはそれぞれ異なる属性が関連付けられています。

#### **1. ツリーオーソリティ（Tree authority）**

このオーソリティは通常、account-compressionプログラムを介してツリーに新しいリーフを追加する権限を持つプログラムであり、そのプログラムは暗号学的ハッシュのエンコードも処理します。

#### **2. リーフオーソリティ（Leaf authority）**

これはリーフを所有するウォレットアカウントに与えられる属性です。このウォレットアカウントを使用して、リーフの置換、削除、解凍（decompress）を行うことができます。

### **圧縮NFTはどこに保存されるのか？**

圧縮NFTのメタデータは、Solana RPCサービスプロバイダーによってオフチェーンのMerkleツリーに保存され、このデータはインデクサーによって監視されます。これは同じデータをオンチェーンに保存するよりもコスト効率が良い方法です。実際には、データはオフチェーンにあり、そのデータのはるかに小さい証明がMerkleツリールートの形でオンチェーンに存在します。

## **NFTを圧縮する方法**

NFTの圧縮は比較的単純な作業ですが、新規NFTを圧縮するか既存のNFTを圧縮するかによって、手順が若干異なります。

### **新規NFTの圧縮**

以下は、新規NFT（まだミントされていないNFT）を圧縮するための4つのステップです。

1. MetaplexのBubblegumソフトウェアを使用してGummyroll Merkleツリーを作成する
1. BubblegumのmintNFT命令が呼び出される
1. オフチェーンのインデクサーが元帳から**mintNFT**命令を取得し、リーフのメタデータが保存される
1. dappがRPCノードを通じて**get_assets_for_owner**命令を呼び出し、NFTを返す

### **既存NFTの圧縮**

以下は、既存のNFT（すでにミントされているNFT）を圧縮するための3つのステップです。

1. Bubblegumプログラム上で**transfer**命令がNFT情報とともに呼び出される
1. Bubblegumプログラムが[cross-program invocation](https://www.alchemy.com/overviews/cross-program-invocation)を行い、Gummyrollに新しいMerkleツリールートを追加する
1. オフチェーンのインデクサーがブロックチェーンからtransfer命令を取得し、リーフのownerプロパティを更新する

ステップ3により、リーフによって表されるNFTの所有権が新しい所有者に確実に移転されます。

既存のNFTを圧縮する場合、Gummyrollツリーをゼロから作成する必要はありません。詳細についてはMetaplexの圧縮NFTドキュメントを参照してください。

### **NFTの解凍（decompression）はどのように機能するのか？**

解凍プロセスは、オフチェーンのMerkleツリーのデータセットからNFTを削除します。以下は簡単な内訳です。

Token Metadata Programが、そのNFTに対応するMerkleツリー上のリーフの整合性を検証すると、プログラムは以下のアカウントを作成します。

1. ミントアカウント
1. Associated Token Account（ATA）
1. Token Metadataアカウント
1. Master Editionアカウント

その後、Token Metadata ProgramはMerkleツリーを更新し、リーフを削除します。
