You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Alchemy WebSocket Provider时遇“could not detect network”错误求助

问题修复:以太坊地址余额检查脚本的NETWORK_ERROR错误

问题描述

我有一个包含超100万条以太坊地址与对应私钥的文件,每行地址和私钥仅用逗号分隔,示例:
0x7256bCf73C2309893AA12d6b26A142AB3097560c,0x5281130a3a84f531a1e30649a881207a65ce17fae084e0ae6e78xxxxxxxxxxxx

希望用Node.js编写脚本,检查每行地址余额是否大于0,并导出符合条件的地址及私钥到新文件,但运行脚本时始终出现以下错误:

var error = new Error(message);
            ^

Error: could not detect network (event="noNetwork", code=NETWORK_ERROR, version=providers/5.6.8)
    at Logger.makeError (C:\Users\Asus\Downloads\eth-fast-mnemonic-checker-main\eth-fast-mnemonic-checker-main\node_modules\@ethersproject\logger\lib\index.js:233:21)
    at Logger.throwError (C:\Users\Asus\Downloads\eth-fast-mnemonic-checker-main\eth-fast-mnemonic-checker-main\node_modules\@ethersproject\logger\lib\index.js:242:20)
    at WebSocketProvider.<anonymous> (C:\Users\Asus\Downloads\eth-fast-mnemonic-checker-main\eth-fast-mnemonic-checker-main\node_modules\@ethersproject\providers\lib\json-rpc-provider.js:561:54)
    at step (C:\Users\Asus\Downloads\eth-fast-mnemonic-checker-main\eth-fast-mnemonic-checker-main\node_modules\@ethersproject\providers\lib\json-rpc-provider.js:48:23)
    at Object.throw (C:\Users\Asus\Downloads\eth-fast-mnemonic-checker-main\eth-fast-mnemonic-checker-main\node_modules\@ethersproject\providers\lib\json-rpc-provider.js:29:53)
    at rejected (C:\Users\Asus\Downloads\eth-fast-mnemonic-checker-main\eth-fast-mnemonic-checker-main\node_modules\@ethersproject\providers\lib\json-rpc-provider.js:21:65)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  reason: 'could not detect network',
  code: 'NETWORK_ERROR',
  event: 'noNetwork'
}

初始脚本

const fs = require('fs')
const ethers = require('ethers')
require('colors')

const provider = new ethers.providers.WebSocketProvider(
    'wss://eth-mainnet.g.alchemy.com/v2/k5d8RoDGOyxZmVWy2UPNxxxxxxxxxxxx'
)

const addresses = fs
    .readFileSync('hits.txt', 'utf8')
    .split('\n')
    .map((val) => {
        return val.split(',')
    })

;(async () => {
    for (let i = 0; i < addresses.length; i++) {
        const address = addresses[i][0]
        const balance = await provider.getBalance(address)

        if (balance.gt(0)) {
            console.log(address.bgGreen.black, balance.toString().bgGreen.black)
            console.log('Private Key: '.yellow, addresses[i][1])
        } else {
            console.log(address, 0)
        }
    }
})()

修复方案

1. 替换WebSocket Provider为HTTP Provider

WebSocket连接易受网络环境干扰,改用HTTP Provider更稳定,适合批量查询:

const provider = new ethers.providers.JsonRpcProvider(
    'https://eth-mainnet.g.alchemy.com/v2/k5d8RoDGOyxZmVWy2UPNxxxxxxxxxxxx'
)

2. 过滤无效数据与空行

原脚本未处理文件末尾空行或格式错误的行,需添加过滤逻辑:

const addresses = fs
    .readFileSync('hits.txt', 'utf8')
    .split('\n')
    .filter(line => line.trim() !== '' && line.includes(',')) // 剔除空行和无效格式行
    .map(line => line.trim().split(','))

3. 添加频率控制与错误捕获

百万级数据批量查询会触发API限流,需加入延迟;同时捕获请求异常避免脚本崩溃:

// 延迟函数,控制请求频率
const delay = ms => new Promise(resolve => setTimeout(resolve, ms))

// 循环内添加异常处理与延迟
for (let i = 0; i < addresses.length; i++) {
    try {
        const [address, privateKey] = addresses[i]
        const balance = await provider.getBalance(address)
        const ethBalance = ethers.utils.formatEther(balance)
        
        if (parseFloat(ethBalance) > 0) {
            console.log(`${address.bgGreen.black} 余额: ${ethBalance.bgGreen.black}`)
            console.log('私钥: '.yellow, privateKey)
            fs.appendFileSync('valid_addresses.txt', `${address},${privateKey}\n`)
        } else {
            console.log(`${address} 余额: 0`)
        }
        // 每100次请求添加延迟,避开API限流
        if (i % 100 === 0 && i !== 0) {
            await delay(1000)
        }
    } catch (err) {
        console.error(`查询地址${addresses[i][0]}失败:`, err.message)
        await delay(3000) // 错误时延迟重试
    }
}

4. 验证API密钥有效性

确认Alchemy API密钥正确,登录后台检查密钥状态,确保已开启以太坊主网权限。

完整修复后的脚本

const fs = require('fs')
const ethers = require('ethers')
require('colors')

// 使用HTTP Provider提升连接稳定性
const provider = new ethers.providers.JsonRpcProvider(
    'https://eth-mainnet.g.alchemy.com/v2/k5d8RoDGOyxZmVWy2UPNxxxxxxxxxxxx'
)

// 读取并过滤有效地址数据
const addresses = fs
    .readFileSync('hits.txt', 'utf8')
    .split('\n')
    .filter(line => line.trim() !== '' && line.includes(','))
    .map(line => line.trim().split(','))

// 延迟函数控制请求频率
const delay = ms => new Promise(resolve => setTimeout(resolve, ms))

;(async () => {
    // 初始化结果文件(清空或创建)
    fs.writeFileSync('valid_addresses.txt', '')
    
    for (let i = 0; i < addresses.length; i++) {
        try {
            const [address, privateKey] = addresses[i]
            // 获取余额并转换为ETH格式
            const balance = await provider.getBalance(address)
            const ethBalance = ethers.utils.formatEther(balance)
            
            // 检查余额是否大于0
            if (parseFloat(ethBalance) > 0) {
                console.log(`${address.bgGreen.black} 余额: ${ethBalance.bgGreen.black}`)
                console.log('私钥: '.yellow, privateKey)
                // 追加写入有效地址文件
                fs.appendFileSync('valid_addresses.txt', `${address},${privateKey}\n`)
            } else {
                console.log(`${address} 余额: 0`)
            }
            
            // 每100次请求触发延迟,避免API限流
            if (i % 100 === 0 && i !== 0) {
                console.log('--- 触发限流延迟 ---'.gray)
                await delay(1000)
            }
        } catch (err) {
            console.error(`查询失败(${addresses[i][0]}):`, err.message.red)
            // 错误时延迟3秒后继续执行
            await delay(3000)
        }
    }
    console.log('=== 所有地址查询完成 ==='.cyan)
})()

内容的提问来源于stack exchange,提问作者Nikhil Meena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:55:20