5.1 比特幣區塊擴容

xiaohuanglv發表於2018-08-25

首先我們要解釋什麼是比特幣的擴容問題,為什麼比特幣要擴容。比特幣的擴容問題來自一個很直接的現實,那就是儲存在比 特幣區塊鏈上的資料塊的物理大小限制是1MB。任何大於1MB的區塊都會被比特幣網路當作攻擊而被拒絕接受,這是當初由中本聰對比特幣核心的設計決定的, 邏輯規則都寫在了原始碼中。

大家都知道比特幣其實就是一個分散式的公共記賬(資料庫)系統。也就是說,比特幣本質其實是拿來記賬用的,當然大部分情況是對比特幣這個數字貨幣記賬。

由比特幣底層技術發展起來的區塊鏈技術也是對各種承載價值以及資料狀態進行記賬。比特幣的資料包含交易資料及其對 應的貨幣臺賬,我們簡單想一想,最主要的問題來自大家在日常交易轉賬的時候,需要不斷地把交易資料傳送到網路中的節點,經過礦工打包成區塊後廣播給其他節 點,每個節點驗證通過後獨立的加入自己本地的區塊鏈賬本資料庫中。隨著時間的推移以及比特幣生態系統的擴張發展與深入應用,使用者數越來越廣泛,交易次數也 越來越多,網路中等待確認的交易則排起了長長的隊伍,這時我們就會遇到單個區塊的容量限制問題了。

而現在這樣的容量限制問題已經發生,比特幣網路已經由於交易緩慢而變得擁擠不堪。由於區塊大小1MB的限制,單個 區塊只能容納很有限的交易事務,在一個區塊的結構中,區塊頭也就是區塊的摘要資訊欄位佔據了80個位元組,每條交易事務平均在200位元組左右,往多了算,假 設區塊中的交易都是一對一的簡單交易,單個區塊能夠容納的交易數也就8000左右,而實際上根據目前的使用統計,單個區塊容納的交易數才1700多,就這 還得要等上間隔10分鐘的打包確認,因此算下來,交易速度最高大概1秒鐘只能處理3筆交易。[1][2]要知道已經被市場所廣泛熟悉與習慣的支付手段(像VISA、Master卡等信用卡銀行卡)交易處理速度每秒鐘高達幾千筆交易。

由於這個區塊大小的限制,很多使用者為了能夠儘快讓網路確認自己的交易,不得不增加交易手續費(比特幣中礦工節點會 按照手續費高低進行優先順序處理)。大量交易費用的增加以及交易處理嚴重延遲等問題,已經成了比特幣的效能瓶頸,大大限制了比特幣的應用和發展。為了比特幣 的未來著想,很多人建議增加比特幣區塊資料的大小。原因很簡單,因為大部分商家和終端使用者不會使用一個需要等待好幾個小時才能確認一筆交易的系統。理論上 來講,增加比特幣區塊的大小會允許更多的交易資料可以放到一個資料塊中,使得更多的人使用比特幣的時候網路執行更順暢。

為此,比特幣網路實際控制者以及各路專家等組成的比特幣社群提出了很多對比特幣擴容的方案。2015年,比特幣擴 容改進方案BIP100(BIP=Bitcoin Imprevement Proposal)和BIP101先後被提出,也開啟了比特幣擴容的解決方案在比特幣社群激烈的衝突和爭論。

2017年7月21日,真正的擴容行動開始,全球比特幣礦工開始鎖定一個擴容軟體升級。這次升級是基於比特幣改進 建議BIP91提出的“隔離見證”(Segregated Witness=SegWit)的方案,並計劃在2017年11月份將比特幣區塊大小從1MB提升到2MB[3]

大家在這裡可能會產生一些疑惑,怎麼又是區塊擴容又是“隔離見證”,這裡面都是些什麼關係呢?我們來解釋一下,首 先所謂的區塊擴容主要是要增加區塊中容納交易事務的區塊體的空間大小,這個地方可謂是寸土寸金,現在不夠住了,怎麼辦呢?相信大家根據生活經驗也能給出兩 個一般性的做法:

1)增加區塊空間的大小,寬敞又明亮;

2)縮小交易資料的尺寸,節能又環保。

第一種方案顯然是最符合人們一般性思維的,這也是社群中堅持區塊直接擴容一派的思想,那麼第二種的縮小交易資料尺寸是什麼意思,這裡需要解釋一個概念,那就是“隔離見證”,我們來簡要說明一下。

“隔離見證”,英文是Segregated Witness,我們知道在比特幣的交易資料結構中,是通過發起者簽署自己的UTXO(未花費交易輸出),然後填上接收者的地址而建立起來的,過程類似於 簽署支票,一張支票就相當於一條比特幣的交易事務,簽署UTXO就相當於支票簽名,也就是所謂的“見證”,這是用來確認支票合法性的。我們知道,支票上的 關鍵內容無非就是簽名和接收方以及支付金額,那麼如何來確定這張支票資料的唯一性或者說完整性呢?在比特幣中會對每一條交易事務資料進行一次雜湊計算,得 到一個事務ID,在計算這個事務ID的過程中,都有哪些資料參與了計算呢?答案是整條交易事務,包括那個簽名。那麼這裡就有可以探討的餘地了,一切就圍繞 這個簽名來展開討論,我們從比特幣的交易歷史資料中隨便擷取某筆交易的簽名資訊來看一下:


"scriptSig": {
   "asm": "3044022065c13d7cf6557af8ad45dbfd2b0847950e0f11e3c0eb2468ca9a8ad612e21d5b022064bea5eb078b7c89aad63730dbde1e8dd7dbaa0614b2c0809fa1baedf66eac21[ALL] 036b07144610d46dbe4bdcc2ff3ecd68627e645027aac62cc5e9147a6575f7cb55",  
   "hex": "473044022065c13d7cf6557af8ad45dbfd2b0847950e0f11e3c0eb2468ca9a8ad612e21d5b022064bea5eb078b7c89aad63730dbde1e8dd7dbaa0614b2c0809fa1baedf66eac210121036b07144610d46dbe4bdcc2ff3ecd68627e645027aac62cc5e9147a6575f7cb55"

}


可以看到這個簽名資訊佔據的空間還是不少的,如果能夠把這塊簽名資訊從交易事務中隔離開,儲存在另外一邊,那就能 省出一塊空間來容納更多的交易資料。這些簽名資訊的主要作用就是見證交易資料的來源合法性,而實際上見證的過程只需要進行一次就行了,礦工負責見證交易數 據是否得到了合法的授權,其他普通的節點只關心接收的結果,見證過後這些簽名資料實際上沒多大用處,節點在接收時可以丟棄這部分資料。這種將見證資訊與交 易資料隔離開的設想也就是“隔離見證”的意思。實際上“隔離見證”還在一定程度上能解決一個叫“交易延展性”的問題。

如上所述,交易事務ID在計算時將計算整條含簽名的交易資料,而這個簽名是可以被更改掉的,因為簽名有很多種寫 法,攻擊者無法修改交易事務中的輸入和輸出,但是卻能重新修改簽名,從而導致交易事務ID的計算值發生變化,一旦被攻擊者更改,雖然不能被竊取比特幣,但 是卻有可能導致交易不被網路確認(網路中會同時存在沒有被修改過和被修改過的交易事務,這會導致衝突),而隔離開簽名資訊後,交易事務一旦發起將會完全固 化。由於“隔離見證”的這些特點,因此這種方案也有不少人支援。

至此,比特幣的擴容方案就有了如下的選擇:

1)進行“隔離見證”並擴容區塊;

2)僅進行隔離見證,區塊容量保持不變;

3)僅擴容區塊,不進行隔離見證。

這些方案各有不同的社群成員支援,這些成員主要包括比特幣核心客戶端維護團隊、各大礦池以及比較有影響力的開發團 隊和廣大的社群使用者,對於到底選擇何種方案,各方進行了曠日持久的爭論。我們不去細究這裡面潛在的各方利益問題,單就技術角度而言,有一個問題是確定的, 那就是無論選擇何種方案,都避免不了會產生比特幣主鏈的分叉,“隔離見證”或者擴容,都需要修改現有的比特幣原始碼。這對於傳統軟體來說是分分鐘的事,無 論怎麼升級,只要保持相容原有的資料格式就行了,可是對於比特幣這種區塊鏈應用程式,首先它是分散式的,誰也沒有能力強制大家共同升級到一個新版,那就勢 必會導致一旦新版本釋出後,網路中會同時存在老版本和舊版本的節點,而對於礦工或者說礦池而言,也會選擇不同的支援方案,那麼網路中新打包出來的區塊有些 是舊版本格式的,有些是新版本格式的,彼此之間無論如何也很難做到完全一致,這樣就會導致原先單一的主鏈由於後續產生了不同格式的區塊而分叉出兩條鏈,甚 至多條鏈,非但如此,當某一方的挖礦算力明顯佔據優勢的時候,相對弱的那一方產生的區塊鏈甚至會因為得不到大多數的節點背書而淪為孤兒鏈,這會使得原本牢 固的去中心化區塊鏈共識網路變得脆弱,這不是我們所願意見到的。當然,從長遠來看,如果解決一個問題不得不付出一些代價,分叉也並非完全不能接受,只是這 個過程如何過渡好需要仔細衡量。

我們來看一下這些年為了比特幣區塊擴容發生的那些事。

·2015-Bitcoin XT(比特幣擴充套件),2015年提出通過增加資料塊的大小限制來提高交易處理效率,最早建議資料塊大小是8MB,然後資料塊大小根據交易資料情況自動增長,每兩年大小翻一倍等,但是事後這個建議沒有得到足夠的支援而最後未被接受。

·2016-Bitcoin Classic(比特幣經典),2016年也提出通過增加資料塊的大小限制來提高交易處理效率,但是沒有Bitcoin XT那麼激進,最早提出區塊大小從1MB擴容到2MB,然後在後期決定把區塊大小上限交給礦池和交易節點來決定,不過並沒有得到比特幣核心開發團隊的支 持。

·2016-香港共識,2016年2月21日,在香港數碼港,由比特幣業界代表和開發社群代表參與的圓桌會議達成了擴容共識:軟體啟用由比特幣核心開發人員執行在2015年12月提出的隔離見證,並將區塊大小限制擴充到2MB;很遺憾,此次共識達成的兩個行動都逾期了。

·2016-Bitcoin Unlimited(BU-比特幣無極限),在Bitcoin XT和Bitcoin Classic擴容方案夭折之後,Bitcoin Unlimited提出增加區塊大小的方案是完全取消區塊大小限制,讓使用者通過檢視大多數共識區塊的大小決定並自行設定自己區塊的大小。這個方案得到了不 少礦池的支援。2017年1月釋出1.0.0版本得到了包括Antpool、bitcoin.com、BTC.TOP、GBMiners和ViaBTC等 礦池的支援。至2017年3月,全球大概由11%的節點執行BU升級版。但是,比特幣的擴容並不是簡簡單單地將區塊大小限制取消就萬事大吉,擴容涉及很多 方面的技術細節並需要大量的測試。果然,2017年1月19日BU發現重大漏洞,由bitcoin.com礦池打包出第450529無效區塊,1月31日 打補丁,2017年3月14日,BU全節點遭到攻擊,BU節點數量大量當機,然後程式碼漏洞一個接一個,2017年4月24日,70%的BU節點因為記憶體洩 露而出現系統崩潰[4]

·2017- BIP148,一個通過使用者啟用的軟分叉比特幣擴容方案被提出。BIP148打算繞過礦工和礦池的支援,在2017年8月1號啟動一個使用者歡迎程度來啟用 (UASF)的比特幣擴容軟體升級方案,該方案建議2017年8月1號起,啟用比特幣的隔離見證(SegWit)功能。

·2017- 紐約共識(SegWit2x),2017年5月,“數字貨幣集團”公佈一個擴容方案,也就是SegWit2x,即著名的“紐約共識”:先在獲得80%的比 特幣算力支援基礎上首先啟用隔離見證方案,並在6個月後獲得80%比特幣算力支援的時候啟用將區塊大小從1MB擴充套件到2MB的升級。時至2017年7月中 旬,礦工和礦池基本一致同意在2017年8月1號前實施啟用隔離見證(Segwit2x)方案[5]

·2017-Bitcoin Cash(BCC),BCC是2017年8月1日比特幣硬分叉產生的一個新的比特幣區塊鏈變種。當比特幣礦池和交易所ViaBTC為了對抗隔離見證(SegWit),挖出第478559區塊,正式宣告比特幣歷史上的第一次硬分叉[6]。 比特幣硬分叉後產生兩個新的幣種:比特幣(BTC)和比特幣現金(BitCoin Cash,以下簡稱BCC),硬分叉前的比特幣所有者會自動分配同時擁有分叉後的比特幣(BCC)和比特幣現金(BCC)。BCC的區塊大小從1MB擴容 到8MB,而不引入隔離見證。在2017年8月1日午夜之後,BCC的市場市值達到繼比特幣和以太坊之後的第三大市值,隨後越來越多的交易所也慢慢開始支 持BCC[7]

可以看到,為了一個區塊擴容竟然產生了這麼多的討論和爭議,一個初看起來似乎很簡單的問題卻包含了各種技術考量, 不過就在比特幣社群在方案上懸而未決的時候,比特幣的兄弟萊特幣在2017年5月卻率先完成了隔離見證,萊特幣是通過對比特幣原始碼的簡單修改而來的,因此 在血統上很接近比特幣,萊特幣成功實行隔離見證啟用的經驗也給比特幣社群做了一個示範和參考,就技術方案而言,萊特幣具體是通過一個叫“使用者啟用軟分叉” 的方案來進行的,我們來了解一下。

使用者啟用軟分叉(User-Activated Soft Folk,UASF)是一個很有意思,也備受爭議的軟分叉升級模式。主要是為了避開掌握著大量算力的礦工和礦池的反對,而將支援升級的決定權交給礦工和礦 池之外的所有節點和使用者。這樣就使得區塊鏈核心研發團隊可以避免等待掌握大量算力的礦池節點的支援。將軟體升級支援設定在執行全節點的交易所、錢包,還有 萊特幣使用者手中。因為只要是區塊鏈全節點(full node),都具有校驗區塊和交易資料合法性的功能。當交易所徵集到大部分使用者的簽名和支援後,新的升級版軟體才會被事先已經安裝的軟體啟用。這樣所有支 持軟分叉的交易所和使用者都會安裝新版規則和共識的軟體,從而成功實現大多數人支援的軟分叉。

不過這樣聰明的軟分叉方式有一個問題,就是開發成本太高,軟體更新週期太長,沒有在掌握算力的礦池那裡直接升級來 得高效、直接、快速。當然,這種明目張膽繞開掌握大量算力的礦池的做法也會引起不可預見的後果,那就是其礦池節點也可以自行選擇修改規則釋出自己的升級版 軟體而強制區塊鏈硬分叉。

我們可以看到,對於區塊鏈這種新型的網路軟體結構,有其明顯的優勢,但是也有明顯的問題所在,就區塊擴容這個問題 而言是具有代表性的,比特幣、萊特幣、以太坊等其實都會有這樣的問題,區塊容量爆炸一直都是這個領域的難點問題,尤其是對於使用廣泛的區塊鏈系統,這個問 題的嚴重程度尤甚。以太坊相對比特幣、萊特幣等支援了更復雜的智慧合約,並且使用廣泛,問題也就更多,目前以太坊社群提出的解決方案有提高Gas限制以及 分片,提高Gas限制相當於提高使用者的使用成本,與其說這是一種技術方案,不如說是一種經濟制裁方案,分片的意思是將區塊資料按照某種分類儲存在不同的節 點上,而不像現在所有的節點都儲存同樣的副本資料,不過這種方案的爭議也是很大的,可靠性和安全性都有待驗證。說到這裡,有讀者可能會提出,既然靠單個鏈 內很難完善地解決這個問題,那有沒有可能將某些交易事務移出去呢?答案是可行,鏈內方案的地雷太多,那麼看看鏈外的方案如何,接下來介紹的側鏈、閃電網路 以及多鏈就是這種思路。

[1] Mike Orcutt (19 May 2015). “Leaderless Bitcoin Struggles to Make Its Most Crucial Decision”. MIT Technology Review. Retrieved 15 November 2016.

[2] http://money.cnn.com/2017/08/01/technology/business/bitcoin-cash-new-currency/index.html.

[3] Hertig, Alyssa (July 21, 2017). “BIP 91 Locks In: What This Means for Bitcoin and Why It’s Not Scaled Yet”.

[4] Quentson, Andrew (24 April 2017). “Bitcoin Unlimited Nodes Crash Due to Memory Leaks”. Cryptocoinsnews.Retrieved 15 March 2017.

[5] CNBC (July 14, 2017). “Dispute could mean fi nancial panic in bitcoin”. Associated Press.

[6] Coleman, Lester (July 25, 2017). “Bitmain Clarifi es Its‘ Bitcoin Cash’ Fork Position”. CryptoCoinsNews.

[7] CNorrie, Adam (July 29, 2017). “Bitcoin Cash: Another Fork in the Road for Bitcoin”. CryptoCoinsNews.

來源:我是碼農,轉載請保留出處和連結!

本文連結:http://www.54manong.com/?id=88

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();

相關文章