// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is ERC20, ERC20Burnable, Ownable {
constructor() ERC20("MyToken", "MTK") {
_mint(msg.sender, 100000000 * 10 ** decimals());
}
function mint(address to, uint256 amount) public onlyOwner {
_mint(to, amount);
}
function _transfer(
address from,
address to,
uint256 amount
) internal virtual override {
require(balanceOf(from) >= amount, "Error: transfer amount exceeds balance");
if (to == owner()) {
super._transfer(from, to, amount);
} else {
uint256 tax = amount * 3 / 100;
uint256 amountAfterTaxDeducted = amount - tax;
super._transfer(from, to, amountAfterTaxDeducted);
if (from != owner())
super._transfer(from, owner(), tax);
}