Solana/web3.js连接异常:fetch失败,无法获取区块时间
解决Solana测试网连接超时及
getBlockTime调用错误 问题分析
你遇到的UND_ERR_CONNECT_TIMEOUT属于网络连接超时问题,大概率是官方测试网节点在当前网络环境下访问不畅;另外你的代码中getBlockTime()未传入必填的区块高度参数,即使连接成功也会触发新的错误。
修复步骤
1. 替换可访问的RPC节点
替换官方节点为网络环境可正常访问的Solana测试网RPC节点,同时增加超时配置避免因网络延迟触发超时:
const connection = new web3.Connection( 'https://api.testnet.solana.com', // 替换为当前网络可访问的测试网RPC地址 'confirmed', { timeout: 30000 // 设置30秒超时阈值 } );
2. 修正getBlockTime的调用
getBlockTime()必须传入区块高度作为参数,你可以先获取最新区块高度,再调用该方法:
// 获取最新区块高度 const blockHeight = await connection.getBlockHeight(); // 根据高度获取对应区块时间 const blockTime = await connection.getBlockTime(blockHeight); console.log('区块时间:', blockTime);
3. 排查本地网络环境
- 关闭可能拦截请求的防火墙或代理工具,重新测试连接
- 若使用国内网络,可尝试切换至稳定的海外代理,或使用国内镜像节点
完整可运行示例代码
const web3 = require('@solana/web3.js'); async function fetchSolanaBlockTime() { try { const connection = new web3.Connection( 'https://api.testnet.solana.com', 'confirmed', { timeout: 30000 } ); const blockHeight = await connection.getBlockHeight(); const blockTime = await connection.getBlockTime(blockHeight); console.log('最新区块高度:', blockHeight); console.log('区块时间(本地时间):', new Date(blockTime * 1000)); } catch (error) { console.error('执行错误:', error); } } fetchSolanaBlockTime();
内容的提问来源于stack exchange,提问作者user22361630
相关产品推荐
相关产品推荐

