mcpField
E
ethers-js

ethers-js

github.com/alphaonedev开发62 次安装
代码仓库

关于 ethers-js

ethers-js 是供开发者在浏览器或 Node.js 中构建 Ethereum 应用的 JavaScript 库,提供钱包、节点连接、交易、合约和数据编码等功能。

主要功能

  1. 01创建、导入和派生钱包
  2. 02连接 Ethereum 节点
  3. 03签名并发送交易
  4. 04读写智能合约
  5. 05处理事件和 multicall
  6. 06编码数据并计算哈希

适用场景

  1. 01为 dApp 构建钱包功能
  2. 02读取代币余额并转账
  3. 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) 确保地址采用校验和格式。

具体使用示例

  1. 生成并为钱包注资: 创建新钱包,获取其地址,并模拟从另一个账户为其注资。

    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。

  2. 与 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(例如,与通用区块链工具相关)。

评论

支持 Markdown