UNPKG

rubic-sdk

Version:
114 lines (113 loc) 4.85 kB
import BigNumber from 'bignumber.js'; import { Observable } from 'rxjs'; import { Token } from "../../../common/tokens"; import { BlockchainName } from "../../../core/blockchain/models/blockchain-name"; import { ProviderAddress } from "../../../core/sdk/models/provider-address"; import { CrossChainManagerCalculationOptions } from "./models/cross-chain-manager-options"; import { CrossChainReactivelyCalculatedTradeData } from "./models/cross-chain-reactively-calculated-trade-data"; import { CrossChainTypedTradeProviders } from "./models/cross-chain-typed-trade-provider"; import { WrappedCrossChainTrade } from "./providers/common/models/wrapped-cross-chain-trade"; /** * Contains method to calculate best cross-chain trade. */ export declare class CrossChainManager { private readonly providerAddress; readonly tradeProviders: CrossChainTypedTradeProviders; constructor(providerAddress: ProviderAddress); /** * Calculates cross-chain trades and sorts them by exchange courses. * Wrapped trade object may contain error, but sometimes course can be * calculated even with thrown error (e.g. min/max amount error). * * @example * ```ts * const fromBlockchain = BLOCKCHAIN_NAME.ETHEREUM; * // ETH * const fromTokenAddress = '0x0000000000000000000000000000000000000000'; * const fromAmount = 1; * const toBlockchain = BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN; * // BUSD * const toTokenAddress = '0xe9e7cea3dedca5984780bafc599bd69add087d56'; * * const wrappedTrades = await sdk.crossChainManager.calculateTrade( * { blockchain: fromBlockchain, address: fromTokenAddress }, * fromAmount, * { blockchain: toBlockchain, address: toTokenAddress } * ); * const bestTrade = wrappedTrades[0]; * * wrappedTrades.forEach(wrappedTrade => { * if (wrappedTrade.trade) { * console.log(wrappedTrade.tradeType, `to amount: ${wrappedTrade.trade.to.tokenAmount.toFormat(3)}`)); * } * if (wrappedTrade.error) { * console.error(wrappedTrade.tradeType, 'error: wrappedTrade.error'); * } * }); * * ``` * * @param fromToken Token to sell. * @param fromAmount Amount to sell. * @param toToken Token to get. * @param options Additional options. * @returns Array of sorted wrapped cross-chain trades with possible errors. */ calculateTrade(fromToken: Token | { address: string; blockchain: BlockchainName; }, fromAmount: string | number | BigNumber, toToken: Token | { address: string; blockchain: BlockchainName; }, options?: CrossChainManagerCalculationOptions): Promise<WrappedCrossChainTrade[]>; /** * Calculates cross-chain trades reactively in sequence. * Contains wrapped trade object which may contain error, but sometimes course can be * calculated even with thrown error (e.g. min/max amount error). * * @example * ```ts * const fromBlockchain = BLOCKCHAIN_NAME.ETHEREUM; * // ETH * const fromTokenAddress = '0x0000000000000000000000000000000000000000'; * const fromAmount = 1; * const toBlockchain = BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN; * // BUSD * const toTokenAddress = '0xe9e7cea3dedca5984780bafc599bd69add087d56'; * * sdk.crossChain.calculateTrade( * { blockchain: fromBlockchain, address: fromTokenAddress }, * fromAmount, * { blockchain: toBlockchain, address: toTokenAddress } * ).subscribe(tradeData => { * console.log(tradeData.total) // 3 * console.log(tradeData.calculated) // 0 or 1 ... or tradeData.total * * const wrappedTrade = tradeData.wrappedTrade; * if (wrappedTrade) { * console.log(wrappedTrade.tradeType, `to amount: ${wrappedTrade.trade.to.tokenAmount.toFormat(3)}`)); * if (wrappedTrade.error) { * console.error(wrappedTrade.tradeType, 'error: wrappedTrade.error'); * } * } * }); * * ``` * * @param fromToken Token to sell. * @param fromAmount Amount to sell. * @param toToken Token to get. * @param options Additional options. * @returns Observable of cross-chain providers calculation data with best trade and possible errors. */ calculateTradesReactively(fromToken: Token | { address: string; blockchain: BlockchainName; }, fromAmount: string | number | BigNumber, toToken: Token | { address: string; blockchain: BlockchainName; }, options?: CrossChainManagerCalculationOptions): Observable<CrossChainReactivelyCalculatedTradeData>; private getFullOptions; private getNotDisabledProviders; private getProviderCalculationPromise; }