一份性能報告
CoinGecko 於5 月17 日發布的《Fastest Chains》報告中顯示,Solana 是大型區塊鏈中速度最快的,最高日均真實TPS 達到1,054(已經去除了投票交易),Sui 是第二快的區塊鏈,最高日均真實TPS 達到854,BSC 排名第三,但達到的真實TPS 還不到Sui 的一半。
從這份報告可以看出,表現最好的Solana 和Sui 都是非EVM 相容的區塊鏈,更進一步,8 個非EVM 相容區塊鏈的平均真實TPS 為284,17 個EVM 相容區塊鏈和以太坊Layer2 的平均TPS 僅為74,非EVM 相容區塊鏈的效能是EVM 相容區塊鏈的4 倍左右。
本文將會探討EVM 相容區塊鏈的效能瓶頸,並揭開Solana 的效能之道。
EVM 相容區塊鏈的效能瓶頸
首先,我們泛化EVM 區塊鏈到一般區塊鏈。一般區塊鏈想要提升TPS,一般有以下幾種做法:
- 提升節點效能:透過堆硬體資源去提升節點效能,節點的硬體需求會影響去中心化程度,例如以太坊推薦配置,Cpu 4核,記憶體16G,網路頻寬25Mbps,普通用戶級裝置都能達到,去中心化程度較高;Solana 建議配置相對較高Cpu 32核,記憶體128G,網路頻寬1Gbps,專業級設備才能達到,去中心化程度一般;
- 改進底層協議:包括網路協議、密碼學、儲存等,改進區塊鏈底層協議不改變區塊鏈本身的屬性,也不影響區塊鏈的運作規則,可以直接提升區塊鏈的效能,但底層技術關注度低,目前研究領域沒有重大突破;
- 擴大區塊:增加區塊的大小可以包含更多的交易,進而提高區塊鏈的交易吞吐量,例如比特幣現金(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 的共識或許正變得和比特幣與以太坊一樣堅不可摧。