import BigNumber from 'bignumber.js';
import { PriceTokenAmount } from "../../../../../../common/tokens";
import { EvmBlockchainName } from "../../../../../../core/blockchain/models/blockchain-name";
import { CelerCrossChainContractData } from "../celer-cross-chain-contract-data";
import { CelerCrossChainSupportedBlockchain } from "../models/celer-cross-chain-supported-blockchain";
import { CelerSupportedOnChainTradeProvider } from "../models/celer-supported-on-chain-trade";
import { AbiItem } from 'web3-utils';
export declare abstract class CelerContractTrade {
    readonly blockchain: CelerCrossChainSupportedBlockchain;
    readonly contract: CelerCrossChainContractData;
    private readonly providerIndex;
    abstract readonly fromToken: PriceTokenAmount<EvmBlockchainName>;
    abstract readonly toToken: PriceTokenAmount<EvmBlockchainName>;
    abstract readonly toTokenAmountMin: BigNumber;
    get provider(): CelerSupportedOnChainTradeProvider;
    protected constructor(blockchain: CelerCrossChainSupportedBlockchain, contract: CelerCrossChainContractData, providerIndex: number);
    /**
     * Returns method's name and contract abi to call in source network.
     */
    getMethodNameAndContractAbi(): {
        methodName: string;
        contractAbi: AbiItem[];
    };
    private getAbiMethodByProvider;
    private getSwapMethod;
    abstract getMethodArguments(toContractTrade: CelerContractTrade, walletAddress: string, providerAddress: string, options?: {
        swapTokenWithFee?: boolean;
        maxSlippage?: number;
        receiverAddress?: string;
    }): Promise<unknown[]>;
    abstract getCelerSourceTrade(): unknown[] | unknown;
    abstract getCelerDestinationTrade(integratorAddress: string, receiverAddress: string): unknown[];
}
