UNPKG

@cityofzion/neo-js

Version:

Running NEO blockchain full node with Node.js and MongoDB.

145 lines (113 loc) 3.65 kB
import { EventEmitter } from 'events' import { Logger, LoggerOptions } from 'node-log-it' import { merge, find } from 'lodash' const MODULE_NAME = 'MemoryStorage' const DEFAULT_OPTIONS: MemoryStorageOptions = { loggerOptions: {}, } export interface MemoryStorageOptions { loggerOptions?: LoggerOptions } interface BlockItem { height: number block: object } export class MemoryStorage extends EventEmitter { private _isReady = false private _blockHeight?: number private blockCollection: BlockItem[] = [] private options: MemoryStorageOptions private logger: Logger constructor(options: MemoryStorageOptions = {}) { super() // Associate optional properties this.options = merge({}, DEFAULT_OPTIONS, options) this.validateOptionalParameters() // Bootstrapping this.logger = new Logger(MODULE_NAME, this.options.loggerOptions) this.setReady() this.logger.debug('constructor completes.') } isReady(): boolean { return this._isReady } /** * @deprecated */ async getBlockCount(): Promise<number> { throw new Error('getBlockCount() method is deprecated. Please use getHighestBlockHeight() instead.') } async getHighestBlockHeight(): Promise<number> { if (this._blockHeight) { return this._blockHeight } else { throw new Error('blockHeight unavailable') } } async setBlockCount(height: number): Promise<void> { this._blockHeight = height } async countBlockRedundancy(height: number): Promise<number> { throw new Error('Not implemented.') } async getBlock(height: number): Promise<object> { const blockItem = find(this.blockCollection, { height }) if (blockItem) { return blockItem.block } else { throw new Error('Block not found.') } } async getTransaction(transactionId: string): Promise<object> { throw new Error('Not implemented.') } async setBlock(height: number, block: object, options: object = {}): Promise<void> { this.blockCollection.push({ height, block }) } async pruneBlock(height: number, redundancySize: number): Promise<void> { throw new Error('Not implemented.') } async analyzeBlocks(startHeight: number, endHeight: number): Promise<object[]> { throw new Error('Not implemented.') } async getBlockMetaCount(): Promise<number> { throw new Error('Not implemented.') } async getHighestBlockMetaHeight(): Promise<number> { throw new Error('Not implemented.') } async getHighestBlockMeta(): Promise<object | undefined> { throw new Error('Not implemented.') } async setBlockMeta(blockMeta: object): Promise<void> { throw new Error('Not implemented.') } async setTransactionMeta(transactionMeta: object): Promise<void> { throw new Error('Not implemented.') } async analyzeBlockMetas(startHeight: number, endHeight: number): Promise<object[]> { throw new Error('Not implemented.') } async analyzeTransactionMetas(startHeight: number, endHeight: number): Promise<object[]> { throw new Error('Not implemented.') } async removeBlockMetaByHeight(height: number): Promise<void> { throw new Error('Not implemented.') } async countLegacyTransactionMeta(targetApiLevel: number): Promise<number> { throw new Error('Not implemented.') } async pruneLegacyTransactionMeta(targetApiLevel: number): Promise<void> { throw new Error('Not implemented.') } async close(): Promise<void> { this.logger.debug('close triggered.') } private setReady() { this._isReady = true this.emit('ready') } private validateOptionalParameters() { // TODO } }