关于 ethers-js
ethers-js 是供开发者在浏览器或 Node.js 中构建 Ethereum 应用的 JavaScript 库,提供钱包、节点连接、交易、合约和数据编码等功能。
主要功能
- 01创建、导入和派生钱包
- 02连接 Ethereum 节点
- 03签名并发送交易
- 04读写智能合约
- 05处理事件和 multicall
- 06编码数据并计算哈希
适用场景
- 01为 dApp 构建钱包功能
- 02读取代币余额并转账
- 03通过 JavaScript 发送 Ethereum 交易
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill ethers-js安装后在 Claude Code 中输入/ethers-js确认已加载。
详细介绍
ethers-js
用途
Ethers.js 是一个用于与 Ethereum 区块链交互的 JavaScript 库,支持开发者以编程方式管理钱包、签署交易和调用智能合约。它封装了底层 Ethereum API,让 Web 和 Node.js 应用更容易集成。
使用场景
在 JavaScript 环境中构建需要钱包操作、交易处理或智能合约交互的 Ethereum dApp 时,可以使用 ethers.js。对于需要 Web3.js 轻量替代方案的项目,它很合适,尤其适用于基于浏览器或服务端的 Ethereum 脚本。
主要功能
- 钱包管理:使用助记词或私钥创建、导入和派生钱包。
- Provider 支持:通过 HTTP、WebSocket 或 Infura 等第三方服务连接到 Ethereum 节点。
- 交易处理:签署并发送交易,包括 Gas 估算和 nonce 管理。
- 智能合约交互:使用 ABI 定义读取和写入合约,并支持事件和 multicall。
- 实用函数:针对 Ethereum 特定任务编码/解码数据、处理大数并计算哈希。
使用模式
始终在 JavaScript 文件中将 ethers.js 作为模块导入。先初始化 provider,再创建钱包或 signer。对于异步操作,请使用 async/await 模式。为所有区块链调用设置错误捕获,以处理网络故障。使用环境变量存储私密数据,例如私钥(如 process.env.PRIVATE_KEY)。
常用命令/API
- 创建钱包:使用
ethers.Wallet.createRandom()生成新钱包。const ethers = require('ethers'); const wallet = ethers.Wallet.createRandom(); console.log(wallet.address); - 连接到 provider:指定 URL,或使用带 API 密钥的 Infura。
const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/' + process.env.INFURA_API_KEY); - 调用智能合约:使用带有 ABI 和地址的
Contract类。const contract = new ethers.Contract(address, abi, signer); const result = await contract.functionName(arg1); - 签署并发送交易:通过 signer 准备并广播交易。
const tx = await signer.sendTransaction({ to: '0xAddress', value: ethers.utils.parseEther('1.0') });
集成说明
在 Node.js 项目中通过 npm 安装 ethers.js:npm install ethers。在浏览器中使用时,可通过 CDN 引入,或使用 Webpack 打包。如果使用 Infura 等第三方 provider,请将 API 密钥设为环境变量(例如 $INFURA_API_KEY),并将其传入 provider URL。如有需要,可使用 ethers.js 的 Web3Provider 封装器处理 Web3 兼容性。测试时,可使用 Hardhat 或 Ganache,并通过本地 provider 连接,例如 new ethers.providers.JsonRpcProvider('http://localhost:8545')。
错误处理
将所有 ethers.js 调用放在 try/catch 代码块中,以处理网络问题或无效输入等常见错误。检查特定错误类型,例如 provider 故障时的 ethers.errors.ServerError。使用 provider.on('error', handler) 监听事件错误。示例:
try {
await provider.getBlockNumber();
} catch (error) {
if (error.code === 'SERVER_ERROR') console.error('Network issue:', error.message);
}
操作前始终验证输入,例如使用 ethers.utils.getAddress(address) 确保地址采用校验和格式。
具体使用示例
-
生成并为钱包注资: 创建新钱包,获取其地址,并模拟从另一个账户为其注资。
const ethers = require('ethers'); const wallet = ethers.Wallet.createRandom(); const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL); console.log('New wallet address:', wallet.address);然后,在一笔从已注资钱包发起的交易中使用此地址发送 Ether。
-
与 ERC-20 代币合约交互: 连接到代币合约,查询余额并转账。
const abi = [{ "constant": true, "inputs": [{ "name": "_owner", "type": "address" }], "name": "balanceOf", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }]; const contract = new ethers.Contract('0xTokenAddress', abi, signer); const balance = await contract.balanceOf(signer.address); await contract.transfer('0xRecipient', ethers.utils.parseUnits('10', 18));
图关系
- 关联集群:区块链(例如,与 web3.js 等其他区块链工具共享关联)。
- 关联标签:ethereum(例如,与 Ethereum 开发技能相关)、javascript(例如,与基于 JS 的库相关)、blockchain(例如,与通用区块链工具相关)。