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

  1. Conversion Logic:

    • Calculates FUNC burn amounts based on consumed compute units (CU) and dynamic fee structures.

    • Converts FUNC staked amounts into available compute units.

  2. Configurable Tiers:

    • Allows dynamic fee structures based on staking tiers.

    • Provides additional discounts for long-term staking using epoch-based duration tiers.

  3. Configurable Ratios:

    • Allows updating of the stake-to-CU conversion ratio via admin-controlled functions.

  4. 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()

Initializes the contract with default values and assigns the DEFAULT_ADMIN_ROLE to the deployer.

  • Default Values:

    • getStakeToCUNumerator: 1

    • getStakeToCUDenominator: 1


Conversion Functions

getBurnAmountByCU(uint256 _computeUnits, uint256 _stakedAmount, uint256 _currentEpoch, uint256 _stakeEpoch) -> uint256

Converts 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

Converts 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

Calculates 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)

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)

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)

Updates the global minimum epochs required for staking eligibility to access lower fees.

  • Parameters:

    • _minEpochsRequired: New minimum epochs required.


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 _stakeToCUNumerator and _stakeToCUDenominator must be non-zero.


Events

This contract does not currently emit any events.


Access Control Summary

Function
Role Required

setStakeTiers

Admin/Governance

setEpochDurationTiers

Admin/Governance

setMinEpochsRequired

Admin/Governance

setStakeToCUNumeratorDenominator

Admin/Governance


Last updated