media Image
深入探討 Solana - Gulf Stream
Back Icon Image

引言

在上一篇文章中,我們介紹了使用者如何將交易打包並通過 RPC 節點送出。接下來,我們將深入探討交易從 RPC 端點送出後,如何流向 Solana 區塊鏈的領導者 (Leader),並剖析其背後的技術原理。

本文將聚焦 Solana 的核心技術,包括:RPC 節點、無 mempool 設計、領導者日程表、Stake-Weighted Quality of Service (SWQoS) 機制,以及 QUIC 網絡協議,解釋這些技術如何協同運作,推動 Solana 成為高效、快速的區塊鏈平台。

提醒讀者:如果您尚未閱讀過或想先了解 Solana 的基本運作流程,建議先參考「由 Transaction 的生命週期看 Solana 的底層架構」,這將有助於您更好地理解本篇深入探討的技術細節。


1. RPC 節點:與網絡互動的門戶

在 Solana 網絡中,RPC 節點(Remote Procedure Call nodes)是用戶與區塊鏈互動的主要途徑。這些節點運行著與完整驗證者相同的軟件,但配置略有不同,允許它們模擬交易並保持與網絡狀態的同步。至今為止,Solana 網絡上已有超過 4,000 個 RPC 節點。

1.1 RPC 節點的角色與特點

  • 與驗證者節點的區別RPC 節點與完整驗證者節點不同,它們不持有任何質押量。因此,它們無法參與投票或生成區塊。在大多數其他區塊鏈中,驗證者節點和 RPC 節點通常是合而為一的,既負責驗證交易,也提供數據訪問服務,而 Solana 將這兩者分離。
  • 運行模式由於 RPC 節點不參與質押獎勵,它們的經濟模式也與驗證者節點不同。許多 RPC 節點專門為開發者提供穩定且高效的付費服務,方便開發者與區塊鏈進行互動。

1.2 Solana 的四個主要 cluster

Solana 擁有四個主要的 cluster,分別為 LocalnetTestnetDevnetMainnet-Beta,這些 cluster 滿足了不同的網絡需求:

  • Localnet本地開發環境,通常用於開發人員的個人測試。
  • TestnetSolana 官方測試新版本的環境。Testnet 經常處於更新階段,可能會出現不穩定的情況,適合測試實驗性的網絡改進。
  • Devnet提供了相對穩定的測試環境,主要用於開發者測試應用程式。這些測試不會影響主網運行,開發者能夠在不牽涉實際資產的情況下進行用戶測試。
  • Mainnet-Beta唯一具備實際價值的網絡,所有的交易和代幣均基於真實資產,這是運行正式應用的生產環境。

2. 無 Mempool 設計:從 Gossip 到 Gulf Stream

2.1 Gossip:傳統的交易信息傳播方式

在大多數傳統區塊鏈中,Gossip 是信息傳播的主要方式。這個過程可以比作人與人之間的口耳相傳:當一筆交易發生時,它會像消息一樣「傳遍整個網絡」。每個驗證者節點需要將這些交易分享給其他節點,彼此告知有哪些交易正在等待確認。

這種傳播方式的主要問題在於,消息需要遍佈所有節點,會造成延遲和資源的浪費。就像一個消息傳遞到最後一個人時,可能已經過了很長時間,這會導致交易的確認速度變慢,降低了整體的網絡效率。

2.2 Gulf Stream:Solana 的創新交易流設計

相比之下,Solana 網絡中的 Gulf Stream 是一種更高效的交易處理機制,類似於「專線配送」。在 Solana 網絡中,交易不會先暫存於 mempool 等待,而是直接送往即將負責生成區塊的領導者節點。

這個過程可以比作網購時,貨物從倉庫直接配送到快遞員手中,跳過了中間的運送中心環節。這樣的設計使得交易處理速度大大加快,領導者節點能夠快速獲取需要打包的交易,並生成區塊。

這樣的無 Mempool 設計讓 Solana 能夠同時處理大量交易,避免了傳統區塊鏈中由於交易排隊等待處理所導致的延遲問題。相比之下,傳統區塊鏈就像一個擁擠的排隊窗口,所有的交易都要先進入 mempool 排隊等待,這個過程往往會拖慢網絡的整體效率。


3. 領導者日程表 (Leader Schedule)

在 Solana 網絡中,領導者排班表 就像是系統的「值日生排班表」,每個驗證者根據他們質押的代幣數量,獲得機會在特定時段內成為網絡的「領導者」。這些領導者負責打包和處理交易,並生成區塊。

3.1 領導者如何被選中?

Solana 根據驗證者的質押代幣數量來選擇領導者,質押越多,成為領導者的機會越大。當驗證者被選為領導者後,他們會持續負責 4 個 slot(每個 slot 持續 400 毫秒)。這意味著每位領導者的工作時間為 1.6 秒,這段時間內他們需要打包交易並生成區塊。

3.2 領導者的準備過程

在開始負責區塊生成之前,領導者會有約 兩個區塊的準備時間,這段時間讓他們提前做好交易處理的準備。這樣可以確保在正式開始時,交易能夠以最快的速度被處理。

3.3 領導者排班的優勢

這種領導者輪值機制使得 Solana 可以實現極高的交易吞吐量。每個 slot 都有專門的領導者負責區塊生成,並且領導者可以連續處理 4 個 slot 的交易。這樣的安排減少了驗證者之間的競爭,確保了網絡的流暢運行,並避免了資源浪費。


4. Stake-Weighted Quality of Service (SWQoS):抵禦垃圾交易的新機制

為了有效抵禦垃圾交易(spam attacks)以及加強對 Sybil 攻擊的防禦,Solana 在 2024 年初引入了 Stake-Weighted Quality of Service (SWQoS) 機制。這個新機制通過質押數量來調整交易消息的優先級,讓擁有更多質押代幣的驗證者在網絡中獲得更大的帶寬,從而優先將其交易消息傳送給領導者處理。

4.1 如何運作

SWQoS 模型中,網絡中的交易消息會根據驗證者的質押量進行排序。擁有更高質押份額的驗證者能夠獲得更高的網絡通道容量,這意味著他們的交易消息能更快速且穩定地傳送給領導者並納入區塊中。

這種機制的設計目的是防止垃圾交易充斥網絡。就像一場演唱會門口的安檢處,VIP 持票者擁有更快的通道,而那些沒有優先權的人則需要排隊等待。Solana 的 SWQoS 就是通過這種質押優先級,確保網絡資源能夠被合理使用,防止無價值的垃圾交易占據網絡帶寬。

4.2 驗證者與 RPC 節點的合作機制

SWQoS 不僅影響驗證者,也影響了 RPC 節點的運行模式。驗證者可以通過租賃其質押加權的網絡傳輸容量給 RPC 節點,來獲取額外的收益。作為回報,RPC 節點可以獲得更高的帶寬,從而提高交易被納入區塊的效率。

在具體運行中,領導者的網絡容量被劃分為兩個部分:

  • 80% 容量(大約 2,000 個連接)是專門為擁有質押的驗證者保留的,這部分容量優先處理質押量較高的驗證者所發送的交易消息。
  • 20% 容量(大約 500 個連接)則用來處理來自非質押驗證者和其他交易消息。

這種設計有效地確保了網絡資源的公平分配,同時大幅降低了垃圾交易攻擊的可能性。

4.3 SWQoS 的影響與實踐

引入 SWQoS 後,Solana 生態系統的交易運行機制發生了根本性的變化。這種質押加權的傳輸優先級機制,讓垃圾交易在網絡中難以橫行,因為攻擊者必須投入大量資源才能進行有效攻擊。同時,這一機制也提高了將交易轉發給領導者的門檻,確保真正有價值的交易能快速處理。

如果您想進一步了解如何設置和配置 SWQoS 相關的權重連接,請參考文章附錄中的設置說明(詳見文章最後)。

截圖 2024-09-02 上午11.20.19.png

5. QUIC 網絡協議:提升交易傳輸效率

QUIC 是一種基於 UDP 的現代網絡協議,旨在加快數據傳輸速度,並提高連接的可靠性和安全性。它結合了 UDP 的快速性和 TCP 的可靠性,支持低延遲的連接建立、數據加密、以及多路徑數據傳輸等特性。

5.1 為什麼 Solana 採用 QUIC?

在 2022 年底,Solana 採用了 QUIC 來解決高頻交易和垃圾交易攻擊的挑戰。傳統的 TCP 協議在高頻區塊鏈環境中表現出延遲高、恢復慢等問題,而 QUIC 提供了更快速和穩定的網絡通信方式。這使得 Solana 能夠在網絡負載高峰期保持其高效的交易處理能力,同時加強對垃圾交易的抵禦能力。

Takeaways:

T1. 高效交易處理

Solana 使用領導者排班和 Gulf Stream 機制,以更高效的方式處理大量交易,避免傳統 mempool 的延遲問題。

T2. SWQoS 提升安全性

SWQoS 機制根據質押量優先處理交易,有效抵禦垃圾交易,並為驗證者提供額外收益機會。

T3. QUIC 協議加速傳輸

Solana 採用 QUIC 協議,減少延遲並提高穩定性,使交易在高負載時也能快速處理。


附錄 : 建置 RPC 與驗證者節點的權重連接

要在 Solana 網絡中建立有效的 RPC 節點與驗證者節點的權重連接,必須正確配置這兩者的相關參數。以下是具體的配置方法:

配置驗證者節點

在驗證者節點上,使用 --staked-nodes-overrides 旗標指定一個 YAML 文件的路徑,該文件包含分配給特定 RPC 節點的權重映射,格式如下:

staked_map_id:
  <pubkey_of_RPC_A>: <lamports_value_A>
  <pubkey_of_RPC_B>: <lamports_value_B>
				.
			  .
			  .
  <pubkey_of_RPC...>: <lamports_value...>
  • pubkey_of_RPC:RPC 節點的公鑰。
  • lamports_value:以 lamports 為單位的數值,表示驗證者希望分配給該 RPC 節點的權重。

例如,如果驗證者為某個 RPC 節點分配了一百萬 SOL 的權重,這相當於該 RPC 節點在網絡中擁有一百萬 SOL 的權重。這些配置更改可以動態應用,無需重啟驗證者節點,因為 YAML 文件可以隨時更新並重新加載。

配置 RPC 節點

在 RPC 節點上,使用 --rpc-send-transaction-tpu-peer 旗標來將交易轉發給特定的領導者驗證者節點。具體命令格式為:

--rpc-send-transaction-tpu-peer HOST:PORT
  • HOST:指定驗證者節點的 IP 地址。
  • PORT:驗證者節點的 QUIC TPU 端口。該端口號是 -dynamic-port-range 的最小值加上 9。例如,如果 -dynamic-port-range 設置為 8000-8100,則 QUIC TPU 端口為 8009

這些設置可以幫助建立和管理 RPC 與驗證者節點之間的權重連接,從而提高 Solana 網絡中的交易處理效率。

原文連結:深入探討 Solana - Gulf Stream