BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Firedancer驗證器推出,為Solana大規模採用鋪路

夫如何
读者
2023-12-02 01:12
本文約11405字,閱讀全文需要約17分鐘
一文詳解Firedancer驗證器客戶端。
AI總結
展開
一文詳解Firedancer驗證器客戶端。

本文取自:《What is Firedancer? A Deep Dive into Solana 2.0 》

原文作者:0xIchigo

Odaily譯者:夫如何

眾所周知,Solana 作為目前公鏈中高性能的代表之一,其較快的鏈上處理速度受到眾多項目方的追捧,也吸引了像Visa 等傳統巨頭的青睞。但Solana 一直存在著網絡宕機的隱患,網絡宕機問題該怎麼解決,Jump 將推出的Firedancer 驗證其客戶端或能給出答案。

本文將從驗證器以及驗證器客戶端對區塊鏈的作用入手,探討Firedancer 驗證器客戶端如何加持Solana 網絡。

以下由Odaily編譯。

驗證器以及驗證器客戶端多樣性是什麼?

驗證器是參與權益證明區塊鏈的計算機。驗證器是Solana 網絡的支柱,負責處理交易並參與共識過程。驗證器透過鎖定一定數量的Solana 原生代幣作為抵押來保護網路的安全。質押代幣可以將其視為一筆安全保證金,將驗證器與網路進行經濟聯繫。這種聯繫激勵驗證器準確且有效率地執行任務,因為他們會根據自己的貢獻獲得獎勵。同時,對於惡意或故障行為,驗證器也會受到處罰。驗證器的權益會因為不當行為而減少,此過程稱為減持。因此,驗證器有充分的動力正確執行職責以增加自己的權益。

驗證器客戶端是驗證器用來執行任務的應用程式。客戶端是驗證器的基礎,透過其加密的唯一身分參與共識過程。

擁有多個不同的客戶端可以提高容錯能力。例如,如果沒有任何一個客戶端控制超過33% 的份額,崩潰或影響活躍性的錯誤就不會使網路崩潰。同樣,如果一個客戶端有錯誤導致無效的狀態轉換,只有少於33% 的份額使用該客戶端,網路就可以避免安全故障。這是因為大多數網路將保持在有效狀態,防止區塊鏈出現分裂或分叉。因此,驗證器客戶端的多樣性能夠提高網路的彈性,不會因為一個客戶端的錯誤或漏洞對整個網路造成嚴重影響。

客戶端多樣性可以透過每個客戶端運行的權益份額百分比和可用客戶端的總數來衡量。在撰寫本文時,Solana 網上有1979 個驗證器。這些驗證器在主網上使用的兩個客戶端是由Solana Labs 和Jito Labs 提供的。 Solana 在2020 年3 月推出時,使用的是由Solana Labs 開發的驗證器客戶端。 2022 年8 月,Jito Labs 發布了第二個驗證器客戶端。這個客戶端是由Jito 維護和部署的Solana Labs 程式碼的分支。該客戶端優化了區塊中最大可提取價值(MEV)的提取。 Jito 的客戶端創建了一個偽內存池,因為Solana 在沒有內存池的情況下流式傳輸塊。值得注意的是,記憶體池是一組未確認和待處理交易的隊列。偽內存池允許驗證器搜尋這些交易,將其優化地捆綁在一起,並提交給Jito 的區塊引擎。

截至2023 年10 月,Solana Labs 客戶端持有活躍抵押的68.55 %,而Jito 持有31.45 %。使用Jito 客戶端的驗證器數量比Solana 基金會先前的健康報告增加了16 %。 Jito 客戶端使用率的成長顯示出客戶端多元化的演變趨勢。

儘管這種增長的消息令人振奮,但它並非完美無缺。需要強調的是,Jito 的客戶端是Solana Labs 客戶端的分支。這意味著Jito 與原始驗證器程式碼庫共用許多元件,並且可能容易受到影響Solana Labs 客戶端的錯誤或漏洞的攻擊。在理想的未來中,Solana 至少應該擁有四個獨立的驗證器客戶端。不同的團隊將使用不同的程式語言來建立這些客戶端。沒有單一的實現會超過33 %的權益份額,因為每個客戶端將持有約25 %的份額。這種理想化的設定將在整個驗證器堆疊中消除單個故障點。

開發第二個獨立的驗證器客戶端對於實現這種未來至關重要,Jump 致力於實現這一目標。

為什麼Jump 要建立一個新的驗證器客戶端?

Solana 的主網過去曾四次出現宕機的情況,每次都需要數百個驗證器進行手動修復。這種宕機情況凸顯了對Solana 網絡可靠性的擔憂。Jump 認為協議本身是可靠的,而將停機時間歸因於影響共識的軟件模組問題。因此,Jump 正在開發一個新的驗證器客戶端來解決這些問題。這個客戶端的總體目標是提高Solana 網絡的穩定性和效率。

開發一個獨立的驗證器客戶端是一項艱鉅的任務。然而,這並不是Jump 第一次建立可靠的全球網絡。過去,證券交易(即股票買賣)是由市場專家手動執行的。隨著電子交易平台的出現,證券交易變得更加開放。這種開放性增加了競爭,自動化,並減少了投資者進行交易的時間和成本。市場專家之間開始了技術上的競爭。

交易者以交易為生。更好的交易體驗需要在軟件、硬體和網路解決方案上更加重視。這些系統必須具有高機器智慧、低即時延遲、高吞吐量、高適應性、高可擴展性、高可靠性和高追責能力。

通用解決方案(即公司可以直接購買的軟件)並不是競爭優勢。以次於第二名的方式將正確的訂單發送到交易所是一種昂貴的賠錢方式。在高頻交易領域的激烈競爭導致了一個永無止境的開發循環,建立了一流的全球交易基礎設施。

這種情景可能聽起來很熟悉。成功的交易系統的要求與成功的區塊鏈相似。區塊鏈需要是效能優越、容錯性強、延遲低的網路。一條慢速的區塊鍊是一種失敗的技術,無法滿足現代企業應用的需求,只會阻礙創新、可擴展性和真實世界的實用性。憑藉著二十多年的全球網路擴展和高效能係統開發經驗,Jump 是創建獨立驗證器客戶端的完美團隊。 Jump Trading 首席科學長Kevin Bowers 負責全程監督建造過程。

光速為何太慢?

凱文鮑爾斯(Kevin Bowers)詳細闡述了光速過慢的問題。光速是一個有限的常數,它對單個晶體管可以處理的計算數量提供了自然限制。目前,比特通過電子在晶體管中傳輸來進行建模。香農容量定理(即可以在通道上發送的無誤資料的最大量)限制了透過晶體管傳輸的位元數量。由於基本物理和資訊理論的限制,計算速度受到電子在物質中移動的速度和可以發送的數據量的限制。當超級電腦被推向極限時,這些約束變得明顯。因此,「電腦在處理資料方面的能力與傳輸資料的能力之間存在顯著的不匹配」。

以Intel Core i 9 13900 K CPU 為例。它擁有24 個x 86 核心,基礎時鐘頻率為2.2 GHz,最高睿頻時鐘頻率為5.8 GHz。最糟的情況是光線需要在CPU 內總共傳播約52.0 毫米的距離。 CPU 的曼哈頓距離(即沿直角軸測量的兩點之間的距離)約為73.6 毫米。在CPU 的最高睿頻時鐘頻率5.8 GHz 下,光線可以在空氣中傳輸約51.7 毫米。這意味著在單一時鐘週期內,訊號幾乎可以在CPU 的任兩點之間完成一次往返。

然而,實際情況卻糟糕得多。這些測量使用的是光在空氣中的傳播速度,而訊號實際上是透過二氧化矽(SiO 2)傳輸。在5.8 GHz 的時鐘週期內,光在二氧化矽中可以傳播約26.2 毫米。而在矽(Si)中,光在5.8 GHz 的時鐘週期內只能傳播約15.0 毫米,略高於CPU 的長邊的一半。

Firedancer 團隊認為,近年來運算技術的發展更多是關於將更多核心整合到CPU 中,而不是提高它們的速度。當人們需要更高的效能時,他們被鼓勵購買更多硬件。在吞吐量是瓶頸的情況下,這在目前是有效的。而實際上的瓶頸是光速。這種自然限制導致了決策的癱瘓。對於任何一種優化,系統中的許多組件都沒有立即的回報,因為它們都沒有進行良好的優化。未經優化的部分會隨著時間的推移而惡化,因為它們可用的計算資源較少。那麼,現在該怎麼辦呢?

在高效能運算領域,一切最終都必須進行優化。結果是建立面向量化交易和量化研究的生產系統,以物理和資訊理論的極限運行在全球範圍內。這包括創建定製化網絡切換技術,以滿足這些物理限制的無鎖算法。 Jump 既是一家科技公司,也是一家交易公司。在科幻和現實的最前沿,Jump 和Solana 目前面臨的問題有著驚人的相似之處,Jump 正在開發Firedancer。

Firedancer 是什麼

Firedancer 是由Firedancer 團隊使用C 語言開發的全新獨立驗證器客戶端。 Firedancer 的設計考慮了可靠性,採用模塊化架構、最小的依賴性和廣泛的測試流程。它提出了對Solana Labs 客戶端的三個功能元件(網絡、執行時間和共識)進行重大改寫。每個等級都經過了最大效能的優化,因此客戶端的運作能力只受驗證器硬件的限制,而不會受到當前面臨的軟件效率不足所導致的效能限制。通過Firedancer,Solana 將能夠根據帶寬和硬件進行擴展。

Firedancer 的目標是:

  • 記錄和規範化Solana 協定(最終,人們應該能夠透過檢視檔案而不是Rust 驗證器代碼來建立一個Solana 驗證器);

  • 提高驗證器客戶端的多樣性;

  • 提高生態系的性能。

Firedancer 的工作原理

模組化架構

Firedancer 透過其獨特的模組化架構與目前的Solana 驗證器用戶端有所區別。與Solana Labs 的Rust 驗證器客戶端作為單一進程運行不同,Firedancer 由許多稱為「tiles」的獨立Linux C 進程組成。一個tile 是一個進程和一些內存。這種tile 架構是Firedancer 運作理念和提高穩健性和效率的方法的基礎。

進程是運行中程式的實例。它是現代操作系統的基本元件,代表一組指令的執行。每個行程都有自己的記憶空間和資源,操作系統會獨立分配和管理這些資源,不受其他行程的影響。進程就像是一個大工廠裡獨立的工人,使用自己的工具和工作空間來處理特定的任務。

在Firedancer 中,每個tile 都是具有特定角色的獨立流程。例如,QUIC tile 負責處理傳入的QUIC 流量,並將封裝的交易轉發到verify tile。 verify tile 負責簽章驗證,其他tile 也有類似的任務。這些tile 獨立且並發地運行,共同構成了整個系統的功能。獨立的Linux 進程可以形成小的、獨立的故障域。這意味著一個tile 的問題只會對整個系統產生最小的影響,或者說只會有很小的“影響範圍”,而不會立即危及整個驗證器。

Firedancer 架構的關鍵優勢是能夠在幾秒鐘內替換和升級每個tile,且無需任何停機時間。這與Solana Labs 的Rust 驗證器客戶端在升級之前需要完全關閉的要求形成鮮明對比。這種差異源於Rust 缺乏ABI(應用二進位介面)的穩定性,這導致無法在純Rust 環境中進行即時升級。而採用C 進程的方式,可以依靠C 運行時模型中的二進位穩定性,顯著減少與升級相關的停機時間。這是因為各個tile 在不同的工作空間中管理驗證器狀態。只要驗證器開機運行,這些共享記憶體物件就會持續存在。在重新啟動或升級過程中,每個tile 可以無縫地從離開的地方繼續處理任務。

整體而言,Firedancer 是根據NUMA 感知、基於tile 的架構來建構。在這個架構中,每個tile 使用一個CPU 核心。它具有高效能的tile 之間的訊息傳遞,優化了記憶體局部性、資源佈局和元件延遲。

網路處理

Firedancer 的網絡處理旨在處理Solana 網絡在升級到每秒千兆位元速度時的高強度需求。這個過程分為入站和出站活動。

入站活動主要涉及接收用戶的交易。 Firedancer 的效能非常重要,因為如果驗證器在處理資料包時落後,共識訊息可能會遺失。目前Solana 節點的操作帶寬約為0.2 Gbps,而Jump 節點記錄的最大帶寬峰值約為40 GBps。這種帶寬峰值突顯了一個強大且可伸縮的入站處理解決方案的需求。

出站活動包括區塊打包、區塊創建和發送碎片。這些步驟對Solana 網絡的安全高效運作至關重要。這些任務的效能不僅影響吞吐量,也影響網路的整體可靠性。

Firedancer 旨在解決Solana 以往在處理交易的點對點介面方面存在的問題。過去Solana 點對點介面的一個重大缺點是其在處理入站交易時缺乏擁塞控制。這個缺點導致了2021 年9 月14 日(17 小時)和2022 年4 月30 日(7 小時)的宕機。

作為回應,Solana 進行了幾次網絡升級,以正確處理高交易負載。 Firedancer 緊追在後,採用QUIC 作為其流量控制方案。QUIC 是一種多路復用的傳輸網路協議,是HTTP/3 的基礎。它在抵禦DDoS 攻擊和管理網路流量方面起著重要作用。然而,需要注意的是,在某些情況下,成本超過了收益。 QUIC 結合資料中心專用硬體用於緩解DDoS 攻擊,消除了對交易洪水攻擊的動機。

QUIC 的151 頁規格為開發帶來了相當大的複雜性。由於無法找到符合他們許可、效能和可靠性需求的現有C 庫,Firedancer 團隊自行建立了自己的實踐。 Firedancer 的QUIC 實現,被暱稱為fd_quic,引入了優化的資料結構和算法,以確保最小的記憶體分配和防止記憶體耗盡。

Firedancer 的自訂網路堆疊是其處理能力的核心。此堆疊從零開始設計,以利用接收端擴展(RSS)。 RSS 是一種硬加速的網路負載平衡形式,將網路流量分配到不同的CPU 核心,以增加網路處理的並行性。每個CPU 核心處理一部分傳入流量,幾乎沒有額外開銷。這種方法透過消除複雜的調度器、鎖和原子操作,優於傳統的基於軟件的負載平衡。

Firedancer 引入了一個新的訊息傳遞框架,用於組合高效能tile 的應用程式。這些tile 可以繞過受限於基於套接字的內核網絡,透過使用AF_XDP 來利用AF_XDP,一種專為高效能資料包處理進行優化的地址族。使用AF_XDP 使Firedancer 能夠直接從網路介面緩衝區讀取資料。

這種tile 系統在Firedancer 堆疊中實現了各種高效能運算概念,包括:

  • NUMA 感知- NUMA(非一致性存儲存取)是一種電腦內存設計,其中處理器訪問自己的內存比訪問與其他處理器關聯的內存更快。對於Firedancer 來說,具備NUMA 感知意味著客戶端能夠在多處理器配置中有效地處理記憶體。這對於高交易量處理非常重要,因為它優化了可用硬件資源的利用。

  • 緩存局部性- 緩存局部性指的是利用已經儲存在靠近處理器的緩存中的資料。這通常是一種時間局部性的變體(即最近訪問的數據)。在Firedancer 中,對緩存局部性的關注意味著它被設計成在最小化延遲和最大化速度的同時處理網路資料。

  • 無鎖並發- 無鎖並髮指的是設計演算法時不需要鎖定機制(如互斥鎖)來管理並發操作。對於Firedancer 來說,無鎖並發允許多個網路操作並行執行,而無需由於鎖定而導致延遲。無鎖並發增強了Firedancer 同時處理大量事務的能力。

  • 大頁面大小- 在內存管理中使用大頁面大小有助於處理資料集,減少頁面表查找和潛在的內存碎片化。對於Firedancer 來說,這意味著改進了記憶體處理的效率。這對於處理大量網絡數據非常有益。

建構系統

Firedancer 的建構系統遵循一組指導原則,以確保可靠性和一致性。它強調最小化外部依賴,並將建構過程中涉及的所有工具視為依賴項。這包括將每個依賴項(包括編譯器)固定到確切的版本。該系統的一個關鍵方面是在構建步驟期間進行環境隔離。環境隔離增強了可移植性,因為建置過程不受系統環境的影響。

為什麼Firedancer 的速度更快

先進的數據並行性

Firedancer 在加密任務(如ED 25519 簽名驗證)中採用了現代處理器內部可用的先進資料並行性。現代CPU 具有用於同時處理多個資料元素的單指令多資料(SIMD)指令,以及優化以每個CPU 週期運行多個指令的能力。將單一指令並行地作用於資料元素的陣列或向量通常在面積、時間和功耗上更有效率。在這方面,與純粹的處理速度提升相比,平行資料處理的改進可以主導吞吐量的提升。

Firedancer 使用資料平行性的一個領域是優化計算簽名驗證。這種方法允許同時處理數組或向量中的資料元素,以最大化吞吐量並最小化延遲。 ED 25519 實現的核心是伽羅瓦域運算。這種形式的運算非常適合密碼演算法和二元計算。在伽羅瓦域中,加法、減法、乘法和除法等運算是根據電腦系統的二元特性進行定義的。下面是一個由2 ^3定義的伽羅瓦域的例子:

唯一的問題是ED 25519 使用由2 ^(255-19)定義的伽羅瓦域。域元素可以視為從0 到2 ^(255-19)的數字。基本運算如下:

加法、減法和乘法幾乎是uint 256 _t 數學(即使用無符號整數進行計算,其中最大值為2 ^( 256-1)。除法計算是具有挑戰性的。普通的CPU 和GPU 不支援uint 256 _t數學,更不用說“幾乎uint 256 _t 數學”,更不用說異常困難的除法了。實現這種數學並使其高性能是一個關鍵問題,取決於我們能夠如何模擬這種數學運算。

Firedancer 的實現透過更靈活地處理數字來分解算術運算。如果我們應用普通長除法和乘法的原則,將數字從一列進位到下一列,我們可以並行處理這些列。最快模擬這種數學運算的方法是將uint 256 _t 表示為六個43 位元數字,並帶有一個9 位元的「進位」。這樣可以在CPU 上進行現有的64 位操作,同時為進位位提供足夠的空間。這種數字排列減少了頻繁進​​位傳播的需求,並使Firedancer 能夠更有效地處理大數字。

此實作透過將算術計算重新組織為並行化列求和來利用資料並行性。平行處理列可以加速整體運算,因為它將原本可能成為順序瓶頸的任務轉換為可並行化的任務。 Firedancer 也使用了向量化指令集,如AVX 512 和其IFMA 擴充(AVX 512-IFMA)。這些指令集允許處理上述伽羅瓦域算術,從而提高速度和效率。

Firedancer 的AVX 512 加速實現非常快速。在單一2.3 GHz Icelake 服務器核心上,每個核心的時鐘效能是其2022 年Breakpoint 演示的兩倍以上。此實現具有100% 的向量通道利用率和大規模資料並行化。這是Firedancer 團隊的另一個出色演示,由於光速延遲,與一次只能處理一件事情相比,同時進行獨立的並行任務要容易得多,即使使用了定制的硬件也是如此。

利用FPGA 實現高速網路通信

CPU 每個核心每秒可以處理約30, 000 個簽名驗證。雖然它們是一種高能效的選擇,但在大規模操作方面存在不足。這種限制源自於它們的順序處理方法。 GPU 將這種處理能力提升到每個核心每秒約1 百萬個驗證。然而,它們的功耗約為每個單位300 W,並且由於批次而具有固有的延遲。

FPGA 成為更好的選擇。它們與GPU 的吞吐量相匹配,但功耗顯著降低,每個FPGA 約為50 W。其延遲也低於GPU 的十毫秒延遲。 FPGA 以大約200 微秒的延遲提供了更響應的即時處理解決方案。與GPU 的批次不同,Firedancer 中的FPGA 以串流處理的方式單獨處理每個交易。 Firedancer 使用FPGA 的結果是,在功耗低於400 W 的情況下, 8 個FPGA 每秒可以處理800 萬個簽名。

團隊在Breakpoint 2022 展示了Firedancer 的ED 25519 簽名驗證流程。該過程涉及多個階段,包括在純RTL 管線中進行SHA-512 計算,並在自訂ECC-CPU 處理器管線中進行各種檢查和計算。基本上,Firedancer 團隊為他們的自訂處理器編寫了一個編譯器和彙編器,從RFC(請求評論)中獲取了Python 代碼,使用運算符重載的物件來產生機器碼,然後將機器碼放在ECC -CPU 之上。

值得注意的是,Firedancer 採用了AWS 加速器的形式因子樣式,以在穩健性和網絡連接性之間取得平衡。此選擇解決了與直接網路連接相關的挑戰,而這個特性在雲端供應商中通常受到限制。通過這種選擇,Firedancer 確保在雲端基礎設施的限制下,其先進能力能夠無縫整合。

我們必須認識到,不同的操作需要有實際的實體空間,而不僅僅是概念上的資料空間。 Firedancer 透過策略性地安排實體組件的位置,使其緊密且可重複使用。這種配置使Firedancer 能夠最大化其FPGA 的效率,在8 年前的機器上使用7 年前的FPGA 實現每秒800 萬筆交易。

網絡通訊中的基本挑戰是在全球範圍內廣播新交易

互聯網的點對點性質、有限的帶寬和延遲問題限制了實現使用網絡進行直接廣播等傳統方法的可行性。將資料以環形或樹狀結構分佈部分解決了這些問題,但在傳輸過程中資料包可能會遺失。

Reed-Solomon 編碼是解決這些問題的優選方案。它引入了資料傳輸冗餘(即奇偶校驗資訊)以恢復遺失的資料包。其基本概念是,兩個點可以定義一條直線,並且在這條直線上的任意兩個點可以重建原始資料點。透過基於資料點建立多項式,並將函數的不同點分佈在單獨的資料包中,只要接收方至少收到兩個資料包,就可以重構原始資料。

我們建構多項式是因為使用傳統的直線上的點的公式(y = mx + b)在計算上比較慢。 Firedancer 使用拉格朗日多項式(一種專門用於多項式建造的方法)來加速。它簡化了Reed-Solomon 編碼所需的多項式創建過程。它還將該過程轉化為了一種更有效率的矩陣-向量乘法,適用於更高階的多項式。這個矩陣具有高度結構化的特點,其模式以遞歸方式重複出現,使得這個模式的第一行能夠完全確定它。這種結構意味著有一種更快的方法來進行乘法計算。 Firedancer 使用了一種O(n log n)的方法,它在2016 年的一篇文章中介紹瞭如何使用這個矩陣進行乘法運算,這是目前已知的Reed-Solomon 編碼的最快理論方法。其結果是與傳統方法相比,以高效率的方式計算奇偶校驗資訊:

  • 每個核心的RS 編碼速度超過120 Gbps;

  • 每個核心的RS 解碼速度高達50 Gbps;

  • 這些指標均與目前約8 Gbps/核心RS 編碼(rust-rse) 進行比較。

使用這種優化的Reed-Solomon 編碼方法,Firedancer 可以比傳統方法快14 倍地計算奇偶校驗資訊。這使得數據編碼和解碼過程快速可靠,對於在全球範圍內保持高吞吐量和低延遲至關重要。

Firedancer 如何確保安全?

機會

所有的驗證者目前都使用基於原始驗證者客戶端的軟體。如果Firedancer 與Solana Labs 的客戶端不同,那麼Firedancer 可以改善Solana 的客戶和供應鏈多樣性。這包括使用類似的依賴和使用Rust 來開發他們的客戶端。

Solana Labs 和Jito 驗證者客戶端作為一個單獨的進程運行。一旦在生產環境中運行,為單體應用程式添加安全性是困難的。執行這些客戶端的驗證者將不得不關閉以進行純Rust 的即時安全升級。 Firedancer 團隊可以從一開始就建立安全架構來開發他們的新客戶端。

Firedancer 還具有從過往經驗中學習的優勢。 Solana Labs 在創業環境中開發了驗證者客戶端。這個快節奏的環境意味著Labs 需要快速行動,以便快速進入市場。這使得他們未來的開發前景堪憂。 Firedancer 團隊可以看看Labs 做了什麼,以及其他鏈上的團隊做了什麼,並詢問如果他們可以從頭開始開發驗證者客戶端,他們會做什麼不同。

挑戰

儘管與Solana Labs 的客戶端有所不同,但Firedancer 必須密切複製其行為。如果未能做到這一點,可能會引入一致性錯誤,從而成為安全風險。可以透過激勵一部分份額在兩個客戶端上運行來緩解這個問題,將Firedancer 的總份額保持在總份額的33% 以下的時間較長。無論如何,Firedancer 團隊都需要實現協議的完整功能集,無論其實現的難度或安全性如何。一切都必須與Firedancer 保持一致。因此,團隊不能孤立地開發代碼,並且必須根據Labs 客戶端的功能進行審查。由於缺乏規範和文檔,這種情況變得更加嚴重,這意味著Firedancer 必須引入協議中的低效率構造。

Firedancer 團隊還必須意識到他們正在使用C 語言開發他們的新客戶端。 C 語言沒有像Rust 等語言那樣本地提供內存安全性保證。 Firedancer 程式碼庫的主要目標是減少記憶體安全性漏洞的發生和影響。需要特別關注此目標,因為Firedancer 是一個快節奏的項目。 Firedancer 必須找到一種在不引入此類錯誤的情況下保持開發速度的方法。操作系統沙箱是將Tile 與操作系統隔離的實現。 Tile 只被允許存取其工作所需的資源和執行系統呼叫。由於Tile 具有明確定義的目的,並且Firedancer 團隊大部分開發了客戶端代碼,根據最小特權原則剝離了Tile 的權限。

實施深度防禦設計

所有軟件在某個時刻都會存在安全漏洞。從軟件將存在錯誤的前提出發,Firedancer 選擇限制任何一個漏洞的潛在影響。這種方法稱為深度防禦。深度防禦是一種使用各種安全措施來保護資產的策略。如果攻擊者侵入系統的一部分,存在額外的措施來阻止威脅影響整個系統。

Firedancer 的設計旨在減輕漏洞和利用階段之間的風險。例如,攻擊者很難利用記憶體安全漏洞。這是因為防止這類攻擊是經過深入研究的問題。在C 語言中,關於記憶體安全性的深入研究導致了一系列加固技術和編譯器功能,團隊在Firedancer 中使用了這些技術。即使攻擊者能夠繞過行業最佳實踐,也很難利用漏洞來破壞系統。這是由於Tile 隔離和操作系統沙箱的存在。

Tile 隔離是Firedancer 平行架構的結果。由於每個Tile 都運行在自己的Linux 進程中,它們都有明確的、單一的目的。例如,一個QUIC Tile 負責處理傳入的QUIC 流量,並將封裝的交易轉發到驗證Tile。然後,驗證Tile 負責進行簽名驗證。 QUIC Tile 和驗證Tile 之間的通訊是透過共用記憶體介面完成的(即Linux 進程可以在彼此之間傳遞資料)。兩個Tile 之間的共享記憶體介面充當隔離邊界。如果QUIC Tile 存在一個bug,允許攻擊者在處理惡意的QUIC 封包時執行任意代碼,它不會影響其他Tile。在一個單體進程中,這將導致立即被攻陷。如果攻擊者利用這個漏洞對多個驗證者進行攻擊,他們可能會對整個網路造成傷害。攻擊者可能會降低QUIC Tile 的效能,但Firedancer 的設計將其限制在QUIC Tile 上了。

操作系統沙箱是將Tile 與操作系統隔離的實現。 Tile 只被允許存取其工作所需的資源和執行系統呼叫。由於Tile 具有明確定義的目的,並且幾乎所有的代碼都是由Firedancer 團隊開發的,根據最小特權原則,Tile 的權限被剝減至最低限度。 Tile 被放置在自己的Linux 命名空間中,提供了對系統的有限視圖。這種狹窄的視圖防止了Tile 訪問大部分檔案系統、網路和在同一系統上運行的任何其他進程。命名空間提供了一個以安全為先的邊界。然而,如果攻擊者俱有提升權限的核心漏洞,仍然可以繞過這種隔離。系統呼叫介面是核心中從Tile 可達的最後一個攻擊向量。為了防止這種情況,Firedancer 使用seccomp-BPF 在核心處理系統呼叫之前過濾它們。客戶端可以將Tile 限制在一組選定的系統呼叫中。在某些情況下,可以過濾系統呼叫的參數。這一點很重要,因為Firedancer 可以確保read 和write 系統呼叫只對特定的檔案描述符操作。

採用嵌入式安全計畫

在Firedancer 的開發過程中,專注於在每個階段嵌入全面的安全程序。客戶端的安全程序是開發團隊和安全團隊之間持續合作的結果,為安全的區塊鏈技術樹立了新的標準。

這個過程始於自助模糊測試基礎設施。模糊測試是一種自動偵測崩潰或指示漏洞的錯誤條件的技術。通過對接受不可信用戶輸入的每個組件進行壓力測試,包括P2P接口(解析器)和SBPF 虛擬機,來進行模糊測試。在程式碼變更期間,OSS-Fuzz 保持持續的模糊覆蓋率。安全團隊還建立了一個專用的ClusterFuzzer 實例,用於持續的覆蓋引導模糊測試。開發人員和安全工程師也提供模糊測試的工具(即針對安全關鍵元件的特殊版本的單元測試)。開發人員還可以貢獻新的模糊測試,這些測試會自動接收和測試。目標是在進入下一個階段之前對所有部分進行充分的模糊測試。

內部程式碼審查有助於發現工具可能忽略的漏洞。在這個階段,重點放在高風險、高影響的組件。這個階段是一個回饋機制,為安全程序的其他部分提供回饋。團隊將所有的經驗教訓應用在這些審查中,用於提高模糊測試的覆蓋率,為特定的漏洞類別引入新的靜態分析檢查,甚至實施大規模的代碼重構,以排除複雜的攻擊向量。外部安全審查將由業界領先的專家和活躍的漏洞賞金計劃進行補充,包括在發布前和發布後。

Firedancer 也經歷了在各種測試網絡上的廣泛壓力測試。這些測試網絡將面臨各種攻擊和故障,例如節點複製、網路連接失敗、數據包洪氾和共識違規。這些網絡承受的負載遠遠超過主網上任何實際情況。

所以,這就引出了一個問題:Firedancer 目前的狀態如何?

Firedancer 的現狀如何,Frankendancer 又是什麼?

Firedancer 團隊正在逐步開發Firedancer,以模組化驗證器客戶端。這與他們對文件和標準化的目標一致。這種方法確保Firedancer 與Solana 的最新發展保持同步。這導致了Frankendancer 的創建。 Frankendancer 是一種混合客戶端模型,Firedancer 團隊將其開發的元件整合到現有的驗證器客戶端基礎架構中。這種開發過程允許逐步改進和測試新功能。

Frankendancer 就像將跑車置於交通中心。隨著更多組件的開發和瓶頸的消除,效能將不斷提升。這種模組化開發過程促進了可自訂和靈活的驗證器環境。在這裡,開發人員可以根據自己的需求修改或替換驗證器客戶端中的特定元件。

實際運作的是什麼

Frankendancer 實作了Solana 驗證器的所有網路功能:

  • 入站:QUIC、TPU、Sigverify、Dedup

  • 出站:區塊打包、建立/簽署/發送Shreds(Turbine)

Frankendancer 在Solana Labs 的Rust 運行時間和共識代碼之上使用了Firedancer 高效能的C 網絡代碼。

Frankendancer 的架構設計著重高階硬件優化。雖然它支援運行標準Linux 操作系統的低階雲端主機,但Firedancer 團隊正在為高核心數服務器優化Frankendancer。長期目標是利用雲端現有的硬件資源來提高效率和效能。此客戶端同時支援多個連接、硬件加速、用於負載分佈的隨機化流量導向(確保網路流量均勻分佈)以及為各個組件之間提供額外安全性的多個進程邊界。

技術效率是Frankendancer 的基石。該系統避免在關鍵路徑上進行記憶分配和原子操作,所有分配在初始化時都經過NUMA 優化。這種設計確保了最大的效率和性能。此外,非同步和遠端檢查系統組件的能力,以及對Tile 的靈活管理(非同步啟動、停止和重新啟動),為系統增加了一層穩健性和適應性。

Frankendancer 的表現如何?

Frankendancer 每個Tile 在網路入站端可以處理每秒1, 000, 000 個交易(TPS)。由於每個Tile 使用一個CPU 核心,因此此效能與使用的核心數成線性比例。 Frankendancer 通過僅使用四個核心,並充分利用每個核心上的25 Gbps 網絡接口卡(NIC)來實現了這一成就。

在網路出站操作方面,Frankendancer 透過其Turbine 優化取得了顯著的改進。目前的標準節點硬件每個Tile 實現了6 Gbps 的速度。這包括了在分片(即如何將區塊資料分割並發送到驗證者的網路中)方面的大幅速度提升。與目前的標準Solana 節點相比,Frankendancer 在沒有Merkle 樹的情況下顯示了約22% 的分片速度提升,而在使用Merkle 樹時幾乎翻了一番。這對於當前驗證者的區塊傳播和交易接收效能來說是巨大的改進。

Firedancer 的網絡效能顯示它已達到硬件極限,實現了與當今標準驗證器硬件相比的最大效能。這標誌著一個重要的技術里程碑,展示了客戶有效且有效率地處理極端工作負載的能力。

Frankendancer 已上線測試網

Frankendancer 目前正在測試網路上進行質押、投票和出塊。它與Solana Labs 和Jito 約2900 個其他驗證者相容共存。這個實際部署展示了Firedancer 在普通硬件上的強大效能。目前,它部署在一台Equinix Metal m 3.large.x 86 伺服器上,配備AMD EPYC 7513 CPU。許多其他驗證者也使用相同類型的伺服器。它提供了一種經濟實惠的解決方案,按需定價根據地點不同而有所變化,費率在每小時3.10 美元至4.65 美元之間。

Firedancer 朝著主網上線的進展為節點硬件帶來了幾個可能性:

  • 目前驗證器硬件可以實現更高的每個節點效能容量;

  • Firedancer 的高效性使驗證者可以使用更經濟實惠、規格較低的硬件,同時保持類似的性能水平;

  • Firedancer 的設計使其能夠利用硬體和帶寬的進步。

這些發展,以及其他一些倡議,如Wiredancer(即Firedancer 團隊對硬件加速的實驗)和基於Rust 的模塊化運行時/SVM,使Firedancer 成為一種前瞻性的解決方案。

Firedancer 的進展也引發了關於是否讓驗證者在Firedancer 旁邊運行Solana Labs 客戶端的討論,稱為平行運行。這種方法可以透過充分利用兩個客戶端的優勢,並減輕任一客戶端在整個網絡中的潛在影響,從而最大程度地提高網絡的活躍度。此外,這也引發了像Jito 這樣的計劃是否會考慮分叉Firedancer 的推測。這可能會進一步優化MEV 提取和交易處理效率。只有時間能告訴我們。

結論

開發人員通常將操作視為佔據資料空間而不是實體空間。在光速作為自然限制的情況下,這種假設會導致系統變慢,無法正確優化其硬體。在一個高度對抗性和競爭性的環境中,我們不能簡單地將更多的硬件投入到Solana 中,並期望它表現得更好。我們需要進行優化。 Firedancer 革新了驗證者客戶端的結構與操作方式。通過建立一個可靠、高度模組化和高效能的驗證者客戶端,Firedancer 團隊正在為Solana 的大規模採用做準備。

無論您是初級開發人員還是普通的Solana 用戶,了解Firedancer 及其意義是至關重要的。這項技術壯舉使目前市場上最快、最高效能的區塊鏈變得更加出色。 Solana 旨在成為一個高吞吐量、低延遲的全球狀態機。 Firedancer 是朝著完善這些目標邁出的巨大一步。


安全
Solana
技術
歡迎加入Odaily官方社群