Fix bugs and generics in calculateLockedSums()

This commit is contained in:
2026-06-10 09:21:44 +02:00
parent 4f788c87c1
commit af6114b051
@@ -107,12 +107,14 @@ public class DesiredPositionCalculatorImpl implements DesiredPositionCalculator
} }
@Override @Override
public Pair calculateLockedSums(ΩPriceΩ currentPrice) { public Pair<MoneyAmount, MoneyAmount> calculateLockedSums(ΩPriceΩ currentPrice) {
List<ΩPriceΩ> ascendingPrices = getSortedPositionIntervalFromValues(liquidityProviderPositions); List<ΩPriceΩ> ascendingPrices = getSortedPositionIntervalFromValues(liquidityProviderPositions);
ΩAmountΩ sum = ZERO; ΩAmountΩ sumA = ZERO;
ΩAmountΩ sumB = ZERO;
// TODO: This smells - setting to null. Oh dear! // TODO: This smells - setting to null. Oh dear!
CurrencyType ct = null; CurrencyType ctA = null;
CurrencyType ctB = null;
int index = lookupIndexOfFirstGreaterThanOrEqual(ascendingPrices, currentPrice); int index = lookupIndexOfFirstGreaterThanOrEqual(ascendingPrices, currentPrice);
if(index >= 0) { if(index >= 0) {
@@ -120,18 +122,22 @@ public class DesiredPositionCalculatorImpl implements DesiredPositionCalculator
for (RaydiumLiquidityPoolPositionConcentrated position : liquidityProviderPositions.values()) { for (RaydiumLiquidityPoolPositionConcentrated position : liquidityProviderPositions.values()) {
if (position.priceRange().from().compareTo(startPriceOfStartPos) >= 0) { if (position.priceRange().from().compareTo(startPriceOfStartPos) >= 0) {
ct = position.amountMintA().currencyType(); ctA = position.amountMintA().currencyType();
sum = sum.add(position.amountMintB().amount()); sumA = sumA.add(position.amountMintA().amount());
ctB = position.amountMintB().currencyType();
sumB = sumB.add(position.amountMintB().amount());
} }
} }
} }
MoneyAmount ma = new MoneyAmount(sum, ct); MoneyAmount ma = new MoneyAmount(sumA, ctA);
return new Pair(ZERO, ma); MoneyAmount mb = new MoneyAmount(sumB, ctB);
return new Pair<>(ma, mb);
} }
@Override @Override
public Pair calculateRedistributableSums( public Pair<MoneyAmount, MoneyAmount> calculateRedistributableSums(
ΩPriceΩ currentPrice, ΩPriceΩ currentPrice,
MoneyAmount inactiveInAccountMintA, MoneyAmount inactiveInAccountMintA,
MoneyAmount inactiveInAccountMintB, MoneyAmount inactiveInAccountMintB,
@@ -139,8 +145,10 @@ public class DesiredPositionCalculatorImpl implements DesiredPositionCalculator
MoneyAmount reservedForBurnMintB MoneyAmount reservedForBurnMintB
) { ) {
List<ΩPriceΩ> ascendingValues = getSortedPositionIntervalFromValues(liquidityProviderPositions); List<ΩPriceΩ> ascendingValues = getSortedPositionIntervalFromValues(liquidityProviderPositions);
ΩAmountΩ redistSum = ZERO; ΩAmountΩ redistSumA = ZERO;
CurrencyType ct = null; ΩAmountΩ redistSumB = ZERO;
CurrencyType ctA = null;
CurrencyType ctB = null;
int index = lookupIndexOfLastLessThan(ascendingValues, currentPrice); int index = lookupIndexOfLastLessThan(ascendingValues, currentPrice);
if(index >= 0) { if(index >= 0) {
@@ -148,16 +156,22 @@ public class DesiredPositionCalculatorImpl implements DesiredPositionCalculator
for (RaydiumLiquidityPoolPositionConcentrated position : liquidityProviderPositions.values()) { for (RaydiumLiquidityPoolPositionConcentrated position : liquidityProviderPositions.values()) {
if (position.priceRange().from().compareTo(startPriceOfStartPos) <= 0) { if (position.priceRange().from().compareTo(startPriceOfStartPos) <= 0) {
ct = position.amountMintB().currencyType(); ctA = position.amountMintA().currencyType();
redistSum = redistSum.add(position.amountMintB().amount()); ctB = position.amountMintB().currencyType();
redistSumA = redistSumA.add(position.amountMintA().amount());
redistSumB = redistSumB.add(position.amountMintB().amount());
} }
} }
} }
redistSum = add(inactiveInAccountMintB, redistSum); redistSumA = add(inactiveInAccountMintA, redistSumA);
redistSum = subtract(redistSum, reservedForBurnMintB); redistSumA = subtract(redistSumA, reservedForBurnMintA);
MoneyAmount ma = new MoneyAmount(redistSum, ct); redistSumB = add(inactiveInAccountMintB, redistSumB);
return new Pair(ZERO, ma); redistSumB = subtract(redistSumB, reservedForBurnMintB);
MoneyAmount ma = new MoneyAmount(redistSumA, ctA);
MoneyAmount mb = new MoneyAmount(redistSumB, ctB);
return new Pair<>(ma, mb);
} }