一份性能報告
CoinGecko 於 5 月 17 日發佈的 《Fastest Chains》報告中顯示,Solana 是大型區塊鏈中速度最快的,最高日均真實 TPS 達到 1, 054 (已經去除了投票交易),Sui 是第二快的區塊鏈,最高日均真實 TPS 達到 854 ,BSC 排名第三,但達到的真實 TPS 還不到 Sui 的一半。
從這份報告可以看出,性能最好的 Solana 和 Sui 都是非 EVM 兼容的區塊鏈,更進一步, 8 個非 EVM 兼容區塊鏈的平均真實 TPS 爲 284 , 17 個 EVM 兼容區塊鏈和以太坊 Layer 2 的平均 TPS 僅爲 74 ,非 EVM 兼容區塊鏈的性能是 EVM 兼容區塊鏈的 4 倍左右。
本文將會探討 EVM 兼容區塊鏈的性能瓶頸,並揭開 Solana 的性能之道。
EVM 兼容區塊鏈的性能瓶頸
首先,我們泛化 EVM 區塊鏈到一般區塊鏈。一般區塊鏈想要提升 TPS,一般有如下幾種做法:
提升節點性能:通過堆硬件資源去提升節點性能,節點的硬件要求會影響去中心化程度,例如以太坊推薦配置,Cpu 4 核,內存 16 G,網絡帶寬 25 Mbps,普通用戶級設備都能達到,去中心化程度較高;Solana 推薦配置相對更高 Cpu 32 核,內存 128 G,網絡帶寬 1 Gbps,專業級設備才能達到,去中心化程度一般;
改進底層協議:包括網絡協議、密碼學、存儲等,改進區塊鏈底層協議不改變區塊鏈自身的屬性,也不影響區塊鏈的運行規則,可以直接提升區塊鏈的性能,但底層技術關注度低,目前研究領域沒有重大突破;
擴大區塊:增加區塊的大小可以包含更多的交易,進而提高區塊鏈的交易吞吐量,例如比特幣現金(BCH)將區塊從 1 MB 擴大到 8 MB,之後擴展到 32 MB。但擴大區塊的同時也會增大傳播延遲引發安全威脅, 比如導致分叉可能性增大和 DDoS 攻擊;
共識協議:共識協議保證了區塊鏈各個節點對於區塊鏈的狀態更新達成一致,是區塊鏈最重要的一重安全門,已經用於區塊鏈的共識機制有 PoW、PoS、PBFT 等。爲了滿足可擴展性的需求,一般高性能公鏈都會改進共識協議,並結合自身特殊機制,例如 Solana 基於 PoH 的共識機制,Avalanche 基於雪崩的共識機制;
交易執行:交易執行只關心單位時間內處理的交易或計算任務數量,以太坊等區塊鏈採用串行方式執行區塊中的智能合約交易,在串行執行中,CPU 的性能瓶頸是非常明顯的,嚴重製約了區塊鏈的吞吐量。一般高性能公鏈都會採用並行執行的方式,有的還會提出更利於並行的語言模型來構建智能合約,例如 Sui Move。
對於 EVM 區塊鏈而言,由於限定了虛擬機,即交易的執行環境,因此最大的挑戰在於交易執行。EVM 主要有兩個性能問題:
256 位:EVM 設計成一臺 256 位的虛擬機,目的是爲了更易於處理以太坊的哈希算法,它會明確產生 256 位的輸出。然而,實際運行 EVM 的計算機則需要把 256 位的字節映射到本地架構來執行,一個 EVM 操作碼會對應多個本地操作碼,從而使得整個系統變得非常低效和不實用;
缺少標準庫:Solidity 中沒有標準庫,必須自己用 Solidity 代碼實現,雖然 OpenZeppelin 使這一情況得到一定改善,他們提供了一個 Solidity 實現的標準庫(通過將代碼包含在合約中或是以 delegatecall 的形式調用部署好的合約),但是 EVM 字節碼的執行速度遠不如預編譯好的標準庫。
如果站在執行優化的角度,EVM 還存在兩大不足:
難以做靜態分析:區塊鏈中的並行執行意味着同時處理不相關的交易,把不相關的交易看作互不影響的事件。實現並行執行主要挑戰是確定哪些交易是不相關的,哪些是獨立的,目前部分高性能公鏈會預先對交易做靜態分析,EVM 的動態跳轉(dynamic jumps)機制導致代碼很難被靜態分析;
JIT 編譯器不成熟:JIT 編譯器(Just In Time Compiler)是現代虛擬機常用的優化手段,JIT 最主要的目標是把解釋執行變成編譯執行。在運行時,虛擬機將熱點代碼編譯成與本地平臺相關的機器碼,並進行各種層次的優化。目前雖然有 EVM JIT 的項目,但還處於實驗階段,不夠成熟。
因此從虛擬機的選擇上,高性能公鏈更多采用的是基於 WASM, eBPF 字節碼或 Move 字節碼的虛擬機,而非 EVM。例如 Solana 使用自己獨特的虛擬機 SVM 和基於 eBPF 的字節碼 SBF。
Fastest Chains:Solana
Solana 因其 PoH(Proof of History )機制以及低延遲高吞吐量而聞名,是最著名的“以太坊殺手”之一。
PoH 的核心是一個類似於可驗證延遲函數(VDF)的簡單哈希算法。Solana 使用一個序列預映像抵抗的哈希函數(SHA-256)實現,該函數持續運行,用一次迭代的輸出作爲下一次的輸入。這個計算在每個驗證者的單個核心上運行。
雖然序列生成是順序和單線程的,但驗證可以並行進行,從而在多核系統上實現高效的驗證。雖然哈希速度存在上界,但硬件改進可能提供額外的性能提升。
Solana 共識流程
PoH 機制作爲可靠且無需信任的時間源,在網絡內創建可驗證且有序的事件記錄。基於 PoH 的計時允許 Solana 網絡以預定且透明的方式輪換領導者。這種輪換以固定的時間間隔進行,爲 4 個槽(slot),每個槽目前設置爲 400 毫秒。這種領導者輪換機制確保每個參與的驗證者都有公平的機會成爲領導者,是 Solana 網絡維護去中心化和安全的重要機制,防止任何單個驗證者在網絡上獲得過多的權力。
每個槽的時間段,領導者提出一個新塊,其中包含從用戶收到的交易。領導者驗證這些交易,打包成一個區塊,然後將該塊廣播到網絡的其餘驗證者。這種提議和廣播區塊的過程稱爲區塊生產,網絡中的其他驗證者必須對區塊的有效性進行投票。驗證者檢查區塊的內容,確保交易有效並遵守網絡規則。如果一個區塊獲得了絕大多數權益權重的投票,則該區塊被視爲已確認。此確認過程對於維護 Solana 網絡安全和防止雙花至關重要。
當前領導者的時間段結束,網絡不會停止或等待區塊確認,而是會移動到下一個時間段,爲後續領導者提供區塊生產的機會,整個過程重新開始。這種方法可確保 Solana 網絡保持高吞吐量並保持彈性,即使某些驗證者遇到技術問題或離線也是如此。
Solana 性能之道
由於 Solana 網絡可以提前確認領導者,因此 Solana 不需要公共內存池來保存用戶的交易。當用戶提交交易時,RPC 服務器將其轉換爲 QUIC 數據包,並立即將其轉發領導者的驗證者。這種方法被稱爲 Gulf Stream,它允許快速的領導者轉換和交易的預執行,減少了其他驗證者的內存負載。
Solana 的區塊數據帶入到內核空間,然後傳遞給 GPU 以進行並行簽名驗證,一旦 GPU 上驗證了簽名,數據就會傳遞給 CPU 進行交易執行,最後返回到內核空間做數據持久化。這種將數據劃分爲不同硬件部件的多個處理過程,稱爲流水線技術,能最大化硬件利用率,加快區塊的驗證和傳輸速度。
由於 Solana 的交易顯式指定訪問哪些賬戶,Solana 的交易調度器可以利用讀寫鎖機制並行執行交易。Solana 交易調度器每個線程都有自己管理的隊列,順序且獨立地處理交易,嘗試鎖定(讀寫鎖)交易的賬戶並執行交易,賬戶衝突的交易會稍後執行。這種多線程並行執行技術稱爲 Sealevel。
領導者傳播區塊的過程,將 QUIC 數據包(可選地使用糾刪碼)劃分爲較小的數據包,並將它們分發給具有分層結構的驗證者。這種技術稱爲 Turbine,主要是減少領導者的帶寬使用。
驗證者在投票過程中,使用一種針對分叉投票的共識機制。驗證者無需等待投票即可繼續進行區塊生產;相反,區塊生產者會持續監控有效的新投票,並實時將其納入當前區塊中。這種共識機制稱爲 TowerBFT,通過實時合併分叉投票,Solana 確保了更高效、更精簡的共識流程,從而提高了整體性能。
針對區塊的持久化過程,Solana 開發了 Cloudbreak 數據庫,通過以特定方式對賬戶數據結構進行分區,以受益於順序操作的速度並採用內存映射文件,從而最大限度地提高 SSD 的效率。
爲減輕驗證者負擔,Solana 將數據存儲從驗證者轉移到名爲 Archiver 的節點網絡。交易狀態的歷史記錄被拆分爲很多碎片,並使用糾刪碼技術。Archiver 用於存儲狀態的碎片,但不參與共識。
總結
Solana 的願景是成爲一個其軟件按照硬件的速度擴展的區塊鏈,因此 Solana 充分利用當今計算機中可用的所有 CPU、GPU 和帶寬能力,以最大化性能,理論最大速度能達到 65, 000 TPS。
正是因爲 Solana 的高性能和擴展性,讓 Solana 成爲處理高頻交易和複雜智能合約的首選區塊鏈平臺,無論是年初的 DePIN/AI 賽道,還是近期火熱的 Meme 賽道,Solana 都展現出巨大的潛力。
以太坊 ETF 推出後,Solana 也成爲下一個 ETF 呼聲最大的加密貨幣,儘管 SEC 仍將 Solana 列爲證券,短時間內不會批准其他加密貨幣 ETF。但在加密市場,共識即價值,Solana 的共識或許正變得和比特幣與以太坊一樣堅不可摧。