V神最新研究:區塊鏈可擴展性的局限性,反駁馬斯克的狗狗幣擴展方式

翻譯:Kyle

區塊鏈的可擴展性究竟能達到什么程度? 真能如 Elon Musk (特斯拉 CEO)所愿「通過將區塊時間縮短 10 倍,將區塊大小增加 10 倍從而將手續費降低 100 倍」,而又不會導致極端中心化并損害區塊鏈本質的基本屬性嗎? 如果不能,那區塊鏈的可擴展性究竟能達到什么程度? 如果選擇通過更改共識算法來進行擴展,又會怎么樣? 更重要的是,如果您更改技術以引入諸如 ZK-SNARK 或分片之類的功能,會怎么樣? 從理論上講,分片的區塊鏈可以持續添加更多的分片,這會不會導致添加的東西更多?

事實證明,有一些重要且相當微妙的技術因素限制了區塊鏈的擴展性,即便是采用分片的區塊鏈也面臨這些問題, 在許多情況下,我們都會有相應的擴展性解決方案,但是這些解決方案也存在局限性。 這篇文章將探討這些可擴展性方案中存在的許多問題,

只需增加參數即可解決所有問題。但代價是什么?

普通用戶也能運行節點,這對于區塊鏈去中心化至關重要

凌晨 2:35,您收到來自世界另一端的伙伴的緊急電話,他在幫助您管理礦池(或者可能是質押池), 您的伙伴告訴您,從大約 14 分鐘前開始,您的池子和其他幾個池子突然從鏈上分裂出來,原始鏈仍舊承載著 79%的網路算力。 根據您的節點,這個多數鏈(原始鏈)生產的區塊是無效的, 這出現了余額錯誤:密鑰區塊似乎錯誤地將 450 萬枚額外代幣分配給了一個未知地址。

一個小時后,您開始與其他兩個像您一樣迷茫的礦池以及一些區塊瀏覽器和交易所在電報群中溝通。最后你看到某人發出了一個推特鏈接。 該推文寫道:「新的鏈上可持續協議發展基金正式發布」,

到了早上,推特上、社區論壇上開始充滿沒有審查過的論點,各種討論無處不在, 但是這時候,此前新增發的 450 萬枚代幣中的很大一部分已經在鏈上被轉換為其他資產,進而已經進行了數十億美元的 DeFi 交易, 79%的共識節點以及所有重要瀏覽器和輕錢包都正在遵循這一新鏈條, 也許這個新的開發者基金將為某些開發提供資金,或者也許所有這些資金都會被領先的礦池,交易所等吞掉。 但是,不管結果如何,該基金在所有意圖和目的上都是既成事實,而普通用戶則無力反擊。

好戲即將上映,也許可以由 MolochDAO 或其他機構資助

這種事情能發生在您的區塊鏈上嗎?您的區塊鏈社區的精英,包括礦池,區塊瀏覽器和托管節點,可能協調得很好,他們很可能都在同一個電報群和微信群中。如果他們真的想對協議規則進行突然更改以促進自己的利益,那么他們可能會這樣做,以太坊區塊鏈曾在十小時內完全解決了一個共識失敗;如果您的區塊鏈只有一個客戶端實現,并且您只需要將代碼更改部署到幾十個節點,那么協調更改客戶端代碼的速度就可以更快。使這種協調的社會攻擊無效的唯一可靠方法是通過去中心化社區的積極防御,也就是用戶。

想象一下,如果用戶正在運行驗證區塊鏈的節點(無論是直接還是通過更高級的間接技術),并自動拒絕破壞協議規則的區塊,即使超過 90%的礦工或質押者支持該協議,結局會怎么樣,如果每個用戶都運行一個驗證節點,那么這種攻擊將很快失敗:一些礦池和交易所將分叉,但這看起來很愚蠢。但是,即使只是某些用戶運行了驗證節點,該攻擊也不會為攻擊者帶來勝利。相反,這將導致混亂,因為不同的用戶會看到不同的鏈。至少,隨之而來的市場恐慌和可能持續的鏈分裂將大大降低攻擊者能夠獲得的利潤,要解決沖突所需要的大量時間成本本身就會讓攻擊者放棄攻擊想法,

讓我們搞清楚一點:你對惡意協議更改的抵抗來自于一種由用戶驗證區塊鏈的文化,而不是 PoW 或 PoS。

——Hasu

這一點可以看 Hasu 怎么說的

如果您的社區由 37 個節點運行者和 80000 個被動聽眾組成,他們負責用于檢查簽名和區塊頭,那么攻擊者將獲勝, 如果您的社區的每個人都在運行節點,那么攻擊者將會失敗, 我們不知道針對協同攻擊的「牛群免疫」的確切閾值是多少,但是有一件事情是絕對清楚的:節點越多越好,節點越少越糟糕,我們肯定需要不止幾十個或幾百個。

那么,我們需要全節點完成多少工作?

為了最大化可以運行節點的用戶數量,我們將重點關注常規的消費級硬件。 可以通過要求一些容易購買的專用硬件(例如,從 Amazon 購買)來增加一些網路容量,但是實際上這并沒有給擴展性帶來太多增加,

全節點處理大量交易的能力存在三個關鍵限制:

  • 計算能力:在安全運行一個節點的情況下,需要占用多少百分比的 CPU 能力?
  • 帶寬:考慮到當前互聯網連接的現實情況,一個區塊可以包含多少個字節?
  • 存儲:我們可以要求用戶存儲多少 GB 磁盤? 另外,讀取速度要求多快? (HDD 機械硬碟可以用嗎?還是說需要固態硬碟?)

許多對使用「簡單」技術可將區塊鏈擴展到多遠的錯誤觀點,是由于對這些數字中的每個都過于樂觀, 我們可以一一介紹一遍這三個因素:

計算能力

  • 錯誤:100%的 CPU 能力可以用于區塊驗證
  • 正確:大約 5-10%的 CPU 能力可用于區塊驗證

百分比如此低主要原因有四個:

  • 我們需要一個安全邊際來應對 DoS 攻擊的可能性(攻擊者為利用代碼弱點而進行的交易比常規交易需要更長的處理時間)
  • 節點離線后需要能夠同步鏈, 如果我斷開網路一分鐘,我應該能夠在幾秒鐘內再次與網路同步
  • 運行節點不應太快耗盡電池電量,也不應使所有其他應用程式的運行變慢
  • 節點還需要執行其他非區塊生產任務,主要圍繞在 p2p 網路上驗證和響應傳入的交易和請求,

請注意,直到最近,大多數針對「為什么只有 5-10%?」的解釋專注于一個不同的問題:由于 PoW 區塊是隨機出現的,因此驗證區塊所花費的時間較長,會增加同時創建多個區塊的風險, 有許多解決此問題的方法(例如,Bitcoin NG,或使用 PoS)。 但是這些修補程式不能解決其他四個問題,因此它們無法像許多人最初認為的那樣在擴展性方面帶來巨大的好處,

并行性也不是萬能的, 通常,即使是看似單線程的區塊鏈客戶端也已經并行化:簽名可以由一個線程驗證,而執行則由其他線程完成,并且有一個單獨的線程在后臺處理交易池邏輯。 而且,越接近所有線程 100%的使用率,運行節點所消耗的能量就越多,并且抵御 DoS 的安全邊際也越低,

帶寬

  • 錯誤:如果我們每 2-3 秒就有產出 10 MB 大小的數據區塊,那么大多數用戶的網路速度都 > 10 MB / 秒,因此他們當然可以處理這樣的區塊
  • 正確:也許我們可以每 12 秒處理 1-5 MB 的區塊,這已經很難了。

如今,我們經常聽到關于互聯網連接可以提供多少帶寬的廣告統計數據:通常聽到 100 Mbps 甚至 1 Gbps 的數字。但是,由于以下幾個原因,廣告中的帶寬和預期的實際帶寬之間存在很大差異:

  1. 「 Mbps」是指「每秒數百萬個比特」;比特是字節的 1/8,因此您需要將廣告的比特數字除以 8 以獲得廣告中的字節數。
  2. 就像所有公司一樣,互聯網提供商經常說謊。
  3. 總是有多個應用程式使用同一互聯網連接,因此節點無法占用整個帶寬。
  4. p2p 網路不可避免地會帶來其自身的開銷:節點經常最終會多次下載并重新上載同一區塊(更不用說在包含在區塊中之前通過 mempool 廣播的交易),

Starkware 在 2019 年進行了一次實驗,他們首次發布了 500 kB 的區塊,這是因為交易數據 gas 成本的降低首次使這種可能性成為可能,但實際上有幾個節點無法處理該大小的區塊,此后,處理大區塊的能力得到了改善,并將繼續得到改善,但是,無論我們做什么,我們仍然無法天真地獲取以 MB / 秒為單位的平均帶寬,讓自己相信我們可以接受 1 s 的延遲,并且能夠擁有如此大小的區塊。

存儲

  • 錯誤:10 TB
  • 正確:512 GB

您可能會猜到,這里的主要論點:理論與實踐之間的差異。從理論上講,您可以在亞馬遜上購買 8 TB 固態硬碟(您確實需要 SSD 或 NVME; HDD 太慢,無法存儲區塊鏈狀態)。實際上,用于撰寫此部落格文章的筆記本電腦具有 512 GB 存儲空間,并且如果您讓人們去購買自己的硬件,則其中許多都只會變得很懶惰(或者他們買不起 800 美元的 8 TB SSD),并且使用中心化提供商。即使您可以將區塊鏈安裝到某個存儲上,高水平的活動也可以輕松地快速刻錄到磁盤上,并迫使您不斷購買新磁盤。

一組區塊鏈協議研究人員對每個人都有多少磁盤空間進行了調查, 我知道樣本量很小,但仍然可以說明一些問題

此外,存儲大小決定了新節點能夠聯機并開始參與網路所需的時間。 現有節點必須存儲的任何數據都是新節點必須下載的數據。 初始同步時間(和帶寬)也是用戶運行節點的主要障礙, 在撰寫此部落格文章時,同步新的 geth 節點花了我大約 15 個小時。 如果以太坊的使用量增加了 10 倍,那么同步一個新的 geth 節點將至少花費一周的時間,這很可能導致您的網路連接受到限制。 在攻擊過程中,當對攻擊的成功響應涉及到從未運行過節點的新用戶時,這尤其重要,

交互效應

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

不要從字面上看這張圖。 不同的資料庫以不同的方式工作,并且內存中的部分通常只是一個單層(但很大)(請參閱 leveldb 中使用的 LSM 樹)。 但是基本原理是相同的

例如,如果緩存為 4 GB,并且我們假設資料庫的每一層都比前一層大 4 倍,則以太坊當前的〜64 GB 狀態將需要約 2 次訪問。但是,如果狀態大小增加 4 倍至〜256 GB,那么這將增加至〜3 次訪問,因此,gas 限制增加 4 倍實際上可以轉化為區塊驗證時間增加約 6 倍,效果可能更強:硬碟已滿時,讀取和寫入所需的時間通常比硬碟快用完時要更長,

那么這對以太坊意味著什么呢?

如今,在以太坊區塊鏈中,盡管在常規硬件上仍然可行(我在寫這篇文章時只是在筆記本電腦上同步了一個節點!),但運行一個節點已經對許多用戶構成挑戰,因此,我們正在接近瓶頸。核心開發人員最關心的問題是存儲大小,因此,目前,在解決計算和數據瓶頸方面的英勇努力,甚至是對共識算法的更改,都不太可能導致人們接受的 gas 限制大幅度增加。即使解決了以太坊最大的突出 DoS 漏洞,也只能使 gas 限制增加 20%,

解決存儲大小問題的唯一方法是無狀態(Statelessness)和狀態到期(State expiry), 無狀態允許一類節點在不維護永久性存儲的情況下驗證區塊鏈。 狀態到期會釋放出最近未訪問的狀態,需要用戶手動提供繼續維護這些狀態的證據, 這兩種路徑都已經使用了很長的時間,并且關于無狀態的概念驗證實現也已經開始。 這兩項改進相結合,可以極大地緩解這些擔憂,并為大幅提高 gas 限制打開空間。 但是,即使在實施了無狀態和狀態到期之后,gas 限制可能也只能安全地增加大約 3 倍,然后其他局限性再次開始主導。

分片之后會發生什么?

分片(Sharding)從根本上克服了上述限制,因為它使區塊鏈中包含的數據與單個節點需要處理和存儲的數據脫鉤,而不是節點通過親自下載和執行來驗證區塊,而是使用先進的數學和密碼技術來間接驗證區塊。

結果就是,采用分片的區塊鏈可以安全地擁有非分片區塊鏈無法做到的非常高的交易吞吐量, 這確實需要很多密碼學上的聰明才智來創建能成功地拒絕無效區塊的完全驗證的有效替代品,但是可以做到這一點:該理論已經建立并且基于規范草案的概念驗證已經在研究之中,

以太坊正計劃使用二次分片,其總體可擴展性受到以下事實的限制:節點必須能夠處理單個分片和信標鏈,而信標鏈必須對每個分片執行一定的管理工作, 如果分片太大,則節點將無法再處理單個分片;如果分片太多,則節點將無法再處理信標鏈, 這兩個約束的乘積就形成了一種上限。

可以想象,可以通過三次分片甚至指數分片來走得更遠。 在這種設計中,數據可用性采樣肯定會變得更加復雜,但可以做到, 但是以太坊不會采用比二次分片更高的分片了。 原因是,從交易的分片的分片實際上無法實現額外的擴展性增益,除非其他風險開始變得不可接受地高,

那么這些風險是什么?

最小用戶數

可以想象,即使只有一個用戶愿意參與其中,非分片的的區塊鏈也可以運行,而分片區塊鏈不是這樣的:沒有單個節點可以處理整條鏈,因此您需要足夠的節點,以便它們至少可以一起處理區塊鏈。如果每個節點可以處理 50 TPS,而整條鏈可以處理 10000 TPS,則該鏈至少需要 200 個節點才能生存。如果該鏈在某個時候少于 200 個節點,則要么節點無法再跟上鏈,要么節點停止檢測無效塊,否則可能會發生其他不良情況,具體取決于節點軟體如何設置的。

實際上,由于需要冗余(包括用于數據可用性采樣),因此安全的最小節點數量比單純的「鏈 TPS 除以節點 TPS」高出幾倍;對于上面的示例,我們說是 1000 個節點,

如果分片區塊鏈的容量增加 10 倍,則最小用戶數也將增加 10 倍,現在,您可能會問:為什么我們不從容量很小的時候開始開始,在看到大量用戶時增加容量,在用戶數量減少時減小容量?

這里面其實有一些問題:

  1. 區塊鏈本身無法可靠地檢測到有多少個唯一用戶,因此這將需要某種治理來檢測和設置分片數量。針對容量限制的管理很容易成為分裂和沖突的根源,
  2. 如果許多用戶突然并意外退出,該怎么辦?
  3. 增加啟動分叉所需的最小用戶數,使得惡意接管變得更加困難,

最低用戶數為 1,000,這是幾乎肯定是可以的。 另一方面,最低用戶數設為 100 萬,這肯定是不行。 甚至將最低用戶數設為 10,000,也是有點冒險的。 因此,似乎很難證明擁有超過數百個分片的分片區塊鏈是合理的。

歷史可檢索性

用戶真正珍視的區塊鏈的重要屬性是永久性, 當公司破產或失去維護該生態系統的興趣時,存儲在服務器上的數字資產將在 10 年內停止存在, 另一方面,以太坊上的 NFT 是永久的。

是的,到 2372 年,人們仍能夠下載和檢查您的加密貓。

但是一旦區塊鏈的容量過高,存儲所有這些數據就會變得更加困難,直到某個時刻存在很大的風險,歷史的某些部分最終將……沒人存儲。

量化這種風險很容易,以區塊鏈的數據容量(MB / 秒)為單位,乘以〜30 即可得到每年以 TB 為單位存儲的數據量,當前的分片計劃的數據容量約為 1.3 MB / 秒,因此約為 40 TB / 年,如果將其增加 10 倍,則將變為 400 TB / 年,如果我們希望數據不僅可以訪問,而且可以方便地訪問,那么我們還需要元數據(例如,對匯總交易進行解壓縮),因此,這就是每年 4 PB,或者十年后達到 40 PB, 互聯網檔案(Internet Archive)才使用 50 PB,因此,這是分片區塊鏈安全的合理體積上限,

因此,看起來在這兩個維度上,以太坊分片設計實際上已經大致針對相當合理的最大安全值,常數可以增加一點,但不能增加太多,

總結

嘗試擴展區塊鏈的方法有兩種:基本的技術改進和簡單地增加參數,首先,增加參數聽起來很有吸引力:如果您是在餐巾紙上進行數學運算,這就很容易讓自己相信家用筆記本電腦每秒可以處理數千筆交易,不需要 ZK-SNARK,匯總或分片,不幸的是,有很多微妙的理由可以解釋為什么這種方法從根本上是有缺陷的。

運行區塊鏈節點的計算機無法花費 100%的 CPU 能力來驗證區塊鏈;他們需要很大的安全邊際來抵抗意外的 DoS 攻擊,他們需要備用容量來執行諸如在內存池中處理交易之類的任務,并且您不希望在計算機上運行節點以使該計算機無法同時用于任何其他應用程式。帶寬同樣也有水分:10 MB / s 的連接并不意味著您每秒可以擁有 10 MB 的區塊!也許是每 12 秒才能有 1-5 MB 的塊,這與與存儲相同。增加對運行節點的硬件要求以及將節點的運行限制在專門的參與者上并不是一種解決方案,對于去中心化的區塊鏈而言,對于普通用戶而言,能夠運行節點并形成一種文化,即運行節點是一種普通活動,這一點至關重要。

另一方面,根本的技術改進是可行的。 當前,以太坊的主要瓶頸是存儲大小,而無狀態性和狀態到期可以解決此問題,并允許將其增加最多約 3 倍——但不能更多,因為我們希望運行一個節點比現在更容易, 采用分片的區塊鏈可以進一步擴展,因為分片的區塊鏈中單個節點不需要處理每筆交易。 但是即使是分片區塊鏈,容量也有局限性:隨著容量的增加,最小安全用戶數增加,歸檔區塊鏈的成本(以及如果沒有人去歸檔鏈,數據存在丟失的風險)就會上升, 但是我們不必太擔心:這些限制足夠高,以至于我們可以在保證區塊鏈的完全安全性的同時每秒處理超過一百萬筆交易。 但是在不犧牲使區塊鏈如此有價值的去中心化性質的前提下,還將需要做一些工作。

特別感謝 Felix Lange,Martin Swende,Marius van der Wijden 和 Mark Tyneway 為本文提供的反饋和評論,

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧