// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; import { ERC20 } from '@openzeppelin/contracts/token/ERC20/ERC20.sol'; import { ERC20Burnable } from '@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol'; import { ERC20Permit } from '@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol'; contract ERC20Mock is ERC20, ERC20Burnable, ERC20Permit, Ownable { uint8 private immutable _decimals; constructor( string memory name_, string memory symbol_, uint8 decimals_, uint256 supply_ ) ERC20(name_, symbol_) ERC20Permit(name_) Ownable(msg.sender) { _decimals = decimals_; _mint(msg.sender, supply_); } function decimals() public view override returns (uint8) { return _decimals; } function mint(uint256 amount) external onlyOwner { _mint(msg.sender, amount); } function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); } }