Skip to content

Commit 8ed11c4

Browse files
committed
fixing perps
1 parent c7dfe92 commit 8ed11c4

File tree

2 files changed

+29
-58
lines changed

2 files changed

+29
-58
lines changed

x/perpetual/keeper/keeper.go

Lines changed: 24 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (k Keeper) Borrow(ctx sdk.Context, collateralAmount math.Int, custodyAmount
158158
} else {
159159
totalAmount = liabilitiesInCollateral
160160
}
161-
_, err = k.SendFeesToPoolRevenueAndTakerCollectionOnOpen(ctx, senderAddress, mtp.Address, totalAmount, mtp.CollateralAsset, ammPool, &totalPerpFees, totalAmount)
161+
_, err = k.SendFeesToPoolRevenueAndTakerCollection(ctx, true, senderAddress, mtp.Address, totalAmount, mtp.CollateralAsset, ammPool, &totalPerpFees, totalAmount)
162162
if err != nil {
163163
return types.PerpetualFees{}, err
164164
}
@@ -315,7 +315,7 @@ func (k Keeper) CollectInsuranceFund(ctx sdk.Context, amount math.Int, returnAss
315315
// Send fees to pool revenue and taker collection addresses
316316
// Fee is swapped from pool revenue address and then transferred to masterchef module for distribution
317317
// Fee sent to taker collection address is swapped and burnt
318-
func (k Keeper) SendFeesToPoolRevenueAndTakerCollectionOnOpen(ctx sdk.Context, senderAddress sdk.AccAddress, tierAddressStr string, liabilitiesInCollateral math.Int, collateralDenom string, ammPool *ammtypes.Pool, perpFees *types.PerpetualFees, maxTotalFees math.Int) (math.Int, error) {
318+
func (k Keeper) SendFeesToPoolRevenueAndTakerCollection(ctx sdk.Context, onOpen bool, senderAddress sdk.AccAddress, tierAddressStr string, liabilitiesInCollateral math.Int, collateralDenom string, ammPool *ammtypes.Pool, perpFees *types.PerpetualFees, maxTotalFees math.Int) (math.Int, error) {
319319
tierAddress, err := sdk.AccAddressFromBech32(tierAddressStr)
320320
if err != nil {
321321
return math.ZeroInt(), err
@@ -338,9 +338,17 @@ func (k Keeper) SendFeesToPoolRevenueAndTakerCollectionOnOpen(ctx sdk.Context, s
338338
rebalanceTreasury := sdk.MustAccAddressFromBech32(ammPool.GetRebalanceTreasury())
339339
sendToMasterchefCoin := sdk.NewCoin(collateralDenom, sendToMasterchef)
340340
perpFees.PerpFees = perpFees.PerpFees.Add(sendToMasterchefCoin)
341-
err := k.bankKeeper.SendCoins(ctx, senderAddress, rebalanceTreasury, sdk.NewCoins(sendToMasterchefCoin))
342-
if err != nil {
343-
return math.ZeroInt(), err
341+
if onOpen {
342+
err = k.bankKeeper.SendCoins(ctx, senderAddress, rebalanceTreasury, sdk.NewCoins(sendToMasterchefCoin))
343+
if err != nil {
344+
return math.ZeroInt(), err
345+
}
346+
} else {
347+
// senderAddress is same as amm pool address
348+
err = k.SendFromAmmPool(ctx, ammPool, rebalanceTreasury, sdk.NewCoins(sendToMasterchefCoin))
349+
if err != nil {
350+
return math.ZeroInt(), err
351+
}
344352
}
345353

346354
err = k.amm.OnCollectFee(ctx, *ammPool, sdk.NewCoins(sendToMasterchefCoin))
@@ -357,60 +365,19 @@ func (k Keeper) SendFeesToPoolRevenueAndTakerCollectionOnOpen(ctx sdk.Context, s
357365
sendToTakerCollectionCoin := sdk.NewCoin(collateralDenom, sendToTakerCollection)
358366
perpFees.TakerFees = perpFees.TakerFees.Add(sendToTakerCollectionCoin)
359367

360-
err = k.bankKeeper.SendCoins(ctx, senderAddress, takerAddress, sdk.NewCoins(sendToTakerCollectionCoin))
361-
if err != nil {
362-
return math.ZeroInt(), err
363-
}
364-
}
365-
return sendToMasterchef.Add(sendToTakerCollection), nil
366-
}
367-
368-
func (k Keeper) SendFeesToPoolRevenueAndTakerCollectionOnClose(ctx sdk.Context, tierAddressStr string, liabilitiesInCollateral math.Int, collateralDenom string, ammPool *ammtypes.Pool, perpFees *types.PerpetualFees, maxTotalFees math.Int) (math.Int, error) {
369-
tierAddress, err := sdk.AccAddressFromBech32(tierAddressStr)
370-
if err != nil {
371-
return math.ZeroInt(), err
372-
}
373-
_, tier := k.tierKeeper.GetMembershipTier(ctx, tierAddress)
374-
params := k.GetParams(ctx)
375-
perpetualFee := ammtypes.ApplyDiscount(params.GetBigDecPerpetualSwapFee(), tier.GetBigDecDiscount())
376-
perpsTakersFee := k.GetParams(ctx).GetBigDecTakerFees()
377-
sendToMasterchef := perpetualFee.Dec().Mul(math.LegacyNewDecFromInt(liabilitiesInCollateral)).TruncateInt()
378-
sendToTakerCollection := perpsTakersFee.Dec().Mul(math.LegacyNewDecFromInt(liabilitiesInCollateral)).TruncateInt()
379-
totalCalcFees := sendToMasterchef.Add(sendToTakerCollection)
380-
381-
if maxTotalFees.GT(math.ZeroInt()) && totalCalcFees.GT(maxTotalFees) {
382-
// scale down the fees to maxTotalFees
383-
sendToMasterchef = maxTotalFees.Mul(sendToMasterchef).Quo(totalCalcFees)
384-
sendToTakerCollection = maxTotalFees.Mul(sendToTakerCollection).Quo(totalCalcFees)
385-
}
386-
387-
if sendToMasterchef.IsPositive() {
388-
rebalanceTreasury := sdk.MustAccAddressFromBech32(ammPool.GetRebalanceTreasury())
389-
sendToMasterchefCoin := sdk.NewCoin(collateralDenom, sendToMasterchef)
390-
perpFees.PerpFees = perpFees.PerpFees.Add(sendToMasterchefCoin)
391-
err = k.SendFromAmmPool(ctx, ammPool, rebalanceTreasury, sdk.NewCoins(sendToMasterchefCoin))
392-
if err != nil {
393-
return math.ZeroInt(), err
394-
}
395-
396-
err = k.amm.OnCollectFee(ctx, *ammPool, sdk.NewCoins(sendToMasterchefCoin))
397-
if err != nil {
398-
return math.ZeroInt(), err
399-
}
400-
}
401-
402-
if sendToTakerCollection.IsPositive() {
403-
takerAddress, err := sdk.AccAddressFromBech32(k.parameterKeeper.GetParams(ctx).TakerFeeCollectionAddress)
404-
if err != nil {
405-
return math.ZeroInt(), err
368+
if onOpen {
369+
err = k.bankKeeper.SendCoins(ctx, senderAddress, takerAddress, sdk.NewCoins(sendToTakerCollectionCoin))
370+
if err != nil {
371+
return math.ZeroInt(), err
372+
}
373+
} else {
374+
// senderAddress is same as amm pool address
375+
err = k.SendFromAmmPool(ctx, ammPool, takerAddress, sdk.NewCoins(sendToTakerCollectionCoin))
376+
if err != nil {
377+
return math.ZeroInt(), err
378+
}
406379
}
407-
sendToTakerCollectionCoin := sdk.NewCoin(collateralDenom, sendToTakerCollection)
408-
perpFees.TakerFees = perpFees.TakerFees.Add(sendToTakerCollectionCoin)
409380

410-
err = k.SendFromAmmPool(ctx, ammPool, takerAddress, sdk.NewCoins(sendToTakerCollectionCoin))
411-
if err != nil {
412-
return math.ZeroInt(), err
413-
}
414381
}
415382
return sendToMasterchef.Add(sendToTakerCollection), nil
416383
}

x/perpetual/keeper/repay.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ import (
1010
// Repay ammPool has to be pointer because RemoveFromPoolBalance updates pool assets
1111
func (k Keeper) Repay(ctx sdk.Context, mtp *types.MTP, pool *types.Pool, ammPool *ammtypes.Pool, returnAmount math.Int, payingLiabilities math.Int, closingRatio math.LegacyDec, baseCurrency string, perpFees *types.PerpetualFees, repayAmount math.Int) error {
1212
if returnAmount.IsPositive() {
13+
ammPoolAddr, err := sdk.AccAddressFromBech32(ammPool.Address)
14+
if err != nil {
15+
return err
16+
}
1317
// send fees to masterchef and taker collection address
14-
totalFees, err := k.SendFeesToPoolRevenueAndTakerCollectionOnClose(ctx, mtp.Address, repayAmount, mtp.CustodyAsset, ammPool, perpFees, returnAmount)
18+
totalFees, err := k.SendFeesToPoolRevenueAndTakerCollection(ctx, false, ammPoolAddr, mtp.Address, repayAmount, mtp.CustodyAsset, ammPool, perpFees, returnAmount)
1519
if err != nil {
1620
return err
1721
}

0 commit comments

Comments
 (0)