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