Skip to content

Commit 5f03164

Browse files
lowkeynicccrispheaney
authored andcommitted
sdk: check free collateral change in maxTradeSizeUsdcForPerp (#1645)
* sdk: check free collateral change in maxTradeSizeUsdcForPerp * update changelog
1 parent be2edf3 commit 5f03164

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
### Fixes
1313

14+
- sdk: fix to getMaxTradeSizeUSDCForPerp which was previously overshooting max allowed size due to IMF factor
15+
1416
### Breaking
1517

1618
## [2.121.0] - 2025-05-29

sdk/src/user.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2748,6 +2748,45 @@ export class User {
27482748
}
27492749
}
27502750

2751+
const freeCollateral = this.getFreeCollateral();
2752+
2753+
let baseTradeSize =
2754+
targetSide === 'long'
2755+
? tradeSize.mul(BASE_PRECISION).div(oracleData.price)
2756+
: tradeSize.mul(BASE_PRECISION).div(oracleData.price).neg();
2757+
2758+
let freeCollateralChangeFromNewPosition =
2759+
this.calculateEntriesEffectOnFreeCollateral(
2760+
marketAccount,
2761+
oracleData.price,
2762+
currentPosition,
2763+
baseTradeSize,
2764+
oracleData.price,
2765+
false,
2766+
enterHighLeverageMode
2767+
);
2768+
2769+
while (
2770+
freeCollateralChangeFromNewPosition.isNeg() &&
2771+
freeCollateralChangeFromNewPosition.abs().gt(freeCollateral)
2772+
) {
2773+
tradeSize = tradeSize.mul(new BN(99)).div(new BN(100));
2774+
baseTradeSize =
2775+
targetSide === 'long'
2776+
? tradeSize.mul(BASE_PRECISION).div(oracleData.price)
2777+
: tradeSize.mul(BASE_PRECISION).div(oracleData.price).neg();
2778+
freeCollateralChangeFromNewPosition =
2779+
this.calculateEntriesEffectOnFreeCollateral(
2780+
marketAccount,
2781+
oracleData.price,
2782+
currentPosition,
2783+
baseTradeSize,
2784+
oracleData.price,
2785+
false,
2786+
enterHighLeverageMode
2787+
);
2788+
}
2789+
27512790
return { tradeSize, oppositeSideTradeSize };
27522791
}
27532792

0 commit comments

Comments
 (0)