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

如何用TronWeb监听TRON链USDT合约事件并按接收地址过滤

正确实现TRON USDT Transfer事件过滤(仅监听指定目标地址)

你原代码的问题有两个:一是filters的语法错误(缺少冒号),二是没有将base58地址转换为合约事件对应的十六进制格式——TRON合约事件中地址参数以十六进制形式存储,直接用base58地址无法匹配过滤规则。

以下是修正后的完整代码:

const fullNode = 'https://api.shasta.trongrid.io';
const solidityNode = 'https://api.shasta.trongrid.io';
const eventServer = 'https://api.shasta.trongrid.io';
const tronweb = new TronWeb(fullNode, solidityNode, eventServer);

// 目标接收地址(base58格式)
const targetAddress = 'TGdMonBPqH9THEhgNxMtHEcnxgbXxUuXeX';
// 转换为合约事件兼容的十六进制格式(去掉0x前缀)
const targetHexAddress = tronweb.address.toHex(targetAddress).replace('0x', '');

async function watchTargetTransfers() {
    try {
        const contract = await tronweb.contract().at('TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs');
        // 正确配置过滤规则,仅监听转到目标地址的Transfer事件
        const eventWatcher = await contract.Transfer().watch({
            filters: {
                to: targetHexAddress
            }
        }, (err, res) => {
            if (err) {
                console.error('监听异常:', err);
                return;
            }
            if (res) {
                console.log('捕获目标转账事件:', res);
                // 在这里执行你的数据库更新逻辑
            }
        });
        console.log('事件监听器已启动');
    } catch (error) {
        console.error('初始化失败:', error);
    }
}

watchTargetTransfers();

关键细节说明:

  • 地址格式转换:TRON合约事件返回的地址参数是不带0x前缀的十六进制字符串,因此需要用tronweb.address.toHex()将base58地址转格式后,再移除0x前缀才能匹配过滤。
  • 过滤规则语法:原代码中filters{}是语法错误,必须写成filters: {}的标准键值对形式。
  • 多条件过滤扩展:如果需要同时限制转出地址,可以在filters中添加from字段,同样传入转换后的十六进制地址即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:50:22