---
title: "什麼是 Compressed NFTs？"
description: "了解 Compressed NFTs 及其運作方式"
---

# 什麼是 Compressed NFTs？

Solana 上的 Compressed NFT 透過將資料儲存在 ledger 本身，降低了大量鑄造與管理 NFT 的成本。相較於傳統 NFT，鑄造 compressed NFT 的成本效益明顯更高，這也創造出一系列新的應用場景，並有助於觸及更多 Solana 活躍用戶。

本文將說明什麼是 compressed NFT、其運作原理，以及如何壓縮你既有或新的 NFT。

## **什麼是 compressed NFT？**

**Compressed NFT 是 Solana 上的一種 NFT，其資料儲存在 Merkle tree 結構中，Merkle root 位於鏈上的一個帳戶中，而 Merkle leaves 則儲存在 Solana ledger（雖屬鏈下，但仍受共識機制約束），而非像傳統 NFT 那樣完全儲存在鏈上。**

‍與一般 NFT 相同，compressed NFT 也是在鏈上發行並確認的，不過會使用 [Solana RPC 服務供應商](https://www.alchemy.com/overviews/solana-rpc)在鏈下儲存及處理資料，以降低儲存成本。

Compressed NFT 使用索引器（indexer）來管理交易資料，並協助 RPC 與鏈上智能合約之間的資料查詢。既有的智能合約必須經過修改才能與 compressed NFT 互動，或者也可以將 compressed NFT 解壓縮，以便與未經修改的 Solana 程式運作。

### **compressed NFT 是誰創造的？**

Compressed NFT 是 [Solana Labs](https://www.alchemy.com/dapps/solana) 的 Merkle tree 程式（稱為 [**account-compression**](https://github.com/solana-labs/solana-program-library/tree/master/account-compression)）與 [Metaplex](https://www.alchemy.com/dapps/metaplex) 基金會的 compressed NFT 程式（稱為 Bubblegum）共同創造的成果。

[Metaplex](https://www.alchemy.com/overviews/metaplex) 制定了 Solana 的 NFT 標準，其創始團隊由 Solana Labs 分拆而出。自 2021 年推出以來，Metaplex 已促成超過 2,200 萬個 NFT 的鑄造，並帶來 33.6 億美元的 NFT 銷售額。Solana 上的 Merkle tree 程式使得[透過 Metaplex 建立的 compressed NFT](https://www.metaplex.com/posts/expanding-digital-assets-with-compression-for-nfts) 能夠被編碼進 Solana 區塊鏈的 ledger 中。

### **compressed NFT 常見的應用場景有哪些？**

**Compressed NFT 讓企業與個人得以大規模鑄造 NFT，而不需承擔相較於傳統 NFT 而言過高的成本。** 可能運用 compressed NFT 的產業包括：遊戲、音樂、活動、元宇宙以及企業應用。

#### **1. 遊戲**

Compressed NFT 有潛力作為數百萬玩家的遊戲內資產。由於 web3 遊戲的規模可能相當龐大，compressed NFT 能讓 web3 遊戲開發公司在發行數百萬個遊戲內 NFT 時節省成本。

#### **2. 音樂與活動**

每年售出的演唱會與活動門票數以百萬計，compressed NFT 能為票務公司節省成本，同時作為參與者的數位收藏品，並提供 web3 產品所具備的安全性與真實性。

#### **3. 元宇宙**

隨著元宇宙及類似元宇宙遊戲日益普及，compressed NFT 讓元宇宙開發公司能為全球數百萬用戶將大量的遊戲內收藏品數位化。

#### **4. 企業層級系統**

從追蹤供應鏈中的商品，到將公共紀錄數位化，compressed NFT 能讓大型組織以現行 NFT 實作方式一小部分的成本，大量鑄造、儲存及檢索 NFT。

### **何時應該使用 compressed NFT？**

在大規模鑄造 NFT 時應使用 compressed NFT，因為將資料儲存於鏈下能大幅降低每個 Solana 帳戶都必須支付、用來管理資料的[**帳戶空間租金成本**](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs)。

## **Compressed NFT 與未壓縮 NFT 的比較**

Compressed NFT 與未壓縮 NFT 都是在鏈上發行並驗證的，但主要差異在於 NFT metadata 的儲存位置。Compressed NFT 將 metadata 儲存在鏈下，而傳統的 Solana NFT 則將資料儲存在鏈上。

### **compressed NFT 與一般 NFT 有何不同？**

Compressed NFT 與傳統 NFT 在四個關鍵面向上有所不同：

#### **1. NFT metadata 儲存方式**

Compressed NFT 將資料儲存在鏈下的 Merkle tree 中，並透過 [Solana RPC](https://www.alchemy.com/dapps/list-of/rpc-node-providers-on-solana) 服務供應商存取。

#### **2. 成本**

由於資料儲存於鏈下，compressed NFT 的成本效益明顯更高。

#### **3. 資料所有權**

當你要修改 compressed NFT 時，必須以加密方式證明你有權變更該鏈下資料，藉此確保鏈下資料儲存的可信度。

#### **4. 程式互動**

既有的[程式](https://www.alchemy.com/overviews/solana-data-vs-program-accounts)（即 Solana 智能合約）必須經過修改才能與 compressed NFT 互動，除非該 NFT 本身已被解壓縮。

### **compressed NFT 能省下多少成本？**

鑄造 100 萬個傳統 NFT 大約需要 12,000 SOL，而鑄造相同數量的 compressed 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 上支付儲存空間費用（而這正是 compressed NFT 所省去的部分），剩下的成本大多只是單純的交易手續費。

#### **鑄造一個 1 萬個 Solana NFT 收藏的成本是多少？**

鑄造 10,000 個 compressed NFT（這是新項目常見的標準 NFT 收藏規模）大約需要 3.5 SOL。下表詳細列出從 1 萬個到 10 億個不等數量的 compressed 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,
      },
    ],
  }}
/>

## **compressed NFT 的運作原理**

以下是 NFT 壓縮的流程：

1. 使用 Metaplex 的 Bubblegum 程式驗證與 NFT 相關的 metadata
1. Bubblegum 呼叫 account-compression，將新的 leaf 附加到 Merkle tree 中
1. Account-compression 更新鏈上的 Merkle tree，以反映最新狀態
1. Merkle tree 的任何變動（例如新增 NFT）都會被寫入 Solana 區塊鏈

鏈下索引器會追蹤 Merkle tree 的變動，並管理支援[應用程式](https://www.alchemy.com/dapps/top/defi-dapps)與程式所需的資訊與授權。

### compressed NFT 的權限（authorities）是什麼？

**Authorities 是與 NFT 帳戶相關聯的屬性，用來指定該帳戶能執行哪些操作。** 每個 NFT 帳戶底下都有另外三個帳戶：

1. Mint 帳戶
1. [associated token account](https://www.alchemy.com/overviews/associated-token-account)
1. 錢包帳戶

這些從屬帳戶各自具有不同的相關屬性。

#### **1. Tree authority**

這個 authority 通常是一個程式，經授權可透過 account-compression 程式將新的 leaf 加入 tree 中，該程式同時也負責處理加密雜湊的編碼。

#### **2. Leaf authority**

這是賦予擁有某個 leaf 的錢包帳戶的一項屬性。該錢包帳戶可用來替換、移除及解壓縮某個 leaf。

### **compressed NFT 儲存在哪裡？**

Compressed NFT 的 metadata 儲存在 Solana RPC 服務供應商所維護的鏈下 Merkle tree 中，並由索引器監控這些資料。相較於將相同資料儲存在鏈上，這種方式更具成本效益。實際上，資料本身位於鏈下，而該資料規模小得多的證明（即 Merkle tree root）則位於鏈上。

## **如何壓縮 NFT**

壓縮 NFT 是相當直接的操作，但流程會因你是要壓縮新的還是既有的 NFT 而略有不同。

### **壓縮新的 NFT**

以下是壓縮新 NFT（尚未鑄造的 NFT）的四個步驟：

1. 使用 Metaplex 的 Bubblegum 軟體建立一個 Gummyroll Merkle tree
1. 呼叫 Bubblegum 的 mintNFT 指令
1. 鏈下索引器從 ledger 中取得 **mintNFT** 指令，並儲存該 leaf 的 metadata
1. dapp 透過 RPC 節點呼叫 **get_assets_for_owner** 指令以取得該 NFT

### **壓縮既有的 NFT**

以下是壓縮既有 NFT（已鑄造完成的 NFT）的三個步驟：

1. 連同 NFT 資訊一起呼叫 Bubblegum 程式上的 **transfer** 指令
1. Bubblegum 程式對 Gummyroll 執行一次[跨程式呼叫（cross-program invocation）](https://www.alchemy.com/overviews/cross-program-invocation)，以新增一個新的 Merkle tree root
1. 鏈下索引器從區塊鏈中取得該 transfer 指令，並更新該 leaf 的擁有者屬性

第三步驟能確保該 leaf 所代表的 NFT 所有權轉移給新的擁有者。

若要壓縮既有的 NFT，並不需要從頭建立 Gummyroll tree，詳情請參閱 Metaplex 的 compressed NFT 文件。

### **NFT 解壓縮的運作原理是什麼？**

解壓縮流程會將某個 NFT 從鏈下的 Merkle tree 資料集中移除。以下是簡單的步驟說明：

一旦 Token Metadata Program 驗證了該 NFT 在 Merkle tree 上對應的 leaf 完整無誤後，該程式便會建立以下帳戶：

1. Mint 帳戶
1. Associated Token Account（ATA）
1. Token Metadata 帳戶
1. Master Edition 帳戶

接著 Token Metadata Program 會更新 Merkle tree，移除該 leaf。
