Skip to content

Commit 06e6095

Browse files
committed
renegade: enable updating orders before assembly, check for usdc quote, protect division by zero
1 parent 1670f28 commit 06e6095

File tree

2 files changed

+44
-9
lines changed

2 files changed

+44
-9
lines changed

src/config.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -570,12 +570,9 @@ export function generateConfig(network: number): Config {
570570
dexalotAuthToken: baseConfig.dexalotAuthToken,
571571
bebopAuthName: baseConfig.bebopAuthName,
572572
bebopAuthToken: baseConfig.bebopAuthToken,
573-
<<<<<<< HEAD
574573
nativeApiKey: baseConfig.nativeApiKey,
575-
=======
576574
renegadeAuthApiKey: baseConfig.renegadeAuthApiKey,
577575
renegadeAuthApiSecret: baseConfig.renegadeAuthApiSecret,
578-
>>>>>>> 1a014b06c (Feat/renegade (#24))
579576
hashFlowDisabledMMs: baseConfig.hashFlowDisabledMMs,
580577
forceRpcFallbackDexs: baseConfig.forceRpcFallbackDexs,
581578
apiKeyTheGraph: process.env.API_KEY_THE_GRAPH || '',

src/dex/renegade/renegade.ts

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)