Skip to content

Commit 109b98d

Browse files
authored
Merge pull request #16 from dev-protocol/fix-sbt-tokenids
feat: make SBT start with token id 1.
2 parents c1d505a + b1c382a commit 109b98d

File tree

4 files changed

+142
-120
lines changed

4 files changed

+142
-120
lines changed

contracts/SBT.sol

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ contract SBT is ISBT, ERC721EnumerableUpgradeable {
1313

1414
/// @dev EOA with rights to allow(add)/disallow(remove) minter.
1515
address private _minterUpdater;
16+
/// @dev The counter to mint new NFTs and track supply.
17+
uint256 private _tokenIdCounter;
1618

1719
/// @dev EOA with minting rights.
1820
mapping(address => bool) private _minters;
@@ -81,23 +83,33 @@ contract SBT is ISBT, ERC721EnumerableUpgradeable {
8183
uint256 tokenId,
8284
bytes memory metadata
8385
) external override onlyMinter {
84-
require(tokenId < currentIndex(), "Token not found");
86+
require(tokenId <= currentIndex(), "Token not found");
8587
_setTokenURI(tokenId, metadata);
8688
}
8789

8890
function mint(
8991
address to,
9092
bytes memory metadata
9193
) external override onlyMinter returns (uint256 tokenId_) {
94+
unchecked {
95+
_tokenIdCounter++;
96+
}
9297
uint256 currentId = currentIndex();
9398
_mint(to, currentId);
9499
emit Minted(currentId, to);
95100
_setTokenURI(currentId, metadata);
96101
return currentId;
97102
}
98103

104+
/**
105+
* @dev See {IERC721Enumerable-totalSupply}.
106+
*/
107+
function totalSupply() public view override returns (uint256) {
108+
return _tokenIdCounter;
109+
}
110+
99111
function _tokenURI(uint256 tokenId) private view returns (string memory) {
100-
require(tokenId < currentIndex(), "Token not found");
112+
require(tokenId <= currentIndex(), "Token not found");
101113

102114
(
103115
string memory name,
@@ -220,13 +232,17 @@ contract SBT is ISBT, ERC721EnumerableUpgradeable {
220232
}
221233

222234
function currentIndex() public view override returns (uint256) {
223-
return super.totalSupply();
235+
return totalSupply();
236+
}
237+
238+
function nextIndex() public view override returns (uint256) {
239+
return currentIndex() + 1;
224240
}
225241

226242
function metadataOf(
227243
uint256 tokenId
228244
) public view override returns (bytes memory) {
229-
require(tokenId < currentIndex(), "Token not found");
245+
require(tokenId <= currentIndex(), "Token not found");
230246
return _sbtdata[tokenId];
231247
}
232248

contracts/interfaces/ISBT.sol

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ interface ISBT {
112112
*/
113113
function currentIndex() external view returns (uint256);
114114

115+
/*
116+
* @dev get next id of token to be minted
117+
* @return uint256 next token id
118+
*/
119+
function nextIndex() external view returns (uint256);
120+
115121
/*
116122
* @dev get mapped metadata bytes of token id
117123
* @param tokenId the token id of the NFT

0 commit comments

Comments
 (0)