# USC Token

## Overview

Contract: [USC.sol](https://github.com/augmentlabs-io/contracts/blob/main/contracts/USC.sol)

USC Token is an ERC20Upgradeable smart contract that acts as the stable coin in the ecosystem.

You can refer to the [Whitepaper](https://www.augmentlabs.io/whitepaper) for reference.

## Dependencies

* **ERC20Upgradeable**: Openzeppelin's `ERC20` smart contract that is upgradeable.
* **Pausable:** Allows for pausing/unpausing of the smart contract.
* **Mintable**: Allows for minting new USC tokens to a user.
* **Burnable**: Allows for holders of USC token to burn their tokens.
* **AccessControl**: Allows for multiple permission roles to exist in the same contract.

## How it works

The USC token is a basic `ERC20` contract with no modification or limitation for users. Users are free to `transfer`, `approve`, `burn`,... just like other `ERC20` tokens.

The owner of the USC contract can **mint** new tokens to a user without any special mechanism.

## Roles

* **Admin (DEFAULT\_ADMIN\_ROLE):** Admin role is able to pause/unpause the smart contract and can perform `mint`action.\
  \
  **Admin** role will be held by a gnosis safe address to ensure security.
* **Minter (MINTER\_ROLE): Minter** role is able to perform `mint` action.\
  \
  The [TokenController](https://docs.augmentlabs.io/smart-contracts/token-controller) contract has **Minter** role so it can perform the redeem workflow.
* **Pauser (PAUSER\_ROLE):** **Pauser** role is able to pause/unpause the contract in case of emergencies. Initially no specific address is the holder of the **Pauser** role other than the **Admin.**
* **Upgrader (UPGRADER\_ROLE):** **Upgrader** role is able to upgrade the smart contract for future phases. Initially no specific address is the holder of the **Upgrader** role other than the **Admin.**

## **Participants**

* Gnosis-safe address as **Admin**: This ensures important roles are secure and doesn't have single-point-of-failure. Also for future extension, Admin can grant roles to other addresses if needed.&#x20;
* [TokenController](https://docs.augmentlabs.io/smart-contracts/token-controller) as **Minter**: The Token controller will have Minter role as it is a part of the redeem flow. TokenController can mint new USC tokens in exchange for burning user's AGC token as a part of the redeem process.
* User: Freely to do whatever he/she wants with the token with no restrictions.
