CryndexToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/interfaces/IERC1363.sol";
import "@openzeppelin/contracts/governance/utils/IVotes.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
interface ICryndexToken is IERC20, IERC20Metadata, IVotes, IERC1363 {
/// @notice Emitted when an account stakes Cryndex
/// @param account The account staking tokens
/// @param amount The amount of tokens staked
/// @param timestamp The timestamp when the account staked tokens
event Stake(address account, uint256 amount, uint256 timestamp);
/// @notice Emitted when an account unstakes Cryndex
/// @param account The account unstaking tokens
/// @param amount The amount of tokens unstaked
/// @param timestamp The timestamp when the account unstaked tokens
event Unstake(address account, uint256 amount, uint256 timestamp);
/// @notice Returns the total locked amount and voting power for an account, including accrued interest
/// @param account The address to query
/// @return The total locked amount (base + interest) in wei, representing voting power
function getVotes(address account) external view returns (uint256);
/// @notice Returns the total locked amount across all accounts, including accrued interest
/// @return The total locked amount in wei
function getTotalStaked() external view returns (uint256);
/// @notice Locks tokens, burning them from circulation and increasing voting power
/// @param amount The amount of tokens to lock (in wei)
function stake(uint256 amount) external;
/// @notice Initiates the unlocking process for a specified amount of tokens, starting a one-year withdrawal period
/// @param amount The amount of tokens to unlock (in wei)
function unstake(uint256 amount) external;
/// @notice Calculates the current interest rate for the period
/// @return The current interest rate for staking
function getInterestRate() external view returns (uint256);
/// @notice Returns the cooldown timestamp
/// @param account The address of the account
/// @return The cooldown for an account
function getCooldown(address account) external view returns (uint256);
/// @notice Burns tokens from the msg.sender
/// @param amount Amount of tokens to burn
function burn(uint256 amount) external;
}
Last updated