From bf780e1b97eb957d44174c559e623e4c5c9af2d4 Mon Sep 17 00:00:00 2001 From: Ankush263 Date: Fri, 24 Mar 2023 12:56:43 +0530 Subject: [PATCH] Add SimpleERC20 contract --- packages/hardhat/contracts/SimpleERC20.sol | 62 ++++++++++++++++++++++ packages/truffle/contracts/.gitkeep | 0 packages/truffle/contracts/SimpleERC20.sol | 62 ++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 packages/hardhat/contracts/SimpleERC20.sol delete mode 100644 packages/truffle/contracts/.gitkeep create mode 100644 packages/truffle/contracts/SimpleERC20.sol diff --git a/packages/hardhat/contracts/SimpleERC20.sol b/packages/hardhat/contracts/SimpleERC20.sol new file mode 100644 index 00000000..44ed567b --- /dev/null +++ b/packages/hardhat/contracts/SimpleERC20.sol @@ -0,0 +1,62 @@ +// 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/token/ERC20/extensions/ERC20Snapshot.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol"; + +contract MyToken is ERC20, ERC20Burnable, ERC20Snapshot, Ownable, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint { + constructor() ERC20("MyToken", "MTK") ERC20Permit("MyToken") {} + + function snapshot() public onlyOwner { + _snapshot(); + } + + function pause() public onlyOwner { + _pause(); + } + + function unpause() public onlyOwner { + _unpause(); + } + + function mint(address to, uint256 amount) public onlyOwner { + _mint(to, amount); + } + + function _beforeTokenTransfer(address from, address to, uint256 amount) + internal + whenNotPaused + override(ERC20, ERC20Snapshot) + { + super._beforeTokenTransfer(from, to, amount); + } + + // The following functions are overrides required by Solidity. + + function _afterTokenTransfer(address from, address to, uint256 amount) + internal + override(ERC20, ERC20Votes) + { + super._afterTokenTransfer(from, to, amount); + } + + function _mint(address to, uint256 amount) + internal + override(ERC20, ERC20Votes) + { + super._mint(to, amount); + } + + function _burn(address account, uint256 amount) + internal + override(ERC20, ERC20Votes) + { + super._burn(account, amount); + } +} \ No newline at end of file diff --git a/packages/truffle/contracts/.gitkeep b/packages/truffle/contracts/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/truffle/contracts/SimpleERC20.sol b/packages/truffle/contracts/SimpleERC20.sol new file mode 100644 index 00000000..44ed567b --- /dev/null +++ b/packages/truffle/contracts/SimpleERC20.sol @@ -0,0 +1,62 @@ +// 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/token/ERC20/extensions/ERC20Snapshot.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/security/Pausable.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol"; + +contract MyToken is ERC20, ERC20Burnable, ERC20Snapshot, Ownable, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint { + constructor() ERC20("MyToken", "MTK") ERC20Permit("MyToken") {} + + function snapshot() public onlyOwner { + _snapshot(); + } + + function pause() public onlyOwner { + _pause(); + } + + function unpause() public onlyOwner { + _unpause(); + } + + function mint(address to, uint256 amount) public onlyOwner { + _mint(to, amount); + } + + function _beforeTokenTransfer(address from, address to, uint256 amount) + internal + whenNotPaused + override(ERC20, ERC20Snapshot) + { + super._beforeTokenTransfer(from, to, amount); + } + + // The following functions are overrides required by Solidity. + + function _afterTokenTransfer(address from, address to, uint256 amount) + internal + override(ERC20, ERC20Votes) + { + super._afterTokenTransfer(from, to, amount); + } + + function _mint(address to, uint256 amount) + internal + override(ERC20, ERC20Votes) + { + super._mint(to, amount); + } + + function _burn(address account, uint256 amount) + internal + override(ERC20, ERC20Votes) + { + super._burn(account, amount); + } +} \ No newline at end of file