以下把 ethers.js 从 0 到 1 的全部知识点拆成 「基础 → 进阶 → 高级 → 实战」 4 个阶段,一张清单学完即可独立开发 DApp。
✅ 阶段 1:基础必会(入门 1 天)
| 任务 | 关键代码/要点 |
|---|---|
| 安装 | npm install ethers 或浏览器 <script src=".../ethers.umd.min.js"> |
| 连接节点 | const provider = new ethers.JsonRpcProvider('http://127.0.0.1:8545') |
| 连接钱包 | const provider = new ethers.BrowserProvider(window.ethereum) |
| 助记词→钱包 | const wallet = ethers.Wallet.fromPhrase(mnemonic, provider) |
| 查 ETH 余额 | const bal = await provider.getBalance(address) |
| 发送 ETH | await signer.sendTransaction({to, value: ethers.parseEther("1")}) |
| 读 ERC20 | const dai = new ethers.Contract(addr, ERC20_ABI, provider) |
| 单位换算 | ethers.parseUnits("1.5", 18) / ethers.formatUnits(balance, 18) |
✅ 阶段 2:进阶必备(2-3 天)
| 任务 | 关键代码/要点 |
|---|---|
| 事件监听 | contract.on("Transfer", (from, to, value) => {...}) |
| 历史事件查询 | contract.queryFilter("Transfer", fromBlock, toBlock) |
| 签名消息 | const sig = await signer.signMessage("Hello") |
| 离线签名 | await wallet.signTransaction(tx) |
| 批量调用 | Promise.all([...]) 或 Multicall |
| EIP-1559 交易 | maxFeePerGas, maxPriorityPerGas 参数 |
| HD 钱包 | const hdNode = ethers.HDNodeWallet.fromSeed(seed) |
✅ 阶段 3:高级技巧(1 周)
| 任务 | 关键代码/要点 |
|---|---|
| 自定义 Provider | new ethers.WebSocketProvider('wss://...') |
| EIP-712 结构化签名 | await signer.signTypedData(domain, types, value) |
| EIP-7702 委托交易 | 设置 authorizationList 发送 0x04 类型交易 |
| 离线构造 + 广播 | const raw = await wallet.signTransaction(tx); provider.broadcastTransaction(raw) |
| 合约工厂部署 | const factory = new ethers.ContractFactory(abi, bytecode, signer) |
| 代理合约升级 | 结合 @openzeppelin/hardhat-upgrades 部署透明代理 |
✅ 阶段 4:实战项目(边学边做)
| 项目 | 目标 | 涉及 ethers.js 要点 |
|---|---|---|
| ETH 批量转账 | 一次交易转多笔 | 构造数组 + 离线签名 |
| ERC20 批量转账 | 节省 gas | 调用合约批量函数 |
| 区块链推文系统 | 发布/读取推文 | 监听事件 + React 前端 |
| 前端 DApp | React + MetaMask | BrowserProvider, useContract, useSigner |
| 钱包浏览器插件 | 生成 HD 钱包 | HDNodeWallet, mnemonicToEntropy, 导出私钥 |
🎯 学习顺序建议
-
先跑通「查余额 + 发 ETH」(基础)
-
再跑通「读 ERC20 + 转账」(进阶)
-
做一个小批量转账脚本(实战)
-
升级到 React + 事件监听 DApp(高级)
857

被折叠的 条评论
为什么被折叠?



