From 07fa89a7bf1a24ee797fbd2b44fc301fe5ff0ac8 Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:31:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9F=A5=E8=AF=A2=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/contract.util.ts | 82 ++------------------------------------ 1 file changed, 3 insertions(+), 79 deletions(-) diff --git a/src/utils/contract.util.ts b/src/utils/contract.util.ts index 55c8859..f6aae66 100644 --- a/src/utils/contract.util.ts +++ b/src/utils/contract.util.ts @@ -45,82 +45,6 @@ async function divQueryPassEvents({ }) return [...firstHalfEvents, ...secondHalfEvents] } -/** - * 某些链最多返回99条数据, 针对这种情况, 如下方式处理 - * 1. 分析现有事件, 对于同一block返回数量超过设定值的, 单独拿出来 - * 2. 比如 fromBlock: 0, toBlock: 100, 51和54号块事件数量超标 - * 3. 那么 分别查询 0-50, 51-51, 52-53, 54-54, 54-100 - * @param param0 - * @returns - */ -async function splitQueryEvents({ - contract, - event, - fromBlock, - toBlock, - options, - events, -}: { - contract: any - event: string - fromBlock: BN - toBlock: BN - options?: any - events: any[] -}) { - let countMap: Map = new Map() - for (let event of events) { - countMap.inc(event.blockNumber, 1) - } - let blockArr: number[] = [] - for (let [key, val] of countMap.entries()) { - if (val >= SPLIT_LIMIT_COUNT) { - blockArr.push(parseInt(key)) - } - } - blockArr.sort((a, b) => a - b) - let results: any[] = [] - let preBlock = fromBlock - for (let i = 0; i < blockArr.length; i++) { - const block = toBN(blockArr[i]) - let subFromBlock = preBlock - let subToBlock = block - if (!preBlock.eq(block)) { - const partEvents0 = await getPastEvents({ - contract, - event, - fromBlock: subFromBlock, - toBlock: subToBlock.sub(ONE), - options, - }) - results = results.concat(partEvents0) - } - - let partEvents1 = await getPastEvents({ - contract, - event, - fromBlock: subToBlock, - toBlock: subToBlock, - options, - }) - results = results.concat(partEvents1) - - if (i === blockArr.length - 1) { - if (!subToBlock.eq(toBlock)) { - let partEvents2 = await getPastEvents({ - contract, - event, - fromBlock: subToBlock.add(ONE), - toBlock: toBlock, - options, - }) - results = results.concat(partEvents2) - } - } - preBlock = block.add(ONE) - } - return results -} export async function getPastEvents({ contract, @@ -143,14 +67,14 @@ export async function getPastEvents({ fromBlock, toBlock, }) + logger.debug(`from: ${fromBlock} to: ${toBlock} events: ${events.length}`) if (events.length >= RESULT_LIMIT_COUNT) { - events = splitQueryEvents({ + events = await divQueryPassEvents({ contract, event, fromBlock, toBlock, options, - events, }) } } catch (e) { @@ -159,7 +83,7 @@ export async function getPastEvents({ (/query returned more than \d+ results/.test(e.message) || /logs matched by query exceeds limit of \d/.test(e.message)) ) { - events = divQueryPassEvents({ + events = await divQueryPassEvents({ contract, event, fromBlock,