| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // SPDX-License-Identifier: UNLICENSED
- pragma solidity ^0.8.20;
- import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
- import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
- import "@openzeppelin/contracts/access/AccessControl.sol";
- import "@openzeppelin/contracts/utils/Pausable.sol";
- contract EasyBRLStable is ERC20, ERC20Burnable, AccessControl, Pausable {
- bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
- bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
- bytes32 public constant COMPLIANCE_ROLE = keccak256("COMPLIANCE_ROLE");
- mapping(address => bool) private _blacklist;
- event BlacklistUpdated(address indexed account, bool isBlacklisted);
- constructor(address admin, string memory name_, string memory symbol_) ERC20(name_, symbol_) {
- _grantRole(DEFAULT_ADMIN_ROLE, admin);
- _grantRole(PAUSER_ROLE, admin);
- _grantRole(MINTER_ROLE, admin);
- _grantRole(COMPLIANCE_ROLE, admin);
- }
- function decimals() public pure override returns (uint8) {
- return 6;
- }
- function pause() external onlyRole(PAUSER_ROLE) {
- _pause();
- }
- function unpause() external onlyRole(PAUSER_ROLE) {
- _unpause();
- }
- function setBlacklist(address account, bool status) external onlyRole(COMPLIANCE_ROLE) {
- _blacklist[account] = status;
- emit BlacklistUpdated(account, status);
- }
- function isBlacklisted(address account) external view returns (bool) {
- return _blacklist[account];
- }
- function mint(address to, uint256 amount) external onlyRole(DEFAULT_ADMIN_ROLE) {
- _mint(to, amount);
- }
- function burn(uint256 value) public override onlyRole(DEFAULT_ADMIN_ROLE) {
- super.burn(value);
- }
- function burnFrom(address account, uint256 value) public override onlyRole(DEFAULT_ADMIN_ROLE) {
- super.burnFrom(account, value);
- }
- function _update(address from, address to, uint256 value) internal override whenNotPaused {
- if (from != address(0)) {
- require(!_blacklist[from], "Blacklisted");
- }
- if (to != address(0)) {
- require(!_blacklist[to], "Blacklisted");
- }
- require(!_blacklist[_msgSender()], "Blacklisted");
- super._update(from, to, value);
- }
- function grantComplianceRole(address account) external onlyRole(DEFAULT_ADMIN_ROLE) {
- _grantRole(COMPLIANCE_ROLE, account);
- }
- }
|