bitcore-node
Version:
A blockchain indexing node with extended capabilities using bitcore
60 lines • 2.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const block_1 = require("../../src/models/block");
const modules_1 = require("../../src/modules");
const storage_1 = require("../../src/services/storage");
if (require.main === module) {
(async () => {
const { CHAIN = '', NETWORK = '', HEIGHT } = process.env;
const resumeHeight = Number(HEIGHT) || 1;
const chain = CHAIN || '';
const network = NETWORK || '';
modules_1.Modules.loadConfigured();
await storage_1.Storage.start();
let prevMatch = true;
let nextMatch = true;
let previousBlock;
let checkHeight = resumeHeight;
console.log('Verifying headers for', chain, network, 'from height', resumeHeight);
await block_1.BitcoinBlockStorage.collection
.find({ chain, network, processed: true, height: { $gte: checkHeight } })
.project({ height: 1, nextBlockHash: 1, previousBlockHash: 1, hash: 1 })
.sort({ height: 1 })
.forEach(locatorBlock => {
let success = true;
if (checkHeight !== locatorBlock.height) {
const error = {
model: 'block',
err: true,
type: 'MISSING_BLOCK',
payload: { blockNum: checkHeight }
};
console.log(JSON.stringify(error));
success = false;
checkHeight = locatorBlock.height;
}
else if (previousBlock) {
prevMatch = prevMatch && locatorBlock.previousBlockHash === previousBlock.hash;
nextMatch = nextMatch && locatorBlock.hash === previousBlock.nextBlockHash;
if (!prevMatch || !nextMatch) {
const error = {
model: 'block',
err: true,
type: 'CORRUPTED_BLOCK',
payload: { blockNum: locatorBlock.height }
};
console.log(JSON.stringify(error));
success = false;
}
}
previousBlock = locatorBlock;
checkHeight++;
if (success) {
console.log({ block: checkHeight, success });
}
});
process.exit(0);
})();
}
//# sourceMappingURL=db-verify-headers.js.map