在任何 EVM 链上用 Ethers.js 一键生成钱包地址与私钥

·

Ethers.js 已经成为区块链开发者最常用的 以太坊及兼容 EVM 链交互库。它轻量、易读、功能全,支持 Polygon、Celo、Base、OP Mainnet 等多条网络。本教程将是「Ethers.js 开发实战系列」的开篇:用最干净的代码,快速帮你生成 钱包地址私钥


Step 1:准备你要接入的 RPC 端点

RPC 端点 就是你和后端链「打电话」的号码。把它替换到你的代码里,即可读取链上数据、发送交易、调用合约。

当你拿到类似
https://polygon-amoy.g.alchemy.com/v2/XXXXXXXXXXXXXXXXHTTPS URL 后,把它粘过来就可以用了。


Step 2:安装环境 & 依赖

本教程基于 Node.js,请在终端核对版本:

node -v    # 推荐 Node 18.0+
  1. 初始化空项目

    mkdir ethers-wallet-example && cd ethers-wallet-example
    npm init -y
  2. 安装 ethers

    npm i ethers@6
  3. 新建入口文件

    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.jsethers, 以太坊, EVM
JsonRpcProvider用给定 RPC 端点 初始化 providerJSON-RPC, 测试链
Wallet.createRandom()随机 生成地址与私钥钱包助记词, 私钥管理
wallet.privateKey导出 私钥(务必⚠️保密)私钥, 密钥保管

场景扩展示例

👉 想要更高阶的钱包自动化脚本?点这里快速跳转,解锁更多实战技巧。


FAQ | 高频疑问解答

  1. Q:生产环境能否直接使用 createRandom?
    A:不建议。createRandom 适合脚本与测试。生产应使用 安全硬件钱包钱包即服务(WaaS) 多级签名方案。
  2. Q:助记词为什么调不出来?
    A:createRandom() 默认只生成私钥+地址,如需助记词请用 Wallet.fromPhrase() 或用 mnemonic-english 辅助库。
  3. Q:主网突然报 insufficient funds
    A:主网 真实手续费 较高,先确保钱包拥有 原生代币(如 ETH、MATIC)再操作。
  4. Q:私钥不小心泄漏怎么办?
    A:立即把资金 转走或注销,切勿再用该私钥签名。
  5. 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 点?杏

  1. RPC 端点承担什么功能?
  2. 为何 Wallet.createRandom 每次私钥都不同?
  3. 把 Alchemy 换成本地盘节点,需要改动哪一行?
  4. 如果私钥丢失,是否能通过区块链找回?
  5. 试试看把以上脚本跑在 Binance Smart Chain 的网络,结果会长成什么样?

下一步阅读

生成钱包只是起点,下一篇我们将深入 签名、合约调用、离线交易广播——全部都是基于同一行 const provider = new ethers.JsonRpcProvider(...)

👉 收藏一下后续进阶合集,别错过最潮开发实践