refactor unlock percentage

This commit is contained in:
2025-09-28 00:31:50 +02:00
parent f6e338e287
commit 4bfdf23be1

View File

@@ -302,35 +302,20 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
// Epoch-based Staking Functions
/// @notice Internal function to calculate unlock percentage based on TVL/liability ratio improvement
/// @dev Formula: (current_tvl / current_liability) - (last_tvl / last_liability) * payback_percent
/// @notice Internal function to calculate unlock percentage based on ratio improvement vs historical high
/// @dev Formula: (current_ratio - highest_ratio) * payback_percent
function calculateUnlockPercentage(
uint256 currentTvl,
uint256 currentLiability,
uint256 lastTvl,
uint256 lastLiability,
uint256 currentRatio,
uint256 paybackPercent
) internal view returns (uint256) {
if (lastLiability == 0 || currentLiability == 0) {
return 0; // Safety check
}
// Calculate ratios (scaled by 10000 for precision)
uint256 currentRatio = (currentTvl * 10000) / currentLiability;
uint256 lastRatio = (lastTvl * 10000) / lastLiability;
// Check if current ratio is below the highest ratio ever achieved
if (currentRatio < highestRatio) {
if (currentRatio <= highestRatio) {
return 0; // No unlock if we're below historical high
}
if (currentRatio <= lastRatio) {
return 0; // No unlock if ratio didn't improve
}
// Ratio improvement * payback percentage
uint256 ratioImprovement = currentRatio - lastRatio;
uint256 ratioImprovement = currentRatio - highestRatio;
uint256 unlockPercentage = (ratioImprovement * paybackPercent) / 10000;
return unlockPercentage;
@@ -349,19 +334,10 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
if (currentRatio > highestRatio) {
highestRatio = currentRatio;
}
}
if (currentEpochId > 0) {
// Get previous epoch data
Epoch storage lastEpoch = epochs[currentEpochId - 1];
unlockPercentage = calculateUnlockPercentage(
currentTreasuryTvl,
_currentLiability,
lastEpoch.currentTreasuryTvl,
lastEpoch.totalLiability,
_paybackPercent
);
if (currentEpochId > 0) {
unlockPercentage = calculateUnlockPercentage(currentRatio, _paybackPercent);
}
}
// Check that unlock percentage doesn't exceed maximum