USUAL*

High-Level Overview

This section provides an overview of the UsualS smart contract. The UsualS contract is designed to manage the USUALS ERC20 token, implementing essential functionalities for minting, burning, and transferring tokens, along with additional layers of control and security. The contract integrates role-based access control through a registry system, ensuring that only authorized entities can perform sensitive operations such as pausing the contract or blacklisting addresses

Contract Summary

Inherited Contracts

  • ERC20PausableUpgradeable: Extends ERC20 to support pausability

  • ERC20PermitUpgradeable: Extends ERC20 to support gasless transactions through signed approvals.

ERC20PausableUpgradeable

Standard OpenZeppelin Implementation.

ERC20PermitUpgradeable

Standard OpenZeppelin Implementation.

Functionality Breakdown

SC-Flows

Key Functionalities

  • Minting: Tokens can be minted to an address, subject to role checks.

  • Burning: Tokens can be burned from an address, also subject to role checks.

  • Transfers: Tokens can be sent or receive. Will revert if blacklisted.

Functions Description

Public/External Functions

  • pause(): Pauses all token transfer operations; callable only by the PAUSING_CONTRACTS_ROLE.

  • unpause(): Resumes all token transfer operations; also callable only by the DEFAULT_ADMIN_ROLE.

  • transfer(address to, uint256 amount): Transfers tokens to a non-blacklisted address.

  • transferFrom(address sender, address to, uint256 amount): Transfers tokens from one non-blacklisted address to another.

  • burn(uint256 amount) and burnFrom(address account, uint256 amount): Burns tokens from an address, requiring the USUALS_BURN role.

  • blacklist(address account) and unBlacklist(address account): Those functions allows the admin to blacklist or remove from blacklist malicious users from using this token. Only callable by the BLACKLIST_ROLE.

  • stakeAll() : Sends the total supply of USUALS to the staking contract. Only callable by the USUALSP contract.

  • isBlacklisted(): Returns true if the account is blacklisted.

Constants

  • CONTRACT_REGISTRY_ACCESS: Registry access contract address.

  • DEFAULT_ADMIN_ROLE: Default admin role.

  • PAUSING_CONTRACTS_ROLE: Role required to pause the contract.

  • BLACKLIST_ROLE: Role required to blacklist an address.

  • USUALS_BURN: Role required to burn tokens.

Safeguards Implementation

  • Pausability: Ensures that token transfers can be halted in case of emergency.

  • Role-Based Access Control: Restricts sensitive actions to addresses with appropriate roles.

  • Blacklist Enforcement: Ensures that unauthorized addresses can't participate in the token economy.

Last updated

Was this helpful?