lisk-framework
Version:
Lisk blockchain application platform
181 lines (180 loc) • 5.83 kB
TypeScript
/// <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;
}