南京理工大學 金 釗
比特幣的區塊鏈概念是由中本聰在其2008年10月的論文[1]中所提出的。以往的網絡支付系統只使用了數字簽名驗證系統,但此系統仍需要第三方的中心機構來提供驗證服務以防止網絡上雙重支付情況的出現。而區塊鏈的出現則解決了這一難題,即將原本由中心化機構保管的交易數據改成了由整個網絡各方共同維護的公開透明不可篡改的數據庫。而原本互不相識且互不信任的各方則可以通過此系統進行瞬時、無國界、低費率且安全可信的交易。這些特點使得比特幣在過去的幾年里受到了各國網民的熱愛和追捧,另有無數的海外商家已將其納入正常的支付手段并由此降低交易費用。
在比特幣網絡中,一定數量的過往交易數據文件都會被打包并永久的儲存在各個節點上,而這樣一個經過打包處理過的一組交易數據文件的集合就被稱為一個區塊。每隔大約10分鐘,比特幣區塊鏈網絡內存池(mempool)中未確認的交易就會被礦工打包形成新的區塊,并將其加入到原區塊鏈的末端。
一個區塊一般由五個部分組成,即常數(Magic no),區塊大小,區塊頭(blockheader),交易數量以及其所包含的交易。而區塊頭中則包含了此區塊的根節點的Hash值(HashMerkleRoot)和前一區塊的Hash值。而這前一區塊的Hash值便是區塊鏈形成的關鍵。
由于每個區塊必須包含前一區塊的Hash值,這使得最新添加的區塊可以由此一直追述到創世塊(比特幣網絡上的第一個區塊)。而一個區塊內的所有交易和前一區塊的Hash值則是通過Merkle根節點的方式被散列而得到最終的Hash值。所以如果有人試圖篡改比特幣區塊鏈中的某一區塊的交易,則其之后的所有區塊都將會改變。所以這些特性使得比特幣區塊鏈解決了雙重支付和交易的可信性問題。
在最原始的比特幣客戶端中,其并沒有區塊大小上限的限制,只是由于比特幣區塊協議消息字節大小的限制,而被約束到了32MB。
然而, 在2010年7月由于當時比特幣的交易費用幾乎為零,這使得惡意攻擊者可以在比特幣網絡上生成無數的交易信息,從而使比特幣網絡難以確認有用的交易數據,甚至陷入癱瘓。并且由于當時唯一的比特幣客戶端-比特幣核心,需要同步整個區塊鏈的所有信息才能使用。于是比特幣的發明者中本聰零時引入了一個1MB的區塊大小 限制作為一個反制措施。三個月后,中本聰在通信郵件中表明,如果實際交易數據增加,可以通過逐步調整區塊大小限制來增加其網絡處理能力。另外正如其早在2008年的郵件中所說,比特幣網絡可以很輕松的擴容到與Visa信用卡相當的處理能力[2]。
然而由于中本聰在2010年末的退出,以及比特幣核心技術團隊人員在2013年后對此限制的態度轉變,使得原本暫時的1MB的區塊大小限制,慢慢變成了難以變動的固定限制和多方爭論的焦點。
由于比特幣網絡交易需求的逐步上升,在2017年初,比特幣區塊平均大小達到了其1MB的上限。正如許多反對1MB限制的比特幣開發團隊人員所預測的,這所導致的結果便是直線上升的平均網絡交易費用和不斷增加的交易延遲。
在2017年7月,反對提升區塊大小的技術團隊 (根據2017年6月“紐約大會” 結果,原計劃為先加入隔離見證,再將區塊大小上限升到2MB,但后來由于反對提升區塊大小的技術團隊的堅決抵制,最終導致2MB升容計劃被放棄) 準備在8月1號進行一次軟分叉(User-Activated Soft Fork) 來加入隔離見證技術,將用戶的數字簽名信息從原區塊中去除,以此減少區塊中的交易信息數據大小,從而達到擴容的目的。然而反對的一方則指出這種方法最多只能將交易容量擴大為原來的1.7倍,而去除用戶數字簽名所帶來的安全隱患則是不可接受的。
于是在2017年8月1號, 相當一部分的原比特幣技術團隊 (Bitcoin ABC, Bitcoin XT & Bitcoin Unlimited) 啟動了硬分叉,從而從原比特幣網絡中分離了出來,并將此區塊鏈稱為比特幣現金 (BCH)。這條分離出來的區塊鏈則選用了直接而簡單的鏈上擴容方案,即直接將原來1MB的區塊大小更改為了8MB,并加入了新的難度調整機制EDA (現為DAA) 來更好的應對算力的大幅波動。
相比于原比特幣區塊鏈網絡所奉行的完全的鏈下擴容方案 (隔離見證,閃電網絡等), 比特幣現金則更加傾向于更加開放而簡單的鏈上擴容方案。 以下便是對這幾種鏈上擴容方案的簡介、分析和討論。
在比特幣現金分叉啟動時,其相應的各個客戶端技術團隊便將節點中1 MB 的區塊大小限制刪除,并將現有的區塊大小上限暫時定為8MB,并且將于今年五月約定的硬叉協議升級中將此上限再次調升至32MB,以此來適應不斷增長的網絡交易的數據存儲需求。而致力于比特幣現金擴容的比特幣無限團隊 (Bitcoin Unlimited) 更是提出了無固定限制的可自由調整的區塊大小協議,即將客戶端中的區塊大小限制完全取消,實際區塊大小將由市場需求和礦工實際打包的區塊大小決定。這樣的擴容方案可以使得比特幣現金網絡能夠在可預見的未來里一直提供足夠的數據儲存空間,并保持其源代碼的簡單可靠,由此減少因復雜擴容技術方案可能帶來的漏洞和風險。
另外最近由哥倫比亞大學的Suisani等人[3]進行了一次全球性的1GB區塊大小的傳輸實驗來調查包含大量交易數據的區塊在網絡傳輸中可能遇到的技術瓶頸。在此測試中當交易量達到100/s時,其遇到了第一個瓶頸,原因則是原客戶端只利用了單線程CPU來接受交易數據,在簡單修改了客戶端代碼后便解決了此瓶頸。而在繼續的測試中,當交易量達到500/s時其遇到了由區塊傳輸時間接近10分鐘所導致的第二個瓶頸,測試組在利用極限薄塊技術減少區塊傳輸時間后,便解決了這第二個瓶頸。所以這此實驗從根本上證明了包含大量數據的區塊在開放網絡上傳播的可行性,而其所遇到的技術瓶頸都可以通過簡單的協議代碼改變而得到解決,無需網絡硬件上的升級。
原比特幣核心客戶端有一段低效的代碼導致同一交易往往會被每一個節點接受兩次,其中一次是在接受用戶對節點廣播的交易,另一次是在接受由礦工發現的一個包含已確認交易記錄的區塊。
而極限薄塊則并不是接受礦工所發現區塊的全部信息,相反其使用了一個節點內存鏡像布魯姆過濾器,節點可以通過此來獲取區塊所包含交易的Hash值,從而可以在本地利用已接受的未確認交易數據重新組建區塊,這樣便可以大大減少接受新區塊的數據量。在另一不太可能的情況下,如果節點無法重新組建區塊,其還可以請求下載所缺失的交易數據從而完成區塊重建。
經過實際網絡測試證明,極限薄塊可以將區塊傳播所需的字節數變為原來的24分之一,并可以使得原來區塊的網絡傳播速度增快5.6倍。
在2017年斯坦福比特幣技術大會上,Levine等人提出了一個石墨烯塊傳播技術 (Graphene Technology), 并宣稱能夠達到比極限薄塊還要快10倍的網絡傳播速度。
Levine等人在此會議上展示了此技術的相關初步測試結果,他們展示了將一個17.5kb的極限薄塊利用石墨烯塊技術編碼壓縮到2.6kb。
石墨烯塊的編碼技術使用了一個新的布魯姆過濾器和布魯姆可逆查找表 (IBLTs) 的互動組合,來減少區塊傳輸的帶寬消耗。
目前,一些簡化了付款驗證(SPV)的錢包已經利用了此過濾技術,而布魯姆逆查找表(IBLTs)將比布魯姆過濾器更復雜一些,但其也設置了數據重構的途徑。由于這兩種方法的組合,石墨烯塊技術不會發送一個區塊所有交易數據的ID列表,而是將只攜帶一個小的布魯姆過濾器和布魯姆逆查找表。此技術將比在目前使用的區塊傳輸協議要高效10倍。
Levine等人還在此會議上闡述了此技術的一個缺點,即石墨烯塊的壓縮編碼的大小將隨著未確認交易內存池的大小的增大而增大。但即使如此,此編碼技術也依然遠比現行傳輸協議要高效的多。
在現行的比特幣客戶端中, 當一個節點接收到一個新的區塊時,它基本上會處于凍結狀態, 直到它解決了是否接受或拒絕該新區塊的問題。在此驗證過程中, 該節點既不會傳輸新的交易數據, 也不會嘗試驗證與此區塊相競爭的區塊。
而這一漏洞則有可能被惡意分子利用,即通過挖出一個需要極長時間才能驗證的區塊來暫時凍結整個區塊鏈網絡。
而由比特幣無限團隊所提出的并行驗證技術可以使得節點同時驗證多個區塊,還可以同時接受并傳播新的交易數據。
在加入并行驗證技術后,驗證較快的區塊將贏得與驗證緩慢區塊之間的競爭,如果此項技術的得到廣泛的應用,將大大減少由于驗證緩慢的區塊所導致的孤立區塊的出現,并可以減少由此所導致的損失。
而這項技術不僅彌補了原客戶端的漏洞,還提高了比特幣(現金)網絡的交易處理性能。
根據最原始的中本聰的比特幣白皮書[1],其區塊鏈的代碼是應由驗證交易的CPU來決定,即一CPU一票制,而現在比特幣的的挖礦設備早已從CPU變為了專用的ASICs礦機,小型的單獨挖礦變成了大型的礦池。但是這其中基本的網絡機制并未發生變化,只有被一定量算力支持的節點才能是有效的網絡節點,才能起到驗證區塊鏈交易數據真偽的作用。而個人建立的無算力節點對區塊鏈網絡安全并沒有起到幫助作用 (正如惡意攻擊者可以在很短的時間內通過云端服務器建立起大量的無算力虛假節點)。另外現在的小型算力中心一般都將其算力接入礦池來獲得更加穩定的收入,幾乎所有通過算力驗證 (POW) 的區塊鏈都有類似的趨勢,但由于地區帶寬和能源分布等因素,礦池在世界范圍內也還是相對分散的。所以只要礦池運行者們擁有足夠的帶寬和儲存設備便可以保證整個區塊鏈網絡的通暢運行。
所以如文章[4]中,通過對世界所有網絡用戶的平均帶寬進行簡單分析便斷定比特幣區塊鏈網絡不能夠支持大于4MB區塊的結論顯然是不成立的。而實際比特幣現金區塊鏈網絡運行的數據也證實了這一點,從2018年1月14號到15號期間,在297個區塊中有129個區塊達到了 8MB的區塊上限,共有236個區塊超過了1MB。在此期間,比特幣現金網絡中各節點運行正常,沒有出現孤立的區塊,也沒有出現任何區塊數據同步問題,所有正常的交易依舊能以極低的費用在1到2個區塊的時間內被確認。
近年來公共區塊鏈的擴容問題一直是計算機科學界所探討的焦點,而在這一領域所提出的算法和新型數據結構也是日新月異,并時常走在了整個現代互聯網創新的最前沿。本文就比特幣現金這一公共區塊鏈的鏈上擴容技術做出了簡要的闡述和分析,表明了區塊鏈鏈上擴容的可行性。當然這一領域的創新速度往往超乎人們的想象,也許當本文刊登之時又會有更新更好的擴容方案被提出。
[1]Nakamoto S.Bitcoin:A Peer-to-Peer Electronic Cash System[OL].(2008/10/31)http://nakamotoinstitute.org/bitcoin/.
[2]Nakamoto S.(2008)Re:Bitcoin P2P e-cash paper[OL].https://www.mail-archive.com/cryptography%40metzdowd.com/msg09964.html.
[3]Andrea Suisani,Andrew C,Andrew S & Erik B.Measuring maximum sustained transaction.,2017,Bitcoin Unlimited,University of British Columbia, nChain. [OL].https://bitco.in/forum/threads/buip065-gigablock-testnet-initiative.2610/.
[4]喻輝,張宗洋,劉建偉.比特幣區塊鏈擴容技術研究[J].計算機研究與發展,2017,54(10):2390-2403.