bitcore-node
Version:
A blockchain indexing node with extended capabilities using bitcore
65 lines (54 loc) • 2.11 kB
JavaScript
'use scrict';
const { Storage } = require('../build/src/services/storage');
const { EVMBlockStorage } = require('../build/src/providers/chain-state/evm/models/block');
function usage(err) {
if (err) {
console.log(err);
console.log('');
}
console.log('Usage: ./verifyEvmBlockConsistency.js [options]');
console.log('');
console.log(' --chain <value> ETH, MATIC');
console.log(' --network <value> mainnet, testnet, or regtest');
console.log(' --startHeight <value> Block height to start at (inclusive)');
console.log(' --endHeight <value> Block height to end at (inclusive) (optional)');
process.exit();
};
const chain = process.argv.find(a => a == '--chain') ? process.argv[process.argv.indexOf('--chain') + 1] : undefined;
const network = process.argv.find(a => a == '--network') ? process.argv[process.argv.indexOf('--network') + 1] : undefined;
const startBlockHeight = process.argv.find(a => a == '--startHeight') ? Number(process.argv[process.argv.indexOf('--startHeight') + 1]) : undefined;
const endBlockHeight = process.argv.find(a => a == '--endHeight') ? Number(process.argv[process.argv.indexOf('--endHeight') + 1]) : undefined;
if (process.argv.includes('--help') || process.argv.includes(['-h'])) {
usage();
}
if (!chain) {
usage('Invalid chain: ' + chain);
}
if (!network) {
usage('Invalid network: ' + network);
}
if (startBlockHeight == null || isNaN(startBlockHeight) || startBlockHeight < 0) {
usage('Invalid startBlockHeight: ' + startBlockHeight);
}
console.log('Connecting to database...');
Storage.start({ dbReadPreference: 'secondary' })
.then(async () => {
try {
const gaps = await EVMBlockStorage.getBlockSyncGaps({
chain,
network,
startHeight: startBlockHeight,
endHeight: endBlockHeight
});
if (gaps.length > 0) {
console.log(JSON.stringify(gaps));
} else {
console.log('No gaps found.');
}
} catch (err) {
console.error(err);
}
})
.catch(console.error)
.finally(Storage.stop.bind(Storage));