@@ -14,6 +14,8 @@ contract SBTToken is ISBTToken, ERC721EnumerableUpgradeable {
1414
1515 /// @dev Account with proxy adming rights.
1616 address private _proxyAdmin;
17+ /// @dev EOA with rights to allow(add)/disallow(remove) minter.
18+ address private _minterUpdater;
1719
1820 /// @dev EOA with minting rights.
1921 mapping (address => bool ) private _minters;
@@ -25,6 +27,11 @@ contract SBTToken is ISBTToken, ERC721EnumerableUpgradeable {
2527 _;
2628 }
2729
30+ modifier onlyMinterUpdater () {
31+ require (_msgSender () == _minterUpdater, "Not minter updater " );
32+ _;
33+ }
34+
2835 function _setTokenURI (uint256 tokenId , bytes memory metadata ) private {
2936 _sbtdata[tokenId] = metadata;
3037 emit SetSBTTokenURI (tokenId, metadata);
@@ -51,9 +58,13 @@ contract SBTToken is ISBTToken, ERC721EnumerableUpgradeable {
5158 }
5259 }
5360
54- function initialize (address [] memory minters ) external initializer {
61+ function initialize (
62+ address minterUpdater ,
63+ address [] memory minters
64+ ) external initializer {
5565 __ERC721_init ("Dev Protocol SBT V1 " , "DEV-SBT-V1 " );
5666
67+ _minterUpdater = minterUpdater;
5768 for (uint256 i = 0 ; i < minters.length ; i++ ) {
5869 _minters[minters[i]] = true ;
5970 }
@@ -65,6 +76,16 @@ contract SBTToken is ISBTToken, ERC721EnumerableUpgradeable {
6576 emit SetProxyAdmin (proxyAdmin);
6677 }
6778
79+ function addMinter (address minter ) external override onlyMinterUpdater {
80+ _minters[minter] = true ;
81+ emit MinterAdded (minter);
82+ }
83+
84+ function removeMinter (address minter ) external override onlyMinterUpdater {
85+ _minters[minter] = false ;
86+ emit MinterRemoved (minter);
87+ }
88+
6889 function setTokenURI (
6990 uint256 tokenId ,
7091 bytes memory metadata
0 commit comments