import { Address, ContractState, TestContractResult, HexString, ContractFactory, SubscribeOptions, EventSubscription, CallContractParams, CallContractResult, TestContractParams, ContractEvent, ContractInstance } from "@alephium/web3";
export declare namespace GovernanceTypes {
    type Fields = {
        chainId: bigint;
        governanceChainId: bigint;
        governanceEmitterAddress: HexString;
        receivedSequence: bigint;
        messageFee: bigint;
        guardianSets: [HexString, HexString];
        guardianSetIndexes: [bigint, bigint];
        previousGuardianSetExpirationTimeMS: bigint;
    };
    type State = ContractState<Fields>;
    type WormholeMessageEvent = ContractEvent<{
        sender: HexString;
        targetChainId: bigint;
        sequence: bigint;
        nonce: HexString;
        payload: HexString;
        consistencyLevel: bigint;
    }>;
    interface CallMethodTable {
        getMessageFee: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<bigint>;
        };
        parseAndVerifyVAA: {
            params: CallContractParams<{
                data: HexString;
                isGovernanceVAA: boolean;
            }>;
            result: CallContractResult<[
                bigint,
                bigint,
                HexString,
                bigint,
                HexString
            ]>;
        };
        parseAndVerifyGovernanceVAAGeneric: {
            params: CallContractParams<{
                vaa: HexString;
                targetSequence: bigint;
                coreModule: bigint;
                action: HexString;
            }>;
            result: CallContractResult<[bigint, bigint, HexString]>;
        };
    }
    type CallMethodParams<T extends keyof CallMethodTable> = CallMethodTable[T]["params"];
    type CallMethodResult<T extends keyof CallMethodTable> = CallMethodTable[T]["result"];
    type MultiCallParams = Partial<{
        [Name in keyof CallMethodTable]: CallMethodTable[Name]["params"];
    }>;
    type MultiCallResults<T extends MultiCallParams> = {
        [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable ? CallMethodTable[MaybeName]["result"] : undefined;
    };
}
declare class Factory extends ContractFactory<GovernanceInstance, GovernanceTypes.Fields> {
    at(address: string): GovernanceInstance;
    testParseConractUpgradeMethod(params: TestContractParams<GovernanceTypes.Fields, {
        payload: HexString;
    }>): Promise<TestContractResult<[HexString, HexString, HexString, HexString]>>;
    testGetMessageFeeMethod(params: Omit<TestContractParams<GovernanceTypes.Fields, never>, "testArgs">): Promise<TestContractResult<bigint>>;
    testPublishWormholeMessageMethod(params: TestContractParams<GovernanceTypes.Fields, {
        payer: HexString;
        targetChainId: bigint;
        sequence: bigint;
        nonce: HexString;
        payload: HexString;
        consistencyLevel: bigint;
    }>): Promise<TestContractResult<null>>;
    testParseAndVerifyVAAMethod(params: TestContractParams<GovernanceTypes.Fields, {
        data: HexString;
        isGovernanceVAA: boolean;
    }>): Promise<TestContractResult<[bigint, bigint, HexString, bigint, HexString]>>;
    testParseAndVerifyGovernanceVAAGenericMethod(params: TestContractParams<GovernanceTypes.Fields, {
        vaa: HexString;
        targetSequence: bigint;
        coreModule: bigint;
        action: HexString;
    }>): Promise<TestContractResult<[bigint, bigint, HexString]>>;
    testParseAndVerifyGovernanceVAAMethod(params: TestContractParams<GovernanceTypes.Fields, {
        vaa: HexString;
        action: HexString;
    }>): Promise<TestContractResult<[bigint, HexString]>>;
    testGetGuardiansInfoMethod(params: TestContractParams<GovernanceTypes.Fields, {
        guardianSetIndex: bigint;
    }>): Promise<TestContractResult<HexString>>;
    testSubmitContractUpgradeMethod(params: TestContractParams<GovernanceTypes.Fields, {
        vaa: HexString;
    }>): Promise<TestContractResult<null>>;
    testUpdatePreviousGuardianSetMethod(params: Omit<TestContractParams<GovernanceTypes.Fields, never>, "testArgs">): Promise<TestContractResult<null>>;
    testSubmitNewGuardianSetMethod(params: TestContractParams<GovernanceTypes.Fields, {
        vaa: HexString;
    }>): Promise<TestContractResult<null>>;
    testSubmitSetMessageFeeMethod(params: TestContractParams<GovernanceTypes.Fields, {
        vaa: HexString;
    }>): Promise<TestContractResult<null>>;
    testSubmitTransferFeesMethod(params: TestContractParams<GovernanceTypes.Fields, {
        vaa: HexString;
    }>): Promise<TestContractResult<null>>;
}
export declare const Governance: Factory;
export declare class GovernanceInstance extends ContractInstance {
    constructor(address: Address);
    fetchState(): Promise<GovernanceTypes.State>;
    getContractEventsCurrentCount(): Promise<number>;
    subscribeWormholeMessageEvent(options: SubscribeOptions<GovernanceTypes.WormholeMessageEvent>, fromCount?: number): EventSubscription;
    callGetMessageFeeMethod(params?: GovernanceTypes.CallMethodParams<"getMessageFee">): Promise<GovernanceTypes.CallMethodResult<"getMessageFee">>;
    callParseAndVerifyVAAMethod(params: GovernanceTypes.CallMethodParams<"parseAndVerifyVAA">): Promise<GovernanceTypes.CallMethodResult<"parseAndVerifyVAA">>;
    callParseAndVerifyGovernanceVAAGenericMethod(params: GovernanceTypes.CallMethodParams<"parseAndVerifyGovernanceVAAGeneric">): Promise<GovernanceTypes.CallMethodResult<"parseAndVerifyGovernanceVAAGeneric">>;
    multicall<Calls extends GovernanceTypes.MultiCallParams>(calls: Calls): Promise<GovernanceTypes.MultiCallResults<Calls>>;
}
export {};
