UsualM

High-Level Overview

The UsualM smart contract manages the UsualM ERC20 Token and acts as a wrapped version of the WrappedM token (wrapped version of the M token). It allows users to wrap WrappedM tokens into UsualM, adding enhanced functionality such as pausability, blacklist enforcement, and mint cap restrictions. It also supports permits and implements role-based access control to ensure secure operations.

This contract is specifically designed to interact with the WrappedM token while enforcing access control through a Registry Access Contract. Key features include wrapping, unwrapping, minting, and pausing operations.

Contract Summary

UsualM is an ERC-20 token with additional features that provide security and operational flexibility. It integrates with OpenZeppelin upgradeable modules for pausability and permit-based approvals. Moreover, it enforces blacklist restrictions to prevent interactions with malicious or sanctioned addresses and limits the maximum supply via a configurable mint cap.

Inherited Contracts

  • ERC20PausableUpgradeable: Enables pausability of token transfers, ensuring operations can be halted in emergencies.

  • ERC20PermitUpgradeable: Supports gasless approvals through EIP-2612 signatures, enabling off-chain approval of token transfers.

  • ERC20Upgradeable: Provides the core ERC-20 token implementation.

Functions Description

Public/External Functions

  • wrap(address recipient, uint256 amount): Wraps the specified amount of WrappedM tokens into UsualM tokens for the recipient.

  • wrapWithPermit(address recipient, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s): Wraps WrappedM tokens using a permit signature for approval, enabling gasless wrapping.

  • unwrap(address recipient, uint256 amount): Unwraps UsualM tokens into WrappedM tokens, subject to role checks on the caller.

  • setMintCap(uint256 newMintCap): Updates the mint cap for the token. Callable only by accounts with the USUAL_M_MINTCAP_ALLOCATOR role.

  • pause(): Pauses all token transfers. Callable only by accounts with the USUAL_M_PAUSE role.

  • unpause(): Resumes all token transfers. Callable only by accounts with the USUAL_M_UNPAUSE role.

  • blacklist(address account): Blacklists an address, preventing it from interacting with the token. Callable only by accounts with the BLACKLIST_ROLE.

  • unBlacklist(address account): Removes an address from the blacklist. Callable only by accounts with the BLACKLIST_ROLE.

Functionality Breakdown

SC-Flows

Key Functionalities

  • Wrapping: Users can wrap WrappedM tokens into UsualM, making use of enhanced token features.

  • Unwrapping: Users can unwrap UsualM tokens back into WrappedM, subject to role checks.

  • Mint Cap Enforcement: Ensures that the total supply of UsualM tokens does not exceed the configured mint cap.

  • Blacklist Enforcement: Prevents blacklisted addresses from participating in token transfers.

  • Pausability: Allows administrators to halt all token transfers during emergencies.

Constants

  • USUAL_M_UNWRAP: Role required to unwrap tokens.

  • USUAL_M_PAUSE: Role required to pause the contract.

  • USUAL_M_UNPAUSE: Role required to unpause the contract.

  • USUAL_M_MINTCAP_ALLOCATOR: Role required to update the mint cap.

  • BLACKLIST_ROLE: Role required to blacklist/unblacklist accounts.

Safeguards Implementation

  • Pausability: The contract integrates pausability to ensure all token transfers can be halted in emergencies. Only accounts with the appropriate roles can pause/unpause the contract.

  • Role-Based Access Control: Sensitive operations such as pausing, unwrapping, blacklisting, and updating the mint cap are restricted to accounts with specific roles. This ensures that only authorized entities can perform these operations.

  • Mint Cap Enforcement: The total supply of UsualM tokens is capped by a configurable limit, ensuring supply control.

  • Blacklist Enforcement: The contract prevents interactions with blacklisted addresses, safeguarding the token economy from malicious actors.

Last updated