diff --git a/src/modes/interOrderbook.ts b/src/modes/interOrderbook.ts index e2368370..68239c97 100644 --- a/src/modes/interOrderbook.ts +++ b/src/modes/interOrderbook.ts @@ -3,7 +3,7 @@ import { BaseError, PublicClient } from "viem"; import { getBountyEnsureBytecode } from "../config"; import { BigNumber, Contract, ethers } from "ethers"; import { containsNodeError, errorSnapshot } from "../error"; -import { estimateProfit, scale18To, withBigintSerializer } from "../utils"; +import { estimateProfit, ONE18, scale18To, withBigintSerializer } from "../utils"; import { BotConfig, BundledOrders, ViemClient, DryrunResult, SpanAttrs } from "../types"; /** @@ -45,9 +45,7 @@ export async function dryrun({ const opposingMaxInput = orderPairObject.takeOrders[0].quote!.ratio.isZero() ? ethers.constants.MaxUint256 : scale18To( - maximumInputFixed - .mul(orderPairObject.takeOrders[0].quote!.ratio) - .div(`1${"0".repeat(18)}`), + maximumInputFixed.mul(orderPairObject.takeOrders[0].quote!.ratio).div(ONE18), orderPairObject.buyTokenDecimals, ); @@ -70,7 +68,7 @@ export async function dryrun({ ]); const takeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: ethers.utils.defaultAbiCoder.encode( diff --git a/src/modes/routeProcessor.ts b/src/modes/routeProcessor.ts index 11af85a4..1b780683 100644 --- a/src/modes/routeProcessor.ts +++ b/src/modes/routeProcessor.ts @@ -62,6 +62,9 @@ export async function dryrun({ spanAttributes, }; + // determines if amount is partial derived from binary search or not + const isPartial = !orderPairObject.takeOrders[0].quote!.maxOutput.eq(maximumInputFixed); + const maximumInput = scale18To(maximumInputFixed, orderPairObject.sellTokenDecimals); spanAttributes["amountIn"] = ethers.utils.formatUnits(maximumInputFixed); @@ -135,7 +138,7 @@ export async function dryrun({ const takeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput, + maximumInput: isPartial ? maximumInput : ethers.constants.MaxUint256, maximumIORatio: config.maxRatio ? ethers.constants.MaxUint256 : price, orders, data: ethers.utils.defaultAbiCoder.encode(["bytes"], [rpParams.routeCode]), diff --git a/test/e2e/data.js b/test/e2e/data.js index 8deebba9..c088bb7a 100644 --- a/test/e2e/data.js +++ b/test/e2e/data.js @@ -82,13 +82,8 @@ module.exports = [ "0x51cD71ec61487A3359993922A5BBac294934A628", "0x2e574D0802F433E71F7dC91650aB2C23aDeb0D81", ], - [ - LiquidityProviders.Enosys, - LiquidityProviders.BlazeSwap, - LiquidityProviders.SparkDexV2, - LiquidityProviders.SparkDexV3, - ], - ["1", "100", "100", "100"], + [LiquidityProviders.Enosys, LiquidityProviders.SparkDexV2, LiquidityProviders.SparkDexV3], + ["1", "100", "100"], ], [ ChainId.ETHEREUM, diff --git a/test/findOpp.test.js b/test/findOpp.test.js index 27e14227..c03f5ca5 100644 --- a/test/findOpp.test.js +++ b/test/findOpp.test.js @@ -75,7 +75,7 @@ describe("Test find opp", async function () { }); const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: expectedRouteData, @@ -169,7 +169,7 @@ describe("Test find opp", async function () { ]); const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: ethers.utils.defaultAbiCoder.encode( diff --git a/test/mode-interOrderbook.test.js b/test/mode-interOrderbook.test.js index 24ac4a2d..10925f23 100644 --- a/test/mode-interOrderbook.test.js +++ b/test/mode-interOrderbook.test.js @@ -69,7 +69,7 @@ describe("Test inter-orderbook dryrun", async function () { ]); const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: ethers.utils.defaultAbiCoder.encode( @@ -204,7 +204,7 @@ describe("Test inter-orderbook find opp", async function () { ]); const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: ethers.utils.defaultAbiCoder.encode( @@ -295,7 +295,7 @@ describe("Test inter-orderbook find opp", async function () { ]); const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: ethers.utils.defaultAbiCoder.encode( diff --git a/test/mode-routeProcessor.test.js b/test/mode-routeProcessor.test.js index 1dbdce30..be30c5d8 100644 --- a/test/mode-routeProcessor.test.js +++ b/test/mode-routeProcessor.test.js @@ -73,7 +73,7 @@ describe("Test route processor dryrun", async function () { }); const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: expectedRouteData, @@ -190,7 +190,7 @@ describe("Test route processor dryrun", async function () { } catch (error) { const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: expectedRouteData, @@ -274,7 +274,7 @@ describe("Test route processor find opp", async function () { }); const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: expectedRouteData, @@ -440,7 +440,7 @@ describe("Test route processor find opp", async function () { } catch (error) { const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: expectedRouteData, @@ -555,7 +555,7 @@ describe("Test find opp with retries", async function () { }); const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [ orderPairObject.takeOrders[0].takeOrder, @@ -638,7 +638,7 @@ describe("Test find opp with retries", async function () { } catch (error) { const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: expectedRouteData, diff --git a/test/processPair.test.js b/test/processPair.test.js index 952c46a9..a0da30e2 100644 --- a/test/processPair.test.js +++ b/test/processPair.test.js @@ -512,7 +512,7 @@ describe("Test process pair", async function () { } catch (error) { const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: expectedRouteData, @@ -706,7 +706,7 @@ describe("Test process pair", async function () { } catch (error) { const expectedTakeOrdersConfigStruct = { minimumInput: ethers.constants.One, - maximumInput: vaultBalance, + maximumInput: ethers.constants.MaxUint256, maximumIORatio: ethers.constants.MaxUint256, orders: [orderPairObject.takeOrders[0].takeOrder], data: expectedRouteData,