區(qū)塊鏈無(wú)法擴(kuò)展:至少現(xiàn)在不能,但有希望(二)區(qū)塊鏈
區(qū)塊鏈要想構(gòu)建Dapp生態(tài),要想走向主流人群,優(yōu)先要解決擴(kuò)展性問(wèn)題。但區(qū)塊鏈?zhǔn)侨ブ行幕南到y(tǒng),任何節(jié)點(diǎn)都可以自由加入,要在多樣化的節(jié)點(diǎn)快速達(dá)成共識(shí),是非常困難的事情。那么,區(qū)塊鏈的真的無(wú)法擴(kuò)展了嗎?本文作者PreethiKasireddy認(rèn)為,雖然現(xiàn)在不能,但未來(lái)有希望。
每個(gè)比特幣交易包含:
輸入
發(fā)送者之前的交易詳情 發(fā)送者的私鑰(即scriptSig)以便驗(yàn)證發(fā)送者是否有足夠的余額(基于之前的交易歷史)來(lái)完成這筆交易
輸出
需要發(fā)送的金額 接收者的公開(kāi)地址(即ScriptPubKey)
在這些元素中,數(shù)字簽名(scriptSig)體積最大,占用交易60–70%的空間大小。然而,簽名只有在驗(yàn)證階段才需要。
隔離見(jiàn)證(通常被稱(chēng)為Segwit)是一種隔離(即“segregate”)交易簽名(即“witnesses”)與其他交易數(shù)據(jù)的解決方案。把簽名從輸入中剝離,移動(dòng)到交易末尾的一個(gè)結(jié)構(gòu)中。
此外,使用SegWit,簽名被移動(dòng)到交易數(shù)據(jù)中的一個(gè)新的“witness”字段中,這使得我們可以改變區(qū)塊大小的計(jì)算方式。區(qū)塊大小限制不再通過(guò)字節(jié)數(shù)來(lái)衡量。取而代之的是,根據(jù)它們對(duì)節(jié)點(diǎn)資源的需求,區(qū)塊和交易被賦予一種稱(chēng)為“權(quán)重”的新的度量方式。
特別的,隔離見(jiàn)證(簽名)的每個(gè)字節(jié)的權(quán)重為1,區(qū)塊中其他字節(jié)的權(quán)重為4,每個(gè)區(qū)塊允許的最大權(quán)重是4百萬(wàn),和目前的最大區(qū)塊大小相比,包含SegWit交易的區(qū)塊可以容納更多的數(shù)據(jù)。這將有效地把1MB大小限制增大到接近4MB,可以增加~70%的交易。
SegWit也可以解決擴(kuò)展性之外的其他問(wèn)題,比如交易的延展性和增強(qiáng)的安全性(由于和擴(kuò)展性無(wú)關(guān),我在這里就不繼續(xù)深入了)
方案 #2:2MB區(qū)塊大小(僅針對(duì)比特幣)
比特幣社區(qū)中一方(用戶)強(qiáng)烈支持SegWit,而另外一方(礦工)則更希望通過(guò)硬分叉把區(qū)塊大小限制從1MB增加到2MB(注意:要修改1MB的區(qū)塊大小限制必須進(jìn)行硬分叉)。
基本想法很簡(jiǎn)單:通過(guò)增加區(qū)塊大小,更多的交易可以被打包進(jìn)區(qū)塊,網(wǎng)絡(luò)就可以在每秒處理更多的交易。
增加區(qū)塊大小的計(jì)劃已經(jīng)成為比特幣社區(qū)長(zhǎng)期激烈爭(zhēng)論的話題,從2015年初開(kāi)始就已經(jīng)獲得了日益增長(zhǎng)的關(guān)注,因?yàn)閺哪菚r(shí)起區(qū)塊大小就已經(jīng)開(kāi)始逼近目前1MB的硬限制了。
方案 #3: 鏈下?tīng)顟B(tài)通道
狀態(tài)通道本質(zhì)上是一種把區(qū)塊鏈的鏈上交互傳導(dǎo)到鏈下的機(jī)制。這是通過(guò)一種密碼學(xué)安全的方式完成的,不會(huì)增加每個(gè)參與者的風(fēng)險(xiǎn),同時(shí)可以極大改善消耗和速度。我個(gè)人相信狀態(tài)通道將會(huì)成為區(qū)塊鏈技術(shù)擴(kuò)展到更高層應(yīng)用過(guò)程中的關(guān)鍵組成部分。
狀態(tài)通過(guò)工作流程如下:
1. 區(qū)塊鏈的部分狀態(tài)通過(guò)多重簽名或者某種智能合約進(jìn)行鎖定,更新?tīng)顟B(tài)的唯一方式是一組特定參與者全部同意。
2. 參與者們通過(guò)構(gòu)建或者簽名交易在他們內(nèi)部更改狀態(tài),但不提交到區(qū)塊鏈上。每一次新的更改覆蓋之前的更改。
3. 在之后的某個(gè)點(diǎn)上,參與者們把狀態(tài)提交回區(qū)塊鏈上,關(guān)閉狀態(tài)通道并解鎖狀態(tài)。
第1和第3步包含區(qū)塊鏈操作,會(huì)被發(fā)布到網(wǎng)絡(luò)上,支付費(fèi)用并等待確認(rèn)。然而,第2步完全不需要區(qū)塊鏈參與。
狀態(tài)通道可以包含無(wú)限次數(shù)的更新,并可以永遠(yuǎn)保持開(kāi)放狀態(tài)。從這個(gè)意義上講,區(qū)塊鏈純粹作為一個(gè)結(jié)算層來(lái)處理一系列交互產(chǎn)生的最終交易以便完成最終結(jié)算,從而大大減輕了底層區(qū)塊鏈的負(fù)擔(dān)。
(在這個(gè)過(guò)程中的任意一個(gè)點(diǎn)上,任何參與者都可以向合約發(fā)送一筆交易來(lái)關(guān)閉通道并啟動(dòng)結(jié)算流程。這啟動(dòng)了一個(gè)時(shí)間窗口允許參與者們提交交易,序列號(hào)最高的交易會(huì)被處理。如果某個(gè)參與者離開(kāi)或者試圖欺詐,另一個(gè)參與者可以在任何時(shí)間把最新的交易發(fā)布到區(qū)塊鏈上以形成最終狀態(tài),前提是所有參與者都完全同意該狀態(tài)。)
使用狀態(tài)通道不僅可以增加交易容量,還提供了另外兩個(gè)非常重要的好處:提升速度、降低費(fèi)用。因?yàn)榇蟛糠纸灰锥际窃阪溝掳l(fā)生的,兩方之間的更新不需要被網(wǎng)絡(luò)處理和驗(yàn)證,因而支付可以被瞬間處理。
其次,支付費(fèi)用也會(huì)降低。因?yàn)橹挥幸恍〔糠宙溕辖灰子糜诮Y(jié)算狀態(tài)通道,大部分交易是在鏈下完成的,無(wú)需付費(fèi)。
這套機(jī)制有很多不同的實(shí)現(xiàn)方式。例如,閃電網(wǎng)絡(luò)是一種通過(guò)智能合約實(shí)現(xiàn)用戶網(wǎng)絡(luò)即時(shí)和可擴(kuò)展支付的去中心化網(wǎng)絡(luò)。剛開(kāi)始閃電網(wǎng)絡(luò)是為比特幣創(chuàng)建的,但是似乎現(xiàn)在他們也考慮了跨鏈交易。
雷電網(wǎng)絡(luò)是以太坊上的閃電網(wǎng)絡(luò)。雷電網(wǎng)絡(luò)也是利用鏈下?tīng)顟B(tài)網(wǎng)絡(luò)在以太坊上支持可擴(kuò)展的即時(shí)交易。
方案 #4: 分片
區(qū)塊鏈?zhǔn)澜缰械姆制蛡鹘y(tǒng)軟件系統(tǒng)中的數(shù)據(jù)庫(kù)分片類(lèi)似。在傳統(tǒng)數(shù)據(jù)庫(kù)中,分片是數(shù)據(jù)庫(kù)中數(shù)據(jù)的一個(gè)橫向分割,每個(gè)分片存儲(chǔ)在一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)服務(wù)器實(shí)體上。這樣可以把負(fù)載分散到不同的服務(wù)器上。
類(lèi)似的,通過(guò)區(qū)塊鏈分片,區(qū)塊鏈的總狀態(tài)被分散到不同的分片中,狀態(tài)的各個(gè)部分被存儲(chǔ)到網(wǎng)絡(luò)中的不同節(jié)點(diǎn)上。
(一個(gè)簡(jiǎn)單的分片)
(區(qū)塊鏈分片的頂層框圖)
網(wǎng)絡(luò)上發(fā)生的交易會(huì)被轉(zhuǎn)發(fā)到不同的節(jié)點(diǎn),取決于它們能影響哪些分片。每個(gè)分片只處理狀態(tài)的一小部分,分片之間是并行處理的。為了能在分片之間進(jìn)行通信,還需要一些消息傳遞機(jī)制。
實(shí)現(xiàn)消息傳遞有各種各樣的方式。在以太坊中采用的是一種“收據(jù)”模型:當(dāng)執(zhí)行某個(gè)分片中的交易時(shí),可以改變它所在的分片的狀態(tài),同時(shí)產(chǎn)生“收據(jù)”,這些收據(jù)被存儲(chǔ)在某種分布式共享內(nèi)存中,并且之后可以被其他分片查看(但不能修改)。
以太坊的收據(jù)模型
以太坊的收據(jù)模型
總體來(lái)說(shuō),區(qū)塊鏈分片要求我們創(chuàng)建一個(gè)網(wǎng)絡(luò),其中每個(gè)節(jié)點(diǎn)只處理所有交易中的一小部分,并且要仍然維持高安全性...至少可以說(shuō)這是一個(gè)艱巨的挑戰(zhàn)。
為什么?
首先,區(qū)塊鏈協(xié)議假設(shè)網(wǎng)絡(luò)中的所有節(jié)點(diǎn)互相不信任彼此。其次,盡管交易是在不同計(jì)算機(jī)上處理的,最終需要在一個(gè)公共狀態(tài)上達(dá)成一致。
由于節(jié)點(diǎn)之間不信任彼此,在分片A上處理交易的節(jié)點(diǎn)僅僅通知分片B上處理交易的節(jié)點(diǎn)發(fā)生了一筆交易是不夠的,還必須通過(guò)某種方式向它們證明。
另外,由于分片的目的不是讓每個(gè)節(jié)點(diǎn)驗(yàn)證每筆交易,我們需要找出一種機(jī)制來(lái)以安全的方式?jīng)Q定哪個(gè)節(jié)點(diǎn)驗(yàn)證哪個(gè)分片,并且不讓那些在系統(tǒng)中擁有大量算力的攻擊者有可乘之機(jī)來(lái)干擾網(wǎng)絡(luò)。
分片實(shí)現(xiàn)困難的另一個(gè)原因是區(qū)塊鏈上執(zhí)行的交易可能會(huì)依賴之前狀態(tài)的任意部分,這會(huì)對(duì)并行計(jì)算形成挑戰(zhàn)。此外,使用并行化,需要一種傻瓜式的證明方法來(lái)減輕競(jìng)態(tài)條件或者類(lèi)似的東西。
關(guān)于如何在以太坊上實(shí)現(xiàn)分片還有很多技術(shù)上引人入勝的東西 - 特別的,如何利用“加密貨幣經(jīng)濟(jì)激勵(lì)”來(lái)驅(qū)動(dòng)系統(tǒng)中的節(jié)點(diǎn)不發(fā)生欺詐(在這種情況下,保證該節(jié)點(diǎn)向其他節(jié)點(diǎn)傳遞有效信息) - 這是我希望在后面的文章中進(jìn)行探討的內(nèi)容。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會(huì)明確標(biāo)注作者和來(lái)源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請(qǐng)轉(zhuǎn)載時(shí)務(wù)必注明文章作者和"來(lái)源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為T(mén)MT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會(huì)經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。