什麼是 Ordinals?
理解比特幣上的數位工件協議,如何在比特幣區塊中刻錄內容。
Ordinals 完整指南:比特幣上的數位工件協議與刻錄技術
Ordinals 是比特幣區塊鏈上的一種協議,允許在比特幣上刻錄(Inscribe)任意數位內容,如圖像、文字、音樂、影片等。本篇文章深入分析 Ordinals 協議的技術原理、刻錄機制、稀有度系統、應用場景以及爭議與未來發展。
Ordinals 協議的基本概念
什麼是 Ordinals?
Ordinals 協議由 Casey Rodarmor 於 2023 年 1 月推出,其核心思想是為比特幣的每個 satoshi(比特幣的最小單位,1 BTC = 1 億 satoshi)分配一個唯一的序號(Ordinal Number)。
關鍵術語:
- Ordinal:序號,表示某個特定 satoshi 在比特幣總供給中的位置
- Inscription:刻錄,將數位內容附加到某個特定 satoshi 上的過程
- Digital Artifact:數位工件,刻錄後的內容稱為數位工件,類似 NFT
為什麼比特幣可以承載刻錄內容?
比特幣的設計中存在一個關鍵特性,使得 Ordinals 成為可能:
隔離見證(SegWit):
2017 年的 SegWit 升級將見證數據(Witness Data)從交易中分離出來,並給予折扣優惠:
- 見證數據的權重僅為非見證數據的 1/4
- 這使得在比特幣區塊中存儲大量數據變得經濟可行
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:
- 第 1 個 satoshi 的 Ordinal 序號:0
- 第 1 億個 satoshi 的 Ordinal 序號:80,000,000,000,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+xml | NFT 圖像 |
| 文字 | text/plain, text/html | 文章、評論 |
| 音頻 | audio/mpeg, audio/wav, audio/ogg | 音樂、SoundCloud |
| 影片 | video/mp4, video/webm | 短影片 |
| application/pdf | 文件 | |
| JSON | application/json | 數據、智慧合約 |
| HTML | text/html | 網頁應用 |
編碼方式:
- 原始 bytes:直接嵌入見證數據
- Base64:對二進制內容進行編碼
- 字面量:直接書寫文字內容
稀有度系統
Ordinals 協議定義了一套稀有度系統,根據 satoshi 所在的區塊特性分類:
稀有度等級
| 等級 | 定義 | 數量(每週期) | 發生條件 |
|---|---|---|---|
| Common | 普通 satoshi | ~99% | 一般區塊 |
| Uncommon | 特定區塊的第一個 satoshi | 每區塊 1 個 | 任何區塊 |
| Rare | 減半區塊的第一個 satoshi | 每減半 1 個 | 減半區塊 |
| Epic | 減半週期的第一個 satoshi | 每減半週期 1 個 | 減半週期開始 |
| Legendary | 創世區塊的 satoshi | 1 個 | 區塊高度 0 |
| Mythic | 第一個減半區塊的第一個 satoshi | 1 個 | 區塊高度 210,000 |
減半週期:
比特幣每 210,000 個區塊(約 4 年)進行一次減半:
- 第 1 週期:區塊 0 - 209,999(創世區塊在這裡)
- 第 2 週期:區塊 210,000 - 419,999
- 第 3 週期:區塊 420,000 - 629,999
- 第 4 週期:區塊 630,000 - 839,999(當前週期)
稀有度識別算法
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 協議實現。
設計原則:
- 簡單性:使用純文字 JSON 格式
- 可組合性:與現有比特幣基礎設施兼容
- 無智能合約:不需要額外的合約部署成本
操作類型
BRC-20 標準定義了三種基本操作:
部署(Deploy):
{
"p": "brc-20",
"op": "deploy",
"tick": "ordi",
"max": "21000000",
"lim": "1000"
}
參數說明:
- p:協議識別符
- op:操作類型
- tick:代幣符號(最多 4 個字符)
- max:最大供應量
- lim:單次鑄造上限
鑄造(Mint):
{
"p": "brc-20",
"op": "mint",
"tick": "ordi",
"amt": "1000"
}
參數說明:
- amt:鑄造數量
轉移(Transfer):
{
"p": "brc-20",
"op": "transfer",
"tick": "ordi",
"amt": "100"
}
參數說明:
- amt:轉移數量
部署示例
以下是一些著名的 BRC-20 代幣:
| 代幣名稱 | 符號 | 最大供應 | 描述 |
|---|---|---|---|
| Ordi | ORDI | 21,000,000 | 首個 BRC-20 代幣 |
| Sats | SATS | 100,000,000,000 | 比特幣概念的 meme 幣 |
| Pepe | PEPE | 420,690,000,000,000 | Pepe the Frog |
| BRC-100 | BRC100 | 100 | 實驗性代幣 |
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 標準存在諸多爭議:
- 非原子操作:轉移不是原子的,可能導致雙花
- 索引依賴:需要依賴第三方索引器
- 網路負擔:大量刻錄佔用比特幣區塊空間
- 批評觀點:部分人認為這是對比特幣的濫用
Ordinals 的應用場景
1. 數位藝術
圖像 NFT:
- Ordinals 可以承載任何圖像格式
- 數據直接存儲在比特幣區塊鏈上
- 不依賴 IPFS 或中心化伺服器
藝術家案例:
- XCP(Counterparty)上的知名藝術家開始遷移
- 新的比特幣原生藝術家湧現
2. 文字內容
應用場景:
- 文章與書籍:作者可以直接發布內容到區塊鏈
- 評論與討論:創建不可變的評論系統
- 代碼存儲:存儲開源專案代碼
示例:
刻錄一段文字:
刻錄內容:
{
"type": "text",
"content": "Hello, Bitcoin!",
"author": "your_address"
}
3. 遊戲物品
區塊鏈遊戲:
- 遊戲道具
- 角色屬性
- 遊戲存檔
- 收藏品
技術實現:
{
"p": "brc-20",
"op": "deploy",
"tick": "game",
"max": "10000",
"lim": "1"
}
4. 域名系統
比特幣域名:
- .bit 域名可以刻錄到 Ordinals
- 創建去中心化域名系統
5. 音頻與視頻
多媒體存儲:
- 音樂刻錄
- 播客存檔
- 短影片
- 聲音記錄
注意:大文件會產生較高的刻錄費用
使用 Ordinals
錢包支持
Ordinals 需要支持 Taproot 地址的錢包:
| 錢包 | 平台 | Ordinals 支持 |
|---|---|---|
| Ordinals Wallet | Web | 原生支持 |
| Xverse | iOS/Android | 原生支持 |
| Hiro Wallet | 桌面/擴展 | 原生支持 |
| UniSat | Chrome 擴展 | 原生支持 |
| Leather | 桌面/擴展 | 原生支持 |
| Sparrow | 桌面 | 通過 RPC |
瀏覽器與工具
| 工具 | 功能 |
|---|---|
| Ordinals.com | 刻錄與瀏覽 |
| Ordswap | 交易市場 |
| Magic Eden | NFT 市場 |
| 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. 真正的去中心化
- 鏈上存儲:數據直接存在比特幣區塊鏈上
- 無伺服器依賴:不依賴 IPFS、AWS 或任何中心化服務
- 抗審查:只要比特幣網路存在,數據就存在
2. 成本效益
與以太坊 NFT 比較:
| 成本類型 | Ordinals | 以太坊 NFT |
|---|---|---|
| 部署成本 | 免費 | 部署合約費用 |
| 鑄造成本 | 交易費用 | Gas 費用 |
| 存儲成本 | 區塊空間費用 | 合約存儲費用 |
| 轉移成本 | 交易費用 | Gas 費用 |
批量刻錄優勢:
- 單次交易可刻錄多個內容
- 共享固定費用
3. 耐久性
- 永恆存儲:只要比特幣網路運行,數據就存在
- 無合約風險:不需要智能合約
- 無升級風險:代碼不會變化
4. 比特幣安全性
- 工作量證明保護:受益於比特幣的算力
- 去中心化:全球數萬個節點驗證
- 最終性:比特幣交易的不可逆特性
5. 可組合性
- 與閃電網路兼容:可構建 L2 應用
- 與 RGB 協議結合:可實現資產協議
- 與 LSD 整合:可實現流動性質押
批評與爭議
1. 區塊空間佔用
問題:
- 大量刻錄佔用比特幣區塊空間
- 推高了交易費用
- 影響比特幣普通轉賬
數據統計(截至 2024 年):
- Ordinals 佔用的區塊空間:~30-50%
- 平均交易大小:普通轉账的 10-100 倍
- 費用影響:每筆刻錄交易費用是普通交易的 5-50 倍
2. 比特幣使命
批評觀點:
- Ordinals 違背比特幣作為「點對點電子現金」的設計初衷
- 將比特幣變成了「去中心化資料存儲」
- 增加了網路負擔,影響比特幣作為貨幣的功能
支持觀點:
- 比特幣可以承載多種用例
- 市場需求決定用途
- 技術中立
3. 網路擁堵
影響:
- 刻錄活動導致網路擁堵
- 普通用戶交易延遲
- 費用波動加劇
4. 監管問題
證券風險:
- 部分 Ordinals 可能被視為證券
- BRC-20 代幣可能觸發證券監管
- 各國監管態度不一致
稅收問題:
- Ordinals 交易的稅收處理
- BRC-20 代幣的資本利得稅
- 各國規定差異大
5. 技術風險
索引器依賴:
- Ordinals 需要索引器才能追蹤
- 索引器是中心化服務
- 索引器故障影響使用
數據丟失:
- 雖然數據在鏈上
- 但需要錢包支持才能訪問
- 錢包丟失導致資產無法恢復
與其他比特幣生態系統的比較
Ordinals vs RGB
| 特性 | Ordinals | RGB | |
|---|---|---|---|
| 數據存儲 | 比特幣鏈上 | Lightning Network | |
| 擴展性 | 中等 | 高 | |
| 隱私 | 低 | 高 | |
| 複雜度 | 低 | 高度 | 中 |
| 成熟等 | 低 |
Ordinals vs Counterparty
| 特性 | Ordinals | Counterparty |
|---|---|---|
| 協議 | Ordinals 協議 | Counterparty 協議 |
| 數據位置 | 見證數據 | OP_RETURN |
| 代幣標準 | BRC-20 | XCP |
| 錢包支持 | Taproot錢包 | 兼容錢包 |
未來發展方向
技術改進
- 壓縮技術:減少刻錄成本的壓縮算法
- 分層存儲:冷數據、熱數據分層管理
- 跨鏈橋接:與其他區塊鏈互操作
應用擴展
- DeFi 應用:借貸、DEX
- 身份系統:去中心化身份
- 遊戲生態:區塊鏈遊戲
生態系統
- 錢包整合:更多錢包支持 Ordinals
- 市場平台:更多交易市場
- 開發工具:IDE、SDK
總結
Ordinals 為比特幣帶來了新的可能性,讓比特幣區塊鏈可以承載更豐富的內容。雖然存在爭議,但這是比特幣生態系統創新的重要嘗試。
核心要點:
- Ordinals 利用比特幣的 SegWit 和 Taproot 升級實現鏈上刻錄
- BRC-20 是實驗性代幣標準,但存在技術爭議
- 數據直接存在鏈上,更加去中心化
- 存在費用和網路負擔的問題
- 長期影響仍需觀察
投資與使用建議:
- 了解技術原理再做投資決策
- 使用可靠的錢包存儲 Ordinals
- 注意費用波動,選擇合適時機刻錄
- 關注監管動態,確保合規
參考資源
更新日期:2026-02-24
版本:2.0
本文包含
相關文章
- 刻錄 (Inscription) 技術詳解 — 深入理解 Ordinals 的刻錄機制與隔離見證的關係。
- Ordinals 與比特幣共識 — Ordinals 是否破壞比特幣共識?爭議與討論。
- Ordinals 錢包與工具 — 常用的 Ordinals 錢包、瀏覽器與鑄造工具介紹。
- Ordinals 銘文製作完整教學 — 手把手教學如何在比特幣區塊鏈上創建 Ordinals 銘文,涵蓋工具選擇、費用計算與常見問題解答。
- BRC-20 代幣標準 — 理解比特幣上的實驗性代幣標準與部署方式。
延伸閱讀與來源
- Ordinals 官方網站 Ordinals 協議官網
- Ordinals Handbook Ordinals 開發文檔
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!