import { Block } from '@liskhq/lisk-chain';
import { ApplicationConfig, PluginConfig, PartialApplicationConfig } from './types';
import { BasePlugin } from './plugins/base_plugin';
import { InMemoryChannel } from './controller';
import { Logger } from './logger';
import { BaseModule, ModuleMetadataJSON } from './modules/base_module';
import { ValidatorsMethod } from './modules/validators';
import { TokenMethod } from './modules/token';
import { AuthMethod } from './modules/auth';
import { FeeMethod } from './modules/fee';
import { RandomMethod } from './modules/random';
import { PoSMethod } from './modules/pos';
import { GenesisBlockGenerateInput } from './genesis_block';
import { SidechainInteroperabilityMethod, MainchainInteroperabilityMethod, BaseInteroperableModule } from './modules/interoperability';
import { DynamicRewardMethod } from './modules/dynamic_reward';
interface DefaultApplication {
    app: Application;
    method: {
        validator: ValidatorsMethod;
        auth: AuthMethod;
        token: TokenMethod;
        fee: FeeMethod;
        random: RandomMethod;
        reward: DynamicRewardMethod;
        pos: PoSMethod;
        interoperability: SidechainInteroperabilityMethod | MainchainInteroperabilityMethod;
    };
}
export declare class Application {
    config: ApplicationConfig;
    logger: Logger;
    private readonly _controller;
    private readonly _registeredModules;
    private readonly _stateMachine;
    private _stateDB;
    private _moduleDB;
    private _abiHandler;
    private _engineProcess;
    private readonly _mutex;
    constructor(config?: PartialApplicationConfig);
    get channel(): InMemoryChannel;
    static defaultApplication(config?: PartialApplicationConfig, mainchain?: boolean): DefaultApplication;
    registerPlugin(plugin: BasePlugin<any>, options?: PluginConfig): void;
    registerModule(Module: BaseModule): void;
    registerInteroperableModule(interoperableModule: BaseInteroperableModule): void;
    getRegisteredModules(): BaseModule[];
    getMetadata(): ModuleMetadataJSON[];
    run(): Promise<void>;
    shutdown(errorCode?: number, message?: string): Promise<void>;
    generateGenesisBlock(input: GenesisBlockGenerateInput): Promise<Block>;
    private _registerModule;
    private _initLogger;
    private _rootEndpoints;
    private _setupDirectories;
    private _emptySocketsDirectory;
    private _validatePidFile;
    private _clearControllerPidFile;
    private _stopEngine;
}
export {};
