1+ // SPDX-License-Identifier: MIT
2+ pragma solidity ^ 0.8.13 ;
3+
4+ import "@openzeppelin/contracts/security/Pausable.sol " ;
5+ import "@openzeppelin/contracts/token/ERC20/ERC20.sol " ;
6+ import "@openzeppelin/contracts/access/Ownable.sol " ;
7+
8+ contract MyToken is ERC20 , Pausable , Ownable {
9+ mapping (address => bool ) private blacklist;
10+
11+ constructor () ERC20 ("MyToken " , "MTK " ) {
12+ _mint (msg .sender , 1000000 * 10 ** decimals ());
13+ }
14+
15+ function pause () public onlyOwner {
16+ _pause ();
17+ }
18+
19+ function unpause () public onlyOwner {
20+ _unpause ();
21+ }
22+
23+ function addToBlacklist (address account ) public onlyOwner {
24+ blacklist[account] = true ;
25+ }
26+
27+ function removeFromBlacklist (address account ) public onlyOwner {
28+ blacklist[account] = false ;
29+ }
30+
31+ function isBlacklisted (address account ) public view returns (bool ) {
32+ return blacklist[account];
33+ }
34+
35+ function _beforeTokenTransfer (address from , address to , uint256 amount )
36+ internal
37+ override
38+ {
39+ require (! paused (), "Token: paused " );
40+ require (! blacklist[from], "Sender is blacklisted " );
41+ require (! blacklist[to], "Recipient is blacklisted " );
42+ super ._beforeTokenTransfer (from, to, amount);
43+ }
44+ }
0 commit comments