當前位置:區(qū)塊鏈 >區(qū)塊鏈 > Solana 聯(lián)合創(chuàng)始人:解析 Solana 的終極架構

Solana 聯(lián)合創(chuàng)始人:解析 Solana 的終極架構

更新時間:2023-12-18 19:35:05 | 作者:佚名
所有非投票交易,都可以異步計算。 撰文:AnatolyYakovenko,Solana?首席執(zhí)行官(聯(lián)合創(chuàng)始人兼CEO) 編譯:1912212.eth,F(xiàn)oresightNews Solana目標是在符合物理法則下,盡快同步單一、無需許可的全球狀態(tài)機。我相信能夠?qū)崿F(xiàn)這一目標的架構將如下所示: 大量全節(jié)點,超過10,000個(N>10,000) 為了使...
所有非投票交易,都可以異步計算。


撰文:Anatoly Yakovenko,Solana?首席執(zhí)行官 ( 聯(lián)合創(chuàng)始人兼 CEO)

編譯:1912212.eth,F(xiàn)oresight News


Solana 目標是在符合物理法則下,盡快同步單一、無需許可的全球狀態(tài)機。我相信能夠?qū)崿F(xiàn)這一目標的架構將如下所示:


  • 大量全節(jié)點,超過 10,000 個(N > 10,000)


為了使網(wǎng)絡作為全球狀態(tài)機運行,它需要支持眾多全節(jié)點。Turbine 已經(jīng)證明在現(xiàn)代硬件和網(wǎng)絡上,向非常龐大的網(wǎng)絡進行快速復制是可擴展的。


  • 大量區(qū)塊生成領導者,超過 10,000 個(N > 10,000)
  • 并發(fā)領導者同時產(chǎn)生區(qū)塊,隨機選擇在 4 到 16 的范圍內(nèi)。


并發(fā)領導者使網(wǎng)絡能夠在全球范圍內(nèi)擁有多個位置來排序用戶交易??梢詼p少用戶與網(wǎng)絡之間的距離,消除了在交易被添加到鏈上之前,需要全節(jié)點驗證的需求。


  • 區(qū)塊時間為 120 毫秒


短區(qū)塊時間創(chuàng)建了快速的最終性點,增強了抗審查能力,提高了用戶體驗,減少了重新排序交易的窗口,并整體加速了網(wǎng)絡。


  • 在核準分委員會中的一些投票共識節(jié)點,數(shù)量在 200 到 400 之間,隨機選擇領導者,每個 epoch 4 到 8 個小時輪換一次。


共識對于選擇分叉至關重要,而分叉是由于網(wǎng)絡分區(qū)而發(fā)生的。200 個或更多節(jié)點的樣本將在統(tǒng)計上代表網(wǎng)絡中的所有主要分區(qū),并緊密匹配它們的實際分布。因此,不需要所有全節(jié)點投票,200 個已經(jīng)足夠了。將核準限制為分委員會減少支持 120 毫秒?yún)^(qū)塊所需的內(nèi)存和網(wǎng)絡帶寬。減少區(qū)塊時間自然增加了每秒發(fā)送的投票數(shù),對為共識分配的資源造成了一定的壓力。


120 毫秒?yún)^(qū)塊中的真正挑戰(zhàn)是回放所有用戶交易。由于網(wǎng)絡是無需許可的,保證具有可靠時間執(zhí)行任意用戶代碼的同質(zhì)化執(zhí)行環(huán)境是極其困難的。雖然存在可能性,但只能通過限制用戶交易的可用計算資源,并確保每個節(jié)點都超配到最壞情況的情況。


不過,對于投票支持分叉或在分叉上構建的領導者的共識節(jié)點,沒有理由執(zhí)行完整狀態(tài)。為了保持共識節(jié)點和領導者的核準同步,狀態(tài)只需要在每個期間計算一次。


異步執(zhí)行


動機


同步執(zhí)行要求所有投票和創(chuàng)建區(qū)塊的節(jié)點在任何區(qū)塊中都要超高配置,以確定最壞情況的執(zhí)行時間。異步執(zhí)行是極少數(shù)幾乎沒有權衡的情況之一。共識節(jié)點在投票之前可以執(zhí)行較少的工作。工作可以聚合和批處理,使其在執(zhí)行時高效,沒有任何緩存丟失。它甚至可以在與共識節(jié)點或領導者完全不同的機器上執(zhí)行。希望進行同步執(zhí)行的用戶可以分配足夠的硬件資源,以便實時執(zhí)行每個狀態(tài)轉(zhuǎn)換,而無需等待整個網(wǎng)絡。


鑒于應用程序和核心開發(fā)者的多樣性,值得計劃每年進行一次主要協(xié)議更改。如果必須選擇一個,我的選擇將是異步執(zhí)行。


概述


目前驗證器迅速在每個區(qū)塊上重復所有交易,并僅在為區(qū)塊計算完整狀態(tài)后才進行投票。此提案的目標是將對分叉的投票決策與計算區(qū)塊的完整狀態(tài)轉(zhuǎn)換分開。


在核準中進行投票的驗證器只需要選擇分叉;他們根本不需要執(zhí)行任何狀態(tài)。只有在每個 epoch,他們才需要狀態(tài)來計算下一個核準。


投票程序進行了調(diào)整,以便可以獨立執(zhí)行。節(jié)點僅在投票之前執(zhí)行投票程序。由于驗證器不占用太多空間,內(nèi)存要求應該相對較小。由于投票具有非常可預測的執(zhí)行時間,投票程序的執(zhí)行應該幾乎沒有任何抖動。


所有非投票交易都可以異步計算。這允許重播批量執(zhí)行所有非投票交易,預取并提前對所有程序進行 JIT,幾乎消除了所有緩存丟失。長期目標是只有需要實時低延遲完整狀態(tài)計算的機器會為此任務進行配置。據(jù)推測,用戶將為額外的硬件支付費用。


一旦分離了分叉選擇和狀態(tài)執(zhí)行,加快進度就變得更加容易:


  • 異步執(zhí)行
  • 每個 epoch 輪換固定數(shù)量的投票委員會
  • 200 毫秒的區(qū)塊時間


由于用戶交易重播不能阻塞分叉選擇,減小區(qū)塊時間時,波動性不再是一個問題。唯一需要考慮的是,在 200 毫秒時驗證器的投票速率加倍。對核準如何計算配額進行相當直接的更改,將使我們能夠?qū)⒑藴实拇笮」潭?200 或 400,或者任何看起來合適的數(shù)字。


將執(zhí)行與共識完全分開也是自然而然的。重新啟動只需要檢查固定大小核準中投票程序賬戶的共識節(jié)點,將會更加快速。


實際上,我相信確認時間將會提高,因為核準的絕大多數(shù)會盡可能快地進行投票,而在這些投票傳播的同時,向用戶提供完整狀態(tài)執(zhí)行結(jié)果的節(jié)點可以同時執(zhí)行交易。因此,我們今天看到的任何重播抖動都應該與投票網(wǎng)絡傳播同時發(fā)生。


投票


  • 投票賬戶必須擁有足夠數(shù)量的 SOL,以覆蓋 2 個 epoch 的投票。
  • 投票交易必須是簡單。非簡單的投票必定執(zhí)行失敗。區(qū)塊生成者應該放棄復雜的投票。
  • 從投票賬戶中提取 SOL 被允許,只要余額不降到低于 1 個 epoch 的投票。
  • 為了清零所有的 lamports,Vote CLOSE 指令必須要求完整的時代經(jīng)過。投票賬戶在時代 1 被標記為 CLOSE,但只能在時代 2 時進行 CLOSE。CLOSE 允許提取所有的 SOL,并刪除投票賬戶。一旦一個賬戶被標記為 CLOSE,它只能被完全刪除,不能重新打開。
  • 投票包含一個 VoteBankHash,而不是常規(guī)的 BankHash。


領導者調(diào)控和核準


只有驗證器滿足以下條件:


  • 質(zhì)押量 > X
  • 以及 SOL > 2 個時代的投票
  • 且沒有標記為 CLOSE


才能進入領導者調(diào)度并計入核準。對于版本 2,我們可以將 LeaderSchedule 與 Quorum 分開,它們各自的要求不必相同。


VoteBankHash 計算


與計算所有交易的 Bankhash 不同,驗證器僅為與 LeaderScheduler 中的驗證器相關的簡單投票交易計算 VoteBankHash。所有其他交易都被忽略。在重播所有投票后,VoteBankHash 以與當前 BankHash 相同的格式計算。


VoteBankHash 應該累積先前的 VoteBankHash,而不是完整的 BankHash。


BankHash 計算


對于所有 optimistic 確認的區(qū)塊(可配置為所有區(qū)塊),驗證器開始計算 UserBankHash,其中包括所有狀態(tài)轉(zhuǎn)換,但不包括 VoteBankHash 計算中已考慮的交易。


然后,BankHash 是從(VoteBankHash,UserBankHash)的累積中派生出來的。前 99.5% 的驗證器每 100 個時隙將 BankHash 作為其投票的一部分提交。雖然每 100 個時隙提交一次,但它在每個時隙都進行計算。值得注意的是,對于一小部分節(jié)點始終在 gossip 中提交 BankHash 作為沒有觀察到非確定性的軟信號可能是值得的。


如果少于 67% 的驗證器提交完整的 BankHash 計算,領導者應將可用的用戶交易和可寫賬戶的區(qū)塊空間減少 50%。這個措施是為了保護鏈免受可能過度增加重播時間的濫用。


BankHash 應該累積先前的 BankHash。


去銀行領導者


在區(qū)塊創(chuàng)建期間,領導者很可能無法獲取用于創(chuàng)建區(qū)塊的狀態(tài),并且在區(qū)塊創(chuàng)建期間執(zhí)行所有交易并不理想。


  • 領導者維護付費賬戶余額的緩存。
  • 如果一個付費賬戶被用作系統(tǒng)轉(zhuǎn)賬的源,或者作為可寫賬戶與系統(tǒng)程序一起傳遞給另一個程序,那么該付費賬戶余額被設置為 0。
  • 根據(jù)聲明的計算單元(CUs)將區(qū)塊按本地費用優(yōu)先級排序打包,直到區(qū)塊被填滿。
  • 從付費賬戶余額緩存中扣除費用。
  • 付費賬戶余額緩存由 BankHash 計算進行補充。


網(wǎng)絡因交易垃圾郵件失敗而產(chǎn)生的成本相對較小,僅包括存儲在存檔中的字節(jié)和傳播區(qū)塊中的交易所需的帶寬。


鑒于驗證者已經(jīng)尋求最大化自己的收益,他們有充分的激勵來維護一個準確的付費賬戶緩存。此外,如果沒有設置懲罰機制,長期來看,任何網(wǎng)絡中的任何人都可以輕松地為緩存提供服務。在服務器損壞的情況下,無銀行領導者操作者應該能夠輕松切換或從多個來源進行采樣。


這意味著由于驗證者追求最大化收益的動機,他們將努力維護準確的付費賬戶緩存。在沒有懲罰機制的情況下,這個緩存可能會長期由網(wǎng)絡中的任何節(jié)點提供服務。此外,如果服務器發(fā)生故障,無銀行領導者的操作者應該能夠輕松地進行切換或從多個來源進行采樣。


權衡


主要權衡在于為用戶狀態(tài)提供服務的全節(jié)點缺乏確認的簽名,以確認其提供狀態(tài)與核準的其余部分完全一致。狀態(tài)的唯一權威解釋應該保持不變,即使每個交易在分類帳中按順序重播。任何性能優(yōu)化都不應改變結(jié)果。因此,一旦分叉被最終確定,就只剩下正確的狀態(tài)可以計算,只要運行時實現(xiàn)沒有錯誤。


旨在可靠提供狀態(tài)的節(jié)點應該運行多臺機器和客戶端,如果狀態(tài)執(zhí)行中出現(xiàn)差異,它們應該停止操作。這本質(zhì)上是運營商今天應該做的事情,因為僅僅依賴于網(wǎng)絡的其余部分引入了正直的大多數(shù)假設。


用戶還可以簽署斷言 BankHash 或觸發(fā)中止的交易。只有在計算的確切 BankHash 與由 RPC 提供者提供給用戶的 BankHash 完全相同時,網(wǎng)絡的其余部分才會執(zhí)行這些交易。


長期無狀態(tài)共識節(jié)點路線圖


具有固定大小核準的網(wǎng)絡只需要非常小的狀態(tài)量來啟動。核準本身及其質(zhì)押權重以及所有投票賬戶余額。這是一個非常小的內(nèi)存量和一個可以快速分發(fā)并在重新啟動時快速初始化的微小快照文件。


如果核準與全節(jié)點不一致,正在同時跟蹤核準和狀態(tài)的全節(jié)點將停止運行。這意味著,如果核準與狀態(tài)發(fā)生分歧,交易所、法幣通道、RPC、橋接等都將停止運行。這只需要極小比例的有缺陷的無狀態(tài)共識節(jié)點。


無銀行領導者可以依賴于多個全節(jié)點的樣本來提供付費賬戶的初始余額緩存。即使有缺陷,結(jié)果將是區(qū)塊中的垃圾郵件而不是共識失敗。操作者應該能夠監(jiān)控他們的領導者健康狀況以及他們注入到區(qū)塊中的垃圾郵件的百分比,并迅速響應故障。

本站提醒:投資有風險,入市須謹慎,本內(nèi)容不作為投資理財建議。