Rebalance fee
Fix rebalance fee
Related section: https://predy.gitbook.io/predy-v3.2/product-recipe#fee
There is a problem with the current calculation of the rebalance fee.
https://github.com/predyprotocol/sqrt-contracts/blob/main/src/libraries/PerpFee.sol#L129
The rebalance fee is the interest that the protocol has paid for after rebalancing until the user first updates their position. In the implementation of v3.2, there are the following problems.
- The rebalance fee is charged even after the user has settled. 
- The rebalance fee is also charged for new positions. 
Variables
rebalanceFeeGrowth
Perp
uint256
accumulated rebalance fee
lastRebalanceTotalSquartAmount
Perp
uint256
Total Squart Amount at the last rebalance
numRebalance
Perp
uint64
Number of rebalances, Rebalance ID
rebalanceFeeGrowthCache
Perp
mapping
Cache of rebalanceFeeGrowth at each rebalance
lastNumRebalance
User
uint64
Rebalance ID at the time of the last rebalance settlement
Logic of v5.0
- At the time of rebalancing - Save TotalSquartAmount in lastRebalanceTotalSquartAmount - This is for sharing the rebalance fee with the Squart owners at the time of rebalance 
 
- At the time of rebalance, - rebalanceFeeGrowthCache[numRebalance] = rebalanceFeeGrowth
- Increment numRebalance. 
 
- Before each trade - Let rebalanceFeeGrowth grow. - growth += rebalanceFee * ONE / lastRebalanceTotalSquartAmount
- This is to share the rebalance fee with the Squart owners at the time of rebalance 
 
 
- When a user trades - Only when settleUserBalance is done, settle the rebalance fee. - if - lastNumRebalance < numRebalance
 
- Only when Squart was owned at the time of rebalance, settle the fee. - rebalanceFeeGrowth - rebalanceFeeGrowthCache[lastNumRebalance]
 
- If there was a trade, update lastNumRebalance. - lastNumRebalance = numRebalance
 
- Subtract the settled SquartAmount from lastRebalanceTotalSquartAmount 
 
Last updated
