Node.js环境下如何使用Tronweb监听波场网络的原生TRX交易事件
如何监听波场网络原生TRX的转账事件
原生TRX转账不属于智能合约触发的事件,所以无法直接使用tronweb.contract().at(contractAddress).Transfer.watch()这类合约事件监听方法实现,可通过以下两种常用方案实现监听:
方案1:手动轮询区块过滤TRX转账交易
波场网络平均每3秒出一个区块,你可以定期拉取最新区块,遍历区块内的所有交易,筛选contract_type为TransferContract的交易即为原生TRX转账交易,参考代码如下:const TronWeb = require('tronweb'); // 初始化TronWeb,可根据需求替换为自有节点地址 const tronWeb = new TronWeb({ fullHost: 'https://api.trongrid.io' }); // 记录上次已处理的区块高度,避免重复处理 let lastProcessedBlock = 0; async function scanTRXTransfer() { try { const latestBlock = await tronWeb.trx.getCurrentBlock(); const latestBlockNum = latestBlock.block_header.raw_data.number; // 首次运行初始化处理高度 if (lastProcessedBlock === 0) { lastProcessedBlock = latestBlockNum - 1; return; } // 遍历所有未处理的区块 for (let blockNum = lastProcessedBlock + 1; blockNum <= latestBlockNum; blockNum++) { const block = await tronWeb.trx.getBlock(blockNum); if (!block?.transactions) continue; // 遍历区块内所有交易筛选TRX转账 for (const tx of block.transactions) { if (tx.raw_data.contract[0].type === 'TransferContract') { const transferInfo = tx.raw_data.contract[0].parameter.value; const fromAddress = tronWeb.address.fromHex(transferInfo.owner_address); const toAddress = tronWeb.address.fromHex(transferInfo.to_address); // sun单位转换为TRX const transferAmount = transferInfo.amount / 1e6; const txHash = tx.txID; // 此处添加自定义业务处理逻辑 console.log(`TRX转账事件:哈希${txHash},转出${fromAddress},转入${toAddress},金额${transferAmount}TRX`); } } lastProcessedBlock = blockNum; } } catch (e) { console.error('扫描区块出错:', e); } } // 每3秒执行一次扫描,匹配波场出块速度 setInterval(scanTRXTransfer, 3000);方案2:通过事件订阅接口监听新区块
无需自己实现轮询逻辑,直接调用tronweb的事件订阅接口监听新生成的区块,再按上述逻辑过滤TRX转账即可,参考代码片段:// 订阅新区块事件 tronWeb.event.subscribe('block', {}, (error, block) => { if (error) { console.error('区块订阅失败:', error); return; } if (!block?.transactions) return; // 遍历交易过滤TRX转账的逻辑和方案1完全一致 for (const tx of block.transactions) { if (tx.raw_data.contract[0].type === 'TransferContract') { // 自定义业务处理逻辑 } } })
提示:如果只需监听特定地址的TRX转入/转出,在过滤交易时补充判断
fromAddress或toAddress是否为目标地址即可,无需处理全量TRX转账交易,降低性能消耗。
内容的提问来源于stack exchange,提问作者ADLZ
相关产品推荐
相关产品推荐

