ethers.js基础(学习路线清单)
以下把 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(高级)
BinSchool Web3开发者社区