Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
RPC Assistant

Solana 节点 API:如何连接、配置和调试 RPC 调用

摘要

Solana 节点 API 是一个 JSON-RPC 接口,允许应用程序读取网络状态、发送交易并订阅实时更新。本指南涵盖集群端点、请求格式、承诺级别和常见故障模式,以便您能够可靠地连接到 Solana 主网或开发网。

快速决策指南:您应该使用哪个 Solana 端点?

在编写任何代码之前,请决定哪个 Solana 集群和访问模式适合您的工作负载。答案取决于您是在构建生产应用、运行 QA 流水线,还是仅在本地进行原型开发。

工作负载推荐端点原因
本地开发http://localhost:8899 (solana-test-validator)快速迭代、明确的速率限制、完全控制
在 devnet 上原型开发公共 devnet 端点或托管 devnet RPC从水龙头获取免费 SOL,共享基础设施适合低流量
生产主网应用托管 RPC 提供商或专用节点公共端点有速率限制,不适合生产环境
高吞吐量或重型方法(getProgramAccounts)专用节点或具有专用容量的托管提供商避免 429 错误并提供一致的性能

如果您刚刚开始,请使用托管 RPC 提供商(如 OnFinality 的 Solana API)来获得稳定的端点,而无需运行自己的节点。对于生产环境,请评估专用节点选项以避免共享速率限制。

什么是 Solana 节点 API?

Solana 节点 API 是一个 JSON-RPC 2.0 接口,封装了验证器内部功能。它允许您读取账户状态、发送交易、模拟执行以及通过 WebSocket 订阅实时更新。大多数请求是带有 JSON 主体的 HTTP POST,响应是 JSON 对象。

与其他一些链不同,Solana 的 API 不兼容以太坊。您使用 getAccountInfo、getBalance、sendTransaction 和 getLatestBlockhash 等方法,而不是 eth_getBalance 或 eth_sendRawTransaction。这意味着您的工具和 SDK 必须支持 Solana。

Solana 集群和公共端点

Solana 有三个公共集群:主网、开发网和测试网。每个都有公共端点,但这些是共享基础设施,不适用于生产流量。官方文档警告说,公共端点可能返回 429(速率限制)或 403(被阻止)当过度使用时。

集群公共端点用例
主网https://api.mainnet.solana.com具有真实 SOL 的生产网络
开发网https://api.devnet.solana.com开发者测试,从水龙头获取免费 SOL
测试网https://api.testnet.solana.com验证器测试

对于生产环境,您应该使用托管 RPC 提供商或运行自己的节点。OnFinality 在 https://solana.api.onfinality.io/public 提供公共 Solana 端点,并在 wss://solana.api.onfinality.io/public-ws 提供 WebSocket 端点。这些适用于开发和轻度生产使用,但对于重负载,请考虑 专用节点。

发起您的第一个 Solana RPC 调用

Solana RPC 使用 JSON-RPC 2.0。以下是一个基本的 curl 示例,用于获取当前 slot:

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'

响应如下:

{"jsonrpc":"2.0","result":123456789,"id":1}

大多数方法需要参数。例如,要获取账户余额:

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getBalance","params":["GgPpTKg78vmzgvPmNsDnN7hKs4q5WzJfPmZ3gY7hKJpX"]}'

将地址替换为真实的 Solana 公钥。

理解承诺级别

Solana RPC 方法接受 commitment 参数,该参数控制节点返回数据前区块必须被最终确认的程度。这对于应用程序的一致性至关重要。

承诺级别描述用例
processed节点最近处理的区块。可能被回滚。实时监控,但不适合金融交易
confirmed由超级多数权益投票的区块。大多数应用程序使用此级别作为速度和安全性之间的平衡
finalized区块已最终确定,具有最大锁定。高价值交易,不可逆性不可接受

例如,要获取具有 confirmed 承诺级别的余额:

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getBalance","params":["GgPpTKg78vmzgvPmNsDnN7hKs4q5WzJfPmZ3gY7hKJpX",{"commitment":"confirmed"}]}'

使用 WebSocket 订阅

对于实时更新,Solana 提供 WebSocket 订阅。您可以订阅账户变更、程序更新、slot 变更等。以下是使用 wscat 的示例:

wscat -c wss://solana.api.onfinality.io/public-ws

然后发送订阅请求:

{"jsonrpc":"2.0","id":1,"method":"accountSubscribe","params":["GgPpTKg78vmzgvPmNsDnN7hKs4q5WzJfPmZ3gY7hKJpX",{"commitment":"confirmed"}]}

您将收到一个订阅 ID,然后随着账户变更收到通知。

您将使用的常见 Solana RPC 方法

以下是最常用的 HTTP 方法:

类别方法
账户getAccountInfo, getBalance, getMultipleAccounts
交易sendTransaction, simulateTransaction, getTransaction, getSignatureStatuses
区块getBlock, getBlocks, getBlockHeight
程序getProgramAccounts
集群getSlot, getEpochInfo, getHealth, getVersion
代币getTokenAccountBalance, getTokenSupply

有关完整列表,请参阅 Solana RPC HTTP 方法 参考。

调试常见的 Solana RPC 错误

当您的调用失败时,错误消息通常会告诉您需要修复什么。以下是常见问题:

错误可能原因修复
429 Too Many Requests您超出了共享端点上的速率限制使用具有更高限制的托管提供商或专用节点
403 Forbidden端点阻止了您的 IP 或流量模式检查您的请求量并考虑使用私有端点
-32602 Invalid params缺少或格式错误的参数验证方法签名和参数顺序
-32005 Node is unhealthy节点落后或正在同步等待并重试,或切换到健康的端点
Transaction simulation failed交易在链上会失败在发送前使用 simulateTransaction 进行调试

对于交易失败,始终先模拟:

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"simulateTransaction","params":["base58-encoded-tx"]}'

使用 JavaScript 构建:使用 @solana/web3.js

与 Solana 交互的最常见方式是使用 @solana/web3.js 库。以下是最小示例:

import { Connection, PublicKey } from '@solana/web3.js';

const connection = new Connection('https://solana.api.onfinality.io/public', 'confirmed');
const address = new PublicKey('GgPpTKg78vmzgvPmNsDnN7hKs4q5WzJfPmZ3gY7hKJpX');

const balance = await connection.getBalance(address);
console.log('Balance:', balance / 1e9, 'SOL');

对于 JS 中的 WebSocket 订阅,使用 connection.onAccountChange:

connection.onAccountChange(address, (accountInfo) => {
  console.log('Account changed:', accountInfo);
});

何时使用专用 Solana 节点

如果您的应用程序依赖重型方法(如 getProgramAccounts,可能代价高昂)或需要一致的低延迟,共享公共端点可能不够。专用节点为您提供:

  • 不受其他用户速率限制的影响
  • 重型查询的一致性能
  • 对节点配置的完全控制
  • 如果需要,可访问归档数据

OnFinality 提供 专用 Solana 节点,您可以在几分钟内部署。您还可以比较 Solana RPC 提供商 以了解权衡。

关键要点

  • Solana 的节点 API 是基于 HTTP 和 WebSocket 的 JSON-RPC 2.0,具有 Solana 特定的方法。
  • 公共端点适合开发,但不适合生产流量。
  • 承诺级别(processed、confirmed、finalized)控制数据一致性。
  • 在发送交易前使用 simulateTransaction 调试交易失败。
  • 对于生产环境,考虑使用托管 RPC 提供商或专用节点以避免速率限制并确保可靠性。

常见问题解答

Solana RPC 和 Solana 节点 API 有什么区别?

它们指的是同一件事:允许您与 Solana 节点交互的 JSON-RPC 接口。这两个术语可以互换使用。

我可以在 Solana 上使用以太坊 RPC 方法吗?

不可以。Solana 使用自己的一套方法。您需要 Solana 特定的 SDK 和工具。

如何为 devnet 获取免费 SOL?

使用 Solana 水龙头 https://faucet.solana.com 请求 devnet SOL。

避免 429 错误的最佳方法是什么?

使用具有更高速率限制的托管 RPC 提供商或专用节点。公共端点是共享的,容易被限流。

OnFinality 是否支持 Solana WebSocket?

是的,OnFinality 在 wss://solana.api.onfinality.io/public-ws 提供 WebSocket 端点用于订阅。

有关支持的网络和定价的更多详细信息,请参阅 支持的 RPC 网络 和 RPC 定价。

RPC 知识库

相关 RPC 内容

网络 RPCKaia

Klaytn API:开发者应了解哪些关于RPC、KAS和节点基础设施的内容?

Klaytn(现已更名为Kaia)是一个兼容EVM的Layer 1区块链。开发者可以通过JSON-RPC端点、用于更高级REST API的Klaytn API服务(KAS)或专用节点基础设施与之交互。本指南涵盖这些选项之间的差异、如何连接,以及在选择API提供商时应评估哪些方面。...

RPC 提供商选择Avalanche

在选择专用Avalanche节点时应该注意什么?

专用Avalanche节点为您提供私有RPC端点,具有明确的速率限制,并让您完全控制Avalanche基础设施。本指南涵盖了选择专用节点提供商时需要评估的要素,包括性能、可靠性以及对C链、X链和P链的支持。...

RPC 提供商选择Solana

Solana RPC 提供商的定价层级实际上是如何运作的?

Solana RPC 定价通常按三个维度计费:请求量、计算单元(CU)消耗和专用基础设施。大多数提供商提供免费、按量付费和承诺或专用层级,但对生产应用真正重要的限制隐藏在 CU 上限、速率限制以及归档或 WebSocket 访问中。本文详细解析这些层级是如何构成的、每个层级适合什么场景,以及如何在不...

区块链基础设施Base

什么是 Base 节点基础设施,何时应该运行自己的节点?

Base 节点基础设施是指运行 Base 节点所需的硬件、软件和网络设置,包括执行客户端、共识客户端以及与网络的同步。运行自己的节点可以直接访问链,无需依赖第三方 RPC 提供商,但需要大量的运维工作。对于大多数生产级应用,使用像 OnFinality 这样的托管 RPC 服务,在可靠性、可扩展性和...

RPC 提供商选择TON

如何为生产级 dApp 选择 TON RPC 提供商?

# 如何为生产级 dApp 选择 TON RPC 提供商? 开放网络(TON)是一个为大规模采用而设计的分片 Layer 1 区块链,为 Telegram Mini Apps、DeFi 协议和支付系统提供支持。选择合适的 TON RPC 提供商对于确保低延迟、高可靠性以及访问 ADNL 和归档数据等...

网络 RPCBittensor

What is Bittensor RPC and how do you connect to it?

Bittensor RPC enables developers to interact with Bittensor's decentralized AI network via Substrate (subtensor) and EVM APIs. This reference covers m...

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始