UNPKG

bitcore-node

Version:

A blockchain indexing node with extended capabilities using bitcore

63 lines 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseBlock = void 0; const base_1 = require("./base"); class BaseBlock extends base_1.BaseModel { constructor(storage) { super('blocks', storage); this.allowedPaging = [ { key: 'height', type: 'number' } ]; } async onConnect() { this.collection.createIndex({ hash: 1 }, { background: true }); this.collection.createIndex({ chain: 1, network: 1, processed: 1, height: -1 }, { background: true }); this.collection.createIndex({ chain: 1, network: 1, timeNormalized: 1 }, { background: true }); this.collection.createIndex({ previousBlockHash: 1 }, { background: true }); } getPoolInfo(coinbase) { // TODO need to make this actually parse the coinbase input and map to miner strings // also should go somewhere else return coinbase; } async getLocalTip({ chain, network }) { const tip = await this.collection.findOne({ chain, network, processed: true }, { sort: { height: -1 } }); return tip; } async validateLocatorHashes(params) { const { chain, network } = params; let headers = new Array(); const locatorBlocks = await this.collection .find({ processed: true, chain, network }) .sort({ height: -1 }) .limit(100) .project({ hash: 1, previousBlockHash: 1, nextBlockHash: 1 }) .addCursorFlag('noCursorTimeout', true) .toArray(); for (let i = 0; i < locatorBlocks.length; i++) { let prevMatch = true; let nextMatch = true; if (i != 0) { prevMatch = prevMatch && locatorBlocks[i].nextBlockHash === locatorBlocks[i - 1].hash; nextMatch = nextMatch && locatorBlocks[i].hash === locatorBlocks[i - 1].previousBlockHash; } if (i != locatorBlocks.length - 1) { prevMatch = prevMatch && locatorBlocks[i].hash === locatorBlocks[i + 1].nextBlockHash; nextMatch = nextMatch && locatorBlocks[i].previousBlockHash === locatorBlocks[i + 1].hash; } if (!prevMatch || !nextMatch) { headers.push(locatorBlocks[i]); } } return headers; } } exports.BaseBlock = BaseBlock; //# sourceMappingURL=baseBlock.js.map