Solana主网、开发网和测试网详解
Learn the differences between Solana Mainnet-Beta, Devnet, Testnet, and Localnet. Complete guide with RPC endpoints, CLI commands, and deployment step...
Solana主网、开发网和测试网服务于不同目的:主网Beta承载真实经济价值,开发网支持应用程序开发,测试网主要用于验证者和协议测试。本地网为受控开发提供独立的本地环境。
如果您花时间阅读Solana文档或遵循教程,您已经看到了主网Beta、开发网和测试网这几个术语在每篇指南中反复出现。大多数资源在命名它们时,并未回答真正重要的问题:现在应该使用哪一个,以及选择错误会发生什么?
Solana是一个高性能的Layer-1区块链,它使用一种名为历史证明(PoH)的共识机制,并结合权益证明(Proof of Stake)来实现高交易吞吐量。其原生代币是SOL,用于支付网络上的交易费用。Solana运行四种不同的网络环境,在Solana术语中,每一种都被称为一个集群。主网Beta、开发网、测试网和本地网都是Solana集群,各有其验证者、交易历史和账户状态。
在本指南结束时,您将确切地了解每个集群的用途、哪个集群适合您当前的情况,以及连接到任何集群所需的精确命令、RPC端点和钱包步骤。
Solana主网、开发网和测试网
Solana运行四个并行网络环境。每个集群服务于开发和部署生命周期的特定阶段,类似于传统软件团队将开发环境与生产环境分开的方式。
以下是各自的单句描述:
- 主网Beta 是实时生产网络,在此网络上使用真实的SOL,并进行所有现实世界的活动。
- 开发网 是主要的开发者沙盒,在此可以构建和测试应用程序,使用免费、无价值的SOL。
- 测试网 是验证者运营商和核心协议工程师在更改到达主网Beta之前使用的压力测试环境。
- 本地网 是一个私有的Solana集群,完全在您自己的机器上运行,无需互联网连接。
您可以在Solana集群文档.)中找到所有Solana集群的权威概述。从主网Beta开始,以下是每个环境的作用以及何时使用它。
Solana主网Beta:实时生产网络
主网Beta是Solana的实时生产网络,是Solana区块链上所有真实经济活动发生的运行环境。尽管其名称中带有“Beta”,但这并非测试网络。该标签是Solana在2020年推出时的历史遗留物,并不意味着网络不完整或处于实验阶段。自推出以来,Solana一直将主网Beta作为其完整的生产环境运行。
所有活跃的dApp(去中心化应用程序)、DeFi协议、NFT市场和代币项目都在主网Beta上运行。您发送或接收的每一个真实的SOL交易都发生在这里。
主网Beta上的SOL具有真实的货币价值。 交易需要真实的SOL来支付费用,每笔交易通常只需一美分的一小部分。程序部署需要花费真实的SOL,并且是永久不可逆的。主网Beta的公共RPC端点是https://api.mainnet-beta.solana.com。
⚠️ 警告: 主网Beta上的任何交易或程序部署都使用真实的SOL,且无法撤销。在部署到生产环境之前,请务必在开发网上进行测试。
💡 提示: 在Solana浏览器上验证主网Beta交易。使用右上角的集群选择器,确认您正在查看主网Beta集群。
Solana开发网:开发者沙盒
开发网是Solana主要的开发者沙盒,一个公共集群,您可以在其中构建和测试程序,而无需冒任何真实SOL的风险。对于大多数Solana开发者来说,所有开发工作都在开发网上进行。
开发网上的SOL没有真实的货币价值。 它是通过水龙头(faucet)获得的免费测试货币,无法转移到主网Beta或兑换成真实的SOL。开发网的公共RPC端点是https://api.devnet.solana.com。
开发网会周期性重置,这意味着已部署的程序和账户余额可能会在未经通知的情况下被清除。开发者应将开发网状态视为临时状态,切勿依赖它来存储生产数据。
在开发网上获取免费SOL
水龙头(Faucet) 是一种分发开发网或测试网上免费测试SOL的服务。最快的方法是使用Solana CLI的空投命令。请注意,在此上下文中,“空投”指的是请求测试代币的开发者工具命令,而不是营销代币分发。
运行此命令可在开发网上请求2 SOL:
solana airdrop 2CLI空投每次请求限制为2 SOL,并设有频率限制。如果solana airdrop返回速率限制错误,请稍等几分钟再试,或使用以下基于Web的水龙头之一:
- faucet.solana.com(官方Solana水龙头)
- solfaucet.com(社区水龙头)
💡 提示: 在Solana浏览器上查看您的开发网交易,方法是选择集群切换器中的“开发网”。
在开发网上铸造的测试NFT没有真实价值,仅存在于开发网集群中。它们与主网Beta上的NFT并非相同的资产。
开发网是绝大多数Solana开发者的合适环境。如果您刚刚开始,请从这里入手。为了全面了解开发网与测试网和主网Beta在所有关键维度上的对比,请参阅下面的完整网络比较表。
Solana测试网:验证者和协议测试
测试网是Solana的网络环境,供验证者运营商和核心协议工程师使用,而非dApp或程序开发者。理解这一区别可以避免很多混淆。
验证者是处理和确认Solana网络上交易的节点。测试网专门用于使验证者运营商能够在将新的节点软件和协议升级应用于主网Beta之前进行测试。Solana核心工程团队使用测试网在现实条件下对性能改进和新功能进行压力测试。
测试网故意设计成比开发网不稳定。停机和重置更为常见,因为该网络被设计为会达到故障极限。公共RPC端点是https://api.testnet.solana.com。
测试网上的SOL没有真实的货币价值,与开发网上的SOL相同。
💡 建议: 如果您正在Solana上构建dApp、程序或代币,请使用开发网,而不是测试网。测试网并非为应用程序开发而设计,其不稳定性使其成为测试代码的糟糕选择。
本地网:您的本地测试验证者
本地网,也称为本地测试验证者,完全在您自己的机器上运行,无需互联网连接。它是第四种Solana集群类型,尽管大多数指南都忽略了它。
使用此命令启动本地网:
solana-test-validator启动后,本地网可以通过http://localhost:8899访问。与开发网不同,本地网不是一个共享的公共网络。只有您的本地计算机可以看到它,并且每次重新启动验证者进程时它都会重置。
Localnet 对于早期开发过程中的快速、私密迭代非常 iDEAL。由于没有网络延迟,程序交互的反馈是即时的。标准的开发工作流程是先在 Localnet 上进行本地构建和测试,然后部署到 Devnet 进行共享测试,最后部署到 Mainnet-Beta 进行生产环境运行。
Devnet 与 Localnet 的一个关键区别在于:Devnet 是一个任何人都可以访问的共享公共网络,这意味着您部署的程序对其他开发者可见,并且您的测试是针对共享的网络状态运行的。
Solana 网络对比:主网 (Mainnet) vs Devnet vs Testnet vs Localnet
下表从七个维度对比了所有四种 Solana 网络环境,以帮助您根据情况选择合适的集群。
| 环境 | 用途 | SOL 价值 | 稳定性 | 公共 RPC URL | 主要用户 | 数据持久性 |
|---|---|---|---|---|---|---|
| Mainnet-Beta | 正式生产环境 | 真实货币价值 | 高(生产级) | https://api.mainnet-beta.solana.com | 所有用户、dApp 开发者、终端用户 | 永久 |
| Devnet | 开发者沙盒 | 零(免费测试用 SOL) | 中(偶尔重置) | https://api.devnet.solana.com | 应用开发者、dApp 构建者 | 临时(定期重置) |
| Testnet | 验证节点/协议压力测试 | 零(免费测试用 SOL) | 低(故意的不稳定性) | https://api.testnet.solana.com | 验证节点运营商、核心工程师 | 临时(频繁重置) |
| Localnet | 本地开发 | 零(模拟) | 开发者控制 | http://localhost:8899 | 个人开发者 | 仅限会话(重启时重置) |
决策指南:
构建 dApp 或程序的应用开发者应使用 Devnet 进行所有测试。验证节点运营商则属于 Testnet。对于快速的本地迭代,Localnet 是最快的选择。仅在您的程序经过充分测试并准备好投入生产时,才将其部署到 Mainnet-Beta。
有关跨集群部署的逐步说明,请参阅下文的跨网络部署 Solana 程序章节。
各个网络的 Solana RPC 端点
RPC 端点是您的应用程序、CLI 或钱包用于向 Solana 集群发送请求的 URL。RPC 代表远程过程调用 (Remote Procedure Call),但您只需要知道其实际定义:它是您的工具指向的用于读取和写入特定网络数据的地址。
| 集群 | 公共 RPC URL | 速率限制说明 |
|---|---|---|
| Mainnet-Beta | https://api.mainnet-beta.solana.com | 有速率限制;不推荐用于生产环境应用 |
| Devnet | https://api.devnet.solana.com | 有速率限制;足以满足开发需求 |
| Testnet | https://api.testnet.solana.com | 有速率限制;网络不稳定 |
| Localnet | http://localhost:8899 | 无速率限制;仅限本地 |
公共 RPC 端点存在速率限制,不适合高流量的生产环境应用。对于生产环境的 Mainnet-Beta 使用,Helius、QuickNode 和 Alchemy 等第三方 RPC 提供商提供更高的速率限制和额外的工具支持。对于 Devnet 上的所有开发和测试工作,公共端点已足够。
Solana CLI 和 @solana/web3.js 库都直接接受这些 URL。以下章节将展示具体如何配置各个工具。
如何使用 CLI 在 Solana 网络之间切换
核心 Solana CLI(solana 命令,而非 Anchor CLI 或 web3.js 库)控制您的工具连接到哪个集群。所有网络配置都通过 solana config 进行。
请按照以下步骤检查并切换您的活动集群:
1. 检查当前的网络配置。
此命令显示您当前的 RPC URL,确认您已连接到哪个集群。
solana config get2. 切换到 Devnet。
solana config set --url devnet3. 切换到 Testnet。
solana config set --url testnet4. 切换到 Mainnet-Beta。
solana config set --url mainnet-beta5. 切换到 Localnet。
solana config set --url localhost6. 切换后请求 Devnet SOL 空投。
solana airdrop 2简写名称(devnet、testnet、mainnet-beta)直接映射到上方 Solana RPC 端点参考中列出的公共 RPC 端点。使用 solana config set --url devnet 等同于传入完整 URL https://api.devnet.solana.com。
如果 solana config get 显示了非预期的集群 URL,可能是另一个工具或脚本更新了您的配置。在进行任何其他操作之前,请运行相应的 solana config set --url 命令进行修正。
⚠️ 警告: 在部署程序或发送交易之前,务必运行
solana config get。如果您打算部署到 Devnet 却部署到了 Mainnet-Beta,将消耗真实的 SOL 且无法撤销。
使用 web3.js 连接到 Solana 网络
@solana/web3.js 库是与 Solana 集群交互的官方 JavaScript 和 TypeScript 库。它提供了一个名为 clusterApiUrl() 的便捷函数,可返回指定名称集群的公共 RPC URL。
使用以下代码连接到各个网络:
import { Connection, clusterApiUrl } from '@solana/web3.js';
// 连接到 Devnet
const connection = new Connection(clusterApiUrl('devnet'), 'confirmed');
// 连接到 Mainnet-Beta
const connection = new Connection(clusterApiUrl('mainnet-beta'), 'confirmed');
// 连接到 Testnet
const connection = new Connection(clusterApiUrl('testnet'), 'confirmed');直接对 RPC URL 进行硬编码也同样有效,且能为您提供更多控制权:
// 使用明确的 RPC URL
const connection = new Connection('https://api.devnet.solana.com', 'confirmed');对于生产环境的 Mainnet-Beta 应用程序,请将公共 URL 替换为您从第三方提供商处获取的私有 RPC 端点。clusterApiUrl() 函数仅返回公共端点。
Solana web3.js 是独立于 Anchor 框架的 TypeScript 客户端的一个库。两者可以在同一个项目中配合使用,但服务于技术栈的不同层级。连接后,您可以通过在右上角的切换器中选择匹配的集群,在 Solana Explorer 验证您的交易。完整的 API 请参考 Solana web3.js 库参考)。
跨网络部署 Solana 程序
Solana 程序 (Solana Program) 是 Solana 对链上可执行代码的称呼,用于处理来自客户端的指令(相当于以太坊上的智能合约)。程序是针对特定集群的。
部署到 Devnet 的程序在 Mainnet-Beta 上并不存在。每个集群都维护着自己完全独立的状态,您必须将程序分别部署到每个您希望其运行的网络上。这是开发者在部署后找不到程序的最常见原因:他们部署到了 Devnet 却在 Mainnet-Beta 上查找,或者反之亦然。
配置 Anchor 进行部署
Anchor 框架是一个广泛使用的 Solana 程序开发框架。目标集群配置位于 Anchor.toml 文件的 [provider] 部分:
[provider]
cluster = "devnet"
wallet = "~/.config/solana/id.json"要部署到 Mainnet-Beta,请将 cluster 值更改为 "mainnet-beta" 并运行:
anchor deploy在运行 anchor deploy 之前,务必更新 Anchor.toml。Anchor CLI (anchor) 是独立于 Solana CLI (solana) 的工具。两者可能会在同一个工作流中使用。完整的配置选项请参考 Anchor 框架文档。
推荐的部署工作流程
在任何 Mainnet-Beta 发布之前,请遵循以下顺序:
- 使用 Localnet 进行本地构建和测试。
- 在 Devnet 上部署并测试。
- (可选,针对验证节点相关程序)在 Testnet 上测试。
- 仅在程序经过完全验证后,才部署到 Mainnet-Beta。
⚠️ **警告:**在部署到 Mainnet-Beta 之前,请在
Anchor.toml中验证您的集群设置,或运行solana config get。Mainnet-Beta 部署需要消耗真实的 SOL,且操作不可撤销。
真实 SOL 与测试 SOL:了解不同网络间的价值
Mainnet-Beta 上的 SOL 具有真实的货币价值。Devnet 和 Testnet 上的 SOL 真实货币价值为零;它是免费的测试货币,没有汇率,也没有转换为 Mainnet-Beta 的路径。
以下是详细明细:
- Mainnet-Beta SOL: 具有真实货币价值,可在交易所交易,用于支付交易费用。
- Devnet SOL: 免费,通过水龙头获取,没有兑换价值,无法转移到 Mainnet-Beta。
- Testnet SOL: 免费,通过水龙头获取,没有兑换价值,无法转移到 Mainnet-Beta。
⚠️ **警告:**Devnet 和 Testnet SOL 无法兑换成真实的 SOL,也无法转移到 Mainnet-Beta。请勿尝试交易或出售 Devnet 或 Testnet SOL。它在各自的集群之外没有任何价值。
自 Solana 2020 年上线以来,Mainnet-Beta 中的“Beta”标签一直引起困惑。从任何实际意义上讲,Mainnet-Beta 都不是测试版产品;它已处理了价值数十亿美元的 DeFi 和 NFT 交易,并且是唯一进行真实 Solana 活动的网络。该名称是 Solana 保留的历史惯例。
如果切换网络后您的 Phantom 余额显示为零,上述 Phantom 钱包部分中的切换网络说明将解释如何恢复 Mainnet-Beta 视图。
本文仅供教育和技术参考,不构成财务建议,也不代表对任何加密货币投资的认可。
相关 Solana 架构资源
部署概念与 面向开发者的 Solana 账户模型 相关,而 Mainnet-Beta 的性能取决于 为什么 Solana 既快又便宜的架构解析 中描述的架构。只有主网 SOL 具有市场价值:SOL 价格页面 和 SOL/USDT 现货市场 适用于主网 SOL,而不适用于 Devnet、Testnet 或 Localnet 代币。
常见问题解答:Solana 上的主网 (Mainnet)、开发网 (Devnet) 和测试网 (Testnet)
Solana Mainnet-Beta 是真实的主网吗?
是的。Mainnet-Beta 是 Solana 完全运行的实时生产网络。“Beta”标签是 Solana 在 2020 年发布时的历史命名惯例,并不表示该网络处于实验阶段或不完整。所有真实的 SOL 交易、dApp、DeFi 协议和 NFT 项目都在 Mainnet-Beta 上运行。
Devnet SOL 是否具有真实价值?
没有。Devnet SOL 的实际货币价值为零。它是通过水龙头分发的免费测试货币,仅存在于 Devnet 集群中。它无法转移到 Mainnet-Beta,无法兑换为真实的 SOL,也无法在任何交易所使用。
我可以在主网上使用 Devnet SOL 吗?
不可以。Devnet 和 Mainnet-Beta 是完全独立的网络,状态不共享。SOL 独立存在于每个集群中。没有任何机制可以将 Devnet SOL 转移到 Mainnet-Beta。
为什么我在钱包里看不到我的 SOL?
钱包可能连接到了 Devnet 或 Testnet,而不是 Mainnet-Beta。根据最新的支持文档检查钱包当前的网络设置和地址,然后重新连接到 Mainnet-Beta。在假设余额已变动之前,请在匹配的区块链浏览器上验证地址。
Solana 上的 Devnet 和 Testnet 有什么区别?
Devnet 专为构建 dApp 和程序的应用程序开发者设计。它稳定,拥有可运行的水龙头,是所有开发工作的推荐环境。Testnet 专为验证节点运营商和核心协议工程师设计,用于对新软件进行压力测试。它刻意降低了稳定性,不适合应用程序开发。
什么是 Solana 集群 (Cluster)?
Solana 集群是一个网络环境,即 Solana 对其他区块链所称的“网络”或“链”的术语。Mainnet-Beta、Devnet、Testnet 和 Localnet 都是 Solana 集群。每个集群都是一个独立的网络,拥有自己的验证节点、交易历史和账户状态。
Localnet 和 Devnet 有什么区别?
Localnet 完全在您自己的机器上运行,不需要互联网连接,使其成为最快的测试环境。Devnet 是一个任何人都可以访问的共享公共网络。使用 Localnet 进行快速本地迭代,然后在移至 Mainnet-Beta 之前部署到 Devnet 以在共享环境中进行测试。
为什么我的交易在 Solana 上失败了?
如果您的交易意外失败,请先验证您是否连接到了正确的集群。在 CLI 中运行 solana config get 或检查钱包中的网络指示器。交易失败的一个常见原因是连接到了错误的网络。例如,当您的 CLI 或钱包指向 Devnet 时,尝试与 Mainnet-Beta 程序交互将导致交易失败。
总结:您应该使用哪个 Solana 网络?
选择哪个网络完全取决于您正在执行的操作。以下是对应各使用场景的决策:
- 构建或测试 Solana 程序或 dApp → 使用 Devnet
- 快速本地开发和迭代 → 使用 Localnet
- 运行或测试验证节点 → 使用 Testnet
- 为真实用户发布生产应用程序 → 部署到 Mainnet-Beta
- 使用真实 SOL 进行交易、DeFi 或 NFT → 使用 Mainnet-Beta(默认选项)
如有疑问,请从 Devnet 开始。对于任何开始 Solana 开发的人来说,它是最安全、最稳定且最易于访问的环境。
如需进一步参考,请查阅官方 Solana 集群文档,并在 Solana Explorer 上验证任何交易。