什麼是 Ordinals?

理解比特幣上的數位工件協議,如何在比特幣區塊中刻錄內容。

Ordinals 完整指南:比特幣上的數位工件協議與刻錄技術

Ordinals 是比特幣區塊鏈上的一種協議,允許在比特幣上刻錄(Inscribe)任意數位內容,如圖像、文字、音樂、影片等。本篇文章深入分析 Ordinals 協議的技術原理、刻錄機制、稀有度系統、應用場景以及爭議與未來發展。

Ordinals 協議的基本概念

什麼是 Ordinals?

Ordinals 協議由 Casey Rodarmor 於 2023 年 1 月推出,其核心思想是為比特幣的每個 satoshi(比特幣的最小單位,1 BTC = 1 億 satoshi)分配一個唯一的序號(Ordinal Number)。

關鍵術語

為什麼比特幣可以承載刻錄內容?

比特幣的設計中存在一個關鍵特性,使得 Ordinals 成為可能:

隔離見證(SegWit)

2017 年的 SegWit 升級將見證數據(Witness Data)從交易中分離出來,並給予折扣優惠:

Taproot 升級

2021 年的 Taproot 升級進一步優化了腳本靈活性:

Ordinals 技術原理深度解析

序號追蹤機制

比特幣的 UTXO 模型與Ordinal 序號追蹤緊密相關:

UTXO 基礎

比特幣交易由輸入(Inputs)和輸出(Outputs)組成:

Transaction Input → [指向 Previous UTXO] → Unlocking Script
Transaction Output → [新 UTXO] → Locking Script

Ordinal 分配算法

def assign_ordinals(block_height, transaction_index, output_index, satoshi_position):
    """
    計算特定 satoshi 的 Ordinal 序號

    參數:
        block_height: 區塊高度
        transaction_index: 交易在區塊中的索引
        output_index: 輸出在交易中的索引
        satoshi_position: 輸出中 satoshi 的位置

    返回:
        ordinal_number: Ordinal 序號
    """
    # 每個區塊的 satoshi 數量
    satoshis_per_block = 100_000_000  # 1 BTC

    # 計算到當前區塊為止的總 satoshi 數量
    total_satoshis_before = block_height * satoshis_per_block

    # 計算到當前交易為止的 satoshi 偏移
    # 假設每個交易的輸出數量平均為 2
    transaction_offset = transaction_index * 2 * satoshis_per_block

    # 計算到當前輸出為止的 satoshi 偏移
    # 假設平均每個輸出 0.5 BTC
    output_offset = output_index * 50_000_000

    # Ordinal 序號
    ordinal_number = total_satoshis_before + transaction_offset + output_offset + satoshi_position

    return ordinal_number

實際例子

假設比特幣區塊高度為 800,000:

刻錄(Inscription)過程

刻錄是將數位內容寫入比特幣區塊見證數據的過程:

刻錄架構

刻錄交易結構:

Input:
  - 引用上一個 UTXO
  - 解鎖腳本(Signature + Public Key)

Output:
  -Ordinal UTXO
  -Ordinal UTXO
  -...(取決於內容大小)

Witness (見證數據):
  - Envelope (封裝)
    - Tag 0x00 (content-type)
    - Content-Type (例如 "image/png")
  - Tag 0x01 (body)
    - 實際內容(Base64 或原始 bytes)

刻錄步驟詳解

def create_inscription(content, content_type, fee_rate=10):
    """
    創建刻錄交易

    參數:
        content: 要刻錄的內容(bytes)
        content_type: 內容類型(如 "image/png", "text/plain")
        fee_rate: 費用率(sat/vB)

    返回:
        inscription_tx: 刻錄交易
    """

    # 步驟 1:構建內容
    content_bytes = content.encode('utf-8') if isinstance(content, str) else content

    # 步驟 2:構建封裝(Envelope)
    envelope = {
        'content_type': content_type,
        'body': content_bytes
    }

    # 步驟 3:序列化為 Taproot 腳本
    inscription_script = serialize_taproot_script(envelope)

    # 步驟 4:計算交易費用
    tx_size = estimate_tx_size(inscription_script)
    fees = tx_size * fee_rate

    # 步驟 5:創建交易
    tx = {
        'inputs': [create_input(previous_utxo)],
        'outputs': [
            create_output(destination_address, satoshi_amount - fees),
            create_output(ordinal_address, 600)  # Ordinal UTXO
        ],
        'witness': [inscription_script]
    }

    return tx

內容類型與編碼

Ordinals 支持多種內容類型:

內容類型MIME Type範例
圖片image/png, image/gif, image/webp, image/svg+xmlNFT 圖像
文字text/plain, text/html文章、評論
音頻audio/mpeg, audio/wav, audio/ogg音樂、SoundCloud
影片video/mp4, video/webm短影片
PDFapplication/pdf文件
JSONapplication/json數據、智慧合約
HTMLtext/html網頁應用

編碼方式

稀有度系統

Ordinals 協議定義了一套稀有度系統,根據 satoshi 所在的區塊特性分類:

稀有度等級

等級定義數量(每週期)發生條件
Common普通 satoshi~99%一般區塊
Uncommon特定區塊的第一個 satoshi每區塊 1 個任何區塊
Rare減半區塊的第一個 satoshi每減半 1 個減半區塊
Epic減半週期的第一個 satoshi每減半週期 1 個減半週期開始
Legendary創世區塊的 satoshi1 個區塊高度 0
Mythic第一個減半區塊的第一個 satoshi1 個區塊高度 210,000

減半週期

比特幣每 210,000 個區塊(約 4 年)進行一次減半:

稀有度識別算法

def calculate_rarity(ordinal_number):
    """
    根據 Ordinal 序號計算稀有度

    參數:
        ordinal_number: Ordinal 序號

    返回:
        rarity: 稀有度等級
    """
    # 每個週期的區塊數量
    blocks_per_cycle = 210_000

    # 計算週期
    cycle = ordinal_number // (blocks_per_cycle * 100_000_000)

    # 計算區塊內的位置
    satoshis_in_cycle = ordinal_number % (blocks_per_cycle * 100_000_000)
    block_in_cycle = satoshis_in_cycle // 100_000_000
    sat_in_block = satoshis_in_cycle % 100_000_000

    # 判斷稀有度
    if ordinal_number == 0:
        return 'Legendary'
    elif ordinal_number == 210_000 * 100_000_000:
        return 'Mythic'
    elif sat_in_block == 0:
        return 'Rare'
    elif block_in_cycle == 0 and cycle > 0:
        return 'Epic'
    elif sat_in_block == 0:
        return 'Uncommon'
    else:
        return 'Common'

BRC-20 代幣標準

什麼是 BRC-20?

BRC-20 是比特幣上的實驗性代幣標準,由 @domodata 於 2023 年 3 月提出。它借鑒了以太坊 ERC-20 的設計理念,但使用 Ordinals 協議實現。

設計原則

操作類型

BRC-20 標準定義了三種基本操作:

部署(Deploy)

{
    "p": "brc-20",
    "op": "deploy",
    "tick": "ordi",
    "max": "21000000",
    "lim": "1000"
}

參數說明:

鑄造(Mint)

{
    "p": "brc-20",
    "op": "mint",
    "tick": "ordi",
    "amt": "1000"
}

參數說明:

轉移(Transfer)

{
    "p": "brc-20",
    "op": "transfer",
    "tick": "ordi",
    "amt": "100"
}

參數說明:

部署示例

以下是一些著名的 BRC-20 代幣:

代幣名稱符號最大供應描述
OrdiORDI21,000,000首個 BRC-20 代幣
SatsSATS100,000,000,000比特幣概念的 meme 幣
PepePEPE420,690,000,000,000Pepe the Frog
BRC-100BRC100100實驗性代幣

BRC-20 技術實現

class BRC20Token:
    def __init__(self, tick, max_supply, limit):
        self.tick = tick
        self.max_supply = int(max_supply)
        self.limit = int(limit)
        self.balances = {}
        self.minted = 0

    def deploy(self, deployer):
        """部署代幣"""
        self.balances[deployer] = 0
        return f"BRC-20 {self.tick} deployed"

    def mint(self, minter, amount):
        """鑄造代幣"""
        amount = int(amount)

        if self.minted + amount > self.max_supply:
            raise Exception("Exceeds max supply")

        if amount > self.limit:
            raise Exception("Exceeds mint limit")

        self.balances[minter] = self.balances.get(minter, 0) + amount
        self.minted += amount

        return f"Minted {amount} {self.tick}"

    def transfer(self, sender, recipient, amount):
        """轉移代幣"""
        amount = int(amount)

        if self.balances.get(sender, 0) < amount:
            raise Exception("Insufficient balance")

        self.balances[sender] -= amount
        self.balances[recipient] = self.balances.get(recipient, 0) + amount

        return f"Transferred {amount} {self.tick}"

BRC-20 的爭議

BRC-20 標準存在諸多爭議:

  1. 非原子操作:轉移不是原子的,可能導致雙花
  2. 索引依賴:需要依賴第三方索引器
  3. 網路負擔:大量刻錄佔用比特幣區塊空間
  4. 批評觀點:部分人認為這是對比特幣的濫用

Ordinals 的應用場景

1. 數位藝術

圖像 NFT

藝術家案例

2. 文字內容

應用場景

示例

刻錄一段文字:

刻錄內容:
{
    "type": "text",
    "content": "Hello, Bitcoin!",
    "author": "your_address"
}

3. 遊戲物品

區塊鏈遊戲

技術實現

{
    "p": "brc-20",
    "op": "deploy",
    "tick": "game",
    "max": "10000",
    "lim": "1"
}

4. 域名系統

比特幣域名

5. 音頻與視頻

多媒體存儲

注意:大文件會產生較高的刻錄費用

使用 Ordinals

錢包支持

Ordinals 需要支持 Taproot 地址的錢包:

錢包平台Ordinals 支持
Ordinals WalletWeb原生支持
XverseiOS/Android原生支持
Hiro Wallet桌面/擴展原生支持
UniSatChrome 擴展原生支持
Leather桌面/擴展原生支持
Sparrow桌面通過 RPC

瀏覽器與工具

工具功能
Ordinals.com刻錄與瀏覽
Ordswap交易市場
Magic EdenNFT 市場
OpenOrdex訂單簿交易所
Luxor礦池與市場

刻錄流程

def ordinals_inscription_flow():
    """
    Ordinals 刻錄完整流程
    """

    # 步驟 1:準備錢包
    # - 確保錢包支持 Taproot (bc1p) 地址
    # - 確保有足夠的比特幣餘額
    wallet = prepare_wallet()

    # 步驟 2:選擇內容
    # - 準備要刻錄的文件
    # - 確定內容類型
    content = prepare_content("image.png")
    content_type = "image/png"

    # 步驟 3:計算費用
    # - 根據內容大小計算費用
    # - 考慮當前網路擁堵程度
    fee_rate = get_recommended_fee_rate()
    estimated_fee = calculate_fee(content, fee_rate)

    # 步驟 4:創建刻錄
    # - 生成刻錄交易
    # - 簽名並廣播
    inscription_tx = create_inscription(content, content_type)
    broadcast(inscription_tx)

    # 步驟 5:等待確認
    # - 等待區塊確認
    # - 驗證刻錄成功
    wait_for_confirmation(inscription_tx)

    # 步驟 6:管理 Ordinal
    # - 在錢包中查看
    # - 轉移或出售
    return inscription_tx.inscription_id

Ordinals 的優勢

1. 真正的去中心化

2. 成本效益

與以太坊 NFT 比較

成本類型Ordinals以太坊 NFT
部署成本免費部署合約費用
鑄造成本交易費用Gas 費用
存儲成本區塊空間費用合約存儲費用
轉移成本交易費用Gas 費用

批量刻錄優勢

3. 耐久性

4. 比特幣安全性

5. 可組合性

批評與爭議

1. 區塊空間佔用

問題

數據統計(截至 2024 年):

2. 比特幣使命

批評觀點

支持觀點

3. 網路擁堵

影響

4. 監管問題

證券風險

稅收問題

5. 技術風險

索引器依賴

數據丟失

與其他比特幣生態系統的比較

Ordinals vs RGB

特性OrdinalsRGB
數據存儲比特幣鏈上Lightning Network
擴展性中等
隱私
複雜度高度
成熟等

Ordinals vs Counterparty

特性OrdinalsCounterparty
協議Ordinals 協議Counterparty 協議
數據位置見證數據OP_RETURN
代幣標準BRC-20XCP
錢包支持Taproot錢包兼容錢包

未來發展方向

技術改進

  1. 壓縮技術:減少刻錄成本的壓縮算法
  2. 分層存儲:冷數據、熱數據分層管理
  3. 跨鏈橋接:與其他區塊鏈互操作

應用擴展

  1. DeFi 應用:借貸、DEX
  2. 身份系統:去中心化身份
  3. 遊戲生態:區塊鏈遊戲

生態系統

  1. 錢包整合:更多錢包支持 Ordinals
  2. 市場平台:更多交易市場
  3. 開發工具:IDE、SDK

總結

Ordinals 為比特幣帶來了新的可能性,讓比特幣區塊鏈可以承載更豐富的內容。雖然存在爭議,但這是比特幣生態系統創新的重要嘗試。

核心要點

投資與使用建議


參考資源


更新日期:2026-02-24

版本:2.0

本文包含

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!