* This is an official institutional stablecoin issued by Societe GeneraleāFORGE
* This is an official institutional stablecoin issued by Societe GeneraleāFORGE
*
*
* CoinVertible are exclusively intended for persons who are not U.S. Persons, as defined in Regulation S of the U.S. Securities Act of 1933, as amended and who are not physically present in the U.S..
* CoinVertible are exclusively intended for persons who are not U.S. Persons, as defined in Regulation S of the U.S. Securities Act of 1933, as amended and who are not physically present in the U.S..
*
*
* Offering, or inviting to purchase, CoinVertible in the U.S. is not authorized. Potential users shall observe any such restrictions in accordance with the relevant CoinVertible whitepaper available on SG Forge website.
* Offering, or inviting to purchase, CoinVertible in the U.S. is not authorized. Potential users shall observe any such restrictions in accordance with the relevant CoinVertible whitepaper available on SG Forge website.
* @dev The `SmartCoin` contract is basically an ERC20 with a few specifics
* @dev The `SmartCoin` contract is basically an ERC20 with a few specifics
* It uses the UUPS upgrade mechanism
* It uses the UUPS upgrade mechanism
* It has a set of operators with specific rights :
* It has a set of operators with specific rights :
* - the registrar operator :
* - the registrar operator :
* - manages the blacklisting of users
* - manages the blacklisting of users
* - reviews(and either validates or rejects) transfers of tokens back to the registrar or the operations address
* - names the operators for next implementation contract upgrade (AccessControlUpgradeable.nameNewOperators)
* - names the operators for next implementation contract upgrade (AccessControlUpgradeable.nameNewOperators)
* - authorises upgrade to next implementation contract (AccessControlUpgradeable.authorizeImplementation)
* - authorises upgrade to next implementation contract (AccessControlUpgradeable.authorizeImplementation)
* - the operations operator is a special address used when token owners want to 'cash out' of the SmartCoin
- manages redemption addresses
* (i.e. sell their tokens to the issuer in exchange for cash) :
* - it is not possible to use the operations operator's address as spender or destination of a transferFrom
* - transfers to the operations address have to be reviewed by the registrar operator before being performed.
* - the technical operator :
* - the technical operator :
* - only the technical operator can launch a (previously authorised) upgrade of the implementation contract (upgradeTo/upgradeToAndCall)
* - only the technical operator can launch a (previously authorised) upgrade of the implementation contract (upgradeTo/upgradeToAndCall)
* Redemption Addresses are special addresses used when token owners want to 'cash out' of the SmartCoin (i.e. sell their tokens to the issuer in exchange for cash)
*/
*/
contract SmartCoin is
contract SmartCoin is
SmartCoinDataLayout,
SmartCoinDataLayout,
AccessControlUpgradeable,
AccessControlUpgradeable,
ERC20Upgradeable,
ERC20Upgradeable,
UUPSUpgradeable,
UUPSUpgradeable,
ISmartCoin
ISmartCoin
{
{
/**
* @dev Performs balance checks based on the "available" balance instead of total balance
* The "available" balance excludes tokens currently engaged in a transfer request,
* which is a two-step transfer back to the registrar operator or the operations operator