ENS名称未配置报错求助:已购ENS但代码调用失败
问题分析与修复方案
错误根源
你遇到的ENS name not configured错误主要有两个核心原因:
- 使用的
JsonRpcProvider节点未内置ENS解析能力,或节点未同步ENS合约数据 - 代码本身存在语法、逻辑错误,同时ENS名称格式不符合解析要求
修复步骤
1. 解决ENS解析问题
方案A:使用支持ENS的公共RPC节点
替换你的空RPC地址为Alchemy、Infura等支持ENS解析的主网节点(比如https://eth-mainnet.g.alchemy.com/v2/your-api-key),这类节点默认内置ENS解析功能。
方案B:手动指定ENS解析器地址
如果必须使用自定义节点,手动添加主网ENS解析器地址:
const provider = new ethers.providers.JsonRpcProvider("YOUR_RPC_URL"); // 主网ENS解析器固定地址 provider.ensAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e";
方案C:提前解析ENS地址
在代码启动时预先解析ENS地址,避免每次交易时重复解析:
let addressReceiver; // 在bot函数外或内部提前解析 addressReceiver = await provider.resolveName("ens.eth"); // 注意ENS名称需小写 if (!addressReceiver) throw new Error("ENS名称解析失败,请检查绑定地址");
注意:ENS名称区分大小写,必须使用小写格式(如
ens.eth而非ENS.eth)才能正确解析。
2. 修复代码中的语法与逻辑错误
原代码存在函数定义错误、变量未定义、参数传递错误等问题,以下是修复后的完整代码:
const { ethers } = require('ethers'); // 替换为支持ENS的主网RPC节点 const provider = new ethers.providers.JsonRpcProvider("YOUR_RPC_URL"); // 可选:手动指定ENS解析器地址 provider.ensAddress = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; let addressReceiver; const privateKeys = ["YOUR_PRIVATE_KEY"]; // 修复函数定义错误:async后需加() const bot = async () => { // 提前解析ENS地址 addressReceiver = await provider.resolveName("ens.eth"); if (!addressReceiver) { console.error("ENS名称解析失败,请检查绑定地址"); return; } console.log("解析后的ENS地址:", addressReceiver); provider.on('block', async () => { console.log('监听新区块中...'); for (let i = 0; i < privateKeys.length; i++) { const _target = new ethers.Wallet(privateKeys[i]); const target = _target.connect(provider); const balance = await provider.getBalance(target.address); // 普通转账gasLimit固定为21000,无需重复估算 const gasLimit = 21000; const gasPrice = ethers.utils.parseUnits('10', 'gwei'); const totalGasCost = gasPrice.mul(gasLimit); // 检查余额是否足够支付gas+转账金额 if (balance.gt(totalGasCost)) { console.log("发现有余额的账户,准备转账"); const transferAmount = balance.sub(totalGasCost); try { const tx = await target.sendTransaction({ to: addressReceiver, value: transferAmount, gasLimit: gasLimit, gasPrice: gasPrice, // 获取待处理交易的nonce,避免重复交易 nonce: await provider.getTransactionCount(target.address, "pending") }); await tx.wait(); // 等待交易上链确认 console.log(`转账成功!转出金额:${ethers.utils.formatEther(transferAmount)} ETH,交易哈希:${tx.hash}`); } catch (e) { console.log(`转账失败:${e.message}`); } } } }); }; // 捕获启动时的错误 bot().catch(err => console.error("启动失败:", err));
3. 额外检查项
- 登录ENS官网确认你的ENS名称已正确绑定以太坊地址
- 确保使用的RPC节点是以太坊主网节点(测试网需对应测试网ENS地址)
- 检查私钥格式是否正确,无多余空格或字符
内容的提问来源于stack exchange,提问作者2troy
相关产品推荐
相关产品推荐

