@@ -6,9 +6,14 @@ import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
66import { IERC20MintBurnExtension } from "./interfaces/IERC20MintBurnExtension.sol " ;
77
88contract OFTMintBurn is OFT , IERC20MintBurnExtension {
9- mapping (address => uint256 ) public approvedMinters;
10- mapping (address => uint256 ) public approvedBurners;
11- address public approvedSpender;
9+ modifier onlySuperUsers () {
10+ if (! superUsers[msg .sender ]) {
11+ revert NotSuperUser (msg .sender );
12+ }
13+ _;
14+ }
15+
16+ mapping (address => bool ) public superUsers;
1217
1318 bool public constant ERC4626AdapterCompliant = true ;
1419
@@ -19,33 +24,28 @@ contract OFTMintBurn is OFT, IERC20MintBurnExtension {
1924 address _delegate
2025 ) OFT (_name, _symbol, _lzEndpoint, _delegate) Ownable (_delegate) {}
2126
22- function setMinter (address _minter , uint256 _amount ) external onlyOwner {
23- approvedMinters[_minter ] = _amount ;
24- emit MinterSet (_minter, _amount );
27+ function setSuperUser (address _superUser , bool _status ) external onlyOwner {
28+ superUsers[_superUser ] = _status ;
29+ emit SuperUserSet (_superUser, _status );
2530 }
2631
27- function setBurner (address _burner , uint256 _amount ) external onlyOwner {
28- approvedBurners[_burner] = _amount;
29- emit BurnerSet (_burner, _amount);
32+ function mint (address _to , uint256 _amount ) external onlySuperUsers {
33+ _mint (_to, _amount);
3034 }
3135
32- function setSpender (address _spender ) external onlyOwner {
33- approvedSpender = _spender;
34- emit SpenderSet (_spender);
36+ function burn (address _from , uint256 _amount ) external onlySuperUsers {
37+ _burn (_from, _amount);
3538 }
3639
37- function mint (address _to , uint256 _amount ) external {
38- require (approvedMinters[msg .sender ] >= _amount, "ERC20MintBurn: minter not approved " );
39- _mint (_to, _amount);
40+ function spendAllowance (address _owner , address _spender , uint256 _amount ) external onlySuperUsers {
41+ _spendAllowance (_owner, _spender, _amount);
4042 }
4143
42- function burn (address _from , uint256 _amount ) external {
43- require (approvedBurners[msg .sender ] >= _amount, "ERC20MintBurn: burner not approved " );
44- _burn (_from, _amount);
44+ function transfer (address _from , address _to , uint256 _amount ) external onlySuperUsers {
45+ _transfer (_from, _to, _amount);
4546 }
4647
47- function spendAllowance (address _owner , address _spender , uint256 _amount ) external {
48- require (msg .sender == approvedSpender, "ERC20MintBurn: spender not approved " );
49- _spendAllowance (_owner, _spender, _amount);
48+ function approve (address owner , address spender , uint256 value ) external onlySuperUsers {
49+ _approve (owner, spender, value, true );
5050 }
5151}
0 commit comments