diff --git a/contracts/CunaFinanceBsc.sol b/contracts/CunaFinanceBsc.sol index 949b348..ed73f2b 100644 --- a/contracts/CunaFinanceBsc.sol +++ b/contracts/CunaFinanceBsc.sol @@ -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