如何监听波场(Tron)区块链交易?解决订阅方法未定义等问题
波场(Tron)地址交易实时监听方案
问题根源
你用eventServer.subscribe报错是因为TronWeb的eventServer模块已被弃用,原生TronWeb也没有内置的WebSocket交易订阅方法;QuickNode的WebSocket需要配置正确的监听规则才能生效。
可行解决方案
方案一:TronGrid WebSocket API(官方推荐)
TronGrid提供稳定的WebSocket服务,可精准监听指定地址的收发交易:
- 先去TronGrid官网免费获取API密钥,然后用以下代码实现:
const apiKey = '你的TronGrid API密钥'; const tronWeb = new TronWeb({ fullHost: 'https://api.trongrid.io', headers: { 'TRON-PRO-API-KEY': apiKey } }); // 建立WebSocket连接 const ws = new WebSocket(`wss://api.trongrid.io/ws/v1?api_key=${apiKey}`); ws.onopen = () => { // 发送订阅请求,替换为你要监听的地址(支持多个,用逗号分隔) const subscribeReq = JSON.stringify({ topic: 'transactions', event: 'sentReceived', address: ['你的波场地址'] }); ws.send(subscribeReq); console.log('已订阅目标地址交易'); }; ws.onmessage = (msg) => { const data = JSON.parse(msg.data); if (data.data?.length) { console.log('新交易通知:', data.data[0]); // 这里可以加你的通知逻辑,比如弹窗、推送等 } }; ws.onerror = (err) => { console.error('WebSocket连接出错:', err); }; ws.onclose = () => { console.log('连接断开,准备重连...'); // 可选:添加自动重连逻辑,避免漏接交易 };
方案二:优化轮询方案(替代WebSocket)
如果WebSocket始终无法正常工作,可以用区块高度追踪+短轮询,减少无效请求:
let lastTrackedHeight = 0; async function fetchNewTransactions() { try { const currentBlock = await tronWeb.trx.getCurrentBlock(); const currentHeight = currentBlock.block_header.raw_data.number; if (currentHeight > lastTrackedHeight) { // 查询目标地址在新区块内的交易 const txList = await tronWeb.trx.getTransactionsRelatedToAddress( '你的波场地址', 'all', currentHeight - lastTrackedHeight ); if (txList.length) { console.log('发现新交易:', txList); } lastTrackedHeight = currentHeight; } } catch (err) { console.error('查询交易失败:', err); } finally { // 每5秒查询一次,可根据需求调整间隔 setTimeout(fetchNewTransactions, 5000); } } // 启动监听 fetchNewTransactions();
注意点
- TronGrid免费额度足够个人使用,无需担心费用问题
- WebSocket连接建议加自动重连逻辑,防止网络波动导致漏接
- 轮询间隔不要过短,否则会触发API限流
内容的提问来源于stack exchange,提问作者BeycanDeveloper
相关产品推荐
相关产品推荐

