Logic.sol
The Logic contract is responsible for handling reward calculations and conversions between FUNC tokens and Compute Units (CU) in a blockchain-based ecosystem. It provides functionality to determine FUNC burn amounts, available compute units, and allows for configurable conversion ratios, fee structures, and duration-based discounts.
Key Features
Conversion Logic:
Calculates FUNC burn amounts based on consumed compute units (CU) and dynamic fee structures.
Converts FUNC staked amounts into available compute units.
Configurable Tiers:
Allows dynamic fee structures based on staking tiers.
Provides additional discounts for long-term staking using epoch-based duration tiers.
Configurable Ratios:
Allows updating of the stake-to-CU conversion ratio via admin-controlled functions.
Access Control:
Utilizes role-based access control for secure administration.
Contract Roles
Access Control
The contract uses AccessControl to restrict access to critical functions.
DEFAULT_ADMIN_ROLE:Grants full control over administrative functions like updating the stake-to-CU ratio and configuring tiers.
GOVERNANCE_ROLE:Provides governance with permission to update configuration parameters.
State Variables
getStakeToCUNumerator:Numerator of the stake-to-CU conversion ratio.
Default value:
1.
getStakeToCUDenominator:Denominator of the stake-to-CU conversion ratio.
Default value:
1.
stakeTiers:Array of stake tiers defining the minimum stake required and the corresponding final fee (percentage in basis points).
epochDurationTiers:Array of duration tiers defining the minimum epochs required and the corresponding discount (percentage in basis points).
minEpochsRequired:The global minimum epochs required for staking eligibility to access lower fees.
Key Functions
Constructor
constructor()
constructor()Initializes the contract with default values and assigns the DEFAULT_ADMIN_ROLE to the deployer.
Default Values:
getStakeToCUNumerator:1getStakeToCUDenominator:1
Conversion Functions
getBurnAmountByCU(uint256 _computeUnits, uint256 _stakedAmount, uint256 _currentEpoch, uint256 _stakeEpoch) -> uint256
getBurnAmountByCU(uint256 _computeUnits, uint256 _stakedAmount, uint256 _currentEpoch, uint256 _stakeEpoch) -> uint256Converts compute units (CU) into the equivalent FUNC burn amount. Incorporates the dynamic fee structure and duration discounts.
Parameters:
_computeUnits: The number of compute units._stakedAmount: The amount of FUNC staked._currentEpoch: The current epoch._stakeEpoch: The epoch when staking started.
Returns:
FUNC amount equivalent to the specified compute units after applying the fee structure.
getAvailableCUByStakeAmount(uint256 _amount, uint256 _currentEpoch, uint256 _stakeEpoch) -> uint256
getAvailableCUByStakeAmount(uint256 _amount, uint256 _currentEpoch, uint256 _stakeEpoch) -> uint256Converts FUNC staked amounts into available compute units (CU), factoring in the dynamic fee structure.
Parameters:
_amount: The FUNC amount staked._currentEpoch: The current epoch._stakeEpoch: The epoch when staking started.
Returns:
Compute units equivalent to the specified FUNC amount after applying the fee structure.
getFinalFee(uint256 _stakedAmount, uint256 _currentEpoch, uint256 _stakeEpoch) -> uint256
getFinalFee(uint256 _stakedAmount, uint256 _currentEpoch, uint256 _stakeEpoch) -> uint256Calculates the final fee percentage for a given stake amount and staking duration. Discounts are combined additively instead of being compounded.
Parameters:
_stakedAmount: The amount of FUNC staked._currentEpoch: The current epoch._stakeEpoch: The epoch when staking started.
Returns:
Final fee percentage (in basis points) after applying the dynamic fee structure and duration discounts.
Configuration Functions
setStakeTiers(uint256[] calldata _minStakes, uint256[] calldata _finalFees)
setStakeTiers(uint256[] calldata _minStakes, uint256[] calldata _finalFees)Sets the stake tiers for fee calculation. Tiers must be in descending order of minStakes and finalFees.
Parameters:
_minStakes: Array of minimum stake amounts for each tier._finalFees: Array of final fees (in basis points) for each tier.
Requirements:
Arrays must have the same length.
Arrays must be in descending order.
setEpochDurationTiers(uint256[] calldata _minEpochs, uint256[] calldata _discounts)
setEpochDurationTiers(uint256[] calldata _minEpochs, uint256[] calldata _discounts)Sets the duration tiers for additional discounts based on staking duration. Tiers must be in descending order of minEpochs and discounts.
Parameters:
_minEpochs: Array of minimum epochs for each tier._discounts: Array of discount percentages (in basis points) for each tier.
Requirements:
Arrays must have the same length.
Arrays must be in descending order.
setMinEpochsRequired(uint256 _minEpochsRequired)
setMinEpochsRequired(uint256 _minEpochsRequired)Updates the global minimum epochs required for staking eligibility to access lower fees.
Parameters:
_minEpochsRequired: New minimum epochs required.
setStakeToCUNumeratorDenominator(uint256 _stakeToCUNumerator, uint256 _stakeToCUDenominator)
setStakeToCUNumeratorDenominator(uint256 _stakeToCUNumerator, uint256 _stakeToCUDenominator)Updates the stake-to-CU conversion ratio.
Parameters:
_stakeToCUNumerator: New numerator for the stake-to-CU ratio._stakeToCUDenominator: New denominator for the stake-to-CU ratio.
Requirements:
Both
_stakeToCUNumeratorand_stakeToCUDenominatormust be non-zero.
Events
This contract does not currently emit any events.
Access Control Summary
setStakeTiers
Admin/Governance
setEpochDurationTiers
Admin/Governance
setMinEpochsRequired
Admin/Governance
setStakeToCUNumeratorDenominator
Admin/Governance
Last updated