以太坊之類區塊鏈的擴充套件存在各種限制 - vitalik

banq發表於2021-05-24

您能將區塊鏈的可擴充套件性推進多遠?正如Elon Musk希望的那樣,您能否真正實現“將區塊時間縮短10倍,將區塊大小增加10倍並將手續費降低100倍”,而又不會導致極端的集中化並損害使區塊鏈成為其本質的基本屬性?如果沒有,那你能走多遠?如果您想更改共識演算法怎麼辦?更重要的是,如果您更改技術以引入諸如ZK-SNARK或分片之類的功能,該怎麼辦?從理論上講,分片的區塊鏈可以繼續新增更多的分片。有太多的東西嗎?
事實證明,無論分片與否,都有重要且相當微妙的技術因素限制了區塊鏈的擴充套件。在許多情況下,都有解決方案,但是即使有了解決方案,也存在侷限性。這篇文章將探討這些問題中的許多問題。
 

普通使用者能夠執行節點對於區塊鏈去中心化至關重要
在凌晨2:35,您會收到來自世界另一端的夥伴的緊急電話,夥伴幫助您管理採礦池(或者可能是賭注池)。從大約14分鐘前開始,夥伴就告訴您,採礦池和其他幾個人從仍然承載著79%網路網路的鏈中分離出來。根據您的節點,多數鏈的塊是無效的。出現平衡錯誤:金鑰塊似乎錯誤地將450萬枚額外硬幣分配給了一個未知地址。
一個小時後,您正在與其他兩個像您一樣懵逼的街區探險者和交流者聊天。您最終會看到某人將指向釋出的訊息的連結貼上到推文上。這條推文說:“宣佈分支一條新鏈協議實現可持續發展基金”。
到了早上,在Twitter上以及在沒有審查討論內容的一個社群論壇上的爭論,討論無處不在。但是到那時,這450萬枚代幣中的很大一部分已經在鏈上轉換為其他資產,並且進行了數十億美元的defi交易。79%的共識節點,以及所有主要的區塊鏈探索者和錢包的端點都遵循了這一新鏈條。也許新的開發者基金將為某些發展提供資金;或者也許所有這些都被領先的交易所,交易所及其親人所吞併。但是,不管結果如何,該基金在所有意圖和目的上都是既成事實,而普通使用者則無力反擊。
這會在您的區塊鏈上發生嗎?您的區塊鏈社群的精英,包括採礦池、區塊瀏覽器和託管節點,可能協調得很好,他們很可能都在同一個微信群組中。如果他們真的想對協議規則進行突然更改以促進自己的利益,那麼他們可能會這樣做。
以太坊區塊鏈可以再在十小時內完全解決了共識失敗; 如果您的區塊鏈只有一個客戶端實現,並且您只需要將程式碼更改部署到幾十個節點,那麼協調對客戶端程式碼的更改可以更快地完成。唯一可靠的方法,使這種社會協調攻擊的失效方法是透過來自實際上分散的一個選區的被動防禦:使用者。
如果您有一個每個人都在執行節點的社群,那麼攻擊者將會失敗。更多的節點就是好,更少的節點就是壞,我們肯定需要幾十個或幾百個以上。
 

那麼,我們需要完整的節點來完成多少工作的限制是什麼?
為了最大化可以執行節點的使用者數量,我們將重點關注常規的消費類硬體。可以透過要求一些容易獲得的專用硬體購買(例如,從Amazon購買)來實現容量的增加,但是實際上並沒有增加太多的可擴充套件性。
完整節點處理大量事務的能力存在三個關鍵限制:

  • 計算能力:我們可以安全地要求執行一個節點的CPU的百分比是多少?
  • 頻寬:考慮到當前網際網路連線的現實情況,一個塊可以包含多少個位元組?
  • 儲存:我們可以要求使用者儲存多少GB磁碟?另外,它必須多快才能被讀取?(即可以使用硬碟嗎,還是我們需要固態硬碟)

許多錯誤地認為,使用“簡單”技術可以使區塊鏈擴充套件多遠,這是由於對每條限制都過於樂觀。我們可以一一經歷以下三個因素:
 

計算能力

  • 錯誤認識:100%的CPU能力可以花在塊驗證上
  • 正確認識:大約有5-10%的CPU能力可用於塊驗證

限制如此之低的主要原因有四個:
  • 我們需要一個安全餘量來掩蓋DoS攻擊的可能性(攻擊者為利用程式碼弱點而進行的交易比常規交易需要更長的處理時間)
  • 節點離線後需要能夠同步鏈。如果我斷開網路一分鐘,我應該能夠在幾秒鐘內趕上
  • 執行節點不應很快耗盡電池電量,而會使所有其他應用程式變慢
  • 節點還需要執行其他非區塊生產任務,主要圍繞在p2p網路上驗證和響應傳入的事務和請求。

請注意,直到最近,大多數解釋是“為什麼只有5-10%?” 專注於一個不同的問題:由於PoW塊是隨機出現的,因此驗證塊所花費的時間較長,會增加同時建立多個塊的風險。有許多解決此問題的方法(例如,Bitcoin NG或僅使用權益證明)。但是這些修補程式不能解決其他四個問題,因此它們無法像許多人最初認為的那樣在可伸縮性方面帶來巨大的收益。
並行性也不是萬能的。通常,即使是看似單執行緒的區塊鏈客戶端也已經並行化:簽名可以由一個執行緒驗證,而執行則由其他執行緒完成,並且有一個單獨的執行緒在後臺處理事務池邏輯。而且,越接近所有執行緒100%的使用率,執行節點所消耗的能量就越多,並且抵禦DoS的安全裕度也越低。
 

頻寬

  • 錯誤認識:如果我們每2-3秒就有10 MB的資料塊,那麼大多數使用者的網路速度都> 10 MB /秒,因此他們當然可以處理
  • 正確認識:也許我們可以每12秒處理1-5 MB的塊。雖然很難。

如今,我們經常聽到關於網際網路連線可以提供多少頻寬的非常高的廣告統計資料:通常聽到100 Mbps甚至1 Gbps的數字。但是,由於以下幾個原因,公告的頻寬和連線的預期實際頻寬之間存在很大差異:
  1. “ Mbps”是指“每秒數百萬個位元”;位是位元組的1/8,因此您需要將廣告位數字除以8以獲得廣告位位元組數。
  2. 就像所有公司一樣,網際網路提供商經常說謊。
  3. 總是有多個應用程式使用同一Internet連線,因此節點無法佔用整個頻寬。
  4. p2p網路不可避免地會帶來其自身的開銷:節點經常最終會多次下載並重新上載同一塊(更不用說在包含在塊中之前透過mempool廣播的事務)。

當Starkware在2019年進行實驗時,他們首次釋出了500 kB的區塊,這是因為交易資料gas成本的降低首次使這種可能性成為可能,實際上有幾個節點無法處理該大小的區塊。此後,處理大型塊的能力得到了改善,並將繼續得到改善。但無論我們做什麼,我們仍然是很遠不能天真地取平均頻寬MB /秒,說服自己,我們用ls好等待時間,並能夠有一個是大小的塊。
 
貯存
  • 錯誤回答:10 TB
  • 正確回答:512 GB

您可能會猜到,這裡的主要論點與其他地方一樣:理論與實踐之間的差異。從理論上講,您可以在亞馬遜上購買8 TB固態硬碟(您確實需要SSD或NVME; HDD太慢,無法儲存區塊鏈狀態)。在實踐中,用於撰寫此部落格文章的膝上型電腦具有512 GB,如果您讓人們去購買自己的硬體,則其中許多都只會變得懶惰(或者他們負擔不起800美元的8 TB SSD),並且使用集中式提供商。即使您可以將區塊鏈安裝到某個儲存上,高水平的活動也可以輕鬆地快速燒錄到磁碟上,並迫使您不斷購買新磁碟。
此外,儲存大小決定了新節點能夠聯機並開始參與網路所需的時間。現有節點必須儲存的任何資料都是新節點必須下載的資料。初始同步時間(和頻寬)也是使用者執行節點的主要障礙。在撰寫此部落格文章時,同步新的geth節點花了我大約15個小時。如果以太坊的使用量增加了10倍,那麼同步一個新的geth節點將至少花費一週的時間,這很可能導致您的Internet連線受到限制。在攻擊過程中,這尤其重要,因為對攻擊的成功響應可能會導致許多使用者在以前不執行節點的情況下旋轉新節點。
 

互動效應
此外,這三種成本之間存在互動作用。由於資料庫內部使用樹結構來儲存和檢索資料,因此從資料庫中獲取資料的成本隨資料庫大小的對數增加而增加。實際上,因為可以將頂層(或頂層幾層)快取在RAM中,所以磁碟訪問成本與資料庫的大小成比例,該大小是快取在RAM中的資料大小的倍數。
 

那麼這對以太坊意味著什麼呢?
如今,在以太坊區塊鏈中,執行一個節點已經對許多使用者構成挑戰,儘管至少在常規硬體上仍然可行(我在寫這篇文章時只是在膝上型電腦上同步了一個節點!),其實我們接近瓶頸。
核心開發人員最關心的問題是儲存大小。因此,目前,在解決計算和資料瓶頸方面的英勇努力,甚至是對共識演算法的更改,都不太可能導致大量的gas限制增加。即使解決了以太坊最大的突出DoS漏洞,也只能使gas限額增加20%。
解決儲存大小問題的唯一方法是無狀態和狀態到期。無狀態性允許一類節點在不維護永久性儲存的情況下驗證鏈。狀態到期會推出最近未訪問的狀態,從而迫使使用者手動提供續訂的證明。這兩種路徑都已經使用了很長的時間,並且關於無狀態性的概念驗證實現也已經開始。這兩項改進相結合,可以極大地緩解這些擔憂,併為大幅提高gas限制開啟空間。但是,即使在實施了無狀態和狀態到期之後,gas限制可能也只能安全地增加大約3倍,直到其他限制開始占主導地位為止。
 

分片後會發生什麼?
分片從根本上克服了上述限制,因為分片將區塊鏈中包含的資料與單個節點需要處理和儲存的資料解耦。它們使用高階數學和密碼技術間接驗證塊,而不是節點透過親自下載和執行來驗證塊。
結果,分片區塊鏈可以安全地擁有非分片區塊鏈無法做到的非常高的交易吞吐量。這確實需要很多密碼學上的聰明才智來建立能成功地拒絕無效塊的幼稚的完全驗證的有效替代品,但是可以做到這一點:該理論已經建立並且基於規範草案的概念驗證已經在研究中。
以太坊正計劃使用二次分片,其總體可擴充套件性受到以下事實的限制:節點必須能夠處理單個分片和信標鏈,而信標鏈必須對每個分片執行一定數量的管理工作。如果分片太大,則節點將無法再處理單個分片;如果分片太多,則節點將無法再處理信標鏈。這兩個約束的乘積形成上限。
可以想象,可以透過三次分片甚至指數分片來走得更遠。在這種設計中,資料可用性取樣肯定會變得更加複雜,但是可以做到。但是以太坊沒有比二次分片更進一步的了。原因是,從交易分片到交易分片實際上無法實現額外的可伸縮性增益,除非其他風險變得不可接受地高。

那麼這些風險是什麼?
 

最小使用者數
可以想象,即使只有一個使用者願意參與其中,非分片的區塊鏈也可以執行,但是分片的區塊鏈不是這樣的:沒有單個節點可以處理整個鏈,因此您需要足夠的節點,以便它們至少可以一起處理鏈。
如果每個節點可以處理50 TPS,而鏈條可以處理10000 TPS,則該鏈至少需要200個節點才能生存。如果鏈在任何時候到達少於200個節點,則要麼節點停止跟上鍊,要麼節點停止檢測無效塊,否則可能會發生其他不良情況,具體取決於節點已安裝的軟體。
實際上,由於需要冗餘(包括用於資料可用性取樣),因此安全最小數量比單純的“鏈式TPS除以節點TPS”啟發式方法高出幾倍;對於上面的示例,我們將其稱為1000個節點。
如果分片區塊鏈的容量增加10倍,則最小使用者數也將增加10倍。現在,您可能會問:為什麼我們不從一點點容量開始,而僅在看到大量使用者時才增加容量,而如果使用者數減少,則減少容量?
這有一些問題:

  1. 區塊鏈本身無法可靠地檢測到有多少個唯一使用者,因此這將需要某種治理來檢測和設定分片計數。超過容量限制的管理很容易成為分裂和衝突的源頭
  2. 如果許多使用者突然並意外退出,該怎麼辦?
  3. 增加分叉啟動所需的最小使用者數,使得抵禦惡意收購變得更加困難。

幾乎可以肯定,最少使用者數不超過1,000。另一方面,最低使用者數肯定不是100萬。甚至最小的10,000名使用者都可以說開始冒險了。因此,似乎很難證明具有超過數百個分片的分片區塊鏈是合理的。
 

歷史可檢索性
使用者真正珍視的區塊鏈的重要屬性是永久性。當公司破產或失去維護該生態系統的興趣時,儲存在伺服器上的數字資產將在10年後停止存在。另一方面,以太坊的NFT是永遠的。
但是一旦區塊鏈的容量過高,儲存所有這些資料就會變得更加困難,直到某個時刻存在很大的風險,歷史的某些部分最終將被……沒人儲存。
量化這種風險很容易。以區塊鏈的資料容量(MB /秒)為單位,乘以〜30即可得到每年以TB為單位儲存的資料量。當前的分片計劃的資料容量約為1.3 MB /秒,因此約為40 TB /年。如果將其增加10倍,則將變為400 TB /年。如果我們希望資料不僅可以訪問,而且可以方便地訪問,那麼我們還需要後設資料(例如,對彙總交易進行解壓縮),因此,使每年4 PB,或者十年後達到40 PB。Internet檔案使用50 PB。因此,這是分片區塊鏈可以安全地獲得多大的合理上限。
因此,看起來在這兩個維度上,以太坊分片設計實際上已經大致瞄準了相當接近合理的最大安全值。常數可以增加一點,但不能增加太多。
 

總結
嘗試擴充套件區塊鏈的方法有兩種:基本的技術改進和簡單地增加引數。
首先,增加引數聽起來很有吸引力:如果您在餐巾紙上進行數學運算,就很容易說服自己,家用膝上型電腦每秒可以處理數千筆交易,不需要ZK-SNARK,彙總或分片。不幸的是,這種方法從根本上有缺陷的原因有很多微妙的原因。
執行區塊鏈節點的計算機無法花費100%的CPU能力來驗證鏈;他們需要很大的安全裕度來抵抗意外的DoS攻擊,他們需要備用容量來執行諸如在記憶體池中處理事務之類的任務,並且您不想在計算機上執行節點以使該計算機無法同時用於任何其他應用。頻寬同樣也有開銷:10 MB / s的連線並不意味著您每秒可以擁有10 MB的塊!每12秒可能有1-5 MB的塊。與儲存相同。增加對執行節點的硬體要求以及將節點的執行限制在專門的參與者上並不是一種解決方案。對於去中心化的區塊鏈來說,對於普通使用者而言,能夠執行節點並具有一種文化,其中執行節點是一種常見的活動至關重要。
另一方面,基本的技術改進可以正常工作。當前,以太坊的主要瓶頸是儲存大小,無狀態性和狀態到期可以解決此問題,並允許將其增加多達約3倍-但不能超過300倍,因為我們希望執行一個節點比現在變得更容易。
分片的區塊鏈可以進一步擴充套件,因為分片的區塊鏈中沒有單個節點需要處理每個交易。但是即使在那兒,容量也有侷限性:隨著容量的增加,最小安全使用者數增加,歸檔鏈的成本(以及如果沒有人去麻煩歸檔鏈,資料丟失的風險)就會上升。但是我們不必太擔心:這些限制足夠高,以至於我們可以使用區塊鏈的完全安全性每秒處理超過一百萬筆交易。
 

相關文章