From 77124552f11a4b0c075e93c7af5984564cd6c172 Mon Sep 17 00:00:00 2001 From: Alex Rea Date: Wed, 13 Sep 2023 14:24:04 +0100 Subject: [PATCH] Page previous mining cycles in miner --- packages/reputation-miner/ReputationMiner.js | 16 +++++++++++++--- .../client-sync-functionality.js | 4 +++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/reputation-miner/ReputationMiner.js b/packages/reputation-miner/ReputationMiner.js index ec76812b68..a2ba72c68b 100644 --- a/packages/reputation-miner/ReputationMiner.js +++ b/packages/reputation-miner/ReputationMiner.js @@ -16,6 +16,8 @@ const minStake = ethers.BigNumber.from(10).pow(18).mul(2000); const DAY_IN_SECONDS = 60 * 60 * 24; +const BLOCK_PAGING_SIZE = 1000000; + class ReputationMiner { /** * Constructor for ReputationMiner @@ -1359,10 +1361,17 @@ class ReputationMiner { if (!blockNumber) { throw new Error("Block number not supplied to sync"); } - // Get the events + let events = []; + const latestBlockNumber = await this.realProvider.getBlockNumber(); + const filter = this.colonyNetwork.filters.ReputationMiningCycleComplete(null, null); - filter.fromBlock = blockNumber; - const events = await this.realProvider.getLogs(filter); + filter.toBlock = Math.max(blockNumber - 1, 0); + while (filter.toBlock !== latestBlockNumber) { + filter.fromBlock = filter.toBlock + 1; + filter.toBlock = Math.min(filter.fromBlock + BLOCK_PAGING_SIZE, latestBlockNumber); + const partialEvents = await this.realProvider.getLogs(filter); + events = events.concat(partialEvents); + } let localHash = await this.reputationTree.getRootHash(); let applyLogs = false; @@ -1428,6 +1437,7 @@ class ReputationMiner { // Some more cycles might have completed since we started syncing const lastEventBlock = events[events.length - 1].blockNumber filter.fromBlock = lastEventBlock; + filter.toBlock = "latest"; const sinceEvents = await this.realProvider.getLogs(filter); if (sinceEvents.length > 1){ console.log("Some more cycles have completed during the sync process. Continuing to sync...") diff --git a/test/reputation-system/client-sync-functionality.js b/test/reputation-system/client-sync-functionality.js index 2d8d5f5724..16f02660b8 100644 --- a/test/reputation-system/client-sync-functionality.js +++ b/test/reputation-system/client-sync-functionality.js @@ -262,8 +262,10 @@ process.env.SOLIDITY_COVERAGE useJsTree: true, dbPath: fileName, }); + await reputationMiner3.initialise(colonyNetwork.address); - await reputationMiner3.sync("latest"); + const latestBlock = await currentBlock(); + await reputationMiner3.sync(parseInt(latestBlock.number, 10)); const loadedState = await reputationMiner3.getRootHash(); expect(loadedState).to.equal(currentState);