使用Truffle部署合约到Avalanche Fuji测试网遇PollingBlockTracker超时错误
部署Avalanche Fuji测试网时的Socket连接超时问题分析与解决
问题描述
尝试使用Truffle将智能合约部署至Avalanche Fuji测试网,使用的Truffle配置代码如下:
require('dotenv').config(); const mnemonic = process.env["MNEMONIC"]; const infuraUrl = process.env["INFURA_URL"]; //https://avalanche-fuji.infura.io/v3/... const HDWalletProvider = require('@truffle/hdwallet-provider'); module.exports = { networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*" }, fuji: { provider: () => new HDWalletProvider(mnemonic, infuraUrl), network_id: "43113", gas: 5000000, networkCheckTimeout: 1000000, timeoutBlocks: 200, } }, ... };
执行命令 truffle migrate --network fuji 时出现以下错误:
Compiling your contracts... =========================== > Everything is up to date, there is nothing to compile. /Users/me/Projects/myProject/node_modules/eth-block-tracker/src/polling.js:51 const newErr = new Error(`PollingBlockTracker - encountered an error while attempting to update latest block:\n${err.stack}`) ^ Error: PollingBlockTracker - encountered an error while attempting to update latest block: undefined at PollingBlockTracker._performSync (/Users/me/Projects/myProject/node_modules/eth-block-tracker/src/polling.js:51:24) at processTicksAndRejections (node:internal/process/task_queues:95:5) at runNextTicks (node:internal/process/task_queues:64:3) at listOnTimeout (node:internal/timers:540:9) at processTimers (node:internal/timers:514:7) UnhandledRejections detected Promise { <rejected> { code: -32603, message: 'Socket connection timeout', data: { originalError: [Object] } } } { code: -32603, message: 'Socket connection timeout', data: { originalError: { code: 'ERR_SOCKET_CONNECTION_TIMEOUT' } } } ...
可能原因
- Infura端点兼容性问题:Infura的Avalanche Fuji端点与Truffle的HDWalletProvider可能存在适配问题,或Infura节点对Avalanche网络的支持存在临时故障。
- 网络配置参数缺失:现有配置缺少适配Avalanche网络的关键参数(如gasPrice),或HDWalletProvider未设置足够长的超时时间。
- 本地网络拦截:即使网速正常,本地防火墙、VPN或代理可能阻止了与远程节点的长连接。
- Infura API密钥无效:API密钥未启用Avalanche Fuji网络,或超出Infura的请求限额。
解决方案
1. 替换为Avalanche官方公共节点
直接使用Avalanche官方提供的Fuji测试网RPC端点,避免Infura的兼容性问题:
fuji: { provider: () => new HDWalletProvider(mnemonic, "https://api.avax-test.network/ext/bc/C/rpc"), network_id: "43113", gas: 5000000, gasPrice: 25000000000, // 设置为Avalanche推荐的25 Gwei networkCheckTimeout: 1000000, timeoutBlocks: 200, skipDryRun: true // 跳过预运行步骤,减少连接请求 }
2. 调整HDWalletProvider超时配置
如果坚持使用Infura,给HDWalletProvider添加更长的超时参数:
provider: () => new HDWalletProvider({ mnemonic: mnemonic, providerOrUrl: infuraUrl, timeout: 60000 // 将超时时间延长至60秒 }),
3. 检查本地网络环境
- 关闭本地防火墙或临时禁用VPN/代理,尝试重新部署。
- 若使用代理,确保代理规则允许访问Infura的Avalanche端点(
https://avalanche-fuji.infura.io)。
4. 验证Infura API密钥
- 登录Infura控制台,确认API密钥已启用Avalanche Fuji网络。
- 检查密钥的请求统计,确认未超出免费额度或付费限额。
内容的提问来源于stack exchange,提问作者code_learner93
相关产品推荐
相关产品推荐

