import { Address, ContractState, TestContractResult, HexString, ContractFactory, CallContractParams, CallContractResult, TestContractParams, ContractInstance } from "@alephium/web3";
export declare namespace LocalTokenPoolTypes {
    type Fields = {
        tokenBridgeId: HexString;
        tokenChainId: bigint;
        bridgeTokenId: HexString;
        totalBridged: bigint;
        decimals_: bigint;
    };
    type State = ContractState<Fields>;
    interface CallMethodTable {
        normalizeAmount: {
            params: CallContractParams<{
                amount: bigint;
                decimals: bigint;
            }>;
            result: CallContractResult<bigint>;
        };
        deNormalizeAmount: {
            params: CallContractParams<{
                amount: bigint;
                decimals: bigint;
            }>;
            result: CallContractResult<bigint>;
        };
        transfer: {
            params: CallContractParams<{
                fromAddress: HexString;
                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<LocalTokenPoolInstance, LocalTokenPoolTypes.Fields> {
    at(address: string): LocalTokenPoolInstance;
    testCompleteTransferMethod(params: TestContractParams<LocalTokenPoolTypes.Fields, {
        emitterChainId: bigint;
        amount: bigint;
        vaaTokenId: HexString;
        vaaTokenChainId: bigint;
        recipient: HexString;
        normalizedArbiterFee: bigint;
        caller: HexString;
    }>): Promise<TestContractResult<null>>;
    testPrepareTransferMethod(params: TestContractParams<LocalTokenPoolTypes.Fields, {
        callerContractId: HexString;
        toAddress: HexString;
        amount: bigint;
        arbiterFee: bigint;
        nonce: HexString;
    }>): Promise<TestContractResult<[HexString, bigint]>>;
    testPrepareCompleteTransferMethod(params: TestContractParams<LocalTokenPoolTypes.Fields, {
        callerContractId: HexString;
        emitterChainId: bigint;
        amount: bigint;
        vaaTokenId: HexString;
        vaaTokenChainId: bigint;
        normalizedArbiterFee: bigint;
    }>): Promise<TestContractResult<[bigint, bigint]>>;
    testNormalizeAmountMethod(params: TestContractParams<LocalTokenPoolTypes.Fields, {
        amount: bigint;
        decimals: bigint;
    }>): Promise<TestContractResult<bigint>>;
    testDeNormalizeAmountMethod(params: TestContractParams<LocalTokenPoolTypes.Fields, {
        amount: bigint;
        decimals: bigint;
    }>): Promise<TestContractResult<bigint>>;
    testTransferMethod(params: TestContractParams<LocalTokenPoolTypes.Fields, {
        fromAddress: HexString;
        toAddress: HexString;
        amount: bigint;
        arbiterFee: bigint;
        nonce: HexString;
    }>): Promise<TestContractResult<HexString>>;
}
export declare const LocalTokenPool: Factory;
export declare class LocalTokenPoolInstance extends ContractInstance {
    constructor(address: Address);
    fetchState(): Promise<LocalTokenPoolTypes.State>;
    callNormalizeAmountMethod(params: LocalTokenPoolTypes.CallMethodParams<"normalizeAmount">): Promise<LocalTokenPoolTypes.CallMethodResult<"normalizeAmount">>;
    callDeNormalizeAmountMethod(params: LocalTokenPoolTypes.CallMethodParams<"deNormalizeAmount">): Promise<LocalTokenPoolTypes.CallMethodResult<"deNormalizeAmount">>;
    callTransferMethod(params: LocalTokenPoolTypes.CallMethodParams<"transfer">): Promise<LocalTokenPoolTypes.CallMethodResult<"transfer">>;
    multicall<Calls extends LocalTokenPoolTypes.MultiCallParams>(calls: Calls): Promise<LocalTokenPoolTypes.MultiCallResults<Calls>>;
}
export {};
