UNPKG

@hyperlane-xyz/sdk

Version:

The official SDK for the Hyperlane Network

67 lines 2.48 kB
import { assertIsContractAddress, isContractAddress, } from '../../contracts/contracts.js'; // calling getCode until the creation block is found export async function getContractCreationBlockFromRpc(chain, contractAddress, multiProvider) { await assertIsContractAddress(multiProvider, chain, contractAddress); const provider = multiProvider.getProvider(chain); const latestBlock = await provider.getBlockNumber(); let low = 0; let high = latestBlock; let creationBlock = latestBlock; while (low <= high) { const mid = Math.floor((low + high) / 2); const isContract = await isContractAddress(multiProvider, chain, contractAddress, mid); if (isContract) { creationBlock = mid; high = mid - 1; } else { low = mid + 1; } } return creationBlock; } export async function getLogsFromRpc({ chain, contractAddress, multiProvider, fromBlock, topic, toBlock, range = 500, }) { const provider = multiProvider.getProvider(chain); let currentStartBlock = fromBlock; const endBlock = toBlock ?? (await provider.getBlockNumber()); const logs = []; while (currentStartBlock <= endBlock) { const currentEndBlock = currentStartBlock + range < endBlock ? currentStartBlock + range : endBlock; const currentLogs = await provider.getLogs({ address: contractAddress, fromBlock: currentStartBlock, toBlock: currentEndBlock, topics: [topic], }); logs.push(...currentLogs); // +1 because getLogs range is inclusive currentStartBlock += range + 1; } return logs.map((rawLog) => { return { address: rawLog.address, blockNumber: rawLog.blockNumber, data: rawLog.data, logIndex: rawLog.logIndex, topics: rawLog.topics, transactionHash: rawLog.transactionHash, transactionIndex: rawLog.transactionIndex, }; }); } export function viemLogFromGetEventLogsResponse(log) { return { address: log.address, data: log.data, blockNumber: BigInt(log.blockNumber), transactionHash: log.transactionHash, logIndex: Number(log.logIndex), transactionIndex: Number(log.transactionIndex), topics: log.topics, blockHash: null, removed: false, }; } //# sourceMappingURL=utils.js.map