import { EscrowClient } from './client.js';
import { EventEmitter } from './emitter.js';
import { EscrowSigner } from './signer.js';
import { ContractData, PathStatus, StateData, WitnessData, WitnessTemplate } from '../../types/index.js';
interface ContractVMConfig {
    refresh_ival: number;
    verbose: boolean;
}
export declare class ContractVM extends EventEmitter<{
    'error': unknown;
    'fetch': ContractVM;
    'update': ContractVM;
}> {
    static fetch(client: EscrowClient, cid: string, config?: Partial<ContractVMConfig>): Promise<ContractVM>;
    readonly _client: EscrowClient;
    readonly _contract: ContractData;
    readonly _opt: ContractVMConfig;
    _data: StateData;
    _updated: number;
    constructor(client: EscrowClient, contract: ContractData, config?: Partial<ContractVMConfig>);
    get cid(): string;
    get client(): EscrowClient;
    get data(): StateData;
    get head(): string;
    get opt(): ContractVMConfig;
    get is_stale(): boolean;
    get statements(): Promise<WitnessData[]>;
    get status(): PathStatus;
    get updated_at(): number;
    _fetch(): Promise<void>;
    _submit(witness: WitnessData): Promise<this>;
    _update(state: StateData): Promise<this>;
    _witness(): Promise<WitnessData[]>;
    fetch(): Promise<this>;
    poll(status: PathStatus, retries: number): Promise<unknown>;
    check(signer: EscrowSigner, template: WitnessTemplate): Promise<boolean>;
    sign(signer: EscrowSigner, template: WitnessTemplate): Promise<this>;
    submit(witness: WitnessData): Promise<this>;
    verify(contract: ContractData): Promise<void>;
    toJSON(): StateData;
    toString(): string;
}
export {};
