Как каждый раз получать события только за последние 2 дня, используя getPastEvents?

Как можно изменить следующий запрос, чтобы он извлекал события только за последние два дня:

const events= await MyContract.getPastEvents("eventName", {
  fromBlock: 0,
  toBlock: "latest"
});
Я предполагаю, что вы должны проверить, когда блоки были добыты, и решить, какой из них передать как fromBlock.
const events= await MyContract.getPastEvents("EventName", { fromBlock: (await web3.eth.getBlockNumber()) - 12343, // примерно 12343 блока каждые 2 дня toBlock: "latest" });

Ответы (2)

Каждые два дня создается примерно 12 343 блока, поэтому, если найти текущий номер блока и вычесть это количество, получится целевой номер блока. Передайте это как fromBlockпараметр функции getPastEvents, чтобы ограничить этот диапазон:

const events= await MyContract.getPastEvents("EventName", {
  fromBlock: (await web3.eth.getBlockNumber()) - 12343,
  toBlock: "latest"
});

const getBlock = async () => {
    const result = await web3.eth.getBlockNumber()
    return web3.utils.hexToNumberString(result)
    
}

const calculated = getBlock().then((res) => { const calculated = Number(res) - 12343; return calculated});
const options =                                 
{
    address: getPair(tokenA, tokenB),
    fromBlock: calculated,
    toBlock: 'latest'

}