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

求助:如何通过WebSocket实现BSC新币池创建的有效监控?

解决BSC新币池监控问题的修正方案

原代码存在的核心问题

  1. 错误使用Solana生态地址:代码中引入的RAYDIUM_PUBLIC_KEY是Solana链上Raydium的合约地址,与BSC完全无关,BSC应监听PancakeSwap工厂合约的PairCreated事件。
  2. 未发送WebSocket订阅请求:仅建立WebSocket连接但未向节点发送订阅新区块的指令,导致无法持续接收区块数据。
  3. 错误的消息处理逻辑:原代码期望接收pairCreated方法的消息,这不符合BSC的JSON-RPC WebSocket协议规范,实际需要解析区块日志筛选目标事件。
  4. 重连后事件监听失效:重连函数未重新绑定WebSocket事件监听器,导致重连后脚本无法响应新消息。

可用的BSC新币池监控JS脚本

const WebSocket = require('ws');
const { ethers } = require('ethers');

// BSC网络配置
const BSC_WSS_URL = 'wss://go.getblock.io/1718c1c14c0441dd8fb04dfd7146c32d'; // 替换为你的BSC WebSocket节点地址
const PANCAKE_FACTORY_ADDRESS = '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73'; // PancakeSwap V2工厂合约地址
const PAIR_CREATED_EVENT_SIG = '0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9'; // PairCreated事件签名哈希
const SESSION_HASH = 'QNDEMO' + Math.ceil(Math.random() * 1e9);

let ws;
let subscriptionId = null;

// 初始化WebSocket连接
function initWebSocket() {
    ws = new WebSocket(BSC_WSS_URL, {
        headers: { 'x-session-hash': SESSION_HASH }
    });

    ws.on('open', () => {
        console.log('WebSocket连接已建立');
        // 订阅新区块头部
        subscribeNewHeads();
    });

    ws.on('message', async (data) => {
        const message = JSON.parse(data);
        
        // 处理订阅的新区块消息
        if (message.method === 'eth_subscription' && message.params.subscription === subscriptionId) {
            const blockHash = message.params.result.hash;
            await fetchBlockLogs(blockHash);
        }
        // 处理订阅ID返回
        else if (message.id === 1 && message.result) {
            subscriptionId = message.result;
            console.log('成功订阅新区块,ID:', subscriptionId);
        }
    });

    ws.on('error', (error) => {
        console.error('WebSocket错误:', error);
    });

    ws.on('close', () => {
        console.log('WebSocket连接断开,5秒后重连');
        subscriptionId = null;
        setTimeout(initWebSocket, 5000);
    });
}

// 发送订阅新区块的请求
function subscribeNewHeads() {
    ws.send(JSON.stringify({
        jsonrpc: '2.0',
        id: 1,
        method: 'eth_subscribe',
        params: ['newHeads']
    }));
}

// 拉取指定区块的日志并筛选PairCreated事件
async function fetchBlockLogs(blockHash) {
    try {
        const response = await fetch('https://go.getblock.io/63a569b81c6940b9b1f1230d6dd7f042', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                jsonrpc: '2.0',
                id: 2,
                method: 'eth_getLogs',
                params: [{
                    address: PANCAKE_FACTORY_ADDRESS,
                    topics: [PAIR_CREATED_EVENT_SIG],
                    blockHash: blockHash
                }]
            })
        });

        const result = await response.json();
        if (result.result && result.result.length > 0) {
            result.result.forEach(log => {
                parsePairCreatedLog(log);
            });
        }
    } catch (error) {
        console.error('拉取区块日志失败:', error);
    }
}

// 解析PairCreated事件日志
function parsePairCreatedLog(log) {
    // 使用ethers解析日志数据
    const iface = new ethers.Interface([
        'event PairCreated(address indexed token0, address indexed token1, address pair, uint)'
    ]);
    const eventData = iface.parseLog(log);

    console.log('\n=== 新币池创建 ===');
    console.log('币池地址:', eventData.args.pair);
    console.log('Token0地址:', eventData.args.token0);
    console.log('Token1地址:', eventData.args.token1);
    
    // 可选:获取代币详细信息(需调用代币合约)
    // fetchTokenDetails(eventData.args.token0);
    // fetchTokenDetails(eventData.args.token1);
}

// 启动监控
initWebSocket();

脚本说明

  1. 依赖安装:需先安装依赖包:npm install ws ethers node-fetch
  2. 事件监听逻辑:通过订阅新区块头部,拉取每个区块的日志,筛选PancakeSwap工厂合约的PairCreated事件
  3. 日志解析:使用ethers.js的Interface工具解析事件参数,无需手动处理ABI编码
  4. 自动重连:连接断开后自动重试,并重发订阅请求

内容的提问来源于stack exchange,提问作者Tomas Netanyahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:45:27