3⃣
Trade calculation
Before trade calculation you should Set up SDK first.
Swaps in our SDK separated to two different type of swaps:
  • On-chain swaps- Since Rubic aggregates several DEXs, users can execute On-Chain Swaps and Bridges on Ethereum, BNB Smart Chain, Polygon, Harmony, Avalanche, Fantom, Moonriver, Solana, Arbitrum, Aurora, NEAR, and Telos networks. By also utilizing external DEXs, users are ensured the best possible rates.
  • Cross-chain swaps: Rubic's protocol offers easy trading for more than 15,000+ assets across Polygon, BNB Smart Chain, Ethereum, Avalanche, MoonRiver, Fantom, Solana, Harmony, Arbitrum, Aurora, NEAR, and Telos networks, using our custom and unique Cross-Chain Protocol. We utilize liquidity pools and our own smart contracts, Rubic provides an extremely easy-to-use Cross-Chain solution to all traders. Cross-Chain swaps are available between 12 major networks right now

On Chain trade calculation

To use on-chain swaps and calculate them, you need an instantTrades object located in the SDK instance. Inside the object is the calculateTrade method, which takes the input token, the input swap amount, the output token address, and the transaction parameters.
async calculateTrade(
fromToken:
| Token
| { address: string; blockchain: BlockchainName; },
fromAmount: string | number,
toToken: Token | string,
options?: SwapManagerCalculationOptions
): Promise<Array<InstantTrade | InstantTradeError>>
The method returns an array of calculated DEX which can be represented as InstantTrade object or InstantTradeError object. Both contains DEX type, but first contains the trade and the second contains error reason. Example:
const sdk = await RubicSDK.SDK.createSDK(configuration);
const fromToken = {
blockchain: [BLOCKCHAIN_NAME.ETHEREUM],
address: '0x0000000000000000000000000000000000000000'
}
const fromAmount = 1;
const toTokenAddress = '0xdac17f958d2ee523a2206206994597c13d831ec7';
// calculate trades
const trades = await sdk.instantTrades.calculateTrade(fromToken, fromAmount, toTokenAddress);
Done!
Now you can choose one of providers by prefered DEX type, or pick the best by output amount:
const trades = await sdk.instantTrades.calculateTrade(fromToken, fromAmount, toTokenAddress);
console.log(trades[0]) // Uniswap V3 trade
console.log(trades[1]) // Oneinch trade
console.log(trades[2]) // Uniswap V2 trade
const bestTrade = this.providersData.sort(
(providerA, providerB) =>
providerA.to.tokenAmount.gt(providerB.to.tokenAmount)
);
console.log(bestTrade) // Uniswap V2 trade

Cross Chain trade calculation

To use cross-chain swaps and calculate them, you need a crossChain object, located in the SDK instance. Inside the object is the calculateTrade method, which takes the input token, the input swap amount, the output token, and the transaction parameters.
async calculateTrade(
fromToken:
| Token
| {
address: string;
blockchain: BlockchainName;
},
fromAmount: string | number,
toToken:
| Token
| {
address: string;
blockchain: BlockchainName;
},
options?: Omit<SwapManagerCrossChainCalculationOptions, 'providerAddress'>
): Promise<WrappedCrossChainTrade[]>
It returns WrappedCrossChainTrade object.
interface WrappedCrossChainTrade {
/**
* Calculated cross chain trade.
* Sometimes trade can be calculated even if error was thrown.
* Equals `null` in case error is critical and trade cannot be calculated.
*/
trade: CrossChainTrade | null;
/**
* Type of calculated trade.
*/
tradeType: CrossChainTradeType;
/**
* Error, thrown during calculation.
*/
error?: RubicSdkError;
}
Using example:
// create SDK instance
const sdk = await RubicSDK.SDK.createSDK(configuration);
// Define trade parametres
const fromToken = {
blockchain: [BLOCKCHAIN_NAME.ETHEREUM],
address: '0x0000000000000000000000000000000000000000'
};
const fromAmount = 1;
const toToken = {
blockchain: [BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN],
address: '0xe9e7cea3dedca5984780bafc599bd69add087d56'
};
// calculate trade
const trade = await sdk.crossChain.calculateTrade(fromToken, fromAmount, toToken);

What is next?

On this step you get the real trade object. You have one last step left - make a swap.