@solsdk/xswap_sdk
Version:
Universal cross-chain swaps SDK
58 lines • 2.17 kB
JavaScript
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