/// <reference types="node" />
import { CommandExecuteContext, CommandVerifyContext } from '../../state_machine';
import { BaseInteroperabilityCommand } from './base_interoperability_command';
import { BaseInteroperabilityInternalMethod } from './base_interoperability_internal_methods';
import { BaseInteroperabilityMethod } from './base_interoperability_method';
import { CCMStatusCode } from './constants';
import { CCMProcessedCode } from './events/ccm_processed';
import { CCMsg, CrossChainMessageContext, CrossChainUpdateTransactionParams, TokenMethod } from './types';
export declare abstract class BaseCrossChainUpdateCommand<T extends BaseInteroperabilityInternalMethod> extends BaseInteroperabilityCommand<T> {
    schema: {
        $id: string;
        type: string;
        required: string[];
        properties: {
            sendingChainID: {
                dataType: string;
                fieldNumber: number;
                minLength: number;
                maxLength: number;
            };
            certificate: {
                dataType: string;
                fieldNumber: number;
            };
            activeValidatorsUpdate: {
                type: string;
                fieldNumber: number;
                required: string[];
                properties: {
                    blsKeysUpdate: {
                        type: string;
                        fieldNumber: number;
                        items: {
                            dataType: string;
                            minLength: number;
                            maxLength: number;
                        };
                    };
                    bftWeightsUpdate: {
                        type: string;
                        fieldNumber: number;
                        items: {
                            dataType: string;
                        };
                    };
                    bftWeightsUpdateBitmap: {
                        dataType: string;
                        fieldNumber: number;
                    };
                };
            };
            certificateThreshold: {
                dataType: string;
                fieldNumber: number;
            };
            inboxUpdate: {
                type: string;
                fieldNumber: number;
                required: string[];
                properties: {
                    crossChainMessages: {
                        type: string;
                        fieldNumber: number;
                        items: {
                            dataType: string;
                        };
                    };
                    messageWitnessHashes: {
                        type: string;
                        fieldNumber: number;
                        items: {
                            dataType: string;
                            minLength: number;
                            maxLength: number;
                        };
                    };
                    outboxRootWitness: {
                        type: string;
                        fieldNumber: number;
                        required: string[];
                        properties: {
                            bitmap: {
                                dataType: string;
                                fieldNumber: number;
                            };
                            siblingHashes: {
                                type: string;
                                fieldNumber: number;
                                items: {
                                    dataType: string;
                                    minLength: number;
                                    maxLength: number;
                                };
                            };
                        };
                    };
                };
            };
        };
    };
    protected _tokenMethod: TokenMethod;
    protected _interopsMethod: BaseInteroperabilityMethod<T>;
    init(interopsMethod: BaseInteroperabilityMethod<T>, tokenMethod: TokenMethod): void;
    protected verifyCommon(context: CommandVerifyContext<CrossChainUpdateTransactionParams>, isMainchain: boolean): Promise<void>;
    protected beforeCrossChainMessagesExecution(context: CommandExecuteContext<CrossChainUpdateTransactionParams>, isMainchain: boolean): Promise<[CCMsg[], boolean]>;
    protected verifyRoutingRules(ccm: CCMsg, ccuParams: CrossChainUpdateTransactionParams, ownChainID: Buffer, isMainchain: boolean): void;
    protected afterCrossChainMessagesExecute(context: CommandExecuteContext<CrossChainUpdateTransactionParams>): Promise<void>;
    private _beforeCrossChainCommandExecute;
    private _afterCrossChainCommandExecute;
    protected apply(context: CrossChainMessageContext): Promise<void>;
    protected bounce(context: CrossChainMessageContext, ccmSize: number, ccmStatusCode: CCMStatusCode, ccmProcessedCode: CCMProcessedCode): Promise<void>;
    protected verifyCCM(context: CrossChainMessageContext, ccmID: Buffer): Promise<boolean>;
    protected verifyCertificateSignatureAndPartnerChainOutboxRoot(context: CommandExecuteContext<CrossChainUpdateTransactionParams>): Promise<void>;
}
