Swap
Before making a swap, you need to request the best route from the doritoKit API.
Step 1: Create a QuoteParams Object
QuoteParams ObjectThe QuoteParams object defines the details of a swap between supported blockchains. It includes all the necessary information to find the best routing options.
Here’s the interface structure for QuoteParams:
interface QuoteParams {
affiliateBasisPoints?: string;
buyAsset: string;
recipientAddress?: string;
sellAmount: string;
sellAsset: string;
senderAddress?: string;
slippage: string;
}Step 2. Call getQuote from doritoKit API package
After creating the quoteParams object, you can pass it to the getQuote function of the dKitApi class.
// or directly from @doritokit/api
import { SwapKitApi } from '@doritokit/sdk'
const quoteParams = {
sellAsset: 'BTC.BTC',
sellAmount: '1',
buyAsset: 'ETH.ETH',
senderAddress: '...', // A valid Ethereum address
recipientAddress: '...', // A valid Bitcoin address
slippage: '3',
};
const { routes } = await SwapKitApi.getQuote(quoteParams);Step 3: Choose fee option multiplier, route & execute swap
import { FeeOption } from '@doritokit/sdk';
const bestRoute = routes.find(({ optimal }) => optimal)
const txHash = await dkClient.swap({
route: bestRoute,
recipient: '...',
feeOptionKey: FeeOption.Fast
// FeeOption multiplies current base fee by:
// Average => 1.2
// Fast => 1.5
// Fastest => 2
});
// Returns explorer url like etherscan, viewblock, etc.
const explorerUrl = skClient.getExplorerTxUrl(inputChain, txHash)The skClient used above assumes a wallet has been connected as described in Set up the SDK.
Executing ERC20 Swaps with tokens on EVM chains need approval spending. Check if asset has been approved with built in methods.
import { AmountWithBaseDenom, AssetEntity } from '@doritokit/sdk'
const isApproved = skClient.isAssetApprovedForContract(
asset, // AssetEntity
contractAddress: selectedRoute.contract
amount, // AmountWithBaseDenom => amount to check that's possible to spent, default MaxInt256
)
const approveTx = skClient.approveAssetForContract(
asset, // AssetEntity
contractAddress: selectedRoute.contract
amount, // AmountWithBaseDenom => amount approved to spent, default MaxInt256
)Last updated