// SPDX-License-Identifier: MIT pragma solidity 0.8.19; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {IMintable} from "../interfaces/IMintable.sol"; import {Governable} from "../core/Governable.sol"; contract MintableBaseToken is ERC20, IMintable, Governable { mapping (address => bool) public override isMinter; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) { } modifier onlyMinter() { require(isMinter[msg.sender], "MintableBaseToken: forbidden"); _; } function setMinter(address _minter, bool _isActive) external override onlyGov { isMinter[_minter] = _isActive; } function mint(address _account, uint256 _amount) external override onlyMinter { _mint(_account, _amount); } function burn(address _account, uint256 _amount) external override onlyMinter { _burn(_account, _amount); } }