import BigNumber from 'bignumber.js';
import { PriceTokenAmount } from '../../../../../core/blockchain/tokens/price-token-amount';
import { AbiItem } from 'web3-utils';
import { BlockchainName } from '../../../../../core';
import { ProviderData } from '../../../models/provider-data';
import { CrossChainContractData } from './cross-chain-contract-data';
import { CrossChainSupportedInstantTradeProvider } from './models/cross-chain-supported-instant-trade';
export declare abstract class CrossChainContractTrade {
    readonly blockchain: BlockchainName;
    private readonly providerIndex;
    abstract readonly fromToken: PriceTokenAmount;
    abstract readonly toToken: PriceTokenAmount;
    abstract readonly toTokenAmountMin: BigNumber;
    abstract readonly contract: CrossChainContractData;
    get provider(): CrossChainSupportedInstantTradeProvider;
    protected get providerData(): ProviderData;
    protected constructor(blockchain: BlockchainName, providerIndex: number);
    abstract getMethodNameAndContractAbi(): {
        methodName: string;
        contractAbi: AbiItem[];
    };
    abstract getMethodArguments(toContractTrade: CrossChainContractTrade, walletAddress: string, providerAddress: string, options?: {
        swapTokenWithFee?: boolean;
        maxSlippage?: number;
    }): Promise<unknown[]>;
    protected abstract modifyArgumentsForProvider(methodArguments: unknown[][], walletAddress: string, swapTokenWithFee?: boolean): Promise<void>;
    /**
     * Returns `first path` method argument, converted from instant-trade data and chosen provider.
     * Must be called on source contract.
     */
    protected abstract getFirstPath(): string[] | string;
    /**
     * Returns `second path` method argument, converted from instant-trade data and chosen provider.
     * Must be called on target contract.
     */
    abstract getSecondPath(): string[];
    abstract getSwapToUserMethodSignature(): string;
}
