UNPKG

@robertprp/intents-sdk

Version:

Shogun Network Intent-based cross-chain swaps SDK

66 lines 2.55 kB
import { constructSimpleSDK } from '@paraswap/sdk'; import { ChainID } from '../../chains.js'; 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'; const rpcProvidersUrl = { [ChainID.Arbitrum]: 'https://arbitrum-one-rpc.publicnode.com', [ChainID.Optimism]: 'https://optimism-rpc.publicnode.com', [ChainID.Base]: 'https://base-rpc.publicnode.com', [ChainID.Hyperliquid]: 'https://rpc.hyperliquid.xyz/evm', }; 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 rpcUrl = rpcProvidersUrl[this.chainId]; const client = ChainProvider.getClient(this.chainId, rpcUrl); 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