关键词:ETH 转账、Ethereum 地址、Sepolia 测试网、TypeScript、Ethers.js、Gas 费、钱包管理
通过 100% TypeScript 代码,一步一步完成从「生成新地址」到「链上确认 ETH 到账」的完整链路。跟着练,不再“只看图不见钱”。
前置条件
| 已满足? | 要求 |
|---|---|
| ✅ | 已准备 两个 Sepolia 测试网地址(A 发 / B 收) |
| ✅ | 钱包 A 有 3 ETH 以上余额用于转账 + Gas 费 |
| ✅ | 电脑已安装 Node.js 18+ |
| ✅ | 对 Solidity/Ethers.js/TypeScript 任一有「Hello World」级别好奇心即可 |
环境准备
npm init -y
npm i ethers typescript ts-node @types/node一个小贴士:ethers v6 已内置 TypeScript 类型,无需额外声明文件。
开发第一步:本地生成钱包地址
保存文件:generateAddress.ts
import { ethers } from 'ethers';
function generateEthereumAddress() {
const wallet = ethers.Wallet.createRandom();
console.log(`📍 地址 (公钥): ${wallet.address}`);
console.log(`🔐 私钥: ${wallet.privateKey}`);
// 安全起见:立即保存到本地 `.env.local`
}
generateEthereumAddress();运行:
npx ts-node generateAddress.ts输出示例:
📍 地址 (公钥): 0xD758f4b9Ba93091c7b89A...ABCD
🔐 私钥: 0x1234567890abcdef...👉 如果本地没有私钥保存习惯,可一站式生成并加密钱包文件防止泄露。
转账核心:执行 ETH 转账
创建文件:transfer.ts
import { ethers } from 'ethers';
import dotenv from 'dotenv';
dotenv.config(); // 读取 .env 里的私钥与 RPC
const senderPrivateKey = process.env.SENDER_PRIVATE_KEY!;
const recipientAddress = process.env.RECIPIENT_ADDRESS!;
const sepoliaProvider = new ethers.JsonRpcProvider(process.env.SEPOLIA_RPC || 'https://rpc.sepolia.org');
async function sendEth(amount: string) {
const wallet = new ethers.Wallet(senderPrivateKey, sepoliaProvider);
const tx = await wallet.sendTransaction({
to: recipientAddress,
value: ethers.parseEther(amount), // 0.05 ETH,可做批量发放
type: 2 // EIP-1559
});
console.log(`⏳ Tx Hash: ${tx.hash}`);
const receipt = await tx.wait();
console.log(`✅ 上链确认`, receipt);
console.log(`Gas Used: ${receipt!.gasUsed.toString()}`);
}
sendEth('0.05').catch(console.error);
.env模板SENDER_PRIVATE_KEY=0x... # 钱包 A 的私钥 RECIPIENT_ADDRESS=0x... # 钱包 B 的地址 SEPOLIA_RPC=https://rpc.sepolia.org
区块链浏览器验证
打开 Sepolia Etherscan 输入 Tx Hash,五步看懂:
- Status: Success
From为钱包 A,To为钱包 BValue: 0.05 ETHGas Used: 21,000Gas Price: 1.04 gwei
资产对账
| 钱包 | 初始余额 | 最终余额 | 变化说明 |
|---|---|---|---|
| A | 3.3455 | 3.295477 | 发送 0.05 ETH + 0.000023 ETH Gas |
| B | 0.27525 | 0.32525 | 收到 0.05 ETH 精准到账 |
Gas 与 baseFeePerGas×21000 走势相关,不是为了多扣你钱,而是为了矿工优先打包。批量转账的扩展思路
- Promise.all + Map:一次性 50 笔转 0.01 ETH,调用
batchSend(map)。 - Hardhat Tasks:在 CI 里定时空投测试币,保障开发测试高效循环。
- EIP-1159 动态小费:用
maxFeePerGas、maxPriorityFeePerGas优化上链速度。
常见问题与解答(FAQ)
Q1: 为什么我用 Goerli 跑不动?
A: Goerli 已逐步弃用,Sepolia 区块速度更快、官方水龙头稳定,改 Sepolia 即可。
Q2: 私钥在本地 .env 安全吗?
A: 永远别上传到 GitHub;如果不放心,使用 keystore 加密 或 硬件钱包。
Q3: TypeScript 类型报红怎么办?
A: 确保在 tsconfig.json 中启用 "esModuleInterop": true 与 "resolveJsonModule": true。
Q4: TX 一直 Pending?
A: Sepolia 偶尔拥堵,手动提升 Gas;将 maxPriorityFeePerGas 提高至 3 gwei 基本秒过。
Q5: 如何立刻拿到 5 个测试 ETH?
A: 去 OKX 领先的公共水龙头一次性可领 0.2 ETH,每隔 24h 刷新。
写在最后
一条链起码要转通一次,才算真正 闭环。用 TypeScript + Sepolia 先跑通,再到主网自然就心无旁骛。立即动手,把代码复制到本地,跑通它——Token 世界的大门从此打开。