@robertprp/intents-sdk
Version:
Shogun Network Intent-based cross-chain swaps SDK
66 lines • 2.55 kB
JavaScript
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