@@ -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}
0 commit comments