Search code examples
trontronweb

How to get all event logs of the contract in tron network using tronweb in node js without any limit?


How to get all events logs of the contract in tron network using tronweb in node js without any limit? or is there need of any middle ware storage like redis, etc? Need to get all data at once before loading dapp home page. The dApp is made in react js. And Trongrid api have this limit of 200 records in single request.


Solution

  • You can use fingerprint (it works like continue token)

    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;
            }
        },