import { Contract, SignerProvider, Address, Token, ContractState, node, TestContractResult, InputAsset, Asset, Fields, SignDeployContractTxResult, SubscribeOptions, EventSubscription } from "@alephium/web3";
export interface GovernanceWormholeMessage {
    blockHash: string;
    txId: string;
    eventIndex: number;
    sender: string;
    targetChainId: bigint;
    sequence: bigint;
    nonce: string;
    payload: string;
    consistencyLevel: bigint;
}
export declare type _GovernanceFields = {
    chainId: bigint;
    governanceChainId: bigint;
    governanceEmitterAddress: string;
    receivedSequence: bigint;
    messageFee: bigint;
    guardianSets: [string, string];
    guardianSetIndexes: [bigint, bigint];
    previousGuardianSetExpirationTimeMS: bigint;
};
export declare type _GovernanceState = _GovernanceFields & Omit<ContractState, "fields">;
export declare class Governance {
    static readonly contract: Contract;
    readonly address: Address;
    readonly contractId: string;
    readonly groupIndex: number;
    deployResult: SignDeployContractTxResult | undefined;
    private constructor();
    static deploy(signer: SignerProvider, chainId: bigint, governanceChainId: bigint, governanceEmitterAddress: string, receivedSequence: bigint, messageFee: bigint, guardianSets: [string, string], guardianSetIndexes: [bigint, bigint], previousGuardianSetExpirationTimeMS: bigint, _extraParams?: {
        initialAttoAlphAmount?: bigint;
        initialTokenAmounts?: Token[];
        issueTokenAmount?: bigint;
        gasAmount?: number;
        gasPrice?: bigint;
    }): Promise<Governance>;
    static connect(address: string, deployResult?: SignDeployContractTxResult): Governance;
    fetchState(): Promise<_GovernanceState>;
    private decodeWormholeMessage;
    subscribeWormholeMessage(options: SubscribeOptions<GovernanceWormholeMessage>, fromCount?: number): EventSubscription;
    static stateForTest(chainId: bigint, governanceChainId: bigint, governanceEmitterAddress: string, receivedSequence: bigint, messageFee: bigint, guardianSets: [string, string], guardianSetIndexes: [bigint, bigint], previousGuardianSetExpirationTimeMS: bigint, asset?: Asset, address?: string): ContractState;
    static testParseConractUpgrade(args: {
        payload: string;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [string, string, string, string];
    }>;
    static testGetMessageFee(_initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [bigint];
    }>;
    static testPublishWormholeMessage(args: {
        payer: string;
        targetChainId: bigint;
        sequence: bigint;
        nonce: string;
        payload: string;
        consistencyLevel: bigint;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [];
    }>;
    static testParseAndVerifyVAA(args: {
        data: string;
        isGovernanceVAA: boolean;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [bigint, bigint, string, bigint, string];
    }>;
    static testParseAndVerifyGovernanceVAAGeneric(args: {
        vaa: string;
        targetSequence: bigint;
        coreModule: bigint;
        action: string;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [bigint, bigint, string];
    }>;
    static testParseAndVerifyGovernanceVAA(args: {
        vaa: string;
        action: string;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [bigint, string];
    }>;
    static testGetGuardiansInfo(args: {
        guardianSetIndex: bigint;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [string];
    }>;
    static testSubmitContractUpgrade(args: {
        vaa: string;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [];
    }>;
    static testUpdatePreviousGuardianSet(_initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [];
    }>;
    static testSubmitNewGuardianSet(args: {
        vaa: string;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [];
    }>;
    static testSubmitSetMessageFee(args: {
        vaa: string;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [];
    }>;
    static testSubmitTransferFees(args: {
        vaa: string;
    }, _initFields: _GovernanceFields | Fields, _extraParams?: {
        group?: number;
        address?: string;
        initialAsset?: Asset;
        existingContracts?: ContractState[];
        inputAssets?: InputAsset[];
    }): Promise<Omit<TestContractResult, "returns"> & {
        returns: [];
    }>;
    getMessageFeeCall(_extraParams?: {
        worldStateBlockHash?: string;
        txId?: string;
        existingContracts?: string[];
        inputAssets?: node.TestInputAsset[];
    }): Promise<bigint>;
    parseAndVerifyVAACall(data: string, isGovernanceVAA: boolean, _extraParams?: {
        worldStateBlockHash?: string;
        txId?: string;
        existingContracts?: string[];
        inputAssets?: node.TestInputAsset[];
    }): Promise<[bigint, bigint, string, bigint, string]>;
    parseAndVerifyGovernanceVAAGenericCall(vaa: string, targetSequence: bigint, coreModule: bigint, action: string, _extraParams?: {
        worldStateBlockHash?: string;
        txId?: string;
        existingContracts?: string[];
        inputAssets?: node.TestInputAsset[];
    }): Promise<[bigint, bigint, string]>;
}
