@@ -16,8 +16,8 @@ import { formatTokenAmount } from '../minswap.utils';
1616export async function getMinswapAmmLiquidityQuote (
1717 network : string ,
1818 poolAddress ?: string ,
19- baseToken ?: CardanoToken ,
20- quoteToken ?: CardanoToken ,
19+ baseToken ?: string ,
20+ quoteToken ?: string ,
2121 baseTokenAmount ?: number ,
2222 quoteTokenAmount ?: number ,
2323 _slippagePct ?: number ,
@@ -45,10 +45,16 @@ export async function getMinswapAmmLiquidityQuote(
4545
4646 const minswap = await Minswap . getInstance ( networkToUse ) ;
4747
48+ const baseTokenObj = minswap . cardano . getTokenBySymbol ( baseToken ) ;
49+ const quoteTokenObj = minswap . cardano . getTokenBySymbol ( quoteToken ) ;
50+ if ( ! baseTokenObj || ! quoteTokenObj ) {
51+ throw new Error ( `Token not found: ${ ! baseTokenObj ? baseToken : quoteToken } ` ) ;
52+ }
53+
4854 let poolAddressToUse = poolAddress ;
4955 let existingPool = true ;
5056 if ( ! poolAddressToUse ) {
51- poolAddressToUse = await minswap . findDefaultPool ( baseToken . symbol , quoteToken . symbol , 'amm' ) ;
57+ poolAddressToUse = await minswap . findDefaultPool ( baseToken , quoteToken , 'amm' ) ;
5258 if ( ! poolAddressToUse ) {
5359 existingPool = false ;
5460 logger . info ( `No existing pool found for ${ baseToken } -${ quoteToken } , providing theoretical quote` ) ;
@@ -71,9 +77,11 @@ export async function getMinswapAmmLiquidityQuote(
7177 const quoteReserve : bigint = poolState . reserveB ;
7278
7379 // ── 3) Convert user inputs into raw bigints ───────────
74- const baseRaw = baseTokenAmount ? BigInt ( Math . floor ( baseTokenAmount * 10 ** baseToken . decimals ) . toString ( ) ) : null ;
80+ const baseRaw = baseTokenAmount
81+ ? BigInt ( Math . floor ( baseTokenAmount * 10 ** baseTokenObj . decimals ) . toString ( ) )
82+ : null ;
7583 const quoteRaw = quoteTokenAmount
76- ? BigInt ( Math . floor ( quoteTokenAmount * 10 ** quoteToken . decimals ) . toString ( ) )
84+ ? BigInt ( Math . floor ( quoteTokenAmount * 10 ** quoteTokenObj . decimals ) . toString ( ) )
7785 : null ;
7886
7987 // ── 4) Compute the “optimal” opposite amount ───────────
@@ -82,21 +90,21 @@ export async function getMinswapAmmLiquidityQuote(
8290 const quoteOptimal = ( baseRaw * quoteReserve ) / baseReserve ;
8391 if ( quoteOptimal <= quoteRaw ) {
8492 baseLimited = true ;
85- quoteTokenAmountOptimal = Number ( formatTokenAmount ( quoteOptimal . toString ( ) , quoteToken . decimals ) ) ;
93+ quoteTokenAmountOptimal = Number ( formatTokenAmount ( quoteOptimal . toString ( ) , quoteTokenObj . decimals ) ) ;
8694 } else {
8795 baseLimited = false ;
8896 const baseOptimal = ( quoteRaw * baseReserve ) / quoteReserve ;
89- baseTokenAmountOptimal = Number ( formatTokenAmount ( baseOptimal . toString ( ) , baseToken . decimals ) ) ;
97+ baseTokenAmountOptimal = Number ( formatTokenAmount ( baseOptimal . toString ( ) , baseTokenObj . decimals ) ) ;
9098 }
9199 } else if ( baseRaw !== null ) {
92100 // only base provided
93101 const quoteOptimal = baseReserve === BigInt ( 0 ) ? BigInt ( 0 ) : ( baseRaw * quoteReserve ) / baseReserve ;
94- quoteTokenAmountOptimal = Number ( formatTokenAmount ( quoteOptimal . toString ( ) , quoteToken . decimals ) ) ;
102+ quoteTokenAmountOptimal = Number ( formatTokenAmount ( quoteOptimal . toString ( ) , quoteTokenObj . decimals ) ) ;
95103 baseLimited = true ;
96104 } else if ( quoteRaw !== null ) {
97105 // only quote provided
98106 const baseOptimal = quoteReserve === BigInt ( 0 ) ? BigInt ( 0 ) : ( quoteRaw * baseReserve ) / quoteReserve ;
99- baseTokenAmountOptimal = Number ( formatTokenAmount ( baseOptimal . toString ( ) , baseToken . decimals ) ) ;
107+ baseTokenAmountOptimal = Number ( formatTokenAmount ( baseOptimal . toString ( ) , baseTokenObj . decimals ) ) ;
100108 baseLimited = false ;
101109 }
102110 } else {
@@ -108,9 +116,11 @@ export async function getMinswapAmmLiquidityQuote(
108116 }
109117
110118 // ── 5) Convert back into Ethers BigNumber for any on‐chain tx ───
111- const rawBaseTokenAmount = BigNumber . from ( Math . floor ( baseTokenAmountOptimal * 10 ** baseToken . decimals ) . toString ( ) ) ;
119+ const rawBaseTokenAmount = BigNumber . from (
120+ Math . floor ( baseTokenAmountOptimal * 10 ** baseTokenObj . decimals ) . toString ( ) ,
121+ ) ;
112122 const rawQuoteTokenAmount = BigNumber . from (
113- Math . floor ( quoteTokenAmountOptimal * 10 ** quoteToken . decimals ) . toString ( ) ,
123+ Math . floor ( quoteTokenAmountOptimal * 10 ** quoteTokenObj . decimals ) . toString ( ) ,
114124 ) ;
115125
116126 return {
@@ -119,8 +129,8 @@ export async function getMinswapAmmLiquidityQuote(
119129 quoteTokenAmount : quoteTokenAmountOptimal ,
120130 baseTokenAmountMax : baseTokenAmount ?? baseTokenAmountOptimal ,
121131 quoteTokenAmountMax : quoteTokenAmount ?? quoteTokenAmountOptimal ,
122- baseTokenObj : baseToken ,
123- quoteTokenObj : quoteToken ,
132+ baseTokenObj,
133+ quoteTokenObj,
124134 poolAddress : poolAddressToUse ,
125135 rawBaseTokenAmount,
126136 rawQuoteTokenAmount,
@@ -173,11 +183,8 @@ export const quoteLiquidityRoute: FastifyPluginAsync = async (fastify) => {
173183
174184 const poolInfo = await minswap . getAmmPoolInfo ( poolAddress ) ;
175185
176- const baseTokenAddress = poolInfo . baseTokenAddress ;
177- const quoteTokenAddress = poolInfo . quoteTokenAddress ;
178- // Find token symbol from token address
179- const baseToken = await minswap . cardano . getTokenByAddress ( baseTokenAddress ) ;
180- const quoteToken = await minswap . cardano . getTokenByAddress ( quoteTokenAddress ) ;
186+ const baseToken = poolInfo . baseTokenAddress ;
187+ const quoteToken = poolInfo . quoteTokenAddress ;
181188
182189 const quote = await getMinswapAmmLiquidityQuote (
183190 network ,
0 commit comments