From 166ce0259298eda28b66de8ae5f5d11731f30c1a Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Fri, 14 Feb 2025 14:47:53 +0100 Subject: [PATCH 1/3] feat: ignore coins with 0 balance for balanced proportions --- src/pools/mixins/depositBalancedAmountsMixins.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/pools/mixins/depositBalancedAmountsMixins.ts b/src/pools/mixins/depositBalancedAmountsMixins.ts index f6b4ca54..0bd32d92 100644 --- a/src/pools/mixins/depositBalancedAmountsMixins.ts +++ b/src/pools/mixins/depositBalancedAmountsMixins.ts @@ -16,9 +16,12 @@ function _depositBalancedAmounts(poolBalances: string[], walletBalances: string[ )) )); const firstCoinBalanceForEachScenarioBN = balancedAmountsForEachScenarioBN.map(([a]) => a); - const scenarioWithLowestBalancesBN = firstCoinBalanceForEachScenarioBN.map(String).indexOf(BigNumber.min(...firstCoinBalanceForEachScenarioBN).toString()); + const min = BigNumber.min(...firstCoinBalanceForEachScenarioBN.filter(Boolean)); // ignore any coins not present in the wallet + const scenarioWithLowestBalancesBN = firstCoinBalanceForEachScenarioBN.map(String).indexOf(min.toString()); - return balancedAmountsForEachScenarioBN[scenarioWithLowestBalancesBN].map((a, i) => a.toFixed(decimals[i])) + return balancedAmountsForEachScenarioBN[scenarioWithLowestBalancesBN].map( + (a, i) => walletBalancesBN[i].isZero() ? "0" : a.toFixed(decimals[i]) + ) } // @ts-ignore From 52b0c59c2a7aab2f819da2484bd6fc897db76221 Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Fri, 14 Feb 2025 14:54:03 +0100 Subject: [PATCH 2/3] fix: can't use `Boolean` for BN --- src/pools/mixins/depositBalancedAmountsMixins.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pools/mixins/depositBalancedAmountsMixins.ts b/src/pools/mixins/depositBalancedAmountsMixins.ts index 0bd32d92..5e474617 100644 --- a/src/pools/mixins/depositBalancedAmountsMixins.ts +++ b/src/pools/mixins/depositBalancedAmountsMixins.ts @@ -16,12 +16,12 @@ function _depositBalancedAmounts(poolBalances: string[], walletBalances: string[ )) )); const firstCoinBalanceForEachScenarioBN = balancedAmountsForEachScenarioBN.map(([a]) => a); - const min = BigNumber.min(...firstCoinBalanceForEachScenarioBN.filter(Boolean)); // ignore any coins not present in the wallet - const scenarioWithLowestBalancesBN = firstCoinBalanceForEachScenarioBN.map(String).indexOf(min.toString()); - return balancedAmountsForEachScenarioBN[scenarioWithLowestBalancesBN].map( - (a, i) => walletBalancesBN[i].isZero() ? "0" : a.toFixed(decimals[i]) - ) + // get the scenario with the lowest balances, ignoring scenarios where the wallet balance is zero + const min = BigNumber.min(...firstCoinBalanceForEachScenarioBN.filter(b => !b.isZero())); + const scenarioWithLowestBalancesBN = firstCoinBalanceForEachScenarioBN.map(String).indexOf(min.toString()); + const bestScenario = balancedAmountsForEachScenarioBN[scenarioWithLowestBalancesBN]; + return bestScenario.map((a, i) => walletBalancesBN[i].isZero() ? "0" : a.toFixed(decimals[i])) } // @ts-ignore From 752fb07f028db5a4bbe559f9111c402f4070928c Mon Sep 17 00:00:00 2001 From: Daniel Schiavini Date: Fri, 14 Feb 2025 14:56:57 +0100 Subject: [PATCH 3/3] fix: lint --- package.json | 1 + src/pools/mixins/depositBalancedAmountsMixins.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 7fab9772..d382bd63 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "scripts": { "build": "rm -rf lib && tsc -p tsconfig.build.json", "lint": "eslint src", + "lint:fix": "eslint src --fix", "tsc": "tsc -w" }, "type": "module", diff --git a/src/pools/mixins/depositBalancedAmountsMixins.ts b/src/pools/mixins/depositBalancedAmountsMixins.ts index 5e474617..4805c380 100644 --- a/src/pools/mixins/depositBalancedAmountsMixins.ts +++ b/src/pools/mixins/depositBalancedAmountsMixins.ts @@ -18,7 +18,7 @@ function _depositBalancedAmounts(poolBalances: string[], walletBalances: string[ const firstCoinBalanceForEachScenarioBN = balancedAmountsForEachScenarioBN.map(([a]) => a); // get the scenario with the lowest balances, ignoring scenarios where the wallet balance is zero - const min = BigNumber.min(...firstCoinBalanceForEachScenarioBN.filter(b => !b.isZero())); + const min = BigNumber.min(...firstCoinBalanceForEachScenarioBN.filter((b) => !b.isZero())); const scenarioWithLowestBalancesBN = firstCoinBalanceForEachScenarioBN.map(String).indexOf(min.toString()); const bestScenario = balancedAmountsForEachScenarioBN[scenarioWithLowestBalancesBN]; return bestScenario.map((a, i) => walletBalancesBN[i].isZero() ? "0" : a.toFixed(decimals[i]))