
Avail 測試網現已上線。隨著用戶開始將Avail 整合到他們的鏈設計中,經常出現的一個問題是:「Avail 能處理多少交易?」這是關於擴展性系列文章的最後一篇,將討論Avail 目前的性能以及其短期和長期的擴展能力。你可以在這裡閱讀第一部分,這裡閱讀第二部分。
下面的模型描述了一種架構,在這個架構中,提出和建構區塊的行為(決定哪些交易/資料區塊包含在區塊中)被分開,並由不同的參與者執行。
通過創建這種新的區塊建構者實體,生成行承諾(row commitments)和生成單元證明(cell proofs)所需的計算工作可以在不同的參與者之間分擔。
Avail 的核心功能是接收資料並輸出有序資料。可以想像成一個API。 Avail 使任何人都能夠對資料的可用性進行抽樣。
在強調我們能改進的地方之前,我們首先詳細說明Avail 在當前狀態下對區塊提議者和驗證者/完整節點的要求。
1. 區塊生產者創建區塊主體
收集交易(資料提交)
將這些交易排序到Avail 資料矩陣中,該矩陣成為區塊主體
2. 區塊生產者創建區塊頭
為矩陣的每一行產生承諾
使用多項式插值擴展這些承諾(產生的和擴展的承諾成為區塊頭)
3. 區塊生產者傳播區塊(主體+ 頭)
4. 驗證者和完整節點接收區塊
5. 驗證者和完整節點對區塊進行解碼、重構和驗證
重建資料矩陣
重建承諾
擴展承諾
驗證他們收到的所有數據是否與他們產生的承諾相符
第五步,要求完整節點重新產生區塊頭,在像Avail 這樣的系統中是不必要的。
完整節點目前之所以這樣做,是因為Avail 繼承了傳統區塊鏈的架構,而傳統區塊鏈需要驗證者來確認執行操作是否正確完成。 Avail 不處理執行操作。區塊提議者、驗證者和輕客戶端只關心資料的可用性。這意味著Avail 網絡中的所有參與者都可以選擇使用資料可用性抽樣來無需信任地確認資料的可用性。
由於驗證者和完整節點可以透過抽樣來檢查資料的可用性,他們無需重建整個區塊來確保網路的安全性。
驗證者無需透過重做生產者所做的所有事情來檢查每件事是否真實。相反,他們可以通過少量抽樣來檢查。就像輕客戶端一樣,當達到數據可用性的統計保證(8 - 30 次抽樣後),驗證者可以將該區塊添加到鏈上。因為Avail 不處理資料執行,所以可以安全地執行此操作。
資料抽樣為驗證者提供了比繁瑣的1: 1 驗證過程快得多的替代方案。 Avail 的神奇之處在於,透過只使用區塊頭,任何人(在這種情況下是驗證者)都可以達成共識,認為他們正在遵循正確的鏈。
如果我們能做到這一點,我們就可以用幾次抽樣來取代整個區塊頭重建步驟。
本文將探討在我們對驗證者的要求上的轉變,以及其他一些改進。我們將描述一個改進的系統,在這個系統中,區塊提議者(仍然)創建並傳播區塊,但所有其他網絡參與者通過數據可用性抽樣與網絡進行交互。然後,我們將引入一個更進一步的系統,它將區塊構建和區塊提議分開,由兩個不同的網絡參與者進行操作。
需要注意的是,這些變化相對更高級,目前仍在積極研究中。
對於Avail 來說,一個更有效的模型是由單一節點建構並向網絡傳播承諾。然後,所有其他參與者將產生並驗證證明。
這是我們首次使不僅是輕客戶端,而且任何鏈的部分都能做到這一點。我們允許驗證者以與輕客戶端相同的方式進行抽樣。
在這種模型中,單一驗證節點提出區塊,為資料矩陣的所有行創建承諾,然後只提出區塊頭。
步驟1 :提議者只傳播關於區塊頭的信息。
步驟2 :由於驗證者只接收頭部訊息,因此無法解碼或重構區塊。但由於他們可以進行數據可用性抽樣,所以他們不需要這麼做。
在這種情況下,其他驗證者的行為類似於輕型客戶端。
這些其他驗證者將使用承諾進行數據可用性抽樣,並且只有在達到可用性保證時才接受區塊。
在這個世界中,所有節點都將類似於輕客戶端一樣運作。驗證者可以避免使用區塊體來重新產生承諾,以確保區塊提議者的正確計算。
當驗證者可以簡單地依賴證明驗證時,產生用於證明計算的承諾是不必要的。
由於我們不需要全節點驗證區塊的有效執行(Avail 不執行執行操作!),所以全節點僅憑頭部資訊就可以確定他們正在跟隨正確的鏈。我們只需要可用性的證明,頭部資訊(結合少量隨機樣本)可以提供這一點。這使我們能夠減少成為驗證者所需的計算量。
這還有可能降低通訊時間的額外好處。
複雜性
我們猶豫是否能在短期內完成這個模型,因為它需要從Substrate 的基本結構中脫離。我們需要移除外部根(extrinsic root),這打破了對Substrate 工具的所有訪問,儘管這是我們正在積極探索的改進。
另一種模型借鑒了EIP-4844 中的分片blob 模型。https://eips.ethereum.org/EIPS/eip-4844?ref=blog.availproject.org
想像一下這個系統:
1. 區塊資料矩陣的每一行由不同的建構者建立,同時包含該行的相關多項式承諾。
建構者將他們的行與p2p 網絡共享,並將承諾傳遞給提議者。
2. 頭部創建:單一區塊提議者收集這些承諾。
提議者從建構者(和p2p 網絡)中抽樣,以確認給定的承諾在擦除編碼承諾之前可以產生有效的開放證明。這個原始承諾+ 擴展承諾的組合成為頭部。
3. 提議者將這個頭部與驗證者共用。
4. 提議者和驗證者透過從p2p 網絡(或建構者)抽樣隨機單元,並確認資料產生有效的開放證明來執行資料可用性抽樣。
5. 一旦驗證者達到可用性的統計保證,區塊頭部就會被加到鏈上。
區塊提議者不需要做太多工作,因為承諾是由許多參與者產生的。
懶惰提議者模型有一個區塊的單一提議者。然後,參考者可以像上述提議者-建構者分離方式一樣被劃分。
可以有多個建構者創建區塊的小塊。他們都將這些區塊發送給一個實體(提議者),該實體對每個部分進行隨機抽樣,以建立它提出的頭部。
區塊體是用邏輯結構建構的。
一個例子
讓懶惰提議者模型不同的是,區塊建構者和區塊提議者是獨立的實體。
假設有四個區塊建構者,每個人都有資料矩陣的一行。每個建構者使用該行創建一個承諾。
然後,每個建構者將他們的行和建構的承諾發送給指定的提議者,提議者從區塊體中抽樣數據,以確認給予的承諾。然後,提議者對承諾進行多項式插值,以便他們不僅有四個原始構建的承諾,而且還有八個承諾。數據矩陣現在已經被擦除編碼和擴展了。
這八行和八個承諾由同一個提議者驗證。
在查看整個矩陣時,我們可以看到,一半的行是由提議者建構的(透過抹除編碼),另一半是提供給他們的。
然後,製作者提出一個區塊頭,每個人都接受。這導致的區塊看起來與Avail 測試網目前正在生產的區塊相同,儘管它們建構得更有效率。
Avail 的懶惰提議者模型更有效率,但也相當複雜。雖然還有其他更容易的優化整個系統機會,但Avail 團隊很高興探索實施這種模型。
比較傳統區塊鏈交易與懶散提議者模型
懶惰提議者模型與今天非Avail 區塊鏈上處理的個別區塊鏈交易的方式並沒有太大不同。
如今,當任何人在幾乎任何鏈上進行交易時,他們會向所有節點發送這筆交易的通知。很快,每個節點的內存池中都會有這筆交易。
那麼區塊生產者會做什麼呢?
區塊生產者從他們的記憶池中取出交易,將它們聚集在一起,產生一個區塊。這是區塊生產者的典型角色。
在Avail 中,資料區塊和它們的承諾被類似地處理為個別交易。這些數據塊+承諾組合在系統上傳播,就像個別交易在傳統鏈上發送一樣。
很快,每個人都會擁有對這些資料塊的承諾。有了這些承諾,提議者就可以開始隨機抽樣以確保資料的可用性。通過足夠的抽樣信心,節點將擴展這些承諾,接受正文中的數據,並建立區塊頭—— 從而創建下一個區塊。
結語
這些為Avail 提出的架構方案旨在展示將資料可用性層與區塊鏈的其他核心功能分開的重要性。
當資料可用性單獨處理時,可以進行優化,將資料可用性視為一個獨立的層來對待,這比將資料可用性與執行等其他區塊鏈功能綁定在一起時能夠帶來更大的改進。
無論它們被稱為第三層解決方案、模組化區塊鏈或是鏈下擴展解決方案,我們很高興看到團隊利用這個專門的數據可用性層所構思出的新奇想法。團隊們可以放心,Avail 將能夠直接與在其之上構建的任何鍊或應用同步擴展。隨著我們建立一個包含數百個驗證者、數千個輕客戶端以及許多即將到來的新鏈的模塊化區塊鍊網絡,我們預計在滿足需求方面不會有任何問題。