Skip to content

Commit 34a3586

Browse files
author
Yash Agrawal
committed
feat: add multiple minters
1 parent 5a98ab6 commit 34a3586

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

contracts/SBTToken.sol

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

contracts/interfaces/ISBTToken.sol

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ interface ISBTToken {
3535
*/
3636
event SetSBTTokenURI(uint256 tokenId, bytes data);
3737

38+
/*
39+
* @dev The event fired when a EOA is given minter right.
40+
* @param minter The address given the minter right.
41+
*/
42+
event MinterAdded(address minter);
43+
44+
/*
45+
* @dev The event fired when a EOA is revoked from minter right.
46+
* @param minter The address revoked the minter right.
47+
*/
48+
event MinterRemoved(address minter);
49+
3850
/*
3951
* @dev Creates the new staking position for the caller.
4052
* Mint must be called by the minter address.
@@ -46,6 +58,20 @@ interface ISBTToken {
4658
bytes memory metadata
4759
) external returns (uint256);
4860

61+
/*
62+
* @dev Gives minter rights to EOA.
63+
* @notice must be called by the minterUpdater address.
64+
* @param minter The address who is to be given the minting rights.
65+
*/
66+
function addMinter(address minter) external;
67+
68+
/*
69+
* @dev Revokes minter rights to EOA.
70+
* @notice must be called by the minterUpdater address.
71+
* @param minter The address who is to be revoked from the minting rights.
72+
*/
73+
function removeMinter(address minter) external;
74+
4975
/*
5076
* @dev Sets the token URI image for a token.
5177
* @notice must be called by the minter address.

0 commit comments

Comments
 (0)