import { Address, ContractState, TestContractResult, HexString, ContractFactory, CallContractParams, CallContractResult, TestContractParams, ContractInstance } from "@alephium/web3";
export declare namespace TokenBridgeTypes {
    type Fields = {
        governance: HexString;
        localChainId: bigint;
        receivedSequence: bigint;
        sendSequence: bigint;
        tokenBridgeFactory: HexString;
        minimalConsistencyLevel: bigint;
        refundAddress: Address;
    };
    type State = ContractState<Fields>;
    interface CallMethodTable {
        getRefundAddress: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<Address>;
        };
        getMessageFee: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<bigint>;
        };
    }
    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<TokenBridgeInstance, TokenBridgeTypes.Fields> {
    at(address: string): TokenBridgeInstance;
    tests: {
        parseAndVerifyGovernanceVAA: (params: TestContractParams<TokenBridgeTypes.Fields, {
            vaa: HexString;
            action: HexString;
        }>) => Promise<TestContractResult<[bigint, HexString]>>;
        createAttestTokenHandler: (params: TestContractParams<TokenBridgeTypes.Fields, {
            payer: Address;
            createContractAlphAmount: bigint;
            remoteChainId: bigint;
            remoteTokenBridgeId: HexString;
            isLocal: boolean;
        }>) => Promise<TestContractResult<null>>;
        createLocalAttestTokenHandler: (params: TestContractParams<TokenBridgeTypes.Fields, {
            payer: Address;
            createContractAlphAmount: bigint;
        }>) => Promise<TestContractResult<null>>;
        parseAndVerifyRegisterChain: (params: TestContractParams<TokenBridgeTypes.Fields, {
            vaa: HexString;
        }>) => Promise<TestContractResult<[bigint, HexString]>>;
        registerChain: (params: TestContractParams<TokenBridgeTypes.Fields, {
            vaa: HexString;
            payer: Address;
            createContractAlphAmount: bigint;
        }>) => Promise<TestContractResult<null>>;
        upgradeContract: (params: TestContractParams<TokenBridgeTypes.Fields, {
            vaa: HexString;
        }>) => Promise<TestContractResult<null>>;
        destroyUnexecutedSequenceContracts: (params: TestContractParams<TokenBridgeTypes.Fields, {
            vaa: HexString;
        }>) => Promise<TestContractResult<null>>;
        updateMinimalConsistencyLevel: (params: TestContractParams<TokenBridgeTypes.Fields, {
            vaa: HexString;
        }>) => Promise<TestContractResult<null>>;
        getRefundAddress: (params: Omit<TestContractParams<TokenBridgeTypes.Fields, never>, "testArgs">) => Promise<TestContractResult<Address>>;
        updateRefundAddress: (params: TestContractParams<TokenBridgeTypes.Fields, {
            vaa: HexString;
        }>) => Promise<TestContractResult<null>>;
        parseConractUpgrade: (params: TestContractParams<TokenBridgeTypes.Fields, {
            payload: HexString;
        }>) => Promise<TestContractResult<[HexString, HexString, HexString, HexString]>>;
        getMessageFee: (params: Omit<TestContractParams<TokenBridgeTypes.Fields, never>, "testArgs">) => Promise<TestContractResult<bigint>>;
        attestToken: (params: TestContractParams<TokenBridgeTypes.Fields, {
            payer: Address;
            localTokenId: HexString;
            decimals: bigint;
            symbol: HexString;
            name: HexString;
            nonce: HexString;
            consistencyLevel: bigint;
        }>) => Promise<TestContractResult<null>>;
        nextSendSequence: (params: Omit<TestContractParams<TokenBridgeTypes.Fields, never>, "testArgs">) => Promise<TestContractResult<bigint>>;
        createLocalTokenPool: (params: TestContractParams<TokenBridgeTypes.Fields, {
            localTokenId: HexString;
            decimals: bigint;
            payer: Address;
            createContractAlphAmount: bigint;
        }>) => Promise<TestContractResult<null>>;
        createRemoteTokenPool: (params: TestContractParams<TokenBridgeTypes.Fields, {
            bridgeTokenId: HexString;
            tokenChainId: bigint;
            decimals: bigint;
            symbol: HexString;
            name: HexString;
            msgSequence: bigint;
            payer: Address;
            createContractAlphAmount: bigint;
        }>) => Promise<TestContractResult<null>>;
        updateRemoteTokenPool: (params: TestContractParams<TokenBridgeTypes.Fields, {
            bridgeTokenId: HexString;
            tokenChainId: bigint;
            symbol: HexString;
            name: HexString;
            msgSequence: bigint;
        }>) => Promise<TestContractResult<null>>;
        transferToken: (params: TestContractParams<TokenBridgeTypes.Fields, {
            fromAddress: Address;
            bridgeTokenId: HexString;
            tokenChainId: bigint;
            toChainId: bigint;
            toAddress: HexString;
            tokenAmount: bigint;
            messageFee: bigint;
            arbiterFee: bigint;
            nonce: HexString;
            consistencyLevel: bigint;
        }>) => Promise<TestContractResult<null>>;
    };
}
export declare const TokenBridge: Factory;
export declare class TokenBridgeInstance extends ContractInstance {
    constructor(address: Address);
    fetchState(): Promise<TokenBridgeTypes.State>;
    methods: {
        getRefundAddress: (params?: Omit<CallContractParams<{}>, "args"> | undefined) => Promise<TokenBridgeTypes.CallMethodResult<"getRefundAddress">>;
        getMessageFee: (params?: Omit<CallContractParams<{}>, "args"> | undefined) => Promise<TokenBridgeTypes.CallMethodResult<"getMessageFee">>;
    };
    multicall<Calls extends TokenBridgeTypes.MultiCallParams>(calls: Calls): Promise<TokenBridgeTypes.MultiCallResults<Calls>>;
}
export {};
