Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
OnFinality Learn
集成与开发阅读约 10 分钟

测试代币:测试网水龙头、测试 ERC-20 与安全验证的实用指南

了解测试代币的工作原理、如何获取和铸造它们,以及如何在不冒真实资产风险的情况下验证智能合约和 dApp。

TL;DR

测试代币是在测试网络上发行的免费、无价值资产,让开发者能够在不冒真实资金风险的情况下测试智能合约、钱包和 dApp。本指南解释了测试代币背后的思维模型,如何从水龙头获取它们或铸造自己的 ERC-20,以及如何运行可复现的验证流程。它还涵盖了验证、故障排除,以及依赖公共测试网与私有或专用环境的权衡。

什么是测试代币以及本指南涵盖的内容

测试代币是仅存在于测试网上的区块链资产——测试网是一个与主网行为平行但使用无价值货币的网络。它们让你能够部署合约、模拟转账和测试钱包流程,而无需花费真实资金。与生产代币不同,测试代币没有市场价值,绝不应被视为投资。

本指南涵盖完整生命周期:从水龙头获取测试代币、铸造自己的测试 ERC-20、在脚本中使用它们、验证预期结果以及排查常见故障。本指南假设你拥有一个基本钱包、可访问测试网 RPC 端点,并熟悉以太坊风格的交易。关于端点选择,请参阅 RPC 端点指南。

  • 测试代币是免费且特定于网络的;它们不会转移到主网。
  • 水龙头通常按地址和网络限制请求频率。
  • 如果你需要自定义供应量或行为,可以铸造自己的测试代币。

先决条件与假设

在开始之前,请确保你拥有一个由你控制私钥的钱包(切勿使用主网密钥)、一个测试网 RPC URL 以及少量原生测试网 gas 代币(例如测试网 ETH)。如果你计划运行 JavaScript 示例,还需要 Node.js 和 npm;对于 Python 示例,则需要 Python 3 和 web3.py。

所有代码示例都使用诸如 RPC_URL 和 PRIVATE_KEY 之类的占位符。请将它们替换为你自己的值。切勿将私钥提交到版本控制中。

测试代币的工作原理:水龙头、铸造与网络隔离

测试代币有两个主要来源:水龙头和自铸造。水龙头是向钱包地址分发少量原生或 ERC-20 测试代币的服务,通常有速率限制。它们对于测试网 USDC 或包装 ETH 等标准代币很方便。自铸造涉及在测试网上部署自己的 ERC-20 合约并调用其 mint 函数;这让你完全控制供应量和代币行为。

测试网与主网隔离:Sepolia 上的交易不会影响以太坊主网,测试代币也无法跨链到主网。这种隔离正是它们可以安全用于实验的原因。然而,测试网状态可能会被网络运营商重置,因此不要依赖测试代币进行长期持久化。

  • 水龙头最适合原生 gas 代币和常见稳定币。
  • 自铸造代币最适合自定义逻辑、访问控制或大供应量。
  • 在发送交易之前,务必验证测试网链 ID。

从水龙头获取测试代币

水龙头的工作流程各不相同,但大多数要求你连接钱包或粘贴地址、选择网络并请求代币。一些水龙头需要身份验证或最低钱包余额以防止滥用。请求后,等待交易确认并检查你的余额。

以下 curl 示例查询一个通用水龙头 API(将 FAUCET_URL 和 ADDRESS 替换为实际值)。这仅是示例;并非所有水龙头都公开 API。

curl -X POST "FAUCET_URL/request" \
  -H "Content-Type: application/json" \
  -d '{"address":"ADDRESS","network":"sepolia"}'

铸造自己的测试 ERC-20:合约与部署

如果你需要自定义测试代币,请在测试网上部署一个最小的 ERC-20 合约。以下是一个带有开放 mint 函数用于测试的 Solidity 合约。请勿在生产环境中使用。

使用 Hardhat 或 Remix 编译并部署。部署后,使用你的地址和所需数量调用 mint。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract TestToken is ERC20 {
    constructor() ERC20("TestToken", "TEST") {}

    function mint(address to, uint256 amount) external {
        _mint(to, amount);
    }
}

在 JavaScript 脚本中使用测试代币

一旦你拥有测试代币,就可以使用 ethers.js 与它们交互。下面的脚本连接到测试网 RPC,检查测试 ERC-20 的余额,并将代币转移到另一个地址。将 TOKEN_ADDRESS、RECIPIENT 和 PRIVATE_KEY 替换为你的值。

使用 node script.js 运行。确保钱包有足够的原生 gas 代币用于转账。

const { ethers } = require("ethers");

const provider = new ethers.JsonRpcProvider("RPC_URL");
const wallet = new ethers.Wallet("PRIVATE_KEY", provider);
const tokenAddress = "TOKEN_ADDRESS";
const abi = ["function balanceOf(address) view returns (uint256)", "function transfer(address,uint256) returns (bool)"];
const token = new ethers.Contract(tokenAddress, abi, wallet);

async function main() {
  const balance = await token.balanceOf(wallet.address);
  console.log("Balance:", ethers.formatUnits(balance, 18));
  const tx = await token.transfer("RECIPIENT", ethers.parseUnits("1", 18));
  await tx.wait();
  console.log("Transfer confirmed");
}

main().catch(console.error);

使用结果表验证预期结果

运行测试后,将结果记录在结果表中,以比较预期行为与实际行为。以下是一个模板;填写你自己的测量值。不要编造数字——运行流程并记录实际值。

测试用例预期结果实际结果通过/失败
水龙头请求2 分钟内收到代币
代币余额余额等于铸造数量
转账接收者余额增加相应数量
Gas 估算交易在足够 gas 下成功

使用此表记录每次运行并识别回归。

排查常见的测试代币问题

常见问题包括水龙头速率限制、gas 不足、网络错误和合约未验证。如果水龙头返回错误,请检查速率限制并稍后重试。如果交易失败,请确保钱包有原生测试网 gas 且代币合约地址正确。

对于 RPC 相关错误,请验证端点是否响应并指向正确的链 ID。你可以使用简单的 curl 请求 RPC URL 来测试连通性。

  • 水龙头限制超出:等待冷却期。
  • 交易回滚:检查代币余额和 gas。
  • 网络错误:确认钱包和 RPC 中的链 ID。
  • 合约未找到:验证地址和测试网。

公共测试网的局限性与权衡

公共测试网免费但有代价:速率限制、不可靠的水龙头和偶尔的网络重置。它们可能无法反映主网的 gas 成本或拥堵情况。对于重度测试,考虑私有测试网或专用节点环境。OnFinality 提供 专用节点 服务,可提供隔离的测试环境。

测试代币没有货币价值,绝不应在生产中使用。在主网部署前务必审计合约。

后续步骤:从测试代币到生产就绪

使用测试代币验证后,转向一个紧密镜像主网的暂存环境。为测试网和主网使用可靠的 RPC 提供商。探索 OnFinality 的 API 服务 和 RPC 定价 以获取可扩展的基础设施。关于特定网络的指南,请参阅 支持的网路。

关于端点建议,请查阅 RPC Assistant 文章,例如 最佳以太坊 RPC API 和 Solana devnet 指南。

永远不用担心基础设施

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

开始