UNPKG

@solsdk/xswap_sdk

Version:

Universal cross-chain swaps SDK

58 lines 2.17 kB
import { constructSimpleSDK } from '@paraswap/sdk'; import { ChainProvider } from '../../core/evm/chain-provider.js'; import { getContract } from 'viem'; import { ERC20ABI } from '../../core/evm/abi/erc20.js'; import { isNativeEvmToken, WRAPPED_ETH_ADDRESSES } from '../../constants.js'; export class ParaswapQuoteProvider { constructor(chainId) { Object.defineProperty(this, "chainId", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.chainId = chainId; } async getTokenDecimals(tokenAddress) { const client = ChainProvider.getClient(this.chainId); const erc20Contract = getContract({ abi: ERC20ABI, address: tokenAddress, client, }); return erc20Contract.read.decimals(); } async getQuote(params) { if (isNativeEvmToken(params.destToken)) { params.destToken = WRAPPED_ETH_ADDRESSES[this.chainId]; } const [srcTokenDecimals, destTokenDecimals] = await Promise.all([ this.getTokenDecimals(params.srcToken), this.getTokenDecimals(params.destToken), ]); const sdk = constructSimpleSDK({ chainId: this.chainId, fetch: fetch }); return sdk.swap.getRate({ amount: params.amount.toString(), destDecimals: destTokenDecimals, destToken: params.destToken, side: params.side, srcDecimals: srcTokenDecimals, srcToken: params.srcToken, }); } async getSwapEstimation(params) { const optimalRate = await this.getQuote(params); const amountOut = optimalRate.destAmount; const amountIn = optimalRate.srcAmount; const amountOutUsd = optimalRate.destUSD ?? 0; const amountInUsd = optimalRate.srcUSD ?? 0; return { amountIn: BigInt(amountIn), amountOut: BigInt(amountOut), amountOutUsd: Number(amountOutUsd), amountInUsd: Number(amountInUsd), quote: optimalRate, }; } } //# sourceMappingURL=paraswap.js.map