UNPKG

lisk-framework

Version:

Lisk blockchain application platform

181 lines (180 loc) 5.83 kB
/// <reference types="node" /> import { Transaction } from '@liskhq/lisk-chain'; import { Schema } from '@liskhq/lisk-codec'; import { IterateOptions } from '@liskhq/lisk-db'; import { Logger } from '../logger'; import { EventQueue } from './event_queue'; export interface ImmutableSubStore { get(key: Buffer): Promise<Buffer>; getWithSchema<T>(key: Buffer, schema: Schema): Promise<T>; has(key: Buffer): Promise<boolean>; iterate(input: IterateOptions): Promise<{ key: Buffer; value: Buffer; }[]>; iterateWithSchema<T>(input: IterateOptions, schema: Schema): Promise<{ key: Buffer; value: T; }[]>; } export interface SubStore extends ImmutableSubStore { del(key: Buffer): Promise<void>; set(key: Buffer, value: Buffer): Promise<void>; setWithSchema(key: Buffer, value: object, schema: Schema): Promise<void>; createSnapshot(): number; restoreSnapshot(snapshotID: number): void; } export interface ImmutableStateStore { getStore: (moduleID: Buffer, storePrefix: Buffer) => ImmutableSubStore; } export interface StateStore { getStore: (moduleID: Buffer, storePrefix: Buffer) => SubStore; createSnapshot(): number; restoreSnapshot(snapshotID: number): void; } export interface ImmutableMethodContext { getStore: (moduleID: Buffer, storePrefix: Buffer) => ImmutableSubStore; } export interface MethodContext { getStore: (moduleID: Buffer, storePrefix: Buffer) => SubStore; eventQueue: EventQueue; contextStore: Map<string, unknown>; } export declare enum VerifyStatus { FAIL = -1, OK = 1, PENDING = 0 } export interface BlockHeader { version: number; height: number; timestamp: number; previousBlockID: Buffer; generatorAddress: Buffer; maxHeightPrevoted: number; maxHeightGenerated: number; impliesMaxPrevotes: boolean; aggregateCommit: { height: number; aggregationBits: Buffer; certificateSignature: Buffer; }; } export interface BlockAssets { getAsset: (module: string) => Buffer | undefined; } export interface WritableBlockAssets extends BlockAssets { setAsset: (module: string, value: Buffer) => void; } export interface VerificationResult { status: VerifyStatus; error?: Error; } export interface TransactionVerifyContext { chainID: Buffer; logger: Logger; header: { timestamp: number; height: number; }; transaction: Transaction; stateStore: ImmutableStateStore; contextStore: Map<string, unknown>; getMethodContext: () => ImmutableMethodContext; getStore: (moduleID: Buffer, storePrefix: Buffer) => ImmutableSubStore; } export interface CommandVerifyContext<T = undefined> { logger: Logger; chainID: Buffer; header: { timestamp: number; height: number; }; transaction: Transaction; params: T; getMethodContext: () => ImmutableMethodContext; getStore: (moduleID: Buffer, storePrefix: Buffer) => ImmutableSubStore; stateStore: ImmutableStateStore; contextStore: Map<string, unknown>; } export interface CommandExecuteContext<T = undefined> { logger: Logger; chainID: Buffer; eventQueue: EventQueue; stateStore: StateStore; contextStore: Map<string, unknown>; header: BlockHeader; assets: BlockAssets; transaction: Transaction; params: T; getMethodContext: () => MethodContext; getStore: (moduleID: Buffer, storePrefix: Buffer) => SubStore; } export interface GenesisBlockExecuteContext { logger: Logger; eventQueue: EventQueue; stateStore: StateStore; getMethodContext: () => MethodContext; getStore: (moduleID: Buffer, storePrefix: Buffer) => SubStore; header: BlockHeader; assets: BlockAssets; setNextValidators: (preCommitThreshold: bigint, certificateThreshold: bigint, validators: Validator[]) => void; chainID: Buffer; } export interface TransactionExecuteContext { logger: Logger; chainID: Buffer; eventQueue: EventQueue; stateStore: StateStore; contextStore: Map<string, unknown>; getMethodContext: () => MethodContext; getStore: (moduleID: Buffer, storePrefix: Buffer) => SubStore; header: BlockHeader; assets: BlockAssets; transaction: Transaction; } export interface BlockVerifyContext { logger: Logger; chainID: Buffer; stateStore: ImmutableStateStore; contextStore: Map<string, unknown>; getMethodContext: () => ImmutableMethodContext; getStore: (moduleID: Buffer, storePrefix: Buffer) => ImmutableSubStore; header: BlockHeader; assets: BlockAssets; } export interface BlockExecuteContext { logger: Logger; chainID: Buffer; eventQueue: EventQueue; stateStore: StateStore; getMethodContext: () => MethodContext; getStore: (moduleID: Buffer, storePrefix: Buffer) => SubStore; contextStore: Map<string, unknown>; header: BlockHeader; assets: BlockAssets; } export interface Validator { address: Buffer; bftWeight: bigint; generatorKey: Buffer; blsKey: Buffer; } export interface NextValidatorsSetter { setNextValidators: (preCommitThreshold: bigint, certificateThreshold: bigint, validators: Validator[]) => void; } export type BlockAfterExecuteContext = BlockExecuteContext & NextValidatorsSetter & { transactions: ReadonlyArray<Transaction>; }; export interface InsertAssetContext { logger: Logger; chainID: Buffer; getMethodContext: () => MethodContext; stateStore: ImmutableStateStore; contextStore: Map<string, unknown>; getStore: (moduleID: Buffer, storePrefix: Buffer) => ImmutableSubStore; header: BlockHeader; assets: WritableBlockAssets; getOffchainStore: (moduleID: Buffer, storePrefix: Buffer) => SubStore; getFinalizedHeight(): number; }