@@ -14,6 +14,8 @@ contract SBTToken is ISBTToken, ERC721EnumerableUpgradeable {
14
14
15
15
/// @dev Account with proxy adming rights.
16
16
address private _proxyAdmin;
17
+ /// @dev EOA with rights to allow(add)/disallow(remove) minter.
18
+ address private _minterUpdater;
17
19
18
20
/// @dev EOA with minting rights.
19
21
mapping (address => bool ) private _minters;
@@ -25,6 +27,11 @@ contract SBTToken is ISBTToken, ERC721EnumerableUpgradeable {
25
27
_;
26
28
}
27
29
30
+ modifier onlyMinterUpdater () {
31
+ require (_msgSender () == _minterUpdater, "Not minter updater " );
32
+ _;
33
+ }
34
+
28
35
function _setTokenURI (uint256 tokenId , bytes memory metadata ) private {
29
36
_sbtdata[tokenId] = metadata;
30
37
emit SetSBTTokenURI (tokenId, metadata);
@@ -51,9 +58,13 @@ contract SBTToken is ISBTToken, ERC721EnumerableUpgradeable {
51
58
}
52
59
}
53
60
54
- function initialize (address [] memory minters ) external initializer {
61
+ function initialize (
62
+ address minterUpdater ,
63
+ address [] memory minters
64
+ ) external initializer {
55
65
__ERC721_init ("Dev Protocol SBT V1 " , "DEV-SBT-V1 " );
56
66
67
+ _minterUpdater = minterUpdater;
57
68
for (uint256 i = 0 ; i < minters.length ; i++ ) {
58
69
_minters[minters[i]] = true ;
59
70
}
@@ -65,6 +76,16 @@ contract SBTToken is ISBTToken, ERC721EnumerableUpgradeable {
65
76
emit SetProxyAdmin (proxyAdmin);
66
77
}
67
78
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
+
68
89
function setTokenURI (
69
90
uint256 tokenId ,
70
91
bytes memory metadata
0 commit comments