作者:Chakra;翻譯:0xjs@金色財經
比特幣是世界上最早、最安全、最去中心化、市值最高的區塊鏈。然而,其較低的每秒交易量(TPS) 和有限的編程能力經常受到批評,難以支持大規模應用,嚴重阻礙了比特幣生態系統的發展。身為比特幣生態系統的建構者,本文將帶領你了解比特幣擴容解決方案的過去、現在和未來。
本文是比特幣可擴充性系列文章的第一篇,主要介紹比特幣主網上歷史上實現的原生擴容解決方案。下一篇文章將討論具有更高擴容性的鏈下擴容方案。敬請期待。
增加區塊大小限制
2010 年,中本聰在bitcoin-core中引入了1MB 的區塊大小限制。之後十多年這項明確限制一直未曾修改過。
有趣的是,中本聰並沒有公開解釋他提出區塊大小限制的原因,這個限制「隱藏」在程式碼合併的PR 中,沒有詳細解釋。在中本聰離開幾年後,社群在區塊大小限制問題上出現了嚴重分歧,對更大區塊的需求引發了廣泛的討論。
區塊越大,容納的交易數量越多。假設共識時間不變,區塊越大,TPS 越高。
為什麼TPS這麼重要?因為在1MB的區塊限制下,以當時的交易規模,每秒能完成的交易數量只能有3-7筆,對於大規模應用是遠遠不夠的,無法實現比特幣「點對點的電子現金系統」的願景。
然而,更大的區塊也帶來不同程度的問題。
首先,更大的區塊對儲存、運算和頻寬等硬體的要求更高,導致全節點的營運成本增加。比特幣的歷史交易資料迅速擴展,需要新的全節點花費更多時間與網路同步。這些要求降低了使用者操作全節點的意願,從而降低了去中心化程度。
其次,區塊越大,節點間的同步時間越長,出現孤塊的可能性越大,導致區塊重組更頻繁,分叉風險增大,大大降低安全性。
後來這個問題被Vitalik稱為區塊鏈不可能三角,也就是區塊鏈無法同時實現去中心化、可擴展性和安全性。區塊越大,可擴展性越強,但代價是去中心化和安全性越弱。
最重要的是,修改區塊大小限制需要硬分叉,這就要求全網所有節點同時升級,否則將導致網路分裂。這對於依賴去中心化共識的比特幣來說並不是一個好的選擇。在中本聰的影響下,避免硬分叉似乎已經成為比特幣事實上的原則。
不幸的是,分裂確實發生了。儘管社群內部缺乏共識,但一些礦工和開發人員還是更改了客戶端中的區塊大小限制,最終導致網路分叉。 2016 年,Bitcoin Classic 採用BIP 109 將區塊大小限制分叉至2MB;2016 年,Bitcoin XT 用戶端採用BIP 101,將區塊大小提高至8MB。然而,絕大多數礦工和用戶仍留在我們現在所知的比特幣主網上。
透過硬分叉明確增加區塊大小的努力失敗了。
隔離見證
如果硬分叉不可接受,那麼軟分叉可以作為解決方案嗎? SegWit 就是其中一種方法。
見證是解鎖UTXO的憑證,長期以來,見證被放置在UTXO的輸入腳本欄位中以完成交易。然而,這種方式存在循環依賴、第三方交易延展性、第二方交易延展性等潛在問題。
早在2011 年,開發者就注意到了這個問題,並提出了隔離見證(SegWit)的解決方案,即將見證與其他交易資料分開。但當時的硬分叉提案並未獲得支持,直到2015 年SegWit 軟分叉的提出才最終實現合併。
SegWit是如何透過軟分叉來實現向後相容的呢?這主要包括以下兩個面向:
-
新版本節點可以識別並接受舊版節點產生的區塊和交易。
-
雖然舊版節點無法識別新版本引入的新規則和特性,但它們仍然將新版本產生的區塊視為有效。
SegWit 軟分叉允許新交易使用空輸入腳本,並在區塊結構中添加見證欄位以儲存見證。由於升級前的比特幣核心支援空輸入腳本,因此舊版節點不會拒絕新版本產生的區塊。此外,透過使用版本字段,舊的交易類型仍可使用,且節點會根據版本以不同的方式處理它們。
SegWit 中的擴展是透過權重的形式實現的,見證位元組的權重為1,其他資料位元組的權重為4,從而限制每個區塊的最大權重為400 萬。為什麼要為不同類型的資料分配不同的權重?一個常識性的想法是,見證資料在使用時只起到驗證作用,不需要長期保存在儲存中,因此成本相對較低,權重也較低。
這實際上是變相提高了區塊大小限制,理論上的區塊大小上限被提升到了4MB(完全歸功於見證數據),平均下來區塊可以達到2MB 左右。從舊區塊結構來看,這還是秉承了中本聰當初每個區塊不超過1MB 的限制。
Taproot
利用比特幣的操作碼例如OP_IF,我們可以為比特幣的花費腳本設定複雜的條件,例如時間鎖、多重簽名等。然而,複雜的花費條件往往需要多次輸入和簽名進行驗證,從而增加區塊負載並降低交易速度,同時暴露所有的支付條件,導致隱私洩露。
Taproot 使用MAST 來增強比特幣,用戶使用Merkle Trie 來表示花費條件。每個葉節點代表一個花費腳本,在花費過程中,只需要提供實際執行的腳本和對應的Merkle Path,而無需透露其他條件。這可以減少區塊空間消耗並提高隱私性。
Taproot 升級還引入了Schnorr 簽名,該簽名具有加法同態特性,允許簽名聚合和批量驗證,從而提高整體每秒交易數(TPS)。 Schnorr 簽章的聚合簽章優勢大大簡化了驗證多重簽章交易的邏輯。以前,ECDSA 簽章需要將多個簽章傳送到鏈上才能與腳本匹配,而Schnorr 簽章只需要將單一鏈下聚合簽章傳送到鏈上,從而減少了多重簽章支付對鏈上空間的使用。
透過將Schnorr 簽名與MAST 結合,並使用支付到合約(Pay to Contract,P2C) 概念,透過MAST 根提交複雜的合約程式碼,以調整並產生支援單一Schnorr 簽名支付的標準比特幣公鑰。
有趣的是,由於Schnorr 簽名的單一簽章和多個簽章在鏈上看起來相同,因此複雜腳本、多重簽章和單次簽章的邏輯在鏈上無法區分,這進一步增強了隱私性。
結論
比特幣的可擴展性解決方案反映了其在提高效能的同時保持去中心化和安全性的不斷發展的方法。
最初,考慮增加區塊大小,直接解決低交易率的問題,但引發與節點成本和網路分叉相關的問題,對社群共識提出挑戰。
SegWit 的引入標誌著一項重大進步,透過軟分叉優化區塊容量,確保向後相容性並避免分裂的硬分叉。
隨後,Taproot 透過MAST 和Schnorr 簽名進一步完善了可擴展性和隱私性,減少了交易空間並提高了驗證效率。更重要的是,Taproot 可以在比特幣上實現複雜的腳本編程,為未來的擴展嘗試鋪平了道路。
這些發展凸顯了比特幣謹慎而創新地向更具可擴展性和更強大的網路邁進,這對其作為全球支付系統的未來至關重要。
然而,這些擴容方案的影響還不足以實現「點對點電子現金系統」的願景。