rubic-sdk
Version:
Simplify dApp creation
78 lines (77 loc) • 3.43 kB
TypeScript
import { Observable } from 'rxjs';
import { PriceToken, PriceTokenAmount, Token } from "../../../common/tokens";
import { BlockchainName, EvmBlockchainName } from "../../../core/blockchain/models/blockchain-name";
import { ProviderAddress } from "../../../core/sdk/models/provider-address";
import { OnChainManagerCalculationOptions } from "./models/on-chain-manager-calculation-options";
import { OnChainReactivelyCalculatedTradeData } from "./models/on-chain-reactively-calculated-trade-data";
import { WrappedOnChainTradeOrNull } from "./models/wrapped-on-chain-trade-or-null";
import { OnChainCalculationOptions } from "./providers/common/models/on-chain-calculation-options";
import { EvmOnChainTrade } from "./providers/common/on-chain-trade/evm-on-chain-trade/evm-on-chain-trade";
/**
* Contains methods to calculate on-chain trades.
*/
export declare class OnChainManager {
private readonly providerAddress;
private static readonly defaultCalculationTimeout;
private static readonly onChainProxyService;
/**
* List of all on-chain trade providers, combined by blockchains.
*/
private readonly tradeProviders;
private readonly deflationTokenManager;
private readonly AGGREGATORS;
private readonly LIFI_DISABLED_PROVIDERS;
constructor(providerAddress: ProviderAddress);
calculateTradeReactively(fromToken: Token | {
address: string;
blockchain: BlockchainName;
} | PriceToken, fromAmount: string | number, toToken: Token | string | PriceToken, options?: OnChainManagerCalculationOptions): Observable<OnChainReactivelyCalculatedTradeData>;
/**
* Calculates on-chain trades, sorted by output amount.
*
* @example
* ```ts
* const blockchain = BLOCKCHAIN_NAME.ETHEREUM;
* // ETH
* const fromTokenAddress = '0x0000000000000000000000000000000000000000';
* const fromAmount = 1;
* // USDT
* const toTokenAddress = '0xdac17f958d2ee523a2206206994597c13d831ec7';
*
* const trades = await sdk.onChainManager.calculateTrade(
* { blockchain, address: fromTokenAddress },
* fromAmount,
* toTokenAddress
* );
* const bestTrade = trades[0];
*
* trades.forEach(trade => {
* if (trade instanceof OnChainTrade) {
* console.log(trade.type, `to amount: ${trade.to.tokenAmount.toFormat(3)}`)
* }
* })
* ```
*
* @param fromToken Token to sell.
* @param fromAmount Amount to sell.
* @param toToken Token to get.
* @param options Additional options.
* @returns List of calculated on-chain trades.
*/
calculateTrade(fromToken: Token | {
address: string;
blockchain: BlockchainName;
} | PriceToken, fromAmount: string | number, toToken: Token | string | PriceToken, options?: OnChainManagerCalculationOptions): Promise<WrappedOnChainTradeOrNull[]>;
private getFullOptions;
private calculateTradeFromTokens;
private isDeflationToken;
private calculateDexes;
private calculateLifiTrade;
static getWrapTrade(from: PriceTokenAmount<EvmBlockchainName>, to: PriceToken, _options: OnChainCalculationOptions): Promise<EvmOnChainTrade>;
private getProviderCalculationPromise;
private getAggregatorsCalculationPromises;
private getCalcPromise;
private handleTradePromise;
private isDisabledAggregator;
private getWrappedWrapTrade;
}