Skip to content

Commit 5e42adc

Browse files
committed
Add test for negative balance check in _calculateNetFeesPositionUnit
1 parent a6b3cfc commit 5e42adc

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

test/integration/perpV2BasisTradingSlippageIssuance.spec.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ describe("PerpV2BasisTradingSlippageIssuance", () => {
254254
setToken.address,
255255
{
256256
feeRecipient: owner.address,
257-
performanceFeePercentage: ether(.0),
257+
performanceFeePercentage: ether(.1),
258258
maxPerformanceFeePercentage: ether(.2)
259259
}
260260
);
@@ -909,7 +909,12 @@ describe("PerpV2BasisTradingSlippageIssuance", () => {
909909

910910
describe("when liquidation results in negative account value", () => {
911911
beforeEach(async () => {
912+
// Move oracle price down, wait one day
913+
await perpSetup.setBaseTokenOraclePrice(vETH, usdcUnits(10.5));
914+
await increaseTimeAsync(ONE_DAY_IN_SECONDS);
915+
912916
// Calculated leverage = ~8.5X = 8_654_438_822_995_683_587
917+
// Lever again to track funding as `settled`
913918
await leverUp(
914919
setToken,
915920
perpBasisTradingModule,
@@ -918,9 +923,13 @@ describe("PerpV2BasisTradingSlippageIssuance", () => {
918923
baseToken,
919924
6,
920925
ether(.02),
926+
true,
921927
true
922928
);
923929

930+
// Freeze funding changes
931+
await perpSetup.clearingHouseConfig.setMaxFundingRate(ZERO);
932+
924933
// Move oracle price down to 5 USDC to enable liquidation
925934
await perpSetup.setBaseTokenOraclePrice(vETH, usdcUnits(5.0));
926935

utils/common/perpV2Utils.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ export async function leverUp(
2727
baseToken: Address,
2828
leverageRatio: number,
2929
slippagePercentage: BigNumber,
30-
isLong: boolean
30+
isLong: boolean,
31+
trackFunding?: boolean,
3132
): Promise<BigNumber>{
3233
const spotPrice = await fixture.getSpotPrice(baseToken);
3334
const totalSupply = await setToken.totalSupply();
@@ -50,12 +51,21 @@ export async function leverUp(
5051
totalSupply
5152
);
5253

53-
await module.connect(owner.wallet).trade(
54-
setToken.address,
55-
baseToken,
56-
baseTradeQuantityUnit,
57-
receiveQuoteQuantityUnit
58-
);
54+
if (trackFunding) {
55+
await (module as PerpV2BasisTradingModule).connect(owner.wallet).tradeAndTrackFunding(
56+
setToken.address,
57+
baseToken,
58+
baseTradeQuantityUnit,
59+
receiveQuoteQuantityUnit
60+
);
61+
} else {
62+
await module.connect(owner.wallet).trade(
63+
setToken.address,
64+
baseToken,
65+
baseTradeQuantityUnit,
66+
receiveQuoteQuantityUnit
67+
);
68+
}
5969

6070
return baseTradeQuantityUnit;
6171
}

0 commit comments

Comments
 (0)