/// /// /// import { EventEmitter } from 'events'; import { Block, Transaction, BlockHeader, StateStore } from '@liskhq/lisk-chain'; import { encrypt } from '@liskhq/lisk-cryptography'; import { IterateOptions } from '@liskhq/lisk-db'; import { AggregateCommit } from '../consensus/types'; import { ValidatorInfo } from '../consensus/certificate_generation/types'; import { JSONObject } from '../../types'; export interface Keypair { publicKey: Buffer; privateKey: Buffer; blsPublicKey: Buffer; blsSecretKey: Buffer; } export interface Generator { readonly address: Buffer; readonly encryptedPassphrase: string; } export interface GeneratorStore { get: (key: Buffer) => Promise; set: (key: Buffer, value: Buffer) => Promise; } export interface Consensus { execute: (block: Block) => Promise; syncing(): boolean; isSynced: (height: number, maxHeightPrevoted: number) => boolean; finalizedHeight: () => number; getAggregateCommit: (stateStore: StateStore) => Promise; certifySingleCommit: (blockHeader: BlockHeader, validatorInfo: ValidatorInfo) => void; getMaxRemovalHeight: () => Promise; readonly events: EventEmitter; } export interface WritableBlockAssets { getAsset: (module: string) => Buffer | undefined; setAsset: (module: string, value: Buffer) => void; } export interface GeneratorDB { clear: (options?: IterateOptions) => Promise; set: (key: Buffer, val: Buffer) => Promise; del: (key: Buffer) => Promise; close: () => void; get: (key: Buffer) => Promise; has(key: Buffer): Promise; iterate(options?: IterateOptions): NodeJS.ReadableStream; } export interface BlockGenerateInput { height: number; timestamp: number; generatorAddress: Buffer; privateKey: Buffer; transactions?: Transaction[]; db?: GeneratorDB; } export interface EncodedGeneratorKeys { type: 'encrypted' | 'plain'; data: Buffer; } interface EncryptedGeneratorKeys { type: 'encrypted'; address: Buffer; data: encrypt.EncryptedMessageObject; } export interface PlainGeneratorKeyData { generatorKey: Buffer; generatorPrivateKey: Buffer; blsKey: Buffer; blsPrivateKey: Buffer; } export type PlainGeneratorKeyDataJSON = JSONObject; interface PlainGeneratorKeys { type: 'plain'; address: Buffer; data: PlainGeneratorKeyData; } export type GeneratorKeys = EncryptedGeneratorKeys | PlainGeneratorKeys; export interface KeysFile { keys: { address: string; plain?: PlainGeneratorKeyDataJSON; encrypted?: encrypt.EncryptedMessageObject; }[]; } export {};