import { Address, ContractState, TestContractResult, HexString, ContractFactory, CallContractParams, CallContractResult, TestContractParams, ContractInstance } from "@alephium/web3";
export declare namespace RemoteTokenPoolTypes {
    type Fields = {
        tokenBridgeId: HexString;
        tokenChainId: bigint;
        bridgeTokenId: HexString;
        totalBridged: bigint;
        symbol_: HexString;
        name_: HexString;
        decimals_: bigint;
        sequence_: bigint;
    };
    type State = ContractState<Fields>;
    interface CallMethodTable {
        getSymbol: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<HexString>;
        };
        getName: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<HexString>;
        };
        getDecimals: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<bigint>;
        };
        getTotalSupply: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<bigint>;
        };
        normalizeAmount: {
            params: CallContractParams<{
                amount: bigint;
                decimals: bigint;
            }>;
            result: CallContractResult<bigint>;
        };
        deNormalizeAmount: {
            params: CallContractParams<{
                amount: bigint;
                decimals: bigint;
            }>;
            result: CallContractResult<bigint>;
        };
        transfer: {
            params: CallContractParams<{
                fromAddress: Address;
                toAddress: HexString;
                amount: bigint;
                arbiterFee: bigint;
                nonce: HexString;
            }>;
            result: CallContractResult<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<RemoteTokenPoolInstance, RemoteTokenPoolTypes.Fields> {
    at(address: string): RemoteTokenPoolInstance;
    tests: {
        getSymbol: (params: Omit<TestContractParams<RemoteTokenPoolTypes.Fields, never>, "testArgs">) => Promise<TestContractResult<HexString>>;
        getName: (params: Omit<TestContractParams<RemoteTokenPoolTypes.Fields, never>, "testArgs">) => Promise<TestContractResult<HexString>>;
        getDecimals: (params: Omit<TestContractParams<RemoteTokenPoolTypes.Fields, never>, "testArgs">) => Promise<TestContractResult<bigint>>;
        getTotalSupply: (params: Omit<TestContractParams<RemoteTokenPoolTypes.Fields, never>, "testArgs">) => Promise<TestContractResult<bigint>>;
        completeTransfer: (params: TestContractParams<RemoteTokenPoolTypes.Fields, {
            emitterChainId: bigint;
            amount: bigint;
            vaaTokenId: HexString;
            vaaTokenChainId: bigint;
            recipient: Address;
            normalizedArbiterFee: bigint;
            caller: Address;
        }>) => Promise<TestContractResult<null>>;
        prepareTransfer: (params: TestContractParams<RemoteTokenPoolTypes.Fields, {
            callerContractId: HexString;
            toAddress: HexString;
            amount: bigint;
            arbiterFee: bigint;
            nonce: HexString;
        }>) => Promise<TestContractResult<[HexString, bigint]>>;
        prepareCompleteTransfer: (params: TestContractParams<RemoteTokenPoolTypes.Fields, {
            callerContractId: HexString;
            emitterChainId: bigint;
            amount: bigint;
            vaaTokenId: HexString;
            vaaTokenChainId: bigint;
            normalizedArbiterFee: bigint;
        }>) => Promise<TestContractResult<[bigint, bigint]>>;
        normalizeAmount: (params: TestContractParams<RemoteTokenPoolTypes.Fields, {
            amount: bigint;
            decimals: bigint;
        }>) => Promise<TestContractResult<bigint>>;
        deNormalizeAmount: (params: TestContractParams<RemoteTokenPoolTypes.Fields, {
            amount: bigint;
            decimals: bigint;
        }>) => Promise<TestContractResult<bigint>>;
        updateDetails: (params: TestContractParams<RemoteTokenPoolTypes.Fields, {
            symbol: HexString;
            name: HexString;
            sequence: bigint;
        }>) => Promise<TestContractResult<null>>;
        transfer: (params: TestContractParams<RemoteTokenPoolTypes.Fields, {
            fromAddress: Address;
            toAddress: HexString;
            amount: bigint;
            arbiterFee: bigint;
            nonce: HexString;
        }>) => Promise<TestContractResult<HexString>>;
    };
}
export declare const RemoteTokenPool: Factory;
export declare class RemoteTokenPoolInstance extends ContractInstance {
    constructor(address: Address);
    fetchState(): Promise<RemoteTokenPoolTypes.State>;
    methods: {
        getSymbol: (params?: Omit<CallContractParams<{}>, "args"> | undefined) => Promise<RemoteTokenPoolTypes.CallMethodResult<"getSymbol">>;
        getName: (params?: Omit<CallContractParams<{}>, "args"> | undefined) => Promise<RemoteTokenPoolTypes.CallMethodResult<"getName">>;
        getDecimals: (params?: Omit<CallContractParams<{}>, "args"> | undefined) => Promise<RemoteTokenPoolTypes.CallMethodResult<"getDecimals">>;
        getTotalSupply: (params?: Omit<CallContractParams<{}>, "args"> | undefined) => Promise<RemoteTokenPoolTypes.CallMethodResult<"getTotalSupply">>;
        normalizeAmount: (params: RemoteTokenPoolTypes.CallMethodParams<"normalizeAmount">) => Promise<RemoteTokenPoolTypes.CallMethodResult<"normalizeAmount">>;
        deNormalizeAmount: (params: RemoteTokenPoolTypes.CallMethodParams<"deNormalizeAmount">) => Promise<RemoteTokenPoolTypes.CallMethodResult<"deNormalizeAmount">>;
        transfer: (params: RemoteTokenPoolTypes.CallMethodParams<"transfer">) => Promise<RemoteTokenPoolTypes.CallMethodResult<"transfer">>;
    };
    multicall<Calls extends RemoteTokenPoolTypes.MultiCallParams>(calls: Calls): Promise<RemoteTokenPoolTypes.MultiCallResults<Calls>>;
}
export {};
