@shogun-sdk/money-legos
Version:
Shogun Money Legos: clients and types for quotes, memes, prices, balances, fees, validations, etc.
54 lines • 2.42 kB
JavaScript
import { parseUnits } from 'viem';
import { base } from 'viem/chains';
import { isSolanaChain } from '../config/chains.js';
import { getQuote } from '../lib/getQuote.js';
import { DEFAULT_JITO_TIP } from '../lib/jito.js';
import { getNormalizedSolanaToken } from '../lib/solana.js';
import { MAX_AFFILIATE_FEE_PERCENT } from '../services/AffiliateFeeService.js';
import { NATIVE_TOKEN } from '../config/addresses.js';
export function getSwapWeiAmount(amount, decimals) {
return parseUnits(amount || '0', decimals);
}
export function getRecipientAddress(fromToken, toToken, senderAddress, destinationAddress) {
const recipientAddress = senderAddress || destinationAddress;
const finalRecipient = fromToken.chainId === toToken.chainId ? senderAddress : destinationAddress || recipientAddress;
return finalRecipient;
}
export function createQuoteParams(fromToken, toToken, amount, destinationAddress, senderAddress, slippage, totalFeePercent, affiliateWallets, dynamicSlippage) {
const amountWei = getSwapWeiAmount(amount, fromToken.decimals);
const finalRecipient = getRecipientAddress(fromToken, toToken, senderAddress, destinationAddress ?? '');
const quoteParams = {
srcChain: fromToken.chainId,
destChain: toToken.chainId,
srcToken: getNormalizedSolanaToken(fromToken.address),
destToken: getNormalizedSolanaToken(toToken.address),
amount: String(amountWei),
senderAddress: senderAddress,
affiliateWallet: affiliateWallets[isSolanaChain(fromToken.chainId) ? 'solana' : 'evm'],
slippage,
dstChainOrderAuthorityAddress: finalRecipient ?? '',
destinationAddress: finalRecipient ?? '',
affiliateFee: Math.min(totalFeePercent || 1, MAX_AFFILIATE_FEE_PERCENT).toString(),
dynamicSlippage: dynamicSlippage ? true : false,
};
// Include jitoTip only if the source chain is Solana
if (isSolanaChain(fromToken.chainId)) {
quoteParams.jitoTip = Number(DEFAULT_JITO_TIP);
}
return quoteParams;
}
export async function fetchQuote(api, params, signal) {
const quote = await getQuote(api, params, signal);
if (!quote) {
throw new Error('No quote data for swap');
}
return quote;
}
export const BRIDGE_TOKEN = {
address: NATIVE_TOKEN.ETH,
chainId: base.id,
decimals: 6,
symbol: 'ETH',
name: 'Ether',
};
//# sourceMappingURL=quote.js.map