Adding zero events while syncing events tree
This commit is contained in:
parent
bbdf0fbea3
commit
6115a09420
34
cli.js
34
cli.js
@ -899,6 +899,14 @@ function initJson(file) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Erase all zero events from events tree array
|
||||
* @param events Events tree array
|
||||
*/
|
||||
function filterZeroEvents(events) {
|
||||
return events.filter((event) => event.transactionHash !== null);
|
||||
}
|
||||
|
||||
function loadCachedEvents({ type, currency, amount }) {
|
||||
try {
|
||||
const module = require(`./cache/${netName.toLowerCase()}/${type}s_${currency}_${amount}.json`);
|
||||
@ -907,7 +915,7 @@ function loadCachedEvents({ type, currency, amount }) {
|
||||
const events = module;
|
||||
|
||||
return {
|
||||
events,
|
||||
events: filterZeroEvents(events),
|
||||
lastBlock: events[events.length - 1].blockNumber
|
||||
};
|
||||
}
|
||||
@ -920,10 +928,11 @@ function loadCachedEvents({ type, currency, amount }) {
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchEvents({ type, currency, amount }) {
|
||||
async function fetchEvents({ type, currency, amount, filterEvents }) {
|
||||
if (type === 'withdraw') {
|
||||
type = 'withdrawal';
|
||||
}
|
||||
if (filterEvents === undefined) filterEvents = true;
|
||||
|
||||
const cachedEvents = loadCachedEvents({ type, currency, amount });
|
||||
const startBlock = cachedEvents.lastBlock + 1;
|
||||
@ -935,13 +944,26 @@ async function fetchEvents({ type, currency, amount }) {
|
||||
try {
|
||||
const fileName = `./cache/${netName.toLowerCase()}/${type}s_${currency}_${amount}.json`;
|
||||
const localEvents = await initJson(fileName);
|
||||
const events = localEvents.concat(fetchedEvents);
|
||||
const events = filterZeroEvents(localEvents).concat(fetchedEvents);
|
||||
await fs.writeFileSync(fileName, JSON.stringify(events, null, 2), 'utf8');
|
||||
} catch (error) {
|
||||
throw new Error('Writing cache file failed:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an zero (empty) event to the end of the events list
|
||||
* If tornado transactions on the selected currency/amount are rare and the last one was much earlier than the current block,
|
||||
* it helps to quickly synchronize the events tree
|
||||
* @param blockNumber Latest block number on selected chain
|
||||
*/
|
||||
async function addZeroEvent(blockNumber) {
|
||||
const zeroEvent = { blockNumber, transactionHash: null };
|
||||
await updateCache([zeroEvent]);
|
||||
|
||||
console.log('Added', amount, currency.toUpperCase(), type, 'zero event to block:', blockNumber);
|
||||
}
|
||||
|
||||
async function syncEvents() {
|
||||
try {
|
||||
let targetBlock = await web3.eth.getBlockNumber();
|
||||
@ -1019,6 +1041,8 @@ async function fetchEvents({ type, currency, amount }) {
|
||||
await fetchWeb3Events(i);
|
||||
await updateCache(fetchedEvents);
|
||||
}
|
||||
|
||||
await addZeroEvent(targetBlock - 1);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
throw new Error('Error while updating cache');
|
||||
@ -1193,7 +1217,7 @@ async function fetchEvents({ type, currency, amount }) {
|
||||
return updatedEvents;
|
||||
}
|
||||
const events = await loadUpdatedEvents();
|
||||
return events;
|
||||
return filterEvents ? filterZeroEvents(events) : events;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1600,7 +1624,7 @@ async function main() {
|
||||
console.log('Starting event sync command');
|
||||
|
||||
await init({ rpc: program.rpc, type, currency, amount });
|
||||
const cachedEvents = await fetchEvents({ type, currency, amount });
|
||||
const cachedEvents = await fetchEvents({ type, currency, amount, filterEvents: false });
|
||||
console.log(
|
||||
'Synced event for',
|
||||
type,
|
||||
|
Loading…
Reference in New Issue
Block a user