摘要
Solana devnet 是测试集群,您可以在接触主网之前验证程序、交易和客户端代码。本页介绍如何连接 Solana devnet RPC 端点、如何获取测试 SOL,以及如何调试开发过程中最常出现的故障。
它还涵盖了何时公共 devnet 端点就足够,以及何时托管或专用 RPC 服务(如 OnFinality)更适合 CI 流水线、集成测试和发布前预演。
Solana devnet 是与 mainnet-beta 和 testnet 分离的集群。它运行与主网相同的运行时,但账本是可丢弃的,代币没有价值,并且网络明确允许重置。这使其成为部署程序、运行集成测试以及在发布前重现错误的理想场所。
查询“solana rpc devnet”通常来自需要以下三件事之一的开发者:可用的端点 URL、用于支付交易的测试 SOL,或诊断失败请求的方法。本页回答了所有这三个问题,然后解释了何时公共 devnet 端点不再足够。
您应该使用哪个 devnet 端点?
根据您正在做的事情选择端点,而不是凭习惯。大多数开发者从公共端点开始,当测试成为流水线的一部分时,转向托管或专用端点。
| 您的情况 | 合理的端点选择 | 原因 |
|---|---|---|
| 学习 Solana,运行少量脚本 | 公共 devnet RPC | 免费,无需设置,适合低请求量 |
| 部署程序并迭代 | 公共 devnet RPC 或托管 RPC 计划 | 您需要可靠的 sendTransaction 和 getSignatureStatuses |
| 每次提交都运行的 CI 流水线 | 带专用 API 密钥的托管 RPC | 可预测的访问和按项目密钥 |
| 负载或延迟测试 | 专用节点 | 您控制机器,可以在没有嘈杂邻居的情况下进行测量 |
| 测试 WebSocket 驱动的 UI | 支持 ws 的端点 | 订阅行为与轮询不同 |
如果您只需要读取账户并偶尔发送交易,公共 devnet 端点就足够了。如果您的测试间歇性失败,并且您无法判断原因是您的代码还是端点,那就是转向托管服务的信号。
OnFinality 将 Solana devnet 作为受支持的网络与 Solana 主网一起提供。您可以查看 Solana Devnet 网络页面 获取连接详情,如果需要用于 CI 的带密钥端点,可以在 RPC 定价 页面比较计划。
Solana devnet 链设置一览
当您配置钱包、SDK 或框架时,您是在选择集群和 RPC URL。Solana 不像以太坊那样为 devnet 使用 EVM 风格的数值链 ID;集群身份才是关键。
| 设置 | Devnet 值 |
|---|---|
| 集群名称 | devnet |
| 原生货币 | SOL(devnet,无价值) |
| 小数位 | 9 |
| 典型 RPC 传输 | HTTP JSON-RPC |
| 订阅传输 | 支持时的 WebSocket (ws) |
| 区块浏览器 | 选择 devnet 集群的 Solana Explorer |
| 主网等效 | mainnet-beta |
将 devnet 和主网配置保存在单独的文件或环境变量中。很大一部分“本地运行正常”的事件源于构建时静默指向了错误的集群。
使用 curl 和 JavaScript 连接
一个最小的 JSON-RPC 调用可以确认端点可达并返回当前 slot。
curl https://your-devnet-endpoint.example \
-X POST -H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSlot",
"params": []
}'
在 JavaScript 中,常见模式是创建一个连接对象并传入集群或显式端点。
import { Connection, clusterApiUrl, LAMPORTS_PER_SOL } from "@solana/web3.js";
// 选项 A:使用内置的 devnet 集群 URL
const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
// 选项 B:使用您自己的托管 devnet 端点
// const connection = new Connection(process.env.SOLANA_DEVNET_RPC, "confirmed");
const slot = await connection.getSlot();
console.log("current devnet slot:", slot);
const balance = await connection.getBalance(connection.publicKey ?? undefined);
对于 WebSocket 订阅,使用 ws 端点构造连接,并使用 onAccountChange 或 onLogs:
const wsConnection = new Connection(process.env.SOLANA_DEVNET_WS, {
commitment: "confirmed",
wsEndpoint: process.env.SOLANA_DEVNET_WS,
});
const subId = wsConnection.onLogs(programId, (logs) => {
console.log(logs.signature, logs.logs);
});
如果订阅静默断开,请记录订阅 ID 并在出错时重新订阅,而不是假设端点已损坏。
从 devnet 水龙头获取测试 SOL
水龙头有速率限制且是共享的。将其视为便利,而非保证。
- 先请求少量金额,在运行大型测试前确认余额。
- 如果请求失败,请等待并重试,而不是猛击端点。
- 对于可重复的测试,一次性为已知密钥对提供资金并重复使用,或运行本地验证器,在那里您可以自由铸造 SOL。
- 切勿在主网上重复使用 devnet 密钥对。为任何持有真实价值的东西生成新的密钥对。
当水龙头请求似乎成功但余额没有变化时,请在浏览器上检查交易签名,并确认您查询的是与请求相同的集群。
常见的 devnet 故障及其解读
大多数 devnet 错误属于少数几类。下表将症状映射到可能的原因。
| 症状 | 可能原因 | 首先检查的事项 |
|---|---|---|
AccountNotFound | 账户尚未创建,或集群错误 | 确认集群以及账户已初始化 |
Blockhash not found | 发送前 blockhash 已过期 | 获取新的 blockhash 并快速重试 |
| 交易已确认但状态未变 | 程序 ID 错误或客户端过时 | 重新检查程序 ID,必要时重新部署 |
429 或限流 | 公共端点速率限制 | 降低请求速率或迁移到带密钥端点 |
| WebSocket 停止传递 | 空闲超时或网络断开 | 添加重连逻辑并重新订阅 |
| Slot 跳跃或数据重置 | Devnet 账本重置 | 重新创建账户并重新运行设置 |
Devnet 重置是正常的。如果您的测试依赖于预先存在的状态,请构建一个重新创建它的设置步骤,而不是假设它会持续存在。
当公共 devnet 端点不够用时
公共端点是共享的,devnet 流量不可预测。有两件事往往促使团队转向托管基础设施。
首先是 CI。如果每次提交都触发发送交易的测试套件,您需要一个稳定的端点及其自己的凭据,这样嘈杂的任务不会影响另一个。其次是可观测性。当测试失败时,您需要知道请求是否到达节点、节点返回了什么以及花费了多长时间。托管 RPC 服务为您提供按密钥的使用情况和更清晰的错误响应。
OnFinality 在许多网络(包括 Solana)上提供 RPC API 访问和专用节点选项。如果您的 devnet 使用量较轻,共享服务通常就足够了。如果您正在运行持续负载或需要隔离,专用节点 消除了嘈杂邻居问题。您可以在 支持的 RPC 网络 页面查看支持链的完整列表。
实用的 devnet 工作流程
可重复的工作流程比任何单一优化节省更多时间。
- 将集群配置保存在环境变量中,切勿硬编码。
- 在您控制账本的单元测试中运行本地验证器。
- 使用 devnet 进行需要真实网络条件的集成测试。
- 为专用测试密钥对提供资金并在运行中重复使用。
- 记录请求 ID、签名和 slot 编号,以便故障可重现。
- 在测试套件启动前添加调用
getSlot的健康检查。 - 一旦测试在 CI 中运行,迁移到带密钥的托管端点。
这个顺序将廉价、快速的反馈循环保持在本地,并将网络访问保留给真正需要的情况。
关键要点
- Solana devnet 是一个独立的集群,使用无价值的 SOL,用于在主网之前测试程序和客户端。
- 集群名称是
devnet;将其保存在环境变量中,切勿与mainnet-beta混合。 - devnet 水龙头有速率限制,因此为可重复使用的测试密钥对提供资金,而不是反复请求。
- 大多数 devnet 错误是 blockhash 过期、集群错误或速率限制,而不是节点故障。
- Devnet 重置是预期的;构建重新创建状态的设置步骤。
- 当测试在 CI 中运行或需要隔离时,从公共端点迁移到托管或专用 RPC 服务。
常见问题解答
什么是 Solana devnet RPC URL?
没有单一的规范 URL。您可以使用 SDK 提供的集群 URL,或提供商的托管端点。OnFinality 将 Solana devnet 列为受支持的网络;请参阅 Solana Devnet 网络页面 获取连接详情。
Solana devnet 与 testnet 相同吗?
不相同。Devnet 和 testnet 是独立的集群。Devnet 是更常用的测试环境,也更可能被重置。始终确认您的端点指向哪个集群。
为什么我的 devnet 交易失败并显示“blockhash not found”?
blockhash 在交易处理之前过期了。在发送前立即获取新的 blockhash 并重试。在繁忙或限流的端点上,这种情况更常发生。
我可以在生产环境中使用公共 devnet 端点吗?
Devnet 用于测试,而非生产。对于生产工作负载,您应该使用主网和托管或专用 RPC 服务。请参阅 RPC 定价 了解计划选项。
OnFinality 支持 Solana devnet 吗?
是的。Solana devnet 被列为 OnFinality 支持的网络之一。请查看 Solana Devnet 网络页面 和 RPC API 服务 页面了解当前详情。
如何在 devnet 上测试 WebSocket 订阅?
使用 ws 端点,通过 onLogs 或 onAccountChange 订阅,并添加重连逻辑。公共端点可能会断开空闲连接,因此请显式处理重新订阅。