核心觀點

以BRC-20為代表的銘文代幣,在剛推出時並不受主流Web3社區認可。多數觀點在技術分析中將其類比為Omni-USDT等早期比特幣衍生資產協議,在市場分析中將其上漲歸因為普通MEME幣的邏輯(Fair Mint概念反VC,莊家拉盤,散戶FOMO等)。但實質上,BRC-20所代表的是一種新的crypto資產流動性範式。
在早期,BRC-20的資產邏輯很像NFT。所有的參與者都只能在比特幣的鏈上做交易,往往以“張”而不代幣數量為單位打新、交易。更高的鑄造成本讓所有參與者的天然的初始成本就比較高,加上較高的交易費用和較長的等待時間,早期參與者在退出的時候往往會三思。而這種低流動性,也給了它相對虛高的地板價,進一步增強了持有人的信心。
正如Solana等新公鏈的NFT往往發展不如以太坊 NFT,對於一個新的早期資產,流動性太好、參與者可以輕易低價退出,對項目而言未必是一件好事。而生長於比特幣鏈上的BRC-20,天然享有了早期較低的流動性
到了中後期,BRC-20的資產邏輯更像普通代幣。因為它本身作為“代幣”的可拆分性,使得每“張”BRC-20代幣能夠被拆分成更小單元、或者聚合成更大單位進行交易;而且它也能夠上幣安的大中心化交易所,等到真的上了幣,那麼在交易所用戶視角的裡面它和其它的代幣就幾乎沒有區別了。
這種可拆分性、流動性隨著項目發展階段自適應的特點,是NFT所不具備的,也是BRC-20真正的殺手鐧。在NFT牛市的時候,許多人都苦於頭部NFT單價太高難以參與,而各種“NFT流動性解決方案”到目前也沒有真正普遍成熟的。而如果從這個角度來看的話,BRC-20就可以看做是自帶“碎片化”方案的NFT。
本文說明和閱讀導覽
正文部分具體分為三個部分:
-
比特幣交易與腳本技術原理
-
Segwit和Taproot升級
-
銘文:Ordinals協議與BRC-20等衍生協議
全文較長、且前兩部分主要是一些技術講解,希望幫助讀者從原理角度理解銘文。
如果讀者更希望瞭解銘文相關的觀點,對比特幣基礎技術不感興趣,建議直接從第三部分開始看。
一、比特幣交易與腳本技術原理
交易腳本的結構
當一個人開始發送交易到比特幣網絡的時候,實際上他是委託了一個網絡中的比特幣節點、向比特幣交易池子中廣播了一段記載著這段交易信息的腳本。
交易腳本由以下四個部分組成:版本號、輸入部分(輸入數量、輸入腳本)、輸出部分(輸出數量、輸出腳本)、鎖定時間。
[nVersion] [nInputCount] [txInputs] [nOutputCount] [txOutputs] [nLockTime]
最經典的比特幣交易範例拆解如下:
01000000 // 4 bytes version
/* input */
01 // number of inputs
e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c // tx id
00000000 // input index
00 // unlocking script length
ffffffff // unlocking script
/* input end */
/* output */
02 // number of outputs
a025260000000000 // amount
19 // locking script length
76a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac // locking script
5062250000000000 // amount
19 // locking script length
76a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac // locking script
/* output end */
00000000 // 4 bytes locktime
輸出
基礎上交易輸出就是一個不可分割可以讓所有使用者花錢的比特幣集合,也就是UTXO(未花費的交易輸出):
-
amount,這個輸出是有多少比特幣的意思,但單位是satoshi,比特幣值的最小單位
-
locking script,俗稱“鎖定腳本”,它確定這個輸出要可以被花費所需要的足夠的條件,就是一個鎖來保護這個輸出不會被其他人花費
回到上面比特幣的範例交易拆解來看,output 一開始會有1 byte大小的數據告訴我們總共有幾個output,這邊範例是2個,接下來 amount 的部分展示每筆output的數量。最後是鎖定腳本locking script。
輸入
一般會先有1個字節的大小告訴我們在這個交易中有多少個輸入,可能不只是一個輸入,因為有時候需要很多小額的UTXO要湊起來買一個貴的東西。
接下來就是告訴我們要去transaction id是多少的第幾個輸出找到這個UTXO。
腳本語言
基於棧的語言Script:
2 3 OP_ADD 5 OP_EQUAL

比特幣語言是圖靈不完備的,主要是因為它不支持“循環”。
在圖靈完備的語言中,如Python、Java或C++,程序員可以編寫循環,使得一段代碼可以反覆執行,直到滿足某個條件。然而,比特幣腳本語言沒有這個特性。
這樣做的原因是安全性和預測性。在一個公開、無信任的網絡中(如比特幣),允許任意複雜的程序(尤其是那些可以無限運行的程序)可能會帶來安全風險。惡意的攻擊者可能會試圖通過提交一個設計成無限循環的交易來拖慢或卡住網絡。而因為比特幣腳本語言是圖靈不完備的,所以這種攻擊是不可能的。
此外,由於比特幣腳本語言的簡單性,它可以更容易地進行形式化驗證。這意味著,你可以通過檢查一段腳本,來準確地預測它的行為,而無需實際執行它。這在設計安全和可靠的金融系統時非常重要。
交易類型與腳本語言
支付公鑰哈希 (P2PKH)
絕大部分的比特幣交易都是採用這個腳本,就像是Alice的地址送錢給Bob的地址這種交易。P2PKH的鎖定腳本會長的像這樣
OP_DUP OP_HASH160 <公鑰散列> OP_EQUAL OP_CHECKSIG
上面的Public Key Hash其實就等同於擁有者的地址,只是還有沒有做Base58Check編碼的版本,這也是為什麼他叫做P2PKH,因為他是付錢給Public Key Hash,說穿了就是付錢給一般的地址。而如果需要花費這個UTXO,輸入的解鎖腳本只要長的像
<簽名> <公鑰>
所以我們把P2PKH的解鎖腳本和鎖定腳本接起來就會長這樣。

整個驗證過程長這個樣子:

-
一開始先依順序把簽名和公鑰推送上去堆棧。
-
再來看DUP
- 把棧頂的東西,也就是公鑰,多次製作一次。
-
接下來是HASH_160HASH160
- 把stack最上面的公指針pop出來,做一次,再push返回stack上面。
-
接下去遇到Public Key Hash,當然是直接push上去stack。
P2PKH要在做兩件事情
-
你要給出公鑰來證明,這個UTXO所屬的地址就是你的,因為公鑰可以生成唯一的地址(這邊其實是Public Key Hash,但意思和地址一樣拉)。
-
除了給公鑰還不夠安全,你還要再給一個簽名證明你手上握有密釘,因為簽名的產品需要密釘,但試驗證明卻只需要公釘。
支付公鑰 (P2PK)
他其實很簡單就是簡化版的P2PKH,他的locking script 長的像下面這樣
<公鑰 A> OP_CHECKSIG
而他對應的解鎖腳本長的像這樣
<私鑰A簽名>
他直接把公鑰放在locking script了,所以你的unlocking script不用再給公鑰了,給Signature來驗證就好了。
數據輸出(OP_RETURN)
第三個標準類型的交易叫做數據輸出,他就是我們上面所說不能花錢的輸出,它的用途是拿來記錄的,因為區塊鏈有公開透明不可被窺改的好的地方,因此這種狀態的output 就產生了,純的資料記錄不用於轉錢。而他的腳本(嚴格要說的是鎖定腳本)就長這樣
OP_RETURN <數據>
他不能被解鎖所以不會有解鎖腳本,又因為這種輸出不能被花費,所以他也不會計算UTXO,在記憶體裡的那個資料庫也不會有這種輸出。
但是,OP_RETURN後數據的長度被限制在80字節,因為中本聰並不希望大家把BTC寶貴的區塊空間單純用來存數據。
最早的Omni-USDT就是利用這80個字節的OP_RETURN空間實現的,其技術原理和後來的BRC-20非常有許多類似之處。具體來說,每個Omni-USDT交易由OP_RETURN內的16字節表示,具體如下:
Transaction version:交易版本。2個字節,值為0.
Transaction type:交易類型。2個字節,‘簡單發送’值為1.
Currency identifier:貨幣標識符。4個字節,USDT值為0x1F(31).
Amount to transfer:轉賬金額。8個字節。
結合具體實例做解析:
6f6d6e69000000000000001f000000174876e800
解析如下:
6f6d6e69:‘omni’對應的 ASCII 編碼,因為交易備註與 omni 協議有關
0000:交易版本
0000:交易類型,代表‘簡單發送’
0000001f:31,代表 USDT
000000174876e800:USDT 轉賬金額,1000 00000000 最小單位 = 1000 USDT
但由於比特幣鏈的效率和手續費的原因,以及以太坊等“新公鏈”的興起,USDT等新幣的主陣地逐漸轉移到了其它鏈上。
多重簽名
多籤:現在有一個腳本他是由N個公鑰組成的,而且如果要解鎖他所保護的UTXO只需其中M個提供簽名即可。而M在比特幣裡目前最大限制為15個公鑰,他的鎖定腳本長的像這樣
M <公鑰 1> <公鑰 2> ... <公鑰 N> N OP_CHECKMULTISIG
例如 2–3 多重簽名 就如下
2 <公鑰 A> <公鑰 B> <公鑰 C> 3 OP_CHECKMULTISIG
然後要解鎖他的解鎖腳本就會是
OP_0 <簽名 B> <簽名 C>
支付給腳本哈希 (P2SH)
從上面的多籤來延展,如果現在是2–5的架構locking script會有多長,如果是3–7呢?locking script太長會造成什麼負擔?我們知道locking script是用來保護的保護 UTXO 不被盜用的,locking script 的增長會導向UTXO的肥大,而我們剛說過UTXO為了方方便會存在昂貴的記憶體裡面,因此如果UTXO越來越大比特幣節點對記憶體的消費也會越來越多兇猛,因此P2SH就登場了。
P2SH的作用其實就是把很長的locking script 做一次hash 之後來代替他,來縮小locking script, 把這部分移到Unlocking Script。簡單來說差異如下圖

另外一個P2SH很重要的特點是,因為locking script現在夾住的是一個經過HASH160的產物,這個跟生成地址的過程是一樣的,如果再把他做Base58檢查編碼,也可以得到一種地址,就是大家很常說的multisig地址,這種地址固定3開頭,他跟一般的地址可以做到的事情一樣,別人可以送錢到這個地址,而這個地址也可以轉錢出去,差別只在這種地址 送錢的交易簽名時需要redeem script並且可能不僅僅是一個簽名的參與。
總結P2SH來說他有以下幾個優點
-
雖然input和output都會在區塊鏈上,但是因為redeem script被放到input了,所以也只有等到被花費時才會增加區塊鏈的大小,而不是現在就立即增加大小。
-
他可以將送錢目標改成一種3開頭的地址,而不是一個顯示的多籤地址,這樣可以保護那些沒有參與拿錢的人的隱私
-
他可以讓手續費的壓力轉移到拿錢的人身上
二、Segwit和Taproot升級
Segwit-BIP141
簡單理解:Segwit 就是想方設法地把 scriptSig 給移出去,從而實現區塊擴容1MB→4MB
進一步理解:
中本聰之前的代碼中寫到,在審核統計區塊大小的時候,每一個區塊大小不超過1M。
隔離見證就是把腳本簽名(scriptSig)信息從基本結構 (base block) 裡拿出來,放在一個新的數據結構當中。做驗證工作的節點和礦工也會驗證這個新的數據結構裡的腳本簽名,以確保交易是有效的。
當審核統計區塊大小不能超過1M的時候。腳本籤大小不會被計算在內。因此這是一個軟升級

技術原理:
BIP141選擇在前一筆輸出的locking script 動點手腳,只需要看到scriptPubKey是0x00開頭,他就被賦予了新的意義。
P2WPKH
witness: <signature> <pubkey>
scriptSig: (empty)
scriptPubKey: 0 <20-byte-key-hash>
(0x0014{20-byte-key-hash})
全名是public key 被放入了witness program,因此輸入的scriptSig就可以是空的。簡單來說,scriptPubKey的開頭為0讓腳本引擎知道這是一個segwit交易,而接下來的20字節讓腳本引擎更明確知道這是一個P2WPKH輸出,因此腳本引擎就會去見證程序拿簽名和公鑰,最後的驗證就和普通P2PKH一樣了。
為什麼舊版本能兼容:
如果你不升級,你看到的就是一個空的輸出簽名,表面含義是“這是個誰都能花的輸出”。但你真想花的時候,大部分升級過的節點會檢查你提供的簽名腳本,這是舊版本客戶端所無法提供的。
Segwit採用率已經達到了96%

Taproot BIP340-342
Taproot是2021年比特幣的一次升級,它是基於Segwit的。
這次升級其實夾了三個主要的變化,而且其中因為要支持Schnorr簽名,所以比特幣的腳本系統勢必要做一些改動(BIP- 342 ),在廢棄一些低效率的操作碼和新增加一些新的操作碼的同時,Bitcoin Core 也順便取消了 Bitcoin script size 的限制。

(來自 BIP-342 維基)
從腳本視角上來看,Taproot繼承了Segwit腳本,給了一個新的腳本version,如果看到新的版本號那麼這就是Taproot腳本。
Taproot腳本取消了script size的限制,很大的增加比特幣能做到的事。這個改動倒是給了把圖片放上去比特幣一個很好的解決方法,以下是Ordinals協議的腳本示例:
<signature>
OP_FALSE
OP_IF
OP_PUSH "ord"
OP_1
OP_PUSH "text/plain;charset=utf-8"
OP_0
OP_PUSH "Hello, world!"
OP_ENDIF
<公鑰>
上面這段腳本拿掉中間全部的操作碼跟數據的話,就是一般標準的簽名,而中間這段腳本在做什麼?
-
OP_FALSE 會將一個空數組push到棧中,注意這邊是有push東西的,只是它是空的。
-
OP_IF 檢查堆棧頂部,如果為真才會做接下來的事情,因為前面OP_FALSE 的動作,導致這個如果不會立。
-
接下來是OP_PUSH … 等一系列操作都會被忽略,因為為上一個如果條件沒有達成。
-
OP_ENDIF 結束這個 if 塊。
可以看出來中間這些操作因為OP_IF 一定不會成立,所以實際上什麼狀態都沒有改變,於是就可以把圖片的完整資料都放在OP_IF裡面而不是影響本比特幣腳本的驗證。因此在taproot升級後,腳本現在是沒有多大限制了。所以只需要交易的大小關於塊的大小 (4 MB),腳本你要多少都可以,也就是說我們可以達到類似OP_RETURN的效果,把無關的資料放上比特幣,還沒有 80 字節的大小限制。
三、銘文:Ordinals協議與系列衍生協議(BRC-20等)
Ordinals協議
Ordinals 是一種允許在比特幣區塊鏈上鑄造 NFT 的協議。其核心思路是:比特幣區塊鏈上每一個 satoshi 都是按照挖礦的時間順序生成的,並且可以在每個 satoshi 上寫入內容(文字、圖片、視頻等),這個寫入的過程稱為“銘刻”,因此Ordinals協議以及類似技術原理的協議也被統稱為“銘文賽道”。可見,只要能夠給每個 satoshi 進行編號,並允許它們被追蹤和轉移,那麼寫入每個 satoshi 上的內容都有了獨一無二的編號,這就是通常大家通常所說的 NFT。
在這一思路下,Ordinals 就實現了以下兩個關鍵功能:
1. 給 satoshi 創建一個編號系統(序數理論);
2. 給 satoshi 寫入數據。
這一協議有以下幾個特點:
-
NFT 完全存儲在比特幣區塊鏈上,無需側鏈或生成其他 Token;
-
NFT 與比特幣區塊鏈一樣安全、去中心化、穩定。
比特幣 NFT 的具體細節可以通過查看其所對應的 satoshi 上的內容來發現,比如以 inscription 129490 為例,它裡面包含了交易 id、NFT 所有人的地址、輸出價值、satoshi 的編號、生成時間等信息。

通過在比特幣瀏覽器中輸入 genesis transaction 的那串字符,可以找到該 satoshi 所在的交易區塊。想象一下,比特幣區塊鏈就是這樣由一個又一個區塊組成的數字博物館,而每一個比特幣 NFT 都是陳列其中的數字文物。

BRC-20
BRC-20技術原理
在 Ordinals 協議發佈2個月後,推特用戶 @domodata 在Ordinals協議上,又提出了一個比特幣上的 Token 標準——BRC-20 標準。作者也直說,這個BRC-20中的“BRC”並不是什麼東西的簡寫,完全就是仿造ERC-20的命名方式。但這種命名方式效果出其意料的好 —— 不僅直截了當的告訴大家這是一套在比特幣上的代幣發行標準,而且也給了大家“類似ERC-20”的想象空間。
BRC-20本質上是用了Ordinals刻錄文本的功能,約定了一套用json文本記賬代幣的格式。具體來說,定了3個函數:
- Deploy部署
{
"p": "brc-20",
"op": "deploy",
"tick": "ordi",
"max": "21000000",
"lim": "1000"
}
部署銘文,tick字段用來表示代幣名,max表示供應量,lim表示每次mint的最大數額。值得注意的是,BRC-20協議規定其代幣名“tick”不能超過4個字符,這使得命名空間比較小,代幣名遵循“先來先得”的原則。
- Mint
{
"p": "brc-20",
"op": "mint",
"tick": "ordi",
"amt": "1000"
}
鑄造銘文,填寫tick字段用來表示代幣名,amt表示該次mint的數額
3.轉移
{
"p": "brc-20",
"op": "transfer",
"tick": "ordi",
"amt": "100",
"to": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
}
轉移銘文,需要填寫代幣的、代號、數量和目的地址。
可以看出,BRC-20在鏈上表達的部分並不多,要搞清楚有關一個幣的每個地址的具體持倉數量,是非常依賴於外部中心化解析的,因此相關基礎設施的搭建是一個機會。Unisat和OKX錢包就很好的把握住了這個機會,及時地做出了BRC-20代幣的錢包和交易所功能,既也讓新入場的人有了成本更低的上手方式,也給自己帶來了大量流量。
BRC-20為什麼火
從技術角度來看,BRC-20也許並不能算是一個特別創新的技術。前文提到2013年的時候Omni協議就能發token,最早的USDT也是先在BTC上面發的。因此,在BRC-20剛出來的時候,許多人都認為這只是一種新的空氣幣,認為它和早年的Omni-USDT等協議並無不同,能火起來充其量只是一種新的MEME邏輯。
然而,事實並非如此。把BRC-20代幣和普通MEME幣、Omni-USDT等早期比特幣代幣做類比的人,往往忽略了BRC-20實際上是創造了一種新的流動性範式。
首先,所有通過BRC-20協議創建的代幣都是“公平發售”(Fair Mint)的。之前無論是各種公鏈幣還是各種ERC-20等標準的項目幣,其在面向大眾發售之前往往都已經給了項目方內部人員、VC投資機構等預留了大量的低籌碼代幣,導致散戶在可以買籌碼的時候往往要面對這些低籌碼成本的出售。而對於BRC-20代幣,哪怕是部署代幣的人,在鑄造代幣的時候也需要一視同仁的繳納比特幣網絡費用,使得沒有人能夠在早期攢下低籌碼成本。這對在熊市中被項目方和機構“收割”了一年多的散戶而言,是非常有吸引力的。從事實上來看,這也使得許多銘文代幣在籌碼分佈上比較分散、健康。
但僅僅憑藉Fair Mint這個特性並不夠,因為在其它鏈上,通過智能合約也能夠實現Fair Mint。
BRC-20的特殊之處在於,早期它像NFT的邏輯,所有的參與者都只能在比特幣的鏈上做交易,更高的Mint成本讓所有參與者的天然的初始成本就比較高,加上較高的交易費用和較長的等待時間,早期參與者在退出的時候往往會三思;而這種低流動性,也給了它相對虛高的地板價,進一步增強了持有人的信心。正如Solana等新公鏈的NFT往往發展不如以太坊 NFT,對於一個新的早期資產,流動性太好、參與者可以輕易低價退出,對項目而言未必是一件好事
而到了中後期,它本身作為“代幣”的可拆分性,也讓它能夠被拆分成更小單元作為交易;而且它也能夠上幣安的大中心化交易所,等到真的上了幣,那麼在交易所用戶視角的裡面它和其它的代幣就幾乎沒有區別了。這種可拆分性、流動性隨著項目發展階段自適應的特點,是NFT所不具備的,也是BRC-20真正的殺手鐧。在NFT牛市的時候,許多人都苦於頭部NFT單價太高難以參與,而各種“NFT流動性解決方案”到目前也沒有真正普遍成熟的。而如果從這個角度來看的話,BRC-20就可以看做是自帶“碎片化”方案的NFT。
其它Ordinals衍生的資產協議
在BRC-20生態爆發之後,很多人認為BRC-20並沒有釋放出Odinals本身可以做改進以支持更多功能,因此又出現了很多以類似結構命名的、以Ordinals協議為基礎的資產協議,舉例如下:
ORC-20:該協議可以視為BRC-20的改良版,主要針對BRC-20存在的問題進行優化,比如其命名空間有限的問題、最大供應量不變的問題、以及潛在“雙花”風險等。
BRC-420:該協議也是基於Ordinals,但主要是支持了更多類型的資產,可以2D圖片甚至3D資產模型給銘刻到鏈上。另外,BRC-420也引入了版稅功能,使得創作者能夠分享到自己作品後續的收益。BRC-420協議還在一個持續完善的階段,相關基礎設施的搭建還並不成熟,但本身可以承載的東西更多、上限也更高。
BRC-20在Web3社區內部的共識分裂
在2021-2022年,Mass Adoption(為大眾所採用)是Web3最大的主流敘事框架之一,在這個敘事框架下各種新公鏈、跨鏈方案、以太坊擴容方案、模塊化區塊鏈方案層出不窮,也受到了最多的關注。在那個時候,比特幣由於其效率問題、應用承載問題,似乎已經淡出了主流Web3社區的視野,被看做是上個時代的OG才關注的老玩意。
而2023年BRC-20的火爆以及比特幣生態的興起,其實是對“Web3本質到底是什麼”的一個拷問。畢竟BRC-20這種資產發行方式,服務的主要是Web3的散戶,在技術、效率上是在“開倒車”,和Mass Adoption的敘事毫無關係,似乎更加印證了“Web3本質是賭場”這種偏cynical的觀點。也有社區成員開始質疑Web3、Mass Adoption的概念本身,認為迴歸Crypto敘事行業會更好。
對於特別看中項目基本面、對行業的價值、Mass Adoption潛力的投資者而言,往往難以說服自己真正參與到BRC-20以及衍生協議裡面來,更願意去關注當下的其它相對“基本面更紮實”的熱點,比如DePIN、Solana生態。直到現在,相關的討論依然在繼續。




