Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
an attempt at implementing some kind of pagination to an Ethereum event filter
const eventFilterv5WithPagination = (contractAddress, erc20abi, _provider, numberOfResponses) => {
// creating the interface of the ABI
const iface = new ethers.utils.Interface(erc20abi.abi);
// intialize array for the logs
let logs = [];
// get latest block number
const latest = await provider.getBlockNumber();
// intialize a counter for which block we're scraping starting at the most recent block
let blockNumberIndex = latest;
// while loop runs until there are as many responses as desired
while (logs.length < numberOfResponses) {
const tempLogs = await provider.getLogs({
address: contractAddress,
// both fromBlock and toBlock are the index, meaning only one block's logs are pulled
fromBlock: blockNumberIndex,
toBlock: blockNumberIndex,
// an added console.log to help see what's going on
console.log("BLOCK: ", blockNumberIndex, " NUMBER OF LOGS: ", tempLogs.length);
blockNumberIndex -= 1;
logs = logs && logs.length > 0 ? [...logs, ...tempLogs] : [...tempLogs]
// this will return an array with the decoded events
const decodedEvents = => {
// let's pull out the to and from addresses and amounts
const toAddresses = => event["values"]["to"]);
const fromAddresses = => event["values"]["from"]);
const amounts = => event["values"]["amount"]);
return [fromAddresses, toAddresses, amounts]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment