當前位置:
首頁 > 最新 > 工程師眼中的區塊鏈技術,還有哪些坑?

工程師眼中的區塊鏈技術,還有哪些坑?

在這裡,你將了解到最真實的區塊鏈信息!

當區塊鏈的話題越來越熱的時候,我們已經可以感受到的區塊鏈網路的速度已經基本接近極限了。隨著用戶的增長,區塊鏈的擴展性問題漸漸顯露出來。分散式記賬的賬本越多,需要記賬的次數就越多,發展至今的區塊鏈已經迎來的擴展性的瓶頸。

本文的作者Preethi Kasireddy,她在離開矽谷之後便投身區塊鏈領域,現在是一名區塊鏈工程師。由於從早期就開始接觸區塊鏈技術,對區塊鏈技術的擴展性問題有著獨到見解。她在文中分析了區塊鏈現在面臨的擴展性問題,以及相關人士針對此問題提出的一些對策。

Preethi Kasireddy

最早的比特幣白皮書發佈於2008年,區塊鏈技術蘊含的可能性讓我非常興奮不已。現在,過去只在人們理想中出現過的非中央集權的數字貨幣正在漸漸成為主流,然而數字加密貨幣僅僅是區塊鏈技術應用的一個方面。區塊鏈技術蘊含的巨大潛力,正等待著我們去進一步發掘。

然而,當區塊鏈初期的愛好者和投資者們開始構築區塊鏈社區的時候,我們要看到現有的「碎片」完全不足以完成夢想的拼圖。區塊鏈的擴展性問題是阻礙其發展的一個重要因素,它在很大程度上限制了區塊鏈規模的進一步擴大。

為什麼區塊鏈的擴展性存在問題

現在,無論是比特幣、以太坊還是其他所有基於區塊鏈技術的加密貨幣都在很大程度上受到了擴展性的限制。

區塊鏈技術最大的特徵就是去中心化,這就要求網路中的所有賬本都需要處理記賬流程。分散式記賬的安全性高,誤操作率低,還具有政治中立性和正確性。但是區塊鏈技術在擁抱了這些特性的同時,犧牲掉了擴展性。區塊鏈的終端數量不可能超過賬本總數。而且,隨著的賬本數量的增長,交互延遲會呈指數式增長,也就是說區塊鏈網路中的賬本越多延遲就會越高。

在傳統的資料庫模式下,我們可以通過增加伺服器數量、提高伺服器性能來提高「中心」的總運算能力來應對用戶數量的增長。但是在所有交易都需要進行驗證的去中心化分散式記賬模式下,想要改善整體的運算速度就必須增加所有終端的運算性能,這顯然非常困難。

最終,在區塊鏈的規模發展到一定程度時,我們不得不做出妥協。我們必須在低擴展度的去中心化和高擴展度的中央集權中做出權衡。因為解決這個問題唯一可行的方式就是分割區塊鏈,只讓一部分的賬本處理交易的數據,而其他賬本只負責將這些處理過的數據進行拷貝記錄。但是這種做法說起來簡單,做起來卻非常困難。

首先,由於並不是所有的賬本都對所有的交易進行記賬處理,為了保證區塊鏈整體的安全,必須有一套在統計學上具有說服力且高效的記賬任務分配製度。

其次,這套制度還必須能夠保證數據的可用性。因為若只有一部賬本負責記賬,當這些賬本發生意外情況時,整個區塊鏈都可能會受到影響。這時如果其他的驗證者在賬本記上了不同的內容,一個區塊鏈就可能發展出兩個數據不同的區塊。惡意的網路攻擊、停電、賬本離線等都可能引起這種情況的發生。

最後,這些分配到記賬任務的賬本必須對數據進行並列處理。但是因為區塊鏈模式含有很多不能同時進行記賬的物理性限制(比如串列介面),想要實現這點也非常困難。很多時候我們必須制定相關的制度,在並列新與可行性之間取得平衡。

從數字看區塊鏈的擴展性問題

以太坊理論上的交易處理能力是每秒1000次,但是因為受到gas現實,實際的交易速度遠遠沒有達到這個程度。現在各個區塊平均有670萬gas。

在以太坊中,gas既是執行交易計算的礦工的報酬,又是計算量的尺度。各種交易操作都要消耗一定量的gas。每個區塊中的gas都具有上限,而gas的上限決定了區塊內可以進行的交易數量。

和將區塊大小寫死在協議中的比特幣相比,以太坊的gas限制雖然可以根據礦工工作情況進行動態設定,但實質上相差無幾。比特幣交易的理論極限是每秒4000次,而實際上小規模的交易處理速度僅僅是每秒7次,複雜的交易的更是只有每秒3次。

我為以太坊設計了新協議涉及並進行了嘗試,並且第一時間接觸到了區塊鏈擴張性這一未來課題。我和其他的相關人士針對這一問題進行大量的研究與議論,還進行了很多有意思的實驗。在下面的文章中,我會為介紹我們提出的解決方案。

不過非常遺憾的是,這些方案雖然各有所長,而且都具有積極意義,但是它們都不能從根本上徹底解決這一問題。

對策1:分離見證

比特幣交易的流程包括輸入和輸出兩個部分。在輸入部分,需要輸入的是上次交易的詳情和證明持幣人擁有相當金額的腳本(scriptSig)。在輸出部分,輸出的是交易金額和輸出腳本(ScriptPubKey)。

在這些內容之中,scriptSig所佔的空間最大,約佔60~70%,且僅在驗證時有用。分離見證通過將scriptSig分離出來另行發送,使交易文件的大小得到精簡。理論上來看,分離見證方式可以使單位時間內的交易量增加70%。

對策2:2M區塊

比特幣的用戶中有一部分支持分離見證,另一部分則支持將1M的區塊容量提升到2M。這種意見的理論基礎更加簡單,區塊容量增大就能直接帶來單位時間內可處理交易量的提高。

這一增加區塊容量的計劃一直都是比特幣團隊重點討論研究的對象,特別是從2014年之後,這一課題受到了更多的注目。

對策3:鏈外狀態信道

鏈外狀態信道是將原本要在區塊鏈上的進行的步驟剝離出來的,在鏈外進行處理的技術。通過將信號加密,該技術既可以降低參與者的風險,又可以大幅度提高交易速度。它的工作過流程有以下三步。

第一步,對一部分區塊鏈的狀態通過多重數字簽名或智能合約等手段進行鎖定。規定被鎖定的特定內容只有在參與者全員同意的情況下才能進行更新。

第二步,交易參與者進行交易的時候,不對被鎖定的區塊鏈內容進行操作,僅通過加密簽名更新的交易數據。然後再使用全員同意的更新後的數據對被鎖定的內容進行更新。

第三步,更新完成後,交易參與者的新數據重新回到區塊鏈上,區塊鏈關閉狀態信道。

上述三個步驟中包含的區塊鏈操作有網路公開,手續費支付,以及最終確認。但是其中第二步的操作完全不在區塊鏈上進行,所以可以不受區塊鏈交易容量的限制,進行無限制的更新。這樣一來,區塊鏈就成為純粹的結算工具,只負責記錄一連串交易的最終結果記錄,工作負擔得到了大幅度減輕。

這種方式不僅能提高區塊鏈整體的交易能力,還能在提高交易速度和減少交易手續費方面起到非常有效的作用。具體來說,由於絕大部分交易步驟都在鏈外完成,且這些鏈外步驟的參與者只有交易雙方,不需要通過網路進行多餘的確認工作,交易可以即時完成。同時,由於需要在鏈上進行的工作被大幅度簡化,交易的手續費也可以得到縮減。

這種模式有很多種不同的實際運用方法,比如閃電網路。閃電網路就是利用智能合約來實現鏈外狀態信道交易的分散型網路服務技術。閃電網路最初是為比特幣交易開發出的,但是在開發過程中人們發現,它還可以完成不同區塊鏈間的交易。

對策4:分片處理(Sharding)

區塊鏈的分片處理與軟體的分片處理非常相似。在電腦上,我們會對硬碟進行分區,然後將數據儲存在不同的分區之中,這樣整體的負擔就可以分散到各個分區上。同理,區塊鏈的分片處理就是將區塊鏈成體分成不同的部分,區塊鏈各的各個部分會被記錄在網路上的不同賬本上。

單一分片圖

網路上發生的所有交易都會被發送給相應的不同的賬本。各個分片都只處理區塊鏈整體的極小一部分,而且是同時處理。為了保證各個分片間的聯繫,需要一套信息傳遞結構。

信息傳遞結構的類型有很多,以太幣使用的「收據」結構就是其中之一。當分片內產生交易時,該分片可以更新自己的狀態,然後生成「收據」。其他的分片可以通過「收據」看到該分片的狀態改變,但是無法對其進行變更。

想要對區塊鏈進行分片處理,就必須在保證高安全度的前提下,使每個賬本只具有記錄處理一部分交易的許可權。

這是因為區塊鏈的構造是建立在網路上的各個賬本互不信任的前提下的。所以就算交易由不同的電腦進行處理,最終也必須通過整體的同意。因為賬本間互不信任,分片A的賬本僅僅把「發生了交易」的信息傳遞給賬本B是遠遠不夠的,必須要有某種形式的證明存在。從安全的角度上來講,這個證明不僅是「發生了交易」的證明,還是分片A沒有受到網路攻擊的證明。

分片處理的另一難點是,由於區塊鏈上的交易依賴的是區塊鏈的上一個狀態,而上一個狀態的來源的可以是區塊鏈中的任意一個部分。同時,為了緩和並列的各個分塊的競爭狀態,必須要有出具「偽」證明的方法。

對策5:Plasma

Plasma是最近才被提出的改善區塊鏈擴展性問題的新方法。Plasma是根區塊鏈上的一系列合約。根區塊鏈使用「Flow-de-proof」對鏈上的狀態進行限制。

區塊鏈整體呈樹狀,各個分支都擁有獨自的區塊鏈歷史。子鏈被稱為「等離子區塊鏈」。各個區塊鏈形成了區塊中的新鏈。

Plasma區塊鏈並沒有明示根鏈上的區塊鏈內容,而是只將塊頭的hash委託給根鏈處理,這種做法可以判斷區塊是否有效。當根鏈判斷出現了欺詐證明時,數據就會回滾,同時還會給予欺詐者相應的處罰。換言之,交易參與者僅僅是向根鏈提出數據,根鏈則做出最終的判斷。這樣根鏈需要處理的數據量將會大幅度減少,單位時間內可進行的計算量可以得到很大程度的提高。

由於Plasma模式數據指只向需要驗證特定狀態的人發送,所有賬本不需要監視所有的鏈,這使契約執行的擴展性得到了提高。而且在特定的鏈遭到攻擊時,參與者也可以迅速從子鏈退出,回歸根鏈。

Plasma在某種角度上鏈外狀態信道(例如閃電網路)有著很多相似之處,主要的不同點是不需要所有的參加者必須上線才能進行狀態更新,而且交易的參與者在確認交易的時候也不需要向根鏈發送數據。Plasma可以讓根鏈以最低的參與量進行狀態更新。

現在來看,這種解決方法的形式非常複雜,具體的內容有待今後繼續發掘。

對策6:鏈外計算

TrueBit就是使用鏈外計算,使以太幣的智能合約擴展性得到增強的案例。TrueBit的基礎與鏈外狀態信道相同,都是將繁重的工作放在鏈外進行處理。這樣做有著非常重要的意義。

參與數據處理的不是所有的賬本,而是網路上的特定參與者(求解者),他們會根據智能合約進行計算,並支付一定量的定金。如果求解者的計算正確,可以獲得相應的報酬,定金以可以一併退還。如果計算錯誤,求解者將會無法取回定金。這是一種用「驗證遊戲」來解決區塊鏈上的糾紛的方法。

在網路中,驗證者負責通過區塊鏈對求解者的工作結果進行驗證。如果驗證者沒有發出錯誤通知,系統就會認為計算是正確的。反之如果驗證者質疑求解者的結算結果,「驗證遊戲」會通過多個回合的驗證,讓區塊鏈來解決糾紛。網路上的具有一定計算能力的裁決者會對糾紛進行裁決,系統會用實際需要的區塊鏈和工作結果進行對比。

「驗證遊戲」的最後,如果認定求解者存在不正當行為,系統將會對其進行處罰。如果驗證者的質疑有誤,則需要為驗證消耗的資源支付相應的費用。

簡單來說,在這個協定中,任何人都可以提出計算任務,其他的任何人在完成了計算任務的時候都可以獲得報酬,系統通過對正確計算的獎勵來保證結果的正確性。TruBit把計算和驗證的步驟放在以太坊區塊鏈以外進行,不受以太坊的gas的限制,計算擁有了更大的擴展性。

其他方案

其他解決區塊鏈擴展性問題的方案還有很多。其中有一些解決辦法並不是以此為直接目的的,它們再解決其他問題的同時,間接地改善了區塊鏈擴展性的問題。

PoS

與PoW相同,PoS是為了防止雙重支付而開發出的區塊鏈安全保障模式。在傳統模式的區塊鏈中,礦工需要用數學計算的結果來換取報酬,這也是區塊鏈維持完整性的方法。因此,計算機的CPU能力對交易驗證有著很大的影響。可以說CPU的能力越強,對網路的影響力就越大。PoS中相關利益者不是依據計算能力,而是依據「美元」(以太幣是依據ether)進行投票。

區塊鏈會追蹤被稱為「驗證器」的特定驗證賬本,為了成為驗證器賬本,需要支付一定的保證金。如果驗證者的結算結果被認證明是「無效」的,那麼預先支付的保證金和驗證器資格會同時消失。反之,如果驗證者的計算結果正確,可以獲得相應的手續費,保證金也會一併退還。也就是說,驗證者在計算結果上堵上了自己的保證金和驗證者資格,如果答案與其他驗證者的不一致,這些都會失去。

從某種意義上來說,PoS催生了分片處理,而後者如上文所述,對區塊鏈的擴展性提升有重要的意義。

區塊鏈租賃

區塊鏈租賃是以太坊特有的解決方案之一。區塊鏈租賃的目的是縮短交易時間,使網路上的數據量減少。這一方式需要以太坊的用戶為計算步驟、內存、交易、永久空間支付費用。雖然為這些資源支付費用基本都可以獲得相應的獎勵,但是為了讓空間成為區塊中的永久部分,空間部分的獎勵方式與其他資源不同(區塊鏈租賃將空間成本定義為「打工×時間」)。

分散儲存設備

另一種讓網路保持輕鬆狀態的方法就是Swarm等使用的分散儲存設備服務。Swarm使用以太坊的對等網路文件共有協議,從與以太坊連接的swarm賬本的主區塊鏈上收集並保存應用代碼與數據,這些數據可以和區塊鏈上的數據進行交換。這樣一來,區塊鏈就不用再儲存所的賬本信息,只需記錄在近期被頻繁請求的數據就可以了,其他使用頻率較低的數據可以通過Swarm保存在雲盤中。

結論

不得不承認,區塊鏈的擴展性問題是一個非常複雜的問題。本文主要介紹了區塊鏈的擴展性為什麼很重要,以及要解決這一問題應當從哪些角度入手。

本文中列出的這些方法並不是所有的解決方法。隨著相關研究的進一步深入,我也會對這一話題進行更深一步的跟進。現在並沒有什麼完美的方法可以從根本上解決區塊鏈的擴展性問題,但是這些方法給了我們新的思考角度。但是我相信,在未來一些方法組合可以解決這些問題,區塊鏈技術也終會實現進一步的飛躍式發展。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

跟我去那個在8月宣布獨立的國家,失聯8天怎麼樣?(上)

TAG:全球大搜羅 |