rapidblocks 背後的主要思想是,如果我們能夠以某種方式構建沒有塊間依賴關係的塊,我們就可以加快時隙時間,減少交易包含時間,並大幅擴大塊生產規模。
這主要是因為:
- 我們可以讓“重組”變得更便宜:我們可以簡單地跳過一些快速區塊,而不需要昂貴的重組。(至於它是否真的便宜很多,或者只是便宜一點點,還有待觀察。)
- 我們可以允許幾乎並行地構建這些獨立的塊。幾乎是,因為我們確實需要對構建器進行排序,並且信息流量很小。
當然,這樣做是有代價的,因為區塊之間確實需要某種方式相互依賴。我們會在最後討論這個問題。
請將這篇文章視為一個想法傾瀉和討論的起點,而非最終的設計方案。描述過於籠統,忽略了許多細節,這可能會導致整個想法在實踐中不可行。
該想法的基本概念首先出現在對BAL帖子的回覆中。
如何構建“獨立”積木
修改狀態
假設區塊 i+1 的構建者知道區塊 i 修改狀態的所有地址(或 <address,storagekey> 對)。
現在,它可以構建一個僅基於未被區塊 i 修改的部分狀態的區塊。換句話說,它可以在區塊 i-1 的“舊”後狀態之上構建這個區塊,這也意味著:
- 可以從鏈中“跳過”The Blocki,而無需丟棄區塊 i+1
- 區塊 i+1 的建造者不需要在建造之前執行區塊 i
- 它甚至不需要知道塊 i 的狀態變化
訪問狀態
現在假設塊 i+1 的構建器知道塊 i 訪問(讀取或寫入)的所有地址(或 <addresses,storagekey> 對)。有了這些信息,它可以構建一個更強大的塊,使其在邏輯上與塊 i 並行。
- 塊 i+1 不依賴於塊 i
- 塊 i 不依賴於塊 i+1
由於執行順序並不重要,這使我們能夠進一步廉價地重組“鏈”。
當然,讀者注意到了,假設 1 和假設 2 如今都已經成立。我們的區塊構建器知道所有這些地址。那麼,我們究竟在說什麼呢?
這裡有兩個要點需要注意:
- a,雖然下一個區塊構建者擁有這些知識,但我們無法有效地傳遞它,從而導致更長的時隙時間
- b,雖然下一個區塊構建者擁有這些知識,但我們不會強制執行區塊獨立性,如果我們減少時隙時間,這將導致更頻繁和更昂貴的重組。
但這太瘋狂了,區塊確實(現在)依賴於前一個區塊,對嗎?
是的,但這只是一小部分。有趣的是,一個典型區塊中超過 90% 的交易似乎包含不依賴於前一個區塊的交易。有關區塊間依賴關係的當前狀態的更多詳細信息,請參閱這篇關於“預熱”的文章。
在這個前提下,讓我們看看可以使用哪些潛在工具來實現 repidblocks。
工具
BAI和BMI
這些想法的主要靈感來自於Toni 在優秀作品中對各種形式的塊級狀態變化和訪問列表(也稱為BAL)的探索。
很容易看出,我們的條件 1 是BAL的塊後狀態變化的地址列表部分。我們將其稱為 BMI,The Block級狀態修改索引。
我們的條件二映射的是沒有前狀態或後狀態信息的BAL 。我們稱之為BAI,The Block級訪問索引。
注意:也許我們應該稱這些為存儲位置/寫入位置,但 Locataion 中的 L 已經被 Lists 中的 L 佔用
因此,如果我們可以將其中一個快速轉發給下一個構建者,並利用區塊獨立性帶來的更低成本的重組,就能縮短時隙時間。在以太坊中,我們不能直接將其快速轉發給下一個構建者,而是需要將其發送到整個網絡。即使我們知道下一個驗證者,我們也不知道它在網絡中的位置,而且由於顯而易見的原因,我們沒有基於驗證者 ID 的路由。
不過,我們可以考慮優先考慮網絡上的 BAI(較大)或 BMI(較小),從而減少時隙時間。
BAF和BMF
如果我們能以某種方式將 BAI 或 BMI 壓縮成單個 IP 數據包,並在網絡中快速轉發,那就更好了。這可能使我們能夠在最短 300 毫秒內將信息傳播到整個網絡。我們可以嘗試使用布隆過濾器來實現這一點。更多詳情,請參閱我的 BAF 文章。
rapidblock“鏈”結構
我們的最終工具是新的“鏈”結構。實際上,底層結構並非真正的鏈,而是一個受限的 DAG,但如果有人真的需要,我們可以輕鬆地將其“線性化”為鏈式視圖。(我認為這對於兼容性以及最終對這些理念的演進式引入至關重要)。
當然,塊應該有依賴關係。但它們不必依賴於先前構建的塊。如果我們能夠縮短 slot 時間,強制其與前一個塊獨立,並允許其與前一個塊獨立,實際上可能會產生相同的效果。
我們上面創建的是一個區塊生產流水線,可以構建
- 相互獨立的塊
- 其中任何一個都可以獨立地從“鏈”中刪除,而不會影響其他區塊的有效性。
- 嚴格排序但不依賴於狀態的塊
- 如果區塊
b基於區塊a的 BAF 或 BMF,仍然可以低成本地從鏈中移除其中任何一個,但它們不能以相反的順序或並行執行,因為a可能會訪問由b修改的狀態
- 如果區塊
顯然,至少表面上看起來是這樣,共識機制變得更加複雜。證明機制並不會因為我們更頻繁地生成區塊而神奇地變得更快。但重組的成本要低得多,而且區塊的生成頻率也可以更高。需要說明的是,我目前還沒有清晰地理解這應該如何運作,但我認為我們可以創建一個流水線式的共識機制,可以選擇性地將獨立的子鏈“合併”到一個虛擬的安全鏈層級中。
我們的收穫
加快時隙時間
我們可以通過這種設計來加快時隙時間,原因有二。
主要原因是重組成本低廉。由於區塊可以從規範鏈中選擇性地跳過,我們實際上擁有非常低廉的重組成本,這意味著我們可以對那些因各種原因無法成功構建的區塊更加寬容。
第二個原因是我們需要更少的信息來構建一個區塊,並且我們可以在網絡中更快地分發少量的信息。
減少交易納入時間
隨著時隙時間的縮短,交易的打包時間也隨之縮短。雖然這並非對所有人來說都重要,但這顯然是用戶體驗的一部分。
擴大區塊生產規模
由於我們只需要一個非常小的過濾器就能到達下一個構建器,我們也可以考慮並行化區塊構建。這是一種無需預先進行狀態空間劃分的動態分片。同樣,這裡的設計目前尚不明確,但我認為我們可以朝著基於BAF或BMF快速擴散的分佈式區塊構建並行化和流水線化的方向發展。
與其他想法的關係
這個想法也可以從一個新的角度看待BAL和氣候變暖。與其試圖快速引發大規模的狀態變化,不如努力確保不會發生大規模的變化。
還有一些想法正在朝著允許在發生衝突時“跳過”交易級別的方向發展。我認為有空間嘗試結合這些想法,儘量減少(但不一定消除)區塊間的依賴關係。我們甚至可以嘗試為獨立的更改設計一條“快速路徑”,為依賴性更改設計一條“慢速路徑”(但速度不會比現在慢),從而實現一種設計,使整體鏈容量可以提升,而不會受到特定“最壞情況”交易的限制。



