@@ -291,6 +291,11 @@ export class Renegade extends SimpleExchange implements IDex<RenegadeData> {
291291 const inputAmount = isSendInput ? send . amount : receive . amount ;
292292 const outputAmount = isSendInput ? receive . amount : send . amount ;
293293
294+ // Protect against division by zero
295+ if ( new BigNumber ( inputAmount ) . isZero ( ) ) {
296+ throw new Error ( 'Division by zero: inputAmount is zero' ) ;
297+ }
298+
294299 // Calculate rate: output per input (in atomic units)
295300 const rate = new BigNumber ( outputAmount ) . dividedBy ( inputAmount ) ;
296301
@@ -533,9 +538,32 @@ export class Renegade extends SimpleExchange implements IDex<RenegadeData> {
533538 ) ;
534539 }
535540
536- // 2. Request calldata from Renegade API
541+ // 2. Extract base_mint, quote_mint, and side from cached quote
542+ const cachedOrder = cachedSignedQuote . quote . order ;
543+ const baseMint = cachedOrder . base_mint ;
544+ const quoteMint = cachedOrder . quote_mint ;
545+ const renegadeSide = cachedOrder . side ;
546+
547+ // 3. Create updated order with actual transaction amount
548+ const updatedOrder =
549+ side === SwapSide . SELL
550+ ? this . createExternalOrderWithInputAmount (
551+ quoteMint ,
552+ baseMint ,
553+ renegadeSide ,
554+ optimalSwapExchange . srcAmount ,
555+ )
556+ : this . createExternalOrderWithExactOutputAmount (
557+ quoteMint ,
558+ baseMint ,
559+ renegadeSide ,
560+ optimalSwapExchange . destAmount ,
561+ ) ;
562+
563+ // 4. Request calldata from Renegade API with updated order
537564 const response = await this . renegadeClient . assembleExternalMatch (
538565 cachedSignedQuote ,
566+ { updated_order : updatedOrder } ,
539567 ) ;
540568
541569 const settlementTxRequest = response ?. match_bundle ?. settlement_tx ;
@@ -721,17 +749,27 @@ export class Renegade extends SimpleExchange implements IDex<RenegadeData> {
721749 } ;
722750 }
723751
724- // Check if both tokens are supported by Renegade API (exist in tokensMap) .
752+ // Ensures both tokens are supported by Renegade API and exactly one of them is USDC .
725753 private areTokensSupported (
726754 srcTokenAddress : Address ,
727755 destTokenAddress : Address ,
728756 ) : boolean {
729757 const srcTokenLower = srcTokenAddress . toLowerCase ( ) ;
730758 const destTokenLower = destTokenAddress . toLowerCase ( ) ;
731- return (
732- this . tokensMap [ srcTokenLower ] !== undefined &&
733- this . tokensMap [ destTokenLower ] !== undefined
734- ) ;
759+
760+ const srcTokenExists = this . tokensMap [ srcTokenLower ] !== undefined ;
761+ const destTokenExists = this . tokensMap [ destTokenLower ] !== undefined ;
762+
763+ if ( ! srcTokenExists || ! destTokenExists ) {
764+ return false ;
765+ }
766+
767+ const srcIsUSDC = this . isUSDC ( srcTokenAddress ) ;
768+ const destIsUSDC = this . isUSDC ( destTokenAddress ) ;
769+
770+ const exactlyOneIsUSDC = srcIsUSDC !== destIsUSDC ;
771+
772+ return exactlyOneIsUSDC ;
735773 }
736774
737775 // Determine if this is a Renegade Sell operation (base → USDC).
0 commit comments