Skip to content

Commit c1d505a

Browse files
authored
Merge pull request #14 from dev-protocol/feat-update-sbt
feat: add minor improvements to the SBT.
2 parents 5afea89 + 315ef9c commit c1d505a

File tree

4 files changed

+39
-35
lines changed

4 files changed

+39
-35
lines changed

contracts/SBT.sol

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ pragma solidity =0.8.9;
33

44
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
55
import {Base64} from "@devprotocol/util-contracts/contracts/utils/Base64.sol";
6-
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
76
import {ERC721EnumerableUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol";
87

98
import {ISBT} from "./interfaces/ISBT.sol";
@@ -12,8 +11,6 @@ contract SBT is ISBT, ERC721EnumerableUpgradeable {
1211
using Base64 for bytes;
1312
using Strings for uint256;
1413

15-
/// @dev Account with proxy adming rights.
16-
address private _proxyAdmin;
1714
/// @dev EOA with rights to allow(add)/disallow(remove) minter.
1815
address private _minterUpdater;
1916

@@ -70,12 +67,6 @@ contract SBT is ISBT, ERC721EnumerableUpgradeable {
7067
}
7168
}
7269

73-
function setProxyAdmin(address proxyAdmin) external {
74-
require(_proxyAdmin == address(0), "Already set");
75-
_proxyAdmin = proxyAdmin;
76-
emit SetProxyAdmin(proxyAdmin);
77-
}
78-
7970
function addMinter(address minter) external override onlyMinterUpdater {
8071
_minters[minter] = true;
8172
emit MinterAdded(minter);
@@ -106,14 +97,16 @@ contract SBT is ISBT, ERC721EnumerableUpgradeable {
10697
}
10798

10899
function _tokenURI(uint256 tokenId) private view returns (string memory) {
100+
require(tokenId < currentIndex(), "Token not found");
101+
109102
(
110103
string memory name,
111104
string memory description,
112105
string memory tokenUriImage,
113106
StringAttribute[] memory stringAttributes,
114107
NumberAttribute[] memory numberAttributes
115108
) = abi.decode(
116-
_sbtdata[tokenId],
109+
metadataOf(tokenId),
117110
(string, string, string, StringAttribute[], NumberAttribute[])
118111
);
119112

@@ -230,8 +223,11 @@ contract SBT is ISBT, ERC721EnumerableUpgradeable {
230223
return super.totalSupply();
231224
}
232225

233-
function owner() external view returns (address) {
234-
return ProxyAdmin(_proxyAdmin).owner();
226+
function metadataOf(
227+
uint256 tokenId
228+
) public view override returns (bytes memory) {
229+
require(tokenId < currentIndex(), "Token not found");
230+
return _sbtdata[tokenId];
235231
}
236232

237233
function tokensOfOwner(

contracts/SBTProxy.sol

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
pragma solidity =0.8.9;
3+
4+
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
5+
6+
contract SBTProxy is TransparentUpgradeableProxy {
7+
constructor(
8+
address _logic,
9+
address admin_,
10+
bytes memory _data
11+
) TransparentUpgradeableProxy(_logic, admin_, _data) {}
12+
}

contracts/interfaces/ISBT.sol

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,11 @@ interface ISBT {
111111
* @return uint256 current token id
112112
*/
113113
function currentIndex() external view returns (uint256);
114+
115+
/*
116+
* @dev get mapped metadata bytes of token id
117+
* @param tokenId the token id of the NFT
118+
* @return bytes The mapped metadata bytes
119+
*/
120+
function metadataOf(uint256 tokenId) external view returns (bytes memory);
114121
}

test/SBT.test.ts

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,6 @@ describe('SBT', () => {
3030
})
3131
})
3232

33-
describe('setProxyAdmin', () => {
34-
it('The setProxyAdmin function should execute once', async () => {
35-
const sbt = await init()
36-
const signers = await getSigners()
37-
await expect(sbt.setProxyAdmin(signers.proxyAdmin.address))
38-
.to.emit(sbt, 'SetProxyAdmin')
39-
.withArgs(signers.proxyAdmin.address)
40-
})
41-
42-
it('The setProxyAdmin function can only be executed once', async () => {
43-
const sbt = await init()
44-
const signers = await getSigners()
45-
await sbt.setProxyAdmin(signers.proxyAdmin.address)
46-
await expect(
47-
sbt.setProxyAdmin(signers.proxyAdmin.address)
48-
).to.be.revertedWith('Already set')
49-
})
50-
})
51-
5233
describe('addMinter', () => {
5334
it('The addMinter function can be executed by minterUpdater', async () => {
5435
const sbt = await init()
@@ -68,7 +49,11 @@ describe('SBT', () => {
6849
)
6950

7051
await expect(
71-
sbt.connect(signers.proxyAdmin).addMinter(signers.minterC.address)
52+
sbt.connect(signers.deployer).addMinter(signers.minterC.address)
53+
).to.revertedWith('Not minter updater')
54+
55+
await expect(
56+
sbt.connect(signers.userA).addMinter(signers.minterC.address)
7257
).to.revertedWith('Not minter updater')
7358
})
7459
})
@@ -92,7 +77,11 @@ describe('SBT', () => {
9277
)
9378

9479
await expect(
95-
sbt.connect(signers.proxyAdmin).removeMinter(signers.minterA.address)
80+
sbt.connect(signers.deployer).removeMinter(signers.minterA.address)
81+
).to.revertedWith('Not minter updater')
82+
83+
await expect(
84+
sbt.connect(signers.userA).removeMinter(signers.minterA.address)
9685
).to.revertedWith('Not minter updater')
9786
})
9887
})
@@ -134,7 +123,7 @@ describe('SBT', () => {
134123
).to.be.revertedWith('Illegal access')
135124

136125
await expect(
137-
sbt.connect(signers.proxyAdmin).mint(signers.userA.address, metadata)
126+
sbt.connect(signers.userB).mint(signers.userA.address, metadata)
138127
).to.be.revertedWith('Illegal access')
139128

140129
await expect(
@@ -493,7 +482,7 @@ describe('SBT', () => {
493482

494483
metadata = await getDummyEncodedMetadata(sbt, 'USERC')
495484
await expect(
496-
sbt.connect(signers.proxyAdmin).setTokenURI(0, metadata)
485+
sbt.connect(signers.userB).setTokenURI(0, metadata)
497486
).to.be.revertedWith('Illegal access')
498487

499488
metadata = await getDummyEncodedMetadata(sbt, 'USERD')

0 commit comments

Comments
 (0)