Files
leporello-js/docs/examples/ethers/block_by_timestamp.js

33 lines
854 B
JavaScript
Raw Normal View History

import { ethers } from "ethers"
2023-07-02 20:23:22 +03:00
const URL = "https://eth-mainnet.public.blastapi.io"
2023-07-02 20:23:22 +03:00
const provider = await ethers.getDefaultProvider(URL)
const latest = await provider.getBlock("latest")
2023-07-02 20:23:22 +03:00
2023-07-07 15:43:35 +03:00
/*
Find ethereum block by timestamp using binary search
*/
async function getBlockNumberByTimestamp(
timestamp,
low = 0,
high = latest.number,
) {
if (low + 1 == high) {
2023-07-02 20:23:22 +03:00
return low
} else {
const mid = Math.floor((low + high) / 2)
const midBlock = await provider.getBlock(mid)
if (midBlock.timestamp > timestamp) {
2023-07-02 20:23:22 +03:00
return getBlockNumberByTimestamp(timestamp, low, mid)
} else {
return getBlockNumberByTimestamp(timestamp, mid, high)
}
}
}
const timestamp = new Date("2019-06-01").getTime() / 1000
2023-07-02 20:23:22 +03:00
const blockNumber = await getBlockNumberByTimestamp(timestamp)
const block = await provider.getBlock(blockNumber)