// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; /** * @title MintableFungible */ import '@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol'; import '@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol'; contract MintableFungible is ERC20Upgradeable, ERC20PermitUpgradeable { event Mint(address indexed to, uint256 indexed quantity); event Burn(address indexed from, uint256 indexed quantity); function __MintableFungible_init(string memory name_, string memory symbol_) internal onlyInitializing { __ERC20_init(name_, symbol_); } /** * @dev Mint token * @param to_ - The receiver of the tokens * @param amount_ - The amount of token to mint */ function mint(address to_, uint256 amount_) public { require(to_ != address(0), 'MintableFungible: mint to the zero address'); require(amount_ > 0, 'MintableFungible: mint amount must be greater than 0'); _mint(to_, amount_); emit Mint(to_, amount_); } /** * @dev Burn token * @param amount_ - The amount of token to burn */ function burn(uint256 amount_) public { require(amount_ > 0, 'MintableFungible: amount must be greater than 0'); _burn(_msgSender(), amount_); emit Burn(_msgSender(), amount_); } uint256[50] private __gap; }