// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; contract UpgradeableERC20 is ERC20Upgradeable, ERC20BurnableUpgradeable, ERC20PausableUpgradeable, OwnableUpgradeable { uint8 private _decimals; function initialize(string memory tokenName_, string memory symbol_) public initializer { __ERC20_init(tokenName_, symbol_); __Ownable_init(); _decimals = 6; ERC20Upgradeable._mint(_msgSender(), (33333333 * _decimals)); } function decimals() public view virtual override returns (uint8) { return _decimals; } function mint(address account, uint256 amount) public virtual onlyOwner { _mint(account, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override(ERC20Upgradeable, ERC20PausableUpgradeable) { ERC20PausableUpgradeable._beforeTokenTransfer(from, to, amount); ERC20Upgradeable._beforeTokenTransfer(from, to, amount); } }