原文作者:付少慶,SatoshiLab,萬物島BTC 工作室
1. 比特幣原有技術的主要探索與衝突
比特幣的原有技術一直存在著大規模應用與比特幣應該具有的能力的衝突問題。大規模應用和交易規模是否意味著更複雜的交易指示和更大的交易空間?是否意味著一定要在比特幣單一系統上實現所有的功能?在早期,比特幣生態技術發展不完全的情況下,這些現像似乎都是比特幣本身的問題。隨著科技的發展,許多問題會得到更清楚的答案。
在本文中列出一些相關問題,以及這些問題的產生與解決過程。透過這篇文章,可以看到這些問題與技術之間的關聯性,以及比特幣主鏈與相關「測試鏈」的變化過程。比特幣的技術一直被不同的項目與團隊在探索中(包括以太坊都是對比特幣不完善的一種探索),只是在比特幣主網上產生的變化一直不夠明顯,直到Taproot 等技術的產生,推動了Ordinals 協議等協議產生之後,重新進入了一個新的發展高潮。
從整體來看這些發展過程與產生的相關技術,我們能夠看到他們之間的聯繫,可以推測出更多發展方向與整體架構。
1.1. 比特幣的腳本語言與幾個刪減指令
比特幣的程式語言是一種逆波蘭範式的腳本語言,沒有循環語句和條件控制語句(稍後看 Taproot&Taproot Script 擴充了這塊能力)。因此,人們常說:比特幣腳本語言不是圖靈完備的,這導致比特幣腳本語言,有一定的限制。
當然,由於這些局限性,駭客就沒辦法使用這種腳本語言來寫一些死循環(會造成網路癱瘓),或是一些能導致 DOS 攻擊的惡意程式碼,也就避免了比特幣網路受到 DOS 攻擊。比特幣的開發者,也認為核心區塊鏈,不應該具備圖靈完整性,來避免一些攻擊和網路堵塞。
但是,也正是由於這些局限性,比特幣網絡,沒有辦法運行其他複雜的程式了,沒辦法完成一些「有用」的功能。而後面發展的一些區塊鏈系統,為了解決具體問題,滿足用戶的需求,直接改變了這一點。如,以太坊所使用的語言就具備了圖靈完備。
比特幣腳本指令常見的類型:
關鍵字:
1. 常數。如:OP_ 0 ,OP_FALSE
2. 流程控制。如: OP_IF,OP_NOTIF,OP_ELSE,…
3. 堆棧。如:OP_TOALTSTACK(把輸入壓入輔堆疊的項部,從主堆疊刪除),…
4. 字串。如:OP_CAT(連接兩個字串,已停用),OP_SIZE(把棧頂元素的字串長度壓入堆疊(無需彈出元素))
5. 位元邏輯。如:OP_AND,OP_OR,OP_XOR
6. 算術邏輯。如:OP_ 1 ADD(輸入值加 1),OP_ 1 SUB(輸入值減 1)
7. 加密。如:OP_SHA 1 (輸入用 SHA-1 演算法 HASH.),OP_CHECKSIG()
8. 偽關鍵字
9. 保留關鍵字
比特幣腳本指令常見的類型:
腳本:
1. 支付到比特幣地址的標準交易(pay-to-pubkey-hash)
2. 標準比特幣產生交易(pay-to-pubkey)
3. 可證明的無法花掉/可刪除的輸出
4. Anyone-Can-Spend 輸出
5. 猜謎交易
五個標準類型的交易腳本包括:支付到公鑰哈希(P2P KH)、支付到公鑰、多重簽章(限定最多15 個金鑰)、支付到腳本哈希(P 2 SH),以及資料輸出(OP_RETURN)。
在網頁:https://en.bitcoin.it/wiki/Script中有詳細的說明。
刪減比特幣支援的指令
比特幣歷史上有多次刪減指令的事情發生。下面的圖表中,紅色部分是已經刪除的指令。
字串操作
(3)算術操作
為什麼要刪減指令?安全性只是一方面的考慮,如果我們用分層設計的想法看待刪減指令會理解其合理性,這樣做能讓底層協定更基礎更穩定。也許中本聰一開始就意識到了這個問題,不然不會主動的刪減指令。我們常人的思維是建造一個直接滿足使用者的需求,具有完善指令和系統功能的小系統,而不是一個需要協作的大型協定。
這樣也就造成了一個事實,只有比特幣適合作為一層網路。我在《比特幣價格過高會促進一個新的替代鏈產生》文章中分析過這種現象,從經濟學視角和技術視角分析,有產生比特幣替代鏈的可能性。但從比特幣的基本特點和分層設計的角度,幾乎只有比特幣能夠作為一層網路基礎設施,即使有替代鏈也是一個 1.5 層的產物。在一層網路這個層面,真品只有比特幣,能有一些替代作用的鏈最多是 A 貨。
1.2. 比特幣分叉歷史、原因與意義
在比特幣的發展歷史,除了刪減指令問題,另一方面是區塊大小之爭,這經常造成比特幣的硬分叉。
BTC 創立之初並沒有限制區塊大小,以便能夠在相同時間處理的交易筆數。但當早期BTC 價格非常低,惡意交易的成本也非常低,為了解決這一問題,中本聰在2010 年9 月12 日主持了一次軟分叉,添加了區塊體積不得超過1 MB 的限制。中本聰指出但這種限制是臨時性的,未來可以以可控和逐步的方式提高區塊限制,以便滿足擴容的需要。
下圖為比特幣的分叉歷史:
隨著比特幣的流行,網路交易擁擠確認時間成長問題愈發嚴重。 2015 年 Gavin Andresen 和Mike Hearn 宣布將在新版 BitcoinXT 中實作 BIP-101 提案,希望將區塊上限提高至 8 MB。而 Greg Maxell,Luke Jr,Pieter Wuille 等核心開發者則持反對意見,認為這種做法會提高運行全節點的門檻,而且帶來不可控的影響。這場爭論最終在議題和參與範圍均出現了擴大化。
從上面的內容,我們看到中本聰也表達了「區塊大小這種限制是臨時性的,未來可以以可控和逐步的方式提高區塊限制,以便滿足擴容的需要。」但什麼時候分叉支援更大區塊,單獨分出一條鏈支援大區塊是否可以解決問題?在不斷的爭議中,也產生了眾多的案例。如,BCH 區塊大小是 8 M,後來又增加的 32 M。 BSV 區塊大小是 128 M。而除了 BCH(和後面的 BSV)以外,這段時期還出現了許多其它 BTC 分叉幣,根據 BitMEXResearch,僅在 BCH 分叉後的一年內,就出現了至少 50 種新的分叉幣。
稍後的內容我們會看到,在比特幣主網上面 Segwit 和 Taproot 也在一定程度上將區塊的空間從 1 M 提升到了 4 M。
比特幣的分叉是一種發展探索,在嘗試透過自身的改變來完成對更多需求的支持。其中有用戶需求、礦工需求、投資人需求、開發者需求、…。
1.3. 比特幣發展中幾個典型的探索
中本聰離開後,繼承人 Gavin Andresen 主導建立了 Bitcoin Core 和 Bitcoin 基金會。在此期間,針對 BTC 的可拓展性探索一直存在,尤其是在資產發行領域。
Colored Coins(染色幣)
eToro 執行長 Yoni Assia 在 2012 年 3 月 27 日發表的一篇文章中第一個提出彩色幣。這個想法不斷發展,在 Bitcointalk 等論壇上,彩色硬幣的概念開始形成並獲得關注。最後 Meni Rosenfeld 於 2012 年 12 月 4 日發布了一份詳細介紹彩色貨幣的白皮書。
染色幣的設想是透過為比特幣的特定部分添加特殊的標註(即染色),來代表更廣泛的資產和價值。染色幣在實作上出現了一系列實體,大致分為兩類:
1)基於OP_RETURN:如Flavien Charlon 在2013 年提出的Open Assets,利用OP_RETURN(在Bitcoin v 0.9.0 中被提出,可以用於在Bitcoin 上存放少量的數據,最初的限制為40 bytes,後提高至80 bytes)。操作碼儲存到腳本中,並透過外界讀取的方式來完成「染色」和交易。 (這種模式與 Ordinals 依靠外部索引來確定資產合法性類似)。
2)基於 OP_RETURN:典型代表是 ChromaWay 在 2014 年提出的 EPOBC Protocol,EPOBC 資產的額外信息存儲在比特幣交易中的 nSequence 字段,每個 EPOBC 資產的類別和及合法性需要追溯到 genesis 交易來確定。
MasterCoin(OMNI)
JR Willett 在2012 年1 月6 日發布了MasterCoin 的設想,並取名為“比特幣第二份白皮書”,並在2013 年7 月通過ICO 的方式正式啟動項目,最終募集到了5120 個BTC(當時價值50 萬美元)。 MasterCoin 和 Colored Coins 差異在於它建立了一個完整的節點層,透過掃描比特幣區塊來維護狀態模型資料庫,該資料庫駐留在區塊鏈之外的節點中。這種設計可以提供比 Colored Coins 更複雜的功能,例如創建新的資產、去中心化交易所、自動化價格回饋等。 2014 年,Tether 也透過 Mastercoin 協議在比特幣上推出了穩定幣,也就是我們熟知的 Tether USD (OMNI)。
( 3)CounterParty
Counterparty 於 2014 年正式推出。 Counterparty 也使用 OP_RETURN 將資料儲存至 BTC 網路。但與染色幣不同,資產在Counterparty 不是以UTXO 的形式存在,而是透過OP_RETURN 載入資訊來表示資產的轉移,當一個資產持有者使用持有地址對歹有特殊數據的交易進行簽名後,資產便完成了轉移。透過這種方式,Counterparty 可以實現資產的發行、交易以及相容於以太坊智慧合約的平台。
除此之外,也有觀點認為 Ethereum、Ripple 和 BitShares 也屬於更廣義的「Bitcoin 2.0 」。
1.4. 比特幣的不完美與分層協議
比特幣系統的不完美(或限制)主要表現在幾個方面(本文中的不完美是根據以太坊白皮書中的總結,並非是真正的不完美。
1. 比特幣的帳戶系統 UTXO
在目前的區塊鏈專案中,主要有兩種記錄保存方式,一種是帳戶/餘額模型,一種是 UTXO 模型。比特幣採用是 UTXO 模型,以太坊、EOS 等則採用的是帳戶/餘額模型。
在比特幣錢包當中,我們通常能夠看到帳戶餘額,然而在中本聰設計的比特幣系統中,並沒有餘額這個概念。 「比特幣餘額」是由比特幣錢包應用程式衍生出來的產物。 UTXO(Unspent Transaction Outputs)是未花費的交易輸出,它是比特幣交易產生及驗證的一個核心概念。交易構成了一組鍊式結構,所有合法的比特幣交易都可以追溯到前向一個或多個交易的輸出,這些鏈條的源頭都是挖礦獎勵,末尾則是當前未花費的交易輸出。
所以現實世界中沒有比特幣,只有 UTXO。比特幣的交易由交易輸入和交易輸出組成,每一筆交易都要花費(spend)一筆輸入,產生一筆輸出(output),而其所產生的輸出,就是“未花費過的交易輸出” ,也就是UTXO。
如果要實現智能合約,UTXO 這種帳戶模型有非常大的問題。以太坊黃皮書的設計者 Gavin Wood 對 UTXO 的理解十分深刻。以太坊的最大新功能點是智能合約,因為智能合約的考慮,Gavin Wood 要基於 UTXO 去實現圖靈完備的智能合約是困難的。而帳戶模型是天然的物件導向的,對每一筆交易,都會在相對應帳戶上進行記錄(nonce++)。為了易於管理帳戶,而引入了全域狀態,每一筆交易都會改變這個全域狀態。這和現實世界是相對應的,每一個微小的改變,都會改變這個世界。因此以太坊使用了帳戶系統,後期的公鏈基本上都是基於各種類型的帳戶系統實現的。
UTXO 的另一個嚴重缺陷是,無法為帳戶的提款額度提供精細的控制。這點在以太坊的白皮書中有相關的說明。
2. 比特幣的腳本語言,非圖靈完備
儘管比特幣腳本語言可以支援多種計算,但是它不能支援所有的計算。最主要的缺失是比特幣的腳本語言,沒有循環語句和條件控制語句。因此,我們說:比特幣腳本語言不是圖靈完備的。這導致比特幣腳本語言,有一定的限制。當然,由於這些局限性,駭客就沒辦法使用這種腳本語言,寫一些死循環(會造成網路癱瘓),或一些能導致 DOS 攻擊的惡意程式碼,也就避免了比特幣網路受到 DOS 攻擊。比特幣的開發者,也認為核心區塊鏈,不應該具備圖靈完整性,來避免一些攻擊和網路堵塞。但是,也正是由於這些局限性,比特幣網絡,沒有辦法運行它複雜的程式了。不支援循環語句的目的是避免交易確認時出現無限循環。
為了安全性,不支持圖靈完備的理由是不充分的。而且非圖靈完備的語言所做的事情很有限。
3. 比特幣的其他不完善,安全性、擴展性
挖礦的中心化問題,比特幣挖礦演算法基本上是讓礦工千萬次地輕微改動區塊頭,直到最終某個節點的改動版本的哈希小於目標值。然而,這種挖礦演算法容易被兩種形式的中心化攻擊。第一種,挖礦生態系統被專門設計的因而在比特幣挖礦這一特殊任務上效率提高上千倍的 ASICs(專用積體電路)和電腦晶片控制。這意味著比特幣挖礦不再是高度去中心化的和追求平等主義的,而是需要巨額資本的有效參與。第二種,大部分比特幣礦工事實上不再在本地完成區塊驗證;而是依賴中心化的礦池提供區塊頭。這個問題可以說很嚴重:目前,排名前三的採礦池間接控制著比特幣網路中約 50 %的處理能力。
擴展性問題是比特幣的一個重要問題。使用比特幣,每小時增長約 1 MB。如果比特幣網路每秒處理 Visa 的 2000 次交易,則每三秒鐘將增加 1 MB(每小時 1 GB,每年 8 TB)。較低的交易次數,也引起比特幣社群的爭議,大區塊鏈雖然可以提高效能,但問題是中心化風險。
從產品生命週期的角度,比特幣一些小的不完善,可以在自身系統中得到改善,改善的方法受到當前系統的限制。但如果可以在一個新系統中解決這些問題,就完全可以不考慮舊系統的限制問題。既然要打造一個新的區塊鏈系統,那麼設計新系統的時候,這些小的功能完善也一併進行設計與升級改造。
分層設計
分層設計是一種人類處理複雜系統的手段和方法論,透過將系統劃分為多個層次結構並定義各層之間的關係和功能,以實現系統的模組化、可維護性和可擴展性,從而提高系統的設計效率和可靠性。
對於一項廣泛且龐大的協定體系,使用分層會有明顯的好處。這樣做使人們容易理解,容易分工實現與容易分模組改進等優點。如電腦網路中的 ISO/OSI 的七層模型設計,但在具體的實作中,可以合併一些分層,例如,具體的網路協定 TCP/IP 是四層協定。具體地說協議分層的優點:各層級之間是獨立的、彈性好、結構上可分割開、易於實現和維護、能促進標準化工作。
從分層協議的角度來看,比特幣因為要處於最基礎的底層,那麼他的UTXO、非圖靈完備、出塊時間長、區塊容量小、創始人的消失、…,都不是缺點,反而是作為一層網路應該具有的特徵。
註:作者在《一文梳理比特幣二層(Layer 2)所建構的基礎知識體系V1.5 版》對協議分層有更詳細的說明。
2. 比特幣發展中重要的新技術(區塊擴容與能力擴容)
在上一節我們探討了比特幣原有技術的主要衝突和一些探索案例,但許多導致了硬分叉或產生了全新的異構鏈。在比特幣本身這條區塊鏈上,這種探索也產生了許多成果,本質上是區塊的擴容與能力的擴容。他們主要表現在以下幾個方面。
2.1. OP_RETURN
比特幣的開發者一直想擴展比特幣的能力,表現在幾個方面:
OP_RETURN 的使用
OP_RETURN 是一個腳本操作碼,用來終止腳本並傳回棧頂的值。這個操作碼類似於程式語言中的返回函數。在比特幣的歷史上,OP_RETURN 操作碼的功能被多次修改,現在它主要被用作為在帳本上儲存資料的一種方法。 OP_RETURN 操作碼的功能曾在過去發生過重大變化,現在它是一個重要的機制,使用它我們就能在鏈上儲存任意資料。
OP_RETURN 最初是用於提前結束腳本執行的返回操作,執行結果將作為棧頂項目呈現。這個操作碼原本有一個容易被利用的漏洞,但中本聰很快就修補了這個漏洞。
對 OP_RETURN 功能的進一步更改
在 Bitcoin Core 的 v 0.9.0 那次升級中,「OP_RETURN 輸出」腳本被製作成標準輸出類型,允許使用者將資料附加到「不可花費的交易輸出(unspendable transaction output)」上。這類腳本中可用的資料量的上限最初被限制為 40 字節,然後提升至 80 位元組。
將數據儲存在區塊鏈上:
將 OP_RETURN 改為始終返回 false 造成了有趣的結果。由於在OP_RETURN 之後不會評估任何操作碼或數據,因此網路使用者開始使用此操作碼來儲存任意格式的資料。
在比特幣現金(BCH)的時期,即2017 年8 月1 日-2018 年11 月15 日,能夠附加到OP_RETURN 輸出的數據長度擴展到220 位元組,更大的數據能夠促進區塊鏈上創新的應用,例如在區塊鏈社交媒體上發佈內容等。
在 BSV 上, 220 位元組的限制仍然被保留了一小段時間。隨後,在 2019 年 1 月,由於 OP_RETURN 操作碼以節點不驗證任何後續操作碼的方式終止腳本,因此節點也不會檢查腳本是否在 520 位元組的最大腳本大小限制內。由此一來,網路上的節點營運商決定將最大交易體積提高到100 KB,從而賦予開發者有更多應用創新的自由,讓新的應用可以將更大、更複雜的數據放入比特幣帳本。那時有一個應用例子,有人將整個網站放入了 BSV 帳本中。
OP_RETURN 雖然有一定的功能擴展,但整體來說能力還是有限。於是產生了隔離見證的技術。
Segwit 隔離見證
隔離見證,即 Segregated Witness(簡稱 SegWit),由 Pieter wuile(比特幣核心開發人員、Blockstream 聯合創始人)在 2015 年 12 月首次提出,後來形成了比特幣 BIP 141 。隔離見證將比特幣區塊中交易的資料結構稍加修改,以解決以下問題:
1)transaction malleability 問題。
2)SPV 證明中傳輸交易的簽章成為可選項,能夠減少 Merkle proof 傳輸的資料量。
3)變相增加區塊容量。
前兩項主要是增加安全性和效能,其中對新技術影響最多的是第三項,變現增加了區塊的容量(見下面的概念Block weight),從而為比特幣的能力擴容打下來基礎,以至於後面的Taproot(隔離見證的第二個版本)的進一步加強。
雖然變現擴大了區塊容量,但隔離見證也受到區塊大小限制。比特幣的區塊大小限制為 1 M bytes,由於 witness 資料不包含在這個限制中,為了防止 witness 資料被濫用,仍然對總的區塊大小做了限制。引入了一個新概念叫塊重量(Block weight)
Block weight = Base size * 3 + Total size
Base size 是不包含 witness 資料的區塊大小
Total size 總大小是依BIP 144 所述序列化交易的區塊大小(以位元組為單位),包括基礎資料和見證資料。
隔離見證限制 Block weight <= 4 M。
隔離見證也技術上使得比特幣的擴容可以使用閃電網絡,這裡不詳細介紹這部分的內容。
Taproot 隔離見證V2版本
如果直接使用 Taproot 這個單詞,很多人以為是新概念,但如果告訴你這是隔離見證的第二個版本,大部分人都會明白其中的關聯性。與 Taproot 相關的 BIP 是 340 , 341 , 342 ,他們的名稱是:BIP 340 (Schnorr Signatures for secp 256 k 1),BIP 341 (Taproot: SegWit version 1 spending rootruScriptation,B 342)。
2021 年 11 月,Taproot 以軟分叉的形式正式生效。此次升級由 BIP 340、BIP 341 和BIP 342 組合。其中BIP 340 引入了可以同時驗證多個交易的Schnorr 簽名,取代了橢圓曲線數位簽名演算法(ECDSA),再一次擴大了網路容量並加快了批量交易的處理速度,為部署複雜的智能合約提供了可能性;BIP 341 實現了默克爾化抽象語法樹(MAST)來優化區塊鏈上的交易資料儲存;BIP 342 (Tapscript)採用比特幣的腳本編碼語言擴充的比特幣原生腳步能力的不足。
由隔離見證 Segwit 與 Taproot 的空間擴大,導致了 Schnorr、MAST 樹和 Taproot Scripts 的產生,他們要完成的使命是比特幣主網的功能擴大。
2.2. Schnorr、MAT、Taproot Scripts
透過 2.1 節,我們看到了比特幣在擴容和擴能上面的不斷探索,直到產生了 Taproot 技術,以及相關的幾個重要技術 Schnorr、MAST、Taproot Scripts,比特幣的能力格局才真正被打開。
Schnorr 簽名
Taproot 的發展,在擴充能力的同時,對簽章演算法有了一定的要求,於是 Schnorr 簽章開始出現,並用來取代橢圓曲線數位簽章演算法(ECDSA)。 Schnorr 簽章是一種數位簽章方案,可以有效率且安全地對交易和訊息進行簽署。它最早由克勞斯·施諾爾(Claus Schnorr)在1991 年的一篇論文中描述。 Schnorr 因其簡單性、可證明的安全性和線性性而受到讚譽。
Schnorr 簽名的優勢:
1)Schnorr 簽章具有多種優勢,包括高效性、增強的隱私性,同時保留了ECDSA 的所有功能和安全假設。 Schnorr 簽章可以實現較小的簽章大小、更快的驗證時間,並且對某些類型的攻擊具有改進的抵抗能力。
2)Schnorr 簽名最顯著的優勢是金鑰聚合(key aggregation),將多個簽章聚合為一個簽名,該簽章對其金鑰的總和有效。換句話說,Schnorr 使得多個合作方能夠產生一個對他們的公鑰總和有效的簽名。簽名聚合使得多個簽名者的簽名可以合併為單一的簽名。
金鑰聚合能夠降低交易費用並提高底層可擴展性,因為來自多重簽名設定的電子簽名在區塊中佔用的空間與來自單方交易的簽名相同。 Schnorr 的這個特性可以用來減少多重簽章支付和其他與多重簽章相關的交易的大小,例如,閃電網路通道交易。
3)Schnorr 簽章的另一個重要特性是不可竄改性。
4)Schnorr 也提供了許多隱私優勢。它可以讓多重簽名方案與傳統的單一公鑰無法從外部區分,Schnorr 使得觀察者在鏈上活動中更難區分多重簽名的支出和單一簽名的支出。此外,在n-of-m 多重簽名設定中,Schnorr 使得外部觀察者更難透過查看鏈上資訊來確定哪些參與者在交易中簽名,哪些沒有簽名。
Schnorr 簽名被實現在 BIP-340 中,作為 Taproot 軟分叉升級的一部分,並於 2021 年 11 月 14 日在區塊高度 709, 632 上啟動。 Schnorr 讓 BTC 的數位簽章更快、更安全、更容易處理。值得注意的是,Schnorr 簽章與 BTC 的密碼學演算法向後相容,這樣就可以透過軟分叉升級來引入它們。
MAST 抽象語法樹
MAST 在中英文的縮寫說明有一點歧義。 BIP 官方(BIP 114)和一些文章使用 MAST 的縮寫為: Merklized Abstract Syntax Tree(默克爾抽象語法樹)。其它一些資料使用 Merklized Alternative Script Trees (MAST)翻譯成中文 Merklized 替代腳本樹(MAST)。在《Mastering Bitcoin》這本圖書中,和一篇文章都是這個縮寫說明:https://cointelegraph.com/learn/a-beginners-guide-to-the-bitcoin-taproot-upgrade。
梅克爾抽象語法樹和 Merklized 替代腳本樹(MAST)從作用上看起來相同。從翻譯的角度,我個人感覺保持比特幣官方 BIP 協議中的用法。
MAST 背後的概念來自於兩個概念, 抽象語意樹和默克爾樹。
抽象語意樹(AST) 屬於電腦科學中的編譯原理和形式語言學的知識領域。抽象語意樹是編譯過程中的一個中間表示形式,用來表示原始碼的語意結構。它將原始碼轉換為一種樹狀結構,其中每個節點代表一個語義單元,而邊表示它們之間的關係。抽象語意樹在編譯器的詞法分析和語法分析階段中發揮重要作用,幫助編譯器理解原始碼的含義並進行後續的最佳化和產生目標程式碼的過程。通俗說抽象語意樹(AST) 是一種透過將一個程式分割成獨立的小塊來描述程式的方法,這會讓程式變得更容易分析和最佳化。為了產生一個AST,需要把所有的方程式與其前提用箭頭連接起來,直到所有的前提都被找出。下圖即是一段腳本的 AST。
另一方面,梅克爾樹則可用於驗證某個元素是否屬於某個集合,且無需知曉整個集合的全貌。舉個例子,比特幣的簡易支付驗證錢包(SPV wallet)就使用梅克爾樹來驗證某筆交易是否存在於某個區塊中,這樣無需下載完整的區塊,可以節省頻寬。
要產生一棵默克爾樹,先要把每個元素都各自哈希一次,生成各自唯一的識別符;然後這些標識符配對之後再次哈希,生成這一對標識符的標識符;如此不斷重複,直至只剩下一個標識符,稱為“默克爾根”,它就是一個短小精悍、但是標記了整個集合的標識符了。
在驗證某個元素屬不屬於某個集合時,擁有整個集合的人可以向你提供從那個元素到默克爾根路徑上的所有識別碼。這樣就能證明,這個元素確實在這個集合內。
簡而言之,AST 背後的技術讓你可以把一個程式分成多個小塊,而梅克爾樹讓我們可以驗證這些小塊確實是一個完整程序的一部分,而不必暴露整個程序。這就是 MAST 的基本原理,可以讓花費者用一個默克爾證明來替換在單次交易中沒有用到的條件,優點是:減少交易體積、提高隱私性,並支持更大的合約。
具體的 MAST 樹在網路上有很多案例,懂得程式開發的人員,梳理一個 MAST 的流程就可以清楚相關的邏輯。
既然有了 MAST 抽象語法樹,那麼就需要擴充比特幣原生語法的能力,於是 Taproot Scripts 就產生了。
Taproot Scripts
在BIP 342 協定中入Tapscript 腳本,Taprootscript 是原始比特幣腳本的升級版,也可以被稱為一種語言,但它實際上是帶有命令的操作碼的集合,這些命令為另兩個BIP 的實施助力。 Taprootscript 也取消了 10000 位元組的腳本大小上限,為在比特幣網路創建智慧合約提供了更好的環境。 (這項升級也為後來 Oridnals 的誕生埋下基礎,因為 Ordinals 協定就是利用的 Taproot 的 script-path spend scripts 腳本來實現的附加資料)。詳細資料可參考官方網址:
https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki
目前 TaprootScript 的能力還沒有被充分發揮,後期的更多建設會體現出其威力。例如,比特幣一層網路與二層網路的連接技術,應該更多的使用 Taproot、MAST 與 TaprootScripits。
2.3. Ordinals、Inscriptions、BRC 20 以及其他協議
在比特幣的生態有了 Segwit、Taproot、Schnorr、MAST、Taproot Scripts,這些基礎的工具,新的應用就開始產生了。開始階段的應用是那些輕量級,簡單的應用。
Ordinals 序數協定、銘文、BRC 20
Ordinals 協議的誕生與 sat 的概念高度相關,協議提出序數(Ordinals)和銘文(Incriptions)的概念。序數(Ordinals)指為比特幣網路上的每個Satoshi( 聰)依照開採順序分配一個數字的編號方案。協議中,無論 sat 在不同的錢包之間如何轉移,其序數標識都保持不變。運行 Rodarmor 開源軟體 ORD 的比特幣全節點可以追蹤這些編號的聰。這為人們提供了一個精確追蹤每個聰,並進行獨立驗證的機制。
銘文(Inscriptions)是透過在聰上刻錄訊息。透過結合 SegWit 和 Taproot,Ordinals 協議可以在比特幣區塊上為每個聰刻錄一個小於 4 MB 的文件,也就是銘文。銘文可以包含各種形式的訊息,如文字、圖片、影片等。下圖是樣本銘文截圖。
簡單來說,序數的編號方案為每個聰提供了唯一的可追溯的編號,使聰擁有了非同質化的特徵。銘文可以在序數上添加不可分割的數據訊息,類似於在一張白紙上進行藝術創作。兩者結合,讓比特幣擁有了新的 NFT 標準。 Ordinals 的本質其實很簡單,它更像是一個NFT 協議,只不過與ETH 或其他公鏈的NFT 元資料(MetaData)大多儲存於IPFS 或是中心化伺服器不同,Ordinals 的元資料嵌入到了交易的見證欄位(Witness Data),像是被「銘刻」到某個特定的聰上一樣這也是銘文這個字的來源。
BRC-20 :受 Ordinals 協議啟發,Twitter 用戶@domodata 於 2023 年 3 月 8 日創建比特幣實驗性的可替代代幣標準 BRC-20 。 Ordinals 協議透過給予每個聰不同的「屬性」來創造BTC 網路NFT,BRC-20 則透過給定一個統一的「格式」以及「屬性」來創造BTC 上的FT,也就是同質化代幣。
BRC-20 透過Ordinals 協議將一段JSON 文字寫入BTC 銘文來部署代幣合約、鑄幣和轉移代幣(Depoly、Mint、Transfer),部署的關鍵在於代幣名稱、總供應量、單次最大鑄造量等。對於轉帳或買入/賣出的交易,會刻有額外的NFT 來追蹤鏈下餘額。 「先到先得」的鑄幣機制,帶來了公平的發行與參與機會;同時由於BTC 生態基礎設施相對不完善,有一定的學習門檻,低流動性使得BRC-20 代幣能夠輕易被拉升,ordi,sats,rats 等BRC 20 代幣開啟了一波造富的神話。
其他協議-Atomicals,ARC 20
Atomicals 協議的誕生頗有戲劇性,創始人Arthur 在Ordinals 協議剛發佈時,想在它之上開發一個DID 項目,但在開發過程中,他發現Ordinals 協議有很多局限性,不利於支持他想實現的一些特性。於是, 2023 年 5 月 29 日,Arthur 在推特上發布了第一條關於 Atomicals 協議構思的推文,經過幾個月的開發後,Atomicals 協議於 2023 年 9 月 17 日上線。後來,Atomicals 協定衍生出 Dmint、Bitwork、ARC-20、RNS 等四大概念,未來也將推出 AVM 和拆分方案。
類似 Ordinals 與 BRC 20 ,在 Atomicals 上面部署同質化代幣就形成了 ARC 20 。對於 ARC 20 有興趣的讀者,可以進一步閱讀。
https://docs.atomicals.xyz/arc20-tokens
其他協定-Rune
隨著發展,作為 Ordinals 的創始人 Casey Rodarmor 發表文章指出:BRC-20 代幣具有“UTXO 擴散的不良後果”,並建議將 Runes 作為基於 UTXO 的替代方案。現有的各類協議,普遍存在協議實施複雜、用戶體驗差、垃圾未花費交易輸出(UTXO)、操作需要原生代幣等問題。
Runes 的轉移使用 OP_RETURN,協議訊息中的第一個資料輸出被解碼為一個整數序列,這些整數被解釋為(ID,OUTPUT,AMOUNT)元組序列。如果解碼後的整數個數不是三的倍數,則該協定訊息訊息無效。 ID 是要進行轉帳的 Token ID、OUTPUT 是要指派給的輸出索引(即指派給第幾個輸出)、AMOUNT 是要指派的運算量。處理完所有元組分配後,任何未分配的 Runes Token 都將分配給第一個非 OP_RETURN 輸出,其餘的可以透過將 Runes 協定分配給包含協定訊息的 OP_RETURN 輸出來刻錄 Runes Token。
Runes 的發行:基於 UTXO 的同質代幣追蹤。如果協議訊息有第二次資料推送,則為發行交易。第二次資料推送解碼為兩個整數,SYMBOL,DECIMALS。如果還有其他剩餘整數,則協定訊息無效。 SYMBOL 是一個基本 26 位元可讀符號,類似於 Ordinals 名稱中使用的符號,目前唯一有效的字元是 A 到 Z。 DECIMALS 是顯示發行 Runes 時應使用的小數點後的位數。如果 SYMBOL 尚未分配,則該 Runes Token 將被指派一個ID 值(從1 開始)。如果 SYMBOL 已經被指派,或是 BITCOIN、BTC 或 XBT,則不會建立新的符文。這是 Runes 協議的特殊之處。它沒有將餘額記錄連結到錢包位址,而是將記錄放在 UTXO 本身。
新的 Runes Token 從發行交易開始,指定供應量、符號和小數位數,並將該供應量分配給特定的 UTXO。 UTXO 中可以包含任意數量的符文代幣,無論其大小為何。 UTXO 僅用於追蹤餘額。然後,傳輸函數使用該 UTXO,將其分割成多個任意大小的新 UTXO,包含不同數量的符文,將記錄傳送給其他人。相對於 BRC-20 ,Runes 減少了一層伺服器共識,變得更加簡單,同時不依賴鏈下數據,沒有原生代幣,非常適合比特幣的原生 UTXO 模型。
其他協議-BTC stamps,SRC 20 ,SRC 721
比特幣 Stamps 系統由 Mike In Space 於 2023 年 3 月發布,最初是 Counterparty 上的概念驗證專案(自 2014 年以來就存在的比特幣L2)。由於其底層協議的更新,Stamps 已完全轉向比特幣,去年夏天,現在被稱為 SRC-20 。創辦人 Mike 最初將 Stamps 設想為鑄造永久性比特幣 NFT 的一種方式。然而,該協議已擴展到複製BRC-20 ,這是一種批量可替代代幣,自Casey Rodarmor 於2023 年1 月推出Ordinals 以來,由於銘文熱潮的興起,這種代幣在比特幣上蓬勃發展。
Stamps 和 Ordinals 之間的主要區別在於架構。這是因為 Stamps 將它們的元資料儲存在多重簽章未花費交易輸出(UTXO)中,而 Ordinals 則將它們的元資料儲存在比特幣交易的「見證」部分中。這種設計上的差異顯現出了開發者的取捨。就是說,Stamps 的 UTXO 方法使它們不可修剪,因此看起來是永久性的,儘管它們的製造成本比 Ordinals 鑄造更昂貴。相反,Ordinals 使用見證資料的方式最終使它們可被修剪,它們的製造成本比 Stamps 更低。
因此,雖然Ordinals 可能為當今加密領域的NFT 提供最佳的持久性成本比(也可以在以太坊上獲得鏈上NFT,但它們的構建成本相對比Ordinals 更高),但Stamps 目前似乎提供了最佳的直接永久性保證。
在 BTC stamps 產生後,開始產生了 SRC 20 與 SRC 721 ,原理與 BRC 20 相似。 BRC-20 是建立在 Ordinals 協定上的,而 SRC-20 是建立在 BTC STAMPS 上的。有興趣的讀者,可以進一步閱讀 SRC 20 與 SRC 721 相關文件。
https://docs.openstamp.io/introduction/src20-protocol
https://docs.openstamp.io/introduction/src721-protocol
介紹至此,比特幣在一層網路上的重要新技術都已經介紹過。在之後的擴容與擴能方面,開始借助比特幣的上層設施,如比特幣的 Layer 2 或借助閃電網路等實現的更高層,如 RGB。這方面的文章建議閱讀《一文梳理比特幣二層(Layer 2)建構的基礎知識體系V1.5 版》和《從狀態機的角度觀察比特幣二層,可以看到未來Web3.0 應用的架構和建設路徑》,或其他關於比特幣二層建設或架構設計的文章。
3. 新科技的使用方法與未來所需的發展
透過第二節的內容,我們看到比特幣生態的技術發展已經為更大規模的應用奠定了基礎。但因為發展需要一個過程,和部分相關技術的不成熟,使得目前流行的應用與最終的常見應用還有比較大的差異。
3.1. 新技術的使用方法
從前面兩節我們可以看到,比特幣技術的發展本質上是區塊的擴容與能力的擴容。
在區塊擴容上,隔離見證導致了事實上的區塊擴容,雖然有各種提議可以裁剪掉見證部分,但這種事情發生的機率不大,尤其是見證部分被賦予了更多含義之後。
在擴充能力上,Taproot、Schnorr、MAST、Taproot Scripts,等技術賦予了比特幣更多的能力。尤其是 MAST+Taproot Scripts 會擴充比特幣原生腳本語言的能力,加上其他幾項技術會擴展比特幣語言處理複雜場景的能力。但這些能力擴容也會增加比特幣開發和理解的難度,畢竟這些 Scripts 開發不是高階語言。而這部分的能力擴充,會落後於使用者對於區塊容量擴充的理解與學習速度。
因為使用區塊擴容簡單,使用能力擴容複雜,這就是為什麼首先會產生用戶將那些小圖片 NFT 寫入比特幣主網,和產生了 BRC 20 等應用程式的原因。目前比特幣主網上的多種應用幾乎都是在探索區塊擴容後的應用。一小部分應用開始能力擴容的探索,例如,BEVM 的一層和二層連接有一定的代表性,較多的使用了上述基本元素所建構的功能。其 Shnorr 簽名+MAST 合約+ 比特幣輕節點網路的 BTC L2解決方案,是一個很好的學習連接一層與二層的案例。未來會有更豐富的能力擴充的案例產生。
能力擴充的邊界應該在哪裡?我們可以從分層設計的角度來評判,如果這些能力擴充更多的是作為比特幣一層與二層的連接技術,那麼就不應該將能力擴充變得過於複雜。但基於我們人類豐富的創造力和資產發行與管理的強大吸引力,一些團隊或個人會探索出更多的能力擴充場景的案例。
3.2. 未來發展的需求
區塊鏈技術產生的最直接原因是數位貨幣,所以發行資產、管理資產等應用程式是比特幣或區塊鏈領域的一個最直接需求。不管是從彩色幣的探索到 BRC 20 ,ARC 20 等應用,還是以太坊上面的 ICO,IDO 等應用,都是在探索資產發行。像Uniswap,Lending,AMM,都是資產管理的應用,這部分應用在以太坊等網路上已經成熟發展,隨著比特幣生態技術的發展,這些資產管理應用會轉移到比特幣生態,更多的應該是在比特幣二層上面進行。
在滿足了發行資產、管理資產等需求,才會有精力和時間去發展屬於Web3.0 時代(也可以稱為價值時代)的大規模應用。未來Web3.0 時代大規模應用的系統架構,我在《從狀態機的角度觀察比特幣二層,可以看到未來Web3.0 應用的架構和建設路徑》有相關的描述。
建設的路徑是不斷滿足需求的過程,可以分為短期、中期、長期三個階段。短期是透過比特幣主網上面的新技術產生的應用和基於鏈的二層建設的簡單階段,產生的應用完成主要的能力擴充,滿足各種金融應用。中期基於鏈的二層建設的中後期與基於分散式系統的二層建設,滿足各種金融應用與信任應用。長期是基於比特幣生態的大規模建設完成真正的Web3.0 時代的建設。
參考文獻說明
ABCDE 研究《[ABCDELabs]:比特幣的過去、現在與未來》
https://en.bitcoin.it/wiki/Script
https://en.bitcoin.it/wiki/Segregated_Witness
https://en.bitcoin.it/wiki/Taproot_activation_proposals
《超級詳解隔離見證(segregation witness)》,https://blog.csdn.net/t46414704152abc/article/details/105638788
《釋疑:什麼是比特幣默克爾化抽象語法樹? 》,https://baijiahao.baidu.com/s?id=1709873918363821702
https://github.com/bitcoin/bips
https://bitcoinops.org/en/topics/tapscript/