Solana RPC 節點:設置、提供者與最佳實踐
Complete guide to Solana RPC nodes. Learn how they work, compare top providers like Helius and QuickNode, and fix rate limit errors for production dAp...
Solana RPC 節點提供應用程式用於與網路通訊的讀取、提交和訂閱介面。提供者功能、限制、定價、硬體要求和效能數據會隨時間變化,因此生產決策應根據當前文件和工作負載測試進行驗證。
最後更新:2025 年 7 月
Solana 的公共端點可能對開發有用,但並非萬無一失的生產服務保證。如果 dApp 返回 429 錯誤、帳戶查詢停滯或在負載下出現提交問題,其 RPC 路徑是除了交易構建、費用、交割合約、網路和集群狀態之外,需要調查的一個組成部分。
本指南涵蓋了 Solana RPC 節點是什麼、它與驗證者節點有何不同、請求如何在系統中流動、從何處獲取公共端點 URL、哪些 RPC 方法最重要、如何透過 @solana/web3.js 連接、應評估哪些託管提供者、自行託管實際上需要什麼,以及如何修復您可能已經看到的速率限制錯誤。
重點摘要: 開發用途請使用免費的 Solana 基金會公共端點。生產環境請使用託管提供者,例如 Helius、QuickNode、Alchemy 或 Triton One。自行託管提供更多操作控制權,但仍需要容量規劃、存取策略、監控和當前的硬體指南。
跳至:
- 什麼是 Solana RPC 節點?
- RPC 節點 vs. 驗證者節點
- Solana RPC 節點如何運作
- Solana RPC 節點的類型
- RPC 節點品質為何重要:DeFi、NFTs 與 dApp 效能
- 最佳 Solana RPC 節點提供者
- 使用 @solana/web3.js 連接您的應用程式
- Solana RPC 方法:您可以查詢的內容
- 如何運行您自己的 Solana RPC 節點
- 常見 Solana RPC 錯誤及其修復方法
- 常見問題
- 選擇適合您的 Solana RPC 策略
什麼是 Solana RPC 節點?
Solana RPC 節點是一個實現 Solana JSON-RPC API 的伺服器,接受來自客戶端應用程式的請求並回傳區塊鏈狀態資料作為回應。dApp、錢包、區塊瀏覽器和自動化腳本使用這些節點來讀取帳戶餘額、提交交易以及訂閱鏈上事件,而無需維護本地分類帳副本。
歷史資料引述了 Solana 理論上的吞吐量接近每秒 65,000 TPS,以及目標的插槽(slot)持續時間接近 400 毫秒。兩者都不是保證的實際結果:交易定義、跳過的插槽、投票流量、工作負載、集群狀態和軟體版本都會影響觀察到的效能。目標的頻率和帳戶狀態的數量仍然對 RPC 基礎設施提出了嚴峻的要求。
遠端程序呼叫 (RPC) 是一種通訊模式,其中一台機器的程式可以呼叫另一台機器的函式,就如同該函式是本地函式一樣,網路的複雜性被抽象化了。您的 dApp 可以向遠端節點查詢帳戶狀態和提交交易,而不是維護自己的分類帳副本。Solana 使用 JSON-RPC 2.0 作為其線路協議:一種輕量級格式,透過 HTTP 或 WebSocket 按方法名稱路由呼叫,而不是像 REST API 那樣按基於資源的 URL 路徑。
Solana 基金會透過 https://api.mainnet-beta.solana.com 和用於 devnet 和 testnet 的對應 URL 維護免費的公共端點。這些端點對每個 IP 位址實施速率限制。當您的應用程式超過這些限制時,它會收到 HTTP 429 請求過多錯誤,這會在負載下導致間歇性故障和使用者體驗下降。
RPC 節點 vs. 驗證者節點:理解差異
RPC 節點透過 JSON-RPC API 向外部客戶端提供區塊鏈資料。驗證者節點參與共識並投票決定區塊的有效性。這是 Solana 上的兩種主要節點類型,它們服務於不同的目的。
| 屬性 | RPC 節點 | 驗證者節點 |
|---|---|---|
| 主要角色 | 透過 JSON-RPC API 向外部客戶端提供區塊鏈資料 | 參與 Tower BFT 共識;在每個插槽對區塊有效性進行投票 |
| 共識參與 | 無 | 是 — 在每個插槽進行投票 |
| 質押 / 獎勵 | 無需質押;無區塊獎勵 | 需要質押 SOL;賺取 SOL 質押獎勵 |
| RAM 需求 | 最低 256 GB(保存完整的帳戶狀態以回應查詢) | 較低的 RAM;優先考慮低延遲網路進行投票 |
| 存取方式 | 透過 HTTP 或 WebSocket 端點 URL | 以投票帳戶的公鑰識別 |
驗證者節點參與 Tower BFT 共識,這是一種基於權益證明 (Proof-of-Stake) 的投票機制。歷史證明 (Proof of History, PoH),Solana 的加密排序機制(而非其共識協議),在投票之前確立排序。Tower BFT 是共識層;PoH 處理時間記錄。
Solana 的交易轉發協議 Gulf Stream,直接將交易發送給當前和即將到來的領導者節點,繞過了其他區塊鏈使用的內存池。驗證者處理此轉發過程。RPC 節點則不然。
運行 RPC 節點不需要質押 SOL。有些營運商在同一台實體機器上同時運行驗證者和 RPC 功能,但這兩種角色在邏輯上仍然是獨立的:一個在共識中投票,另一個為客戶端查詢提供服務。對於自行託管 RPC 節點的硬體要求,RAM 和儲存空間的需求比僅運行驗證者要高得多。
Solana RPC 節點如何運作:架構與資料流程
Solana RPC 節點維護分類帳和帳戶狀態的本地副本,並向發送有效 JSON-RPC 請求的任何客戶端提供該資料。
JSON-RPC 請求生命週期
- 客戶端應用程式(dApp、錢包或腳本)向 RPC 節點的端點 URL 發送 HTTP POST 請求或 WebSocket 訊息。
- 請求主體包含一個 JSON-RPC 2.0 負載,具有四個欄位:
jsonrpc、id、method、params。 - RPC 節點接收請求,並根據
method欄位將其路由到適當的內部處理程序。 - 節點查詢其本地分類帳副本或帳戶狀態存儲以獲取請求的資料。
- 節點回傳一個 JSON 編碼的響應,其中包含請求的資料或結構化的錯誤物件。
一個具體的 getBalance 範例:
// Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "getBalance",
"params": ["YourPublicKeyBase58Here", {"commitment": "confirmed"
}
// Response
{
"jsonrpc": "2.0",
"result": {
"context": {"slot": 285823400},
"value": 5000000000
},
"id": 1
}
// 注意:value 以 lamports 為單位。除以 1,000,000,000 即可轉換為 SOL。與使用基於資源的 URL 的 REST API 不同,JSON-RPC 透過單一端點使用 method 欄位路由每個呼叫。有以太坊經驗的開發者將會辨識請求結構。Solana 在三個關鍵方面有所不同:沒有內存池(交易直接進入當前領導者)、狀態存在於帳戶而非 EVM 合約儲存中,以及 400 毫秒的插槽速度大約是以太坊 12 秒區塊時間的 30 倍。
每一個讀取狀態的 RPC 呼叫都接受一個 commitment 參數:
processed:節點見過的最新的插槽。最快,但該插槽理論上可能被回滾。confirmed:該插槽已獲得絕大多數驗證者的投票。對於大多數 dApp 用例而言,具有強大的最終性。finalized:該插槽永久地成為鏈的一部分。用於高風險操作。
Solana RPC 節點儲存什麼
節點持有兩類數據。目前的賬戶狀態存放在 RAM 中:包含最新確認 Slot 中每個活躍賬戶的快照,這是快速回應查詢所必需的。歷史分類帳數據則存放在 NVMe SSD 中:所有按 Slot 組織的交易記錄。Solana 在主網 (mainnet-beta) 上每天累積約 100 到 200 GB 的分類帳數據。這種存儲增長速度,加上 400 毫秒的 Slot 時間,解釋了為何 RPC 節點至少需要 256 GB RAM 以及數 TB 的快速存儲空間。
如需完整的 Solana JSON-RPC API 參考,請參閱 docs.solana.com/api.
HTTP 與 WebSocket:選擇合適的傳輸方式
| 傳輸方式 | 模型 | 典型用途 | 示例方法 |
|---|---|---|---|
| HTTP / HTTPS | 請求-響應(無狀態,拉取) | 一次性查詢、交易提交 | getBalance, getAccountInfo, sendTransaction |
| WebSocket / WSS | 持久連接(有狀態,推送) | 即時事件訂閱 | accountSubscribe, logsSubscribe, signatureSubscribe |
Solana RPC 節點類型:公共、私有與自建
訪問 Solana RPC 節點有三種方式:透過 Solana 基金會的免費公共端點、透過託管的私有提供商,或透過您直接營運的自建節點。
| 類型 | 營運方 | 成本 | 速率限制 | 服務目標 | 典型用途 |
|---|---|---|---|---|---|
| 公共端點 | Solana 基金會 | 免費 | 有(按 IP 執行) | 無 | 開發與測試 |
| 託管提供商 | Helius, QuickNode, Alchemy, Triton One | 提供付費方案 | 付費方案限制較高或無限制 | 有(付費方案) | 生產環境 dApp |
| 自建 | 您自己 | 硬體 + 運維成本 | 無(由您控制) | 由您定義 | 大型協議、交易所 |
公共 Solana RPC 端點(免費)
Solana 基金會營運四個公共 RPC 端點,每個網路集群一個。所有端點均為免費,但會針對每個 IP 地址執行速率限制。
| 集群 | HTTP 端點 URL | WebSocket 端點 URL | 使用場景 |
|---|---|---|---|
| mainnet-beta | https://api.mainnet-beta.solana.com | wss://api.mainnet-beta.solana.com | 生產網路(「beta」標籤是歷史遺留;這是 Solana 的正式主網) |
| devnet | https://api.devnet.solana.com | wss://api.devnet.solana.com | 開發與測試;可獲得免費 SOL 空投 |
| testnet | https://api.testnet.solana.com | wss://api.testnet.solana.com | 生產前壓力測試 |
| localnet | http://localhost:8899 | ws://localhost:8900 | 本地開發;由 solana-test-validator 生成(非官方公共集群) |
公共端點執行每個 IP 地址每 10 秒約 100 次請求的速率限制。超過此閾值將回傳 HTTP 429 Too Many Requests。這些端點適用於開發和測試。若要在生產環境使用,請參閱下方的 Solana RPC 提供商比較。
如需完整的集群文件,請參閱 docs.solana.com/clusters.
私有與託管 RPC 節點提供商
託管 RPC 提供商可能提供專用端點、更高的發布限制、WebSocket 支援、服務目標和多個區域;具體功能取決於目前的方案。Solana 的四個主要提供商為:
- Helius:Solana 原生提供商,具有增強的 RPC API 和 Webhook 通知功能
- QuickNode:多鏈提供商,具有地理分佈和附加組件市場
- Alchemy:多鏈提供商,具有企業級開發者工具
- Triton One:Solana 原生專家,專注於為機構工作負載提供原始 RPC 效能
定價、WebSocket 支援和差異化功能的完整比較請見提供商比較章節。
自建 Solana RPC 節點
自建節點讓您能完全控制 RPC 基礎設施且無速率限制,但硬體成本從數千美元起跳,且持續的 DevOps 維護並不容易。完整需求和設置概述請見「如何運行您自己的 Solana RPC 節點」。
為什麼 RPC 節點品質很重要:DeFi、NFT 與 dApp 效能
RPC 節點的品質直接決定了您的應用程式在生產條件下是否能正常運作。以下四個使用場景說明了這一點。
DeFi 交易與套利下單機器人
Solana 上的 DeFi 協議處理對時間敏感的交易,延遲決定了結果。交易機器人若透過受速率限制的公共端點調用 getLatestBlockhash 和 sendTransaction,在 429 超時期間面臨 blockhash 過期或交易被丟棄的風險。在 Solana 400 毫秒的 Slot 時間線內,RPC 回應時間 50 毫秒的差異就可能決定交易是落在目標 Slot 還是完全錯過。
Jupiter(聚合器)、Raydium(AMM/DEX)、Drift(永續合約)和 Marginfi(借貸)都依賴低延遲的 RPC 存取。與以太坊的 DeFi 不同,Solana 交易透過 Gulf Stream 完全跳過內存池,直接發送到目前的 Leader。如果您的 RPC 調用遲到,沒有排序隊列可以依靠。
NFT 鑄造與市場監控
高需求的 NFT 鑄造會產生數百次並發 sendTransaction 調用的爆發,買家在競爭有限的供應。上限約為每秒 10 次請求的公共端點在高峰時段會向大多數參與者回傳 429 錯誤。Magic Eden 和 Tensor 等 NFT 市場使用 WebSocket logsSubscribe 訂閱來即時檢測鑄造事件,這需要一個能大規模處理穩定 WebSocket 連接的提供商。
錢包與資產組合儀表板
錢包應用程式會為用戶持有的每項資產調用 getBalance 和 getTokenAccountBalance,並調用 getAccountInfo 來讀取鏈上元數據。一個服務 10,000 名活躍用戶的錢包每分鐘可能發出數萬次 RPC 查詢。具有足夠 QPS(每秒查詢數)容量的私有 RPC 提供商可以確保這些查詢在不降低用戶體驗的情況下得到解析。這裡的 QPS 指的是 RPC 請求吞吐量,而非 Solana 網路層級的交易吞吐量。
鏈上分析、索引器與交易所整合
分析平台和索引器重複調用 getBlock 以複製 Solana 分類帳的完整交易歷史。完整的歷史同步會按順序發出數千個 getBlock 請求。自建 RPC 節點或專用的企業級方案是唯一能可靠支撐此交易量的選擇。運行自家 Solana RPC 節點的中心化交易所使用類似的高吞吐量模式來大規模核對用戶餘額並檢測存款。
Solana 的 400 毫秒 Slot 時間與以太坊約 12 秒的區塊時間相比,意味著 Solana dApp 在單位時間內執行同等操作時,查詢 RPC 的頻率大約高出 30 倍,這使得 RPC 節點效能在這裡比在大多數其他網路上更為關鍵。如果您在生產流量下遇到速率限制,升級到私有 RPC 提供商是最直接的解決方案。
Solana RPC 節點提供商比較
對於大多數生產環境的 dApp 來說,問題不在於是否使用託管 RPC 提供商,而在於哪一家適合您的工作負載。本表以 Solana 基金會的免費公共端點作為基準,涵蓋了四個主要選項。
| 供應商 | Solana 原生 | 免費方案 | 付費方案 (約略) | 專用節點 | WebSocket | 地區 | 核心優勢 |
|---|---|---|---|---|---|---|---|
| Helius | 是 | 是 | 約每月 $49-$499 | 是 | 是 | 美國、歐盟 | 增強型 API:Webhook、交易解析、NFT API |
| QuickNode | 否 (多鏈) | 是 (試用) | 約每月 $49-$399 | 是 | 是 | 美國、歐盟、亞洲及其他 | 附加元件市場;廣泛的多鏈覆蓋 |
| Alchemy | 否 (多鏈) | 是 | 約每月 $49-$399 | 是 | 是 | 美國、歐盟 | 企業級開發工具;Notify Webhook |
| Triton One | 是 | 否 | 定制/企業 | 是 | 是 | 美國、歐盟、亞洲 | 機構級效能;聯繫報價 |
| Solana Foundation (公共) | 是 | 免費 (有限速) | 不適用 | 否 | 是 (有限速) | 美國 | 僅供開發與測試 |
本表中的定價資訊在發佈時準確無誤。供應商方案、價格和功能會經常變動。在做出選擇前,請直接在各供應商網站確認最新詳情。
最後更新時間:2025 年 7 月
Helius 宣傳專注於 Solana 的 RPC 方法、Webhook 和交易解析功能。功能、配額、定價、地區和服務條款應直接在 helius.dev 確認,並針對預期工作負載進行測試。
QuickNode 宣傳多鏈 RPC 基礎設施、區域端點和可選附加元件。請在 quicknode.com 驗證目前的 Solana 覆蓋範圍、配額、定價和服務條款,然後對所需的方法和地區進行基準測試。
Alchemy 宣傳包含 Solana 支援的多鏈開發人員基礎設施。在將其視為與其他供應商同等之前,請在 alchemy.com 確認目前的方法覆蓋範圍、WebSocket 行為、限制、地區和定價。
Triton One 宣傳適用於高吞吐量工作負載的 Solana 基礎設施。其延遲、可用性、地理覆蓋範圍、限制和商業條款需要在 triton.one 進行直接驗證並進行特定工作負載測試。
GenesysGo 之前以 Shadow 品牌營運 Solana RPC 服務。在評估之前,請在 genesysgo.com 驗證目前狀態。
所有主要的供應商都提供足以用於開發和測試的免費方案或試用方案。只有當您的應用程式大規模服務真實使用者時,速率限制 (Rate limit) 才會成為生產環境中的考量因素。
如何評估 Solana RPC 供應商
合適的供應商取決於您的工作負載:
| 您的情況 | 評估起點 |
|---|---|
| 個人開發者或小型團隊,預算有限 | Helius 免費方案或 QuickNode 免費試用;達到速率限制時升級 |
| 僅在 Solana 上的生產環境 dApp | Helius (Solana 原生,增強型 API) 或 Triton One (如果 p99 延遲是主要考量) |
| 多鏈團隊 (Solana 加上 Ethereum 或其他鏈) | QuickNode 或 Alchemy (兩者皆支援單一帳戶下的多條鏈) |
| 具有嚴格 SLA 要求的企業 | QuickNode (企業級) 或 Alchemy (企業聲譽) |
| 高頻 DeFi 協議或 MEV 操作 | Triton One (機構重點) 或自行託管的 RPC 節點 |
| 最大控制權、無速率限制、大型 DevOps 團隊 | 自行託管的 RPC 節點 (參見硬體需求和設定概覽) |
供應商的延遲聲稱不可互換。p50 是響應時間的中位數,而 p99 則捕捉最慢的 1% 請求,對於時間敏感的操作至關重要。實際結果取決於方法組合、負載、地理距離、快取和方案限制,因此在選擇付費方案前請先測試預期的請求模式。
使用 @solana/web3.js 將您的應用程式連接到 Solana RPC 節點
從 Solana Foundation 的公共端點切換到私有供應商,只需要更改應用程式中的一行代碼:傳遞給 Connection 建構函式的 URL 字串。
版本說明: 本節中的程式碼範例使用 @solana/web3.js v1.x,這是目前的生產標準。Solana Labs 正在開發具有顯著不同 API 的 v2.0。如果您使用的是 v2.0,請參考官方 v2.0 文件以獲取等效方法。
安裝與連接
步驟 1:安裝套件
npm install @solana/web3.js步驟 2:實例化連接並查詢餘額
import { Connection, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js";
// 從環境變數中獲取端點 —— 切勿硬編碼私有 URL
const RPC_ENDPOINT = process.env.RPC_URL ?? "https://api.devnet.solana.com";
const connection = new Connection(RPC_ENDPOINT, "confirmed");
async function getWalletBalance(address: string): Promise<void> {
const publicKey = new PublicKey(address);
// getBalance 返回 lamports;除以 LAMPORTS_PER_SOL (10^9) 得到 SOL
const balanceLamports = await connection.getBalance(publicKey);
const balanceSOL = balanceLamports / LAMPORTS_PER_SOL;
console.log(`餘額: ${balanceSOL} SOL`);
}步驟 3:讀取帳戶數據
async function getAccountData(address: string): Promise<void> {
const publicKey = new PublicKey(address);
// 如果帳戶不存在,getAccountInfo 返回 null
const accountInfo = await connection.getAccountInfo(publicKey);
if (!accountInfo) {
console.log("找不到帳戶");
return;
}
console.log("擁有者程式:", accountInfo.owner.toBase58());
console.log("數據長度 (位元組):", accountInfo.data.length);
console.log("Lamports:", accountInfo.lamports);
}步驟 4:發送交易
import {
Transaction,
SystemProgram,
Keypair,
sendAndConfirmTransaction,
} from "@solana/web3.js";
async function transferSOL(
sender: Keypair,
recipientAddress: string,
amountSOL: number
): Promise<string> {
const recipient = new PublicKey(recipientAddress);
const lamports = amountSOL * LAMPORTS_PER_SOL;
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: recipient,
lamports,
})
);
// sendAndConfirmTransaction 在解析前等待 "confirmed" 確認狀態
const signature = await sendAndConfirmTransaction(connection, transaction, [sender]);
return signature;
}步驟 5:配置基於環境的端點切換
設置配置模組,通過環境變數切換集群,而不是修改應用程式程式碼:
// config/rpc.ts
const RPC_ENDPOINTS: Record<string, string> = {
"mainnet-beta": "https://api.mainnet-beta.solana.com",
"devnet": "https://api.devnet.solana.com",
"private": process.env.PRIVATE_RPC_URL ?? "",
};const NETWORK = process.env.SOLANA_NETWORK ?? "devnet"; export const connection = new Connection(RPC_ENDPOINTS[NETWORK], "confirmed");
**安全說明:** 切勿在用戶端 JavaScript 中硬編碼您的私有 RPC 端點 URL。暴露於瀏覽器的 URL 會將您的 API 密鑰洩漏給任何檢查網路流量的人。請通過伺服器端代理或後端 API 路由進行導向。
有關完整的 @solana/web3.js API 參考,請參閱 [solana-labs.github.io/solana-web3.js](https://solana-labs.github.io/solana-web3.js/).
### HTTP vs. WebSocket RPC 連接:何時使用各項內容
| 場景 | 使用 HTTP | 使用 WebSocket |
|---|---|---|
| 獲取一次錢包餘額 | 是 | 否 |
| 提交交易 | 是 | 否 |
| 監控帳戶的即時變動 | 否 | 是 |
| 串流程式的交易日誌 | 否 | 是 |
| 追蹤特定簽名的確認情況 | 否 | 是 |
WebSocket 連接使用 `wss://` 而不是 `https://`。大多數託管供應商在同一方案下同時提供這兩種端點。
// WebSocket 訂閱:即時監控帳戶變動
const publicKey = new PublicKey("在此處輸入您的帳戶公鑰");
const connectionWithWS = new Connection(
process.env.RPC_URL ?? "https://api.devnet.solana.com",
{
commitment: "confirmed",
wsEndpoint: process.env.WSS_URL ?? "wss://api.devnet.solana.com",
}
);
// onAccountChange 傳回一個訂閱 ID,用於之後的清理
const subscriptionId = connectionWithWS.onAccountChange(
publicKey,
(accountInfo, context) => {
console.log("帳戶在 slot 變更:", context.slot);
console.log("新的 lamport 餘額:", accountInfo.lamports);
},
"confirmed"
);
// 移除不再需要的訂閱:
// connectionWithWS.removeAccountChangeListener(subscriptionId);處理速率限制和 429 錯誤
來自公開 Solana 端點的 429 請求過多錯誤表示您的應用程式已超過每 IP 的速率限制。有三種策略可解決此問題:
- 切換到受管理的私人提供者。 Helius、QuickNode、Alchemy 和 Triton One 提供適合生產流量的方案。請參閱比較私人 Solana RPC 提供者。
- 實施指數退避。 收到 429 回應時,延遲加倍,然後重試(請參閱下方程式碼)。
- 使用
getMultipleAccounts批次處理帳戶讀取。 一次擷取 20 個帳戶,僅消耗一次請求而非 20 次。
// 任何 RPC 呼叫的指數退避包裝函式
async function withRetry<T>(
fn: () => Promise<T>,
maxRetries: number = 5
): Promise<T> {
let attempt = 0;
while (attempt < maxRetries) {
try {
return await fn();
} catch (error: any) {
const is429 = error?.message?.includes("429");
if (is429 && attempt < maxRetries - 1) {
// 等待 500ms,然後 1s,然後 2s,然後 4s,然後 8s
const waitMs = 500 * Math.pow(2, attempt);
await new Promise((resolve) => setTimeout(resolve, waitMs));
attempt++;
} else {
throw error;
}
}
}
throw new Error("Max retries exceeded");
}Solana RPC 方法:您可以查詢的內容
Solana 的 JSON-RPC API 提供超過 80 種方法。下表涵蓋了大多數 dApp 開發者經常使用的功能。
HTTP RPC 方法
| 類別 | 方法 | 說明 | 常見用途 |
|---|---|---|---|
| 帳戶資料 | getAccountInfo | 傳回帳戶中儲存的所有資料 | 讀取程式擁有的帳戶狀態 |
| 帳戶資料 | getBalance | 傳回公鑰的 SOL 餘額(以 lamports 為單位) | 錢包餘額顯示 |
| 帳戶資料 | getTokenAccountBalance | 傳回代幣帳戶的 SPL 代幣餘額 | 代幣錢包餘額 |
| 帳戶資料 | getMultipleAccounts | 一次傳回多個帳戶的資料 | 批次讀取(減少速率限制暴露) |
| 交易 | sendTransaction | 將已簽署的交易提交到網路 | 任何寫入操作 |
| 交易 | simulateTransaction | 在不廣播的情況下模擬交易 | 預檢驗證 |
| 交易 | getTransaction | 依簽章傳回已確認的交易詳細資訊 | 交易歷史記錄查詢 |
| 區塊 / Slot | getSlot | 傳回目前的 slot 高度 | 鏈進度監控 |
| 區塊 / Slot | getLatestBlockhash | 傳回最新的區塊雜湊和最後有效高度 | 發送任何交易前必需 |
| 區塊 / Slot | getBlock | 傳回指定 slot 中的所有交易 | 鏈上分析和索引 |
getRecentBlockhash 已棄用。請改用 getLatestBlockhash。新方法也傳回 lastValidBlockHeight,這使得可靠處理交易交割合約成為可能。
WebSocket 訂閱方法
| 方法 | 功能 | 常見用途 |
|---|---|---|
accountSubscribe | 當特定帳戶變更時推送更新 | 即時餘額監控 |
logsSubscribe | 串流符合篩選條件的交易日誌 | DeFi 事件監控、NFT mint 檢測 |
signatureSubscribe | 當交易簽章已確認時發出通知 | 交易確認追蹤 |
WebSocket 訂閱適用於任何需要對鏈上事件做出反應而無需輪詢的 dApp。accountSubscribe 在特定帳戶的資料變更時觸發,可用於追蹤使用者的錢包或 Solana 程式(相當於以太坊上的智能合約)的狀態帳戶。logsSubscribe 串流符合程式 ID 篩選條件的交易日誌,DeFi 協議(如 Jupiter 和 Raydium)使用它來檢測發生的交換事件。
Anchor 是使用最廣泛的 Solana 程式開發框架,它生成的 TypeScript 用戶端會在底層透過 @solana/web3.js 呼叫這些方法。RPC 設定對 Anchor 式 dApp 同樣適用。
如需包含參數、傳回型別和錯誤碼的完整方法參考,請參閱 Solana RPC API 文檔.
如何執行您自己的 Solana RPC 節點:需求和設定概覽
自行託管 Solana RPC 節點可讓您完全控制、無速率限制且最大限度地提高資料隱私。硬體投資高達數千美元,且維持節點健康需要專門的 DevOps 容量。大型協議、交易所和擁有現有基礎設施能力的團隊是此途徑的目標受眾。
| 組件 | 最低 | 生產環境建議 |
|---|---|---|
| CPU | 12 核心,3.5 GHz 或更高 | 24 核心,高時脈速度 |
| RAM | 256 GB DDR4 ECC | 512 GB DDR4 ECC |
| 儲存 | 2 TB NVMe SSD | 2x 2 TB NVMe SSD(獨立的 ledger 和 accounts 磁碟區) |
| 網路 | 1 Gbps 專用,低延遲 | 10 Gbps 專用 |
| 作業系統 | Ubuntu 20.04 LTS | Ubuntu 22.04 LTS |
硬體需求會隨著網路的成長而演變。在配置硬體之前,請根據官方 Solana 文檔 docs.solana.com/running-validator) 驗證目前的規格。
Solana 的帳戶模型將所有程式狀態儲存在個別帳戶中。一個完整的 RPC 節點必須將所有活躍帳戶的當前帳戶狀態儲存在 RAM 中以提供快速查詢回應,並將歷史 ledger 資料儲存在 NVMe SSD 上。主網 beta 上每天 100 到 200 GB 的儲存增長意味著操作員必須規劃連續的 ledger 輪換。
需要七個階段。每個步驟都連結到官方 Solana 文檔,以獲取完整的設定詳細資訊。
- 配置硬體,滿足或超出上述規格。
- 安裝作業系統並配置 Linux 核心參數:提高 ulimit 文件描述符限制,並調整 sysctl 網路設定以適應 Solana 的高 UDP 流量。
- 從官方 Solana Labs 發佈通道安裝 Solana CLI 和
agavevalidator 二進位檔(先前為solana-validator)。 - 透過傳遞
--no-voting標誌來禁用共識參與,並設定--rpc-port 8899(HTTP)和--rpc-pubsub-port 8900(WebSocket)來為節點配置 RPC 模式。 - 從 Solana Foundation 的快照儲存庫下載快照,以便從最近的狀態引導同步,而不是從 genesis 重新播放。
- 啟動節點並使用
solana catchup監控同步進度,以追蹤節點落後於叢集尖端的距離。 - 配置防火牆規則,僅向授權的 IP 位址公開連接埠 8899 和 8900。未經驗證請勿公開您的 RPC 連接埠。
在建議的硬體上,快照同步需要 1 到 3 天。從 genesis 同步需要更長的時間,不建議這麼做。
裸機的月費通常為 500 到 1500 美元,具體取決於規格和數據中心地理位置。由於儲存密集型工作負載的虛擬化開銷,雲端同等級別的費用更高。每天 100 到 200 GB 的儲存增長迫使人們選擇預先分配大量磁碟空間或自動化 ledger 修剪。
對於評估建置與購買決策的團隊,在承諾硬體採購之前,請先比較提供者比較部分中的受管理提供者成本。
常見的 Solana RPC 錯誤及其修復方法
429 請求過多
您的應用程式已超過公共 Solana 端點的每 IP 速率限制。若要修正此問題:
- 切換至託管的私人供應商。 Helius、QuickNode、Alchemy 和 Triton One 提供適用於生產流量的方案。請參閱比較私人 Solana RPC 供應商。
- 實施指數級退避。 收到 429 回應時,請以每次嘗試加倍延遲的方式重試。程式碼範例位於速率限制處理區段中。
- 使用
getMultipleAccounts批次處理帳戶讀取。 一次呼叫擷取 20 個帳戶,僅消耗一個請求,而非 20 個。
交易確認逾時
透過 sendTransaction 提交的交易未能成功。區塊雜湊可能已過期,或網路可能已壅塞。若要修正此問題:
- 在建構交易前立即呼叫
getLatestBlockhash。請勿使用getRecentBlockhash(已棄用)。 - 檢查回應中的
lastValidBlockHeight,並在達到該高度之前重試。 - 對於暫時性失敗的自動重試,請使用
sendAndConfirmTransaction而非原始的sendTransaction。
getProgramAccounts 速率限制失敗
getProgramAccounts 是資源密集度最高的 RPC 呼叫之一。由於其對共用基礎設施造成的負載,公共端點經常限制或完全拒絕它。如果您看到針對這些呼叫出現 403 或逾時錯誤,請升級至提供大型程式帳戶查詢明確支援的私人 RPC 供應商。
Solana RPC 節點常見問題:
Solana RPC 節點是一個實作 Solana JSON-RPC API 的伺服器,它接受來自用戶端應用程式的請求並返回 區塊鏈 狀態資料。dApps、錢包和區塊總管使用它們來讀取帳戶餘額、擷取交易記錄,並向網路提交已簽署的交易,而無需執行本地帳本副本。
Solana RPC 節點與驗證節點的差別是什麼?
兩者扮演的角色不同。RPC 節點透過 JSON-RPC API 向外部用戶端提供資料,不參與共識,也不賺取質押獎勵。驗證節點在每個時槽對區塊有效性進行投票,需要質押 SOL,並因正確的投票而賺取 SOL 獎勵。有些營運商在相同的硬體上同時運行兩者,但角色的邏輯上是分離的。
Solana 公共 RPC 端點是免費使用的嗎?
是的。Solana Foundation 的公共端點 api.mainnet-beta.solana.com、api.devnet.solana.com 和 api.testnet.solana.com 是免費的。它們實施每 IP 位址每 10 秒約 100 次請求的速率限制。這些端點足以應付開發和測試,但不適合為真實用戶提供服務的生產 dApps。
如何避免 Solana 公共 RPC 的速率限制?
三種方法可協同作用:為生產流量切換至託管的私人 RPC 供應商;實施指數級退避以增加等待間隔重試失敗的請求;以及將多個帳戶讀取批次處理成單一 getMultipleAccounts 呼叫,而不是為每個帳戶發出單獨的 getAccountInfo。
自託管 Solana RPC 節點需要什麼硬體?
最低要求:12 核心 CPU、256 GB DDR4 RAM、2 TB NVMe SSD 和 1 Gbps 專用網路連線。生產建議:24 核心 CPU、512 GB RAM、2 個 2 TB NVMe SSD 和 10 Gbps 網路。隨著網路的發展,要求會增加,請根據 Solana 驗證者文件,) 驗證目前的規格。
同步 Solana RPC 節點需要多長時間?
使用推薦硬體上的最新快照,預計需要 1 到 3 天。從創世區塊開始同步需要更長的時間。Solana Foundation 提供官方快照來加速此過程。
Solana 上 HTTP 與 WebSocket RPC 連線有何不同?
HTTP RPC 使用無狀態的請求-回應模型。您的應用程式發送一個請求並接收一個回應,這適用於一次性查詢,例如 getBalance 或 sendTransaction。WebSocket RPC 使用帶有訂閱模型的持久連線。您的應用程式訂閱 鏈上 事件,並在這些事件發生時接收推播通知。在您的 dApp 中,請將 WebSocket 用於任何即時功能。
生產 dApps 應如何評估 Solana RPC 供應商?
Helius 和 QuickNode 是兩個經常被討論的選項,但社群關注度並非適用性或效能的證明。Helius 適合專注於 Solana 開發且需要 Solana 原生增強型 API 的團隊。QuickNode 適合在單一帳戶下支援多個 區塊鏈 的團隊。Triton One 是為機構級工作負載準備的選項,其中 P99 延遲是主要限制因素。正確的選擇取決於您的工作負載以及 Solana 特定功能或多鏈支援哪個更重要。
相關 Solana 指南
在 Bybit 上探索 SOL
讀者可以查閱 目前的 SOL 市場資訊) 或 SOL/USDT 現貨市場.)。這些連結提供市場資訊和存取權限;它們不驗證技術聲明,也不暗示 SOL 適合每位讀者。
為您的使用案例選擇正確的 Solana RPC 策略
有三種路徑,大多數團隊會立即辨識出適合他們目前階段的一種。
| 情況 | 路徑 |
|---|---|
| 在本地建構或測試 | 在 devnet 或 testnet 上使用 Solana Foundation 的免費公共端點 |
| 為使用者提供服務的生產 dApp | 使用託管的私人供應商:Helius、QuickNode、Alchemy 或 Triton One,具體取決於您的工作負載 |
| 擁有 DevOps 容量的大型協定、交易所或團隊 | 評估自託管:完全控制、無速率限制、顯著的硬體和營運成本 |
RPC 的可靠性會影響應用程式讀取和交易提交,但目標插槽持續時間並非確認保證,RPC 延遲只是交易能否成功的一個因素。選擇符合您當前規模的層級,並計劃在速率限制成為面向用戶的問題之前進行升級。
後續步驟:
- 註冊免費開發方案:helius.dev 或 quicknode.com
- 查閱完整的 Solana JSON-RPC 方法參考:docs.solana.com/api
- 在配置自託管之前,請審查硬體規格:如何運行您自己的 Solana RPC 節點