如何在node js中使用tronweb无限制地获取tron网络中合约的所有事件日志?

Man*_*rma 0 tron tronweb

如何在node js中使用tronweb无限制地获取tron网络中合约的所有事件日志?或者是否需要任何中间件存储,例如redis等?在加载 dapp 主页之前需要一次性获取所有数据。dApp 是用 React js 制作的。Trongrid api 有单个请求 200 条记录的限制。

Jey*_*Key 5

您可以使用fingerprint(它的作用类似于继续令牌)

async getContractTransferEventsByUser(eventName, userId) {
        let result = [];
        let tronGrid = new TronGrid(this.tronWeb);
        try {
            let continueToken = '';
            while (true) {
                let res = await tronGrid.contract.getEvents(YOUR_CONTRACT_ADDRESS, {
                    only_confirmed: true,
                    event_name: eventName,
                    limit: 200,
                    fingerprint: continueToken,
                    order_by: "timestamp,asc",
                    min_timestamp: minTime, //remove if you don't need it
                    filters: { id: userId.toString() } //if you need to filter events by one or more values, for example, by user id (if this information is presented in event log), remove if you don't need it.
                });

                if (!res.success) {
                    console.warn("Can't get events for the contract");
                    break;
                }

                result = result.concat(res.data);

                if (typeof res.meta.fingerprint !== 'undefined') {
                    continueToken = res.meta.fingerprint;
                } else {
                    break;
                }
            }
        } catch (error) {
            console.error(error);
        } finally {
            return result;
        }
    },
Run Code Online (Sandbox Code Playgroud)

  • 在递归函数中调用上面的代码,感谢您的帮助 (2认同)
  • 现在看来这不起作用。我总是收到“超出最大限制,请更改您的查询时间范围”错误 (2认同)