Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
OnFinality Learn
网络与协议指南阅读约 11 分钟

测试网加密货币:测试网络、水龙头和 RPC 端点如何运作

一份关于测试网加密货币的实用指南:什么是测试网、测试币和水龙头如何运作、如何配置测试网 RPC 端点,以及如何在接触主网之前验证你的设置。

TL;DR

测试网是一个独立的区块链网络,它镜像主网的执行环境,让开发者可以部署合约、转移测试币并演练升级,而无需冒真实资产的风险。测试网加密货币没有货币价值:测试币来自水龙头或在测试链上挖矿/验证,它们的存在只是为了支付测试网 gas。实际工作是针对正确的测试网链 ID 配置钱包和 RPC 客户端、获取测试代币,并验证交易按预期确认。本指南解释了心智模型,提供了可运行的配置和诊断代码,并展示了在将任何内容推广到生产环境之前如何解读结果。

测试网加密货币在实践中意味着什么

在加密货币中,测试网是一条平行的区块链,它运行与生产网络(主网)相同的客户端软件、虚拟机和交易格式,但使用不同的链 ID、独立的创世状态以及自己的一组验证者或排序器。由于执行环境是镜像的,一个在测试网上以某种方式运行的智能合约,在假设相同的字节码、依赖项和状态输入的情况下,应该在主网上以相同的方式运行。

"测试网加密货币"一词通常指开发者用于这种演练的测试币和测试网络:Sepolia ETH、BNB Smart Chain 测试网上的 tBNB、Avalanche Fuji 上的测试 AVAX,以及其他链上的类似资产。这些代币被故意设计为毫无价值。它们的存在是为了让你在测试时支付 gas,而水龙头免费分发它们,因为市场上没有需求。

与生产网络的关键区别不在于代码路径,而在于保证。测试网通常验证者较少、经济安全性较弱,并且不期望具有与主网相当的正常运行时间或最终性。将测试网的每一个结果视为关于行为的证据,而不是对生产性能或安全性的保证。

  • 测试网:独立的链 ID、独立的状态、免费的测试代币、较弱的安全假设。
  • 主网:真实的经济价值、生产级安全预算、不可逆的交易。
  • 开发网:通常是本地或单一运营者的链,用于在共享测试网之前进行单元级迭代。

假设与前提条件

本指南假设你已经拥有一个可以添加自定义网络的钱包(例如 MetaMask 或编程式钱包库)、具备如何发送交易的基本知识,并且可以访问你想要使用的测试网的 RPC 端点。它不假设你已经有测试币;获取测试币的方法将在下文介绍。

你需要测试网的链 ID、其原生测试代币符号以及一个 RPC URL。链 ID 发布在每个网络的文档和公共链列表中;始终从网络自己的文档而不是第三方博客确认链 ID,因为错误的链 ID 会导致你的客户端拒绝或错误路由交易。

对于代码示例,请将 RPC_URL 替换为你控制或已获发的测试网端点,将 PRIVATE_KEY 替换为一个一次性的测试密钥。切勿在测试网上使用持有主网资金的密钥,尽管网络是分开的,因为密钥卫生习惯才是保护你安全的关键。

测试网络如何镜像主网执行

测试网运行与其主网对应物相同的 EVM(或相同的非 EVM 运行时)。合约地址、ABI 编码、gas 计算和事件日志遵循相同的规则。变化的是链 ID、区块生产计划、验证者集合以及每个账户的状态。这就是为什么部署到 Sepolia 的合约可以用相同的字节码和相同的构造函数参数重新部署到以太坊主网,以及为什么在测试网上回滚的交易通常会在主网上因相同原因回滚。

镜像并不完美。测试网有时会领先主网运行即将到来的硬分叉,或者在升级筹备期间落后。它们可能有不同的 gas 限制、启用了不同的预编译合约,或不同的预言机和桥接可用性。刚刚重置或弃用的测试网不会反映你期望的状态。这就是本指南后面验证步骤重要的原因:你正在检查你所选择的特定测试网是否活跃,并且行为与你打算目标的主网一致。

对于运行自己基础设施的团队,服务主网的相同节点软件可以服务测试网,但数据目录、创世文件和对等节点发现必须针对测试网络进行配置。运行专用的测试网节点是在测试活动期间获得稳定、无速率限制访问的常见方式;有关如何配置,请参阅专用节点选项。

测试币、水龙头以及它们为何没有价值

测试币由测试网本身铸造或分发。在工作量证明测试链上,它们可以被挖矿;在权益证明测试链上,它们通常通过网络团队、基础设施提供商或生态系统项目运营的水龙头分发。水龙头只是一个向地址发送少量测试代币的服务,通常通过验证码、社交账户或最低主网余额来防止滥用。

因为任何人都可以免费获得测试币,它们没有货币价值,绝不应被视为投资。诈骗者偶尔会提出"出售"测试网代币或声称测试网空投有价值;两者都不合法。如果水龙头要求提供私钥或助记词,那就是恶意的。水龙头只需要公开地址。

水龙头限制是一个实际约束。如果你正在运行负载测试或多合约部署,你可能会耗尽水龙头的每日配额。在这种情况下,从同一网络的多个合法水龙头请求,或向网络的开发者关系渠道请求更大的配额。不要试图用女巫账户绕过速率限制;这会恶化所有人的共享资源。

  • 水龙头只需要你的公开地址,绝不需要私钥。
  • 测试代币是免费且无价值的;将任何付费提供视为诈骗。
  • 围绕部署和负载测试预算规划水龙头请求。

为测试网配置钱包和 RPC 客户端

第一个可运行的步骤是将客户端指向测试网。下面的示例使用 curl 对 JSON-RPC 端点进行调用,以确认链 ID 和当前区块号。将 RPC_URL 替换为你的测试网端点。预期结果是链 ID 与网络文档中的值匹配,并且区块号随时间推进。

curl -s -X POST "$RPC_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'

curl -s -X POST "$RPC_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"eth_blockNumber","params":[]}'

发送测试交易并验证确认

一旦链 ID 匹配,发送一笔小额测试交易并确认它被打包。下面的 JavaScript 示例使用 ethers 连接到测试网、读取余额并发送一笔简单转账。将 RPC_URL 和 PRIVATE_KEY 替换为你的测试值,将 TO_ADDRESS 替换为你控制的第二个地址。预期的验证结果是一个交易哈希,它解析为状态为 1 且区块号大于发送前观察到的区块号的收据。

import { JsonRpcProvider, Wallet, parseEther } from "ethers";

const provider = new JsonRpcProvider(process.env.RPC_URL);
const wallet = new Wallet(process.env.PRIVATE_KEY, provider);

const network = await provider.getNetwork();
console.log("chainId", network.chainId.toString());

const before = await provider.getBlockNumber();
const balance = await provider.getBalance(wallet.address);
console.log("balance", balance.toString());

const tx = await wallet.sendTransaction({
  to: process.env.TO_ADDRESS,
  value: parseEther("0.001")
});
console.log("sent", tx.hash);

const receipt = await tx.wait();
console.log("status", receipt.status, "block", receipt.blockNumber, "before", before);

测试网 RPC 健康状况的诊断流程

当测试网交易停滞或部署失败时,原因通常是端点而不是合约。在更改代码之前运行一个简短的诊断序列。下面的流程检查链 ID、区块高度进展、gas 价格以及已知合约是否响应。将每个结果记录在表格中,以便比较端点或时间窗口。

下面的结果表是一个模板,不是测量数据。填写你观察到的值。如果相隔一分钟采集的两个样本之间区块高度没有推进,端点可能已过期或测试网已暂停。如果 eth_gasPrice 返回不合理的值,端点可能正在提供缓存数据。

  • | 检查项 | 命令 | 预期 | 观察值 |
  • | 链 ID | eth_chainId | 与文档中的测试网 ID 匹配 | |
  • | 区块高度 | eth_blockNumber 两次 | 第二个值大于第一个 | |
  • | Gas 价格 | eth_gasPrice | 合理的非零值 | |
  • | 合约代码 | eth_getCode | 非空的 0x 前缀字节码 | |
curl -s -X POST "$RPC_URL" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'

curl -s -X POST "$RPC_URL" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"eth_gasPrice","params":[]}'

curl -s -X POST "$RPC_URL" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"eth_getCode","params":["CONTRACT_ADDRESS","latest"]}'

排查常见的测试网故障

大多数测试网问题属于少数几类。错误的链 ID 会导致客户端拒绝交易或将交易发送到错误的网络;对照网络文档重新检查链 ID。测试代币不足会导致 out-of-gas 或 insufficient-funds 错误;从水龙头请求并确认余额与 eth_getBalance。过期的端点返回旧的区块号或缓存的收据;切换端点并重新运行诊断表。

合约层面的故障则不同。测试网上的回滚通常表明真实的逻辑或访问控制问题,而不是网络问题。在假设测试网有问题之前,用你的工具解码回滚原因。如果交易无限期挂起,检查测试网的出块时间是否改变或排序器是否暂停;一些测试网有计划的维护窗口。

最后,确认你没有混淆网络。一个常见错误是部署到测试网但将前端指向主网,反之亦然。在每个环境的启动时记录链 ID,以便不匹配立即可见。

在测试网上测试的局限性和权衡

测试网是必要的但不是充分的。它们无法复现主网流动性、主网 gas 竞争或完整验证者集合在压力下的行为。在测试网上通过的合约仍可能因预言机价格差异、MEV 或仅存在于生产环境的状态而在主网上失败。将测试网结果视为过滤器,而不是保证。

测试网也是短暂的。网络会被弃用和替换,状态可以被重置。不要构建依赖特定测试网地址永久存在的长期集成。保持部署脚本按链 ID 和 RPC URL 参数化,以便你可以在不重写代码的情况下重新定位到新的测试网。

对于性能敏感的工作,测试网测量无法预测主网延迟。如果你需要表征端点行为,请在你实际将使用的网络上进行测量,并以一致的方法比较提供商。RPC 端点指南涵盖了如何构建这些比较。

后续步骤:从测试网到生产环境

一旦你的合约和客户端通过了诊断表以及一组有代表性的交易,下一步就是规划主网部署。这意味着针对主网分叉或预发布环境重新运行相同的测试、确认 gas 预算,并选择满足你延迟和可靠性要求的生产 RPC 基础设施。

如果你需要针对特定网络的具体端点推荐,RPC 助手直接涵盖提供商和网络选择。对于更广泛的基础设施规划,请查看网络目录和 RPC 定价选项,以使容量与预期负载相匹配。运行持续测试活动或生产流量的团队通常迁移到专用节点以避免共享速率限制。

  • 在启动前针对你的生产端点重新运行诊断表。
  • 参数化链 ID 和 RPC URL,使测试网和主网共享一个代码路径。
  • 查看 RPC 端点指南以了解比较方法。
  • 如果共享端点限制了你的测试吞吐量,请探索专用节点。

永远不用担心基础设施

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

开始