Ethers.js 已经成为区块链开发者最常用的 以太坊及兼容 EVM 链交互库。它轻量、易读、功能全,支持 Polygon、Celo、Base、OP Mainnet 等多条网络。本教程将是「Ethers.js 开发实战系列」的开篇:用最干净的代码,快速帮你生成 钱包地址 与 私钥。
Step 1:准备你要接入的 RPC 端点
RPC 端点 就是你和后端链「打电话」的号码。把它替换到你的代码里,即可读取链上数据、发送交易、调用合约。
- 推荐使用 公用测试节点 或 免费节点提供商(例如 Alchemy)。
- 本文演示 Polygon 的新测试网 Amoy,记得在节点后台勾选「Polygon Amoy Testnet」。
当你拿到类似 https://polygon-amoy.g.alchemy.com/v2/XXXXXXXXXXXXXXXX 的 HTTPS URL 后,把它粘过来就可以用了。
Step 2:安装环境 & 依赖
本教程基于 Node.js,请在终端核对版本:
node -v # 推荐 Node 18.0+初始化空项目
mkdir ethers-wallet-example && cd ethers-wallet-example npm init -y安装 ethers
npm i ethers@6新建入口文件
touch index.js
Step 3:写脚本,跑脚本
打开 index.js,复制下面这段代码,保存即可运行:
// 1. 引入 ethers
const { ethers, Wallet } = require("ethers");
// 2. 你的 RPC Endpoint
const rpcUrl = "https://polygon-amoy.g.alchemy.com/v2/YOUR_KEY";
// 3. 拿到 provider
const provider = new ethers.JsonRpcProvider(rpcUrl);
// 4. 随机生成钱包
const wallet = Wallet.createRandom(provider);
// 5. 提取信息
const address = wallet.address;
const privKey = wallet.privateKey;
// 6. 打印
console.log("📍Address:", address);
console.log("🔑Private Key:", privKey);运行
node index.js你会看到类似输出:
📍Address: 0x7E28b2A0F1A0...
🔑Private Key: 0x1eab2c7b6c...代码逐行拆解
| 行 | 作用说明 | SEO 关键词示例 |
|---|---|---|
require("ethers") | 引入 ethers.js | ethers, 以太坊, EVM |
JsonRpcProvider | 用给定 RPC 端点 初始化 provider | JSON-RPC, 测试链 |
Wallet.createRandom() | 随机 生成地址与私钥 | 钱包助记词, 私钥管理 |
wallet.privateKey | 导出 私钥(务必⚠️保密) | 私钥, 密钥保管 |
场景扩展示例
- 多链支持:把
rpcUrl换成任何 EVM 链即可——Celo、Optimism、Arbitrum、BSC……一行代码搞定。 - 批量生成:循环 1000 次_wallet = Wallet.createRandom()_ 就能快速生成大量 热钱包 用于 CI/CD 测试。
- 助记词导入:通过
ethers.Wallet.fromPhrase(mnemonic)可以把 HD 钱包助记词 还原为私钥与地址。
👉 想要更高阶的钱包自动化脚本?点这里快速跳转,解锁更多实战技巧。
FAQ | 高频疑问解答
- Q:生产环境能否直接使用 createRandom?
A:不建议。createRandom适合脚本与测试。生产应使用 安全硬件钱包 或 钱包即服务(WaaS) 多级签名方案。 - Q:助记词为什么调不出来?
A:createRandom()默认只生成私钥+地址,如需助记词请用Wallet.fromPhrase()或用mnemonic-english辅助库。 - Q:主网突然报
insufficient funds?
A:主网 真实手续费 较高,先确保钱包拥有 原生代币(如 ETH、MATIC)再操作。 - Q:私钥不小心泄漏怎么办?
A:立即把资金 转走或注销,切勿再用该私钥签名。 - Q:Node 17 以下版本能用吗?
A:部分旧版本会冲突;建议升级到 Node 18+,最低 16.17.0。
高级技巧:用 HD 钱包批量派生地址
如果你需要成千上万地址,可使用 HD 钱包(分层确定性钱包):
// 生成带助记词的 HD 根钱包
const { HDNodeWallet } = require("ethers");
const mnemonic = ethers.Mnemonic.fromPhrase("candy pizza comfort ...");
// 派生路径:m/44'/60'/0'/0/i,可循环 i 从 0~999
for (let i = 0; i < 1000; i++) {
const wallet = HDNodeWallet.fromMnemonic(mnemonic, `m/44'/60'/0'/0/${i}`);
console.log(`#${i} Address:`, wallet.address);
}小测:你能回答这 5 点?杏
- RPC 端点承担什么功能?
- 为何
Wallet.createRandom每次私钥都不同? - 把 Alchemy 换成本地盘节点,需要改动哪一行?
- 如果私钥丢失,是否能通过区块链找回?
- 试试看把以上脚本跑在 Binance Smart Chain 的网络,结果会长成什么样?
下一步阅读
生成钱包只是起点,下一篇我们将深入 签名、合约调用、离线交易广播——全部都是基于同一行 const provider = new ethers.JsonRpcProvider(...)。