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

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

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


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

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


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


  • 大量全節(jié)點(diǎn),超過 10,000 個(gè)(N > 10,000)


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


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


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


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


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


  • 在核準(zhǔn)分委員會(huì)中的一些投票共識節(jié)點(diǎn),數(shù)量在 200 到 400 之間,隨機(jī)選擇領(lǐng)導(dǎo)者,每個(gè) epoch 4 到 8 個(gè)小時(shí)輪換一次。


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


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


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


異步執(zhí)行


動(dòng)機(jī)


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


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


概述


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


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


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


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


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


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


由于用戶交易重播不能阻塞分叉選擇,減小區(qū)塊時(shí)間時(shí),波動(dòng)性不再是一個(gè)問題。唯一需要考慮的是,在 200 毫秒時(shí)驗(yàn)證器的投票速率加倍。對核準(zhǔn)如何計(jì)算配額進(jìn)行相當(dāng)直接的更改,將使我們能夠?qū)⒑藴?zhǔn)的大小固定為 200 或 400,或者任何看起來合適的數(shù)字。


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


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


投票


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


領(lǐng)導(dǎo)者調(diào)控和核準(zhǔn)


只有驗(yàn)證器滿足以下條件:


  • 質(zhì)押量 > X
  • 以及 SOL > 2 個(gè)時(shí)代的投票
  • 且沒有標(biāo)記為 CLOSE


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


VoteBankHash 計(jì)算


與計(jì)算所有交易的 Bankhash 不同,驗(yàn)證器僅為與 LeaderScheduler 中的驗(yàn)證器相關(guān)的簡單投票交易計(jì)算 VoteBankHash。所有其他交易都被忽略。在重播所有投票后,VoteBankHash 以與當(dāng)前 BankHash 相同的格式計(jì)算。


VoteBankHash 應(yīng)該累積先前的 VoteBankHash,而不是完整的 BankHash。


BankHash 計(jì)算


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


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


如果少于 67% 的驗(yàn)證器提交完整的 BankHash 計(jì)算,領(lǐng)導(dǎo)者應(yīng)將可用的用戶交易和可寫賬戶的區(qū)塊空間減少 50%。這個(gè)措施是為了保護(hù)鏈免受可能過度增加重播時(shí)間的濫用。


BankHash 應(yīng)該累積先前的 BankHash。


去銀行領(lǐng)導(dǎo)者


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


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


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


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


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


權(quán)衡


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


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


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


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


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


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


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

本站提醒:投資有風(fēng)險(xiǎn),入市須謹(jǐn)慎,本內(nèi)容不作為投資理財(cái)建議。