BRC-20 代幣標準
理解比特幣上的實驗性代幣標準與部署方式。
BRC-20 代幣標準:比特幣上的實驗性代幣協議完全指南
BRC-20 是比特幣區塊鏈上的一種實驗性代幣標準,於 2023 年 3 月由開發者 @domodata 創建。這是第一個在比特幣上實現類似以太坊 ERC-20 代幣功能的標準,雖然與傳統智能合約平台有本質上的不同。BRC-20 的獨特之處在於它完全依賴 Ordinals 協議的 inscription 機制來記錄代幣事件,而不依靠比特幣腳本本身執行任何邏輯。
本文將深入分析 BRC-20 的技術原理、與傳統代幣標準的差異、風險與限制,以及如何在實際應用中正確處理這種新型資產類別。
BRC-20 的誕生背景
Ordinals 協議的回顧
要理解 BRC-20,必須先理解 Ordinals 協議。Ordinals 是比特幣的一種索引方案,為每個 Satoshi(比特幣的最小單位,1 BTC = 1 億 Satoshi)分配唯一的序號。結合 Taproot 升級後的靈活性,用戶可以在這些 Satoshi 上附加任意數據,創建「刻寫」(Inscription)。
Ordinals 刻寫的關鍵特點:
- 每個刻寫都是比特幣交易輸出的一部分
- 數據永久存儲在比特幣區塊鏈上
- 可以包含文字、圖像、JSON 等任意數據
BRC-20 的創新
BRC-20 利用 Ordinals 刻寫來記錄代幣事件。與以太坊的智能合約不同,BRC-20 代幣的「合約」只是一個 JSON 格式的部署定義,所有的 mint(鑄造)和 transfer(轉移)操作都只是附加到區塊鏈上的數據事件。
這種設計有幾個重要特點:
- 無需智能合約:不需要在比特幣上部署任何代碼
- 數據驅動:代幣狀態完全由索引器從區塊鏈數據計算得出
- 實驗性質:這是一種極簡的代幣實現,存在已知限制
BRC-20 的核心機制
三種操作類型
BRC-20 定義了三種基本操作:
1. Deploy(部署)
部署操作創建一個新的 BRC-20 代幣:
刻寫內容(JSON):
{
"p": "brc-20",
"op": "deploy",
"tick": "pepe",
"max": "1000000000",
"lim": "1000"
}
參數說明:
p:協議標識,永遠是 "brc-20"op:操作類型tick:代幣 ticker(代幣符號,最多 4 個字符)max:最大供應量lim:每次 mint 的上限
2. Mint(鑄造)
Mint 操作鑄造一定數量的代幣到指定地址:
刻寫內容:
{
"p": "brc-20",
"op": "mint",
"tick": "pepe",
"amt": "1000"
}
參數說明:
tick:要鑄造的代幣類型amt:鑄造數量(不能超過 deploy 時設定的 lim)
3. Transfer(轉移)
Transfer 操作轉移代幣:
刻寫內容:
{
"p": "brc-20",
"op": "transfer",
"tick": "pepe",
"amt": "100"
}
代幣餘額的計算
BRC-20 代幣的餘額不是存儲在區塊鏈狀態中的,而是由索引器從所有相關的刻寫事件計算得出:
┌─────────────────────────────────────────────────────────────┐
│ BRC-20 代幣餘額計算流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 步驟 1:找到 Deploy │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 掃描比特幣區塊鏈 │ │
│ │ 找到 tick = "pepe" 的 deploy 刻寫 │ │
│ │ 記錄:max = 1B, lim = 1000 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 步驟 2:遍歷所有 Mint │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 按區塊順序掃描 tick = "pepe" 的 mint 刻寫 │ │
│ │ 累加所有有效 mint 的 amt │ │
│ │ 記錄:地址 A 獲得 1000 │ │
│ │ 記錄:地址 B 獲得 500 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 步驟 3:遍歷所有 Transfer │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 按區塊順序掃描 tick = "pepe" 的 transfer 刻寫 │ │
│ │ 扣除轉出方餘額 │ │
│ │ 增加接收方餘額 │ │
│ │ (需確保轉出方餘額充足) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 步驟 4:計算最終餘額 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 地址 A: 1000 - 100 + 50 = 950 │ │
│ │ 地址 B: 500 │ │
│ │ 總供應: 1500 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
索引器的關鍵角色
BRC-20 的獨特之處在於索引器的核心地位:
- 狀態計算者:索引器負責計算每個地址的代幣餘額
- 規則執行者:索引器決定哪些刻寫是「有效的」
- 帳本維護者:沒有中央化的帳本,每個索引器可能有自己的帳本
與 ERC-20 的比較
設計哲學的差異
| 特性 | ERC-20 | BRC-20 |
|---|---|---|
| 執行環境 | EVM 智能合約 | 比特幣區塊鏈數據 |
| 狀態存儲 | 合約存儲 | 索引器計算 |
| 轉帳確認 | 合約執行 | 區塊確認 |
| 可升級性 | 合約可升級 | 不可變 |
| 費用 | Gas 費用 | 比特幣交易費 |
| 去中心化 | 依賴合約代碼 | 依賴索引器 |
安全模型的差異
ERC-20:
- 安全性由智能合約代碼保障
- 合約部署後不可變(通常)
- 轉帳由合約邏輯強制執行
BRC-20:
- 沒有區塊鏈級別的執行保障
- 依賴索引器的「正確實現」
- 任何人都可以發送轉移刻寫,索引器負責驗證餘額
實際差異示例
轉移代幣的流程對比:
ERC-20 轉帳:
1. 用戶調用合約函數:transfer(to, amount)
2. 合約檢查餘額
3. 合約更新雙方餘額
4. 合約發出 Transfer 事件
5. 區塊鏈狀態更新(不可逆)
BRC-20 轉帳:
1. 用戶創建包含 transfer 數據的刻寫
2. 刻寫被寫入比特幣區塊鏈
3. 多個索引器獨立掃描區塊鏈
4. 每個索引器計算轉出方是否有足夠餘額
5. 各自更新自己的「帳本」
6. 如果索引器實現不同,可能出現餘額分歧!
BRC-20 的風險與限制
索引器風險
這是 BRC-20 最核心的風險:不同索引器可能給出不同的餘額。
導致分歧的因素:
- JSON 解析差異:不同索引器對無效 JSON 的處理不同
- 排序歧義:同一區塊內多個操作如何排序
- 重複處理:同一刻寫是否應該被計算多次
- 升級不一致:索引器升級後如何處理歷史數據
# 示例:索引器可能的分歧
# 假設同一區塊有兩筆針對地址 A 的 transfer 事件
# 索引器 1(按時間戳排序):
# 1. Transfer: A -> B 100
# 2. Transfer: C -> A 100
# 結果:A 的餘額 = 0(因為先扣款再加款)
# 索引器 2(按交易輸入順序):
# 1. Transfer: C -> A 100
# 2. Transfer: A -> B 100
# 結果:A 的餘額 = 100(先加款再扣款)
雙花問題
BRC-20 轉移的雙花風險比比特幣本身更高:
- 技術雙花:攻擊者可以嘗試同時發送兩筆有效的 transfer 刻寫
- 邏輯雙花:利用索引器之間的時間差
- 重放攻擊:同一筆 transfer 被多次執行
沒有共識保障
BRC-20 代幣不像智能合約那樣有區塊鏈共識保護:
- 沒有「合約」來執行規則
- 沒有原子性保證
- 沒有回滾機制(除非索引器選擇如此)
費用與可擴展性
每個 BRC-20 操作都需要一個獨立的比特幣交易:
- Deploy:1 筆交易
- Mint:1 筆交易/次
- Transfer:1 筆交易/次
這導致:
- 高昂的費用:大量操作時費用迅速累積
- 網路擁堵:熱門代幣可能導致比特幣網路擁堵
- 確認時間:需要等待比特幣確認
灰塵 Dust 問題
比特幣的灰塵限制(通常為 546 satoshi)在 BRC-20 中同樣適用:
# 如果轉移金額小於比特幣灰塵限制
# 該輸出可能無法在比特幣網路中有效轉移
DUST_LIMIT = 546 # satoshis
# BRC-20 轉移時需確保:
# 轉移金額 >= DUST_LIMIT
# 否則可能導致比特幣 UTXO 無法花費
正確處理 BRC-20 的實務指南
索引器選擇與固定
處理 BRC-20 資產時,必須選擇並固定索引器:
class BRC20Indexer:
def __init__(self, indexer_name, version):
self.indexer_name = indexer_name # 例如 "ord", "unisat"
self.version = version # 例如 "1.2.3"
self.rules = self.load_rules(version)
def get_balance(self, address, tick):
"""獲取餘額(使用固定索引器)"""
# 必須使用固定的索引器版本
return self.query_indexer(address, tick)
def verify_transaction(self, tx_hash):
"""驗證交易有效性"""
# 檢查索引器是否確認
# 檢查確認數是否足夠
pass
餘額驗證策略
不要依賴單一來源:
def verify_brc20_balance(address, tick):
"""多索引器餘額驗證"""
# 查詢多個索引器
balances = {
"unisat": get_balance_unisat(address, tick),
"ordinalsbot": get_balance_ordinalsbot(address, tick),
"ord": get_balance_ord(address, tick)
}
# 如果所有餘額一致,則確認
if len(set(balances.values())) == 1:
return balances[list(balances.keys())[0]]
# 如果不一致,發出警報
log_warning(f"BRC-20 餘額不一致:{balances}")
raise BalanceVerificationError()
處理索引器回滾
索引器可能會回滾歷史數據,需要設計應對機制:
def handle_indexer_rollback(new_height, old_height):
"""處理索引器回滾"""
# 記錄回滾事件
log_event(f"索引器回滾:{old_height} -> {new_height}")
# 重新計算受影響的餘額
affected_addresses = get_addresses_modified_between(old_height, new_height)
for address in affected_addresses:
# 重新獲取餘額
new_balance = recalculate_balance(address)
# 記錄差異
diff = new_balance - old_balances[address]
if diff != 0:
log_warning(f"餘額變化:{address} {diff}")
確認數要求
BRC-20 操作的確認數要求應該比比特幣本身更保守:
# 建議確認數
BITCOIN_CONFIRMATIONS = 6 # 比特幣本身
BRC20_CONFIRMATIONS = 10 # BRC-20 應該更高
def wait_for_brc20_confirmation(tx_hash):
"""等待 BRC-20 操作確認"""
btc_confirms = get_btc_confirmations(tx_hash)
if btc_confirms < BRC20_CONFIRMATIONS:
wait()
# 額外檢查索引器確認
indexer_confirms = get_indexer_confirmations(tx_hash)
if indexer_confirms < 1:
raise ConfirmationError()
BRC-20 的實際用例
知名 BRC-20 代幣
截至 2025 年,一些知名的 BRC-20 代幣包括:
| 代幣 | ticker | 最大供應 | 描述 |
|---|---|---|---|
| Pepe | pepe | 1,000,000,000 | 青蛙 Meme 代幣 |
| Ordi | ordi | 21,000,000 | 紀念 Ordinals 協議 |
| Pi | pi | 100,000,000 | 紀念圓周率 |
交易所支持
越來越多的交易所開始支持 BRC-20:
- OKX
- Bybit
- Gate.io
- Binance(部分支持)
錢包支持
主流比特幣錢包開始支持 BRC-20:
- Unisat
- Xverse
- Leather
- Hiro
結論
BRC-20 代表了一種全新的代幣範式 — 它放棄了智能合約的執行能力,轉而使用極簡的數據驅動方法。這種設計有明顯的權衡:
優勢:
- 簡單的部署方式
- 沒有合約漏洞風險
- 利用比特幣的安全性
劣勢:
- 索引器依賴帶來的不確定性
- 沒有區塊鏈級別的執行保障
- 可擴展性受限
對於開發者和用戶而言,理解這些權衡至關重要。BRC-20 更適合實驗性項目和收藏品,而不是需要高安全性金融應用。隨著時間推移,我們可能會看到更多改進和替代方案出現。
在使用 BRC-20 時,請牢記:
- 選擇信譽良好的索引器
- 使用多索引器驗證
- 保持保守的確認數要求
- 做好索引器回滾的準備
這是一個實驗性的領域,在投入資金之前請確保充分理解風險。
本文包含
相關文章
- BRC-20 代幣標準深度詳解 — 全面解析 BRC-20 代幣標準的運作原理、熱門代幣與開發指南。
- BRC-20 實際應用場景完整指南 — 從代幣部署、鑄造到交易,深入講解 BRC-20 標準的實際應用場景,提供詳細的操作教學與最佳實踐。
- 什麼是 Ordinals? — 理解比特幣上的數位工件協議,如何在比特幣區塊中刻錄內容。
- 刻錄 (Inscription) 技術詳解 — 深入理解 Ordinals 的刻錄機制與隔離見證的關係。
- Ordinals 開發者指南 — Ordinals 協議開發教學
延伸閱讀與來源
- BRC-20 標準提案 BRC-20 代幣標準
- Ordinals Explorer Ordinals 瀏覽器
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!