@@ -10,6 +10,7 @@ contract Factory {
1010 mapping (address => address []) public deployedTNTs;
1111 mapping (address => address []) public userTNTs;
1212 mapping (address => bool ) public isDeployedTNT;
13+ mapping (address => mapping (address => bool )) private userHasTNT;
1314
1415 event TNTCreated (address indexed owner , address tntAddress );
1516 event TokenRegistered (address indexed user , address indexed tntAddress );
@@ -30,25 +31,23 @@ contract Factory {
3031 }
3132
3233 function registerIssuedToken (address user , address tntAddr ) external onlyDeployedTNT {
33- address [] storage userTokens = userTNTs[user];
34- uint256 len = userTokens.length ;
35-
36- for (uint256 i = 0 ; i < len; i++ ) {
37- if (userTokens[i] == tntAddr) return ;
38- }
39-
40- userTokens.push (tntAddr);
34+ if (userHasTNT[user][tntAddr]) return ;
35+ userTNTs[user].push (tntAddr);
36+ userHasTNT[user][tntAddr] = true ;
4137 emit TokenRegistered (user, tntAddr);
4238 }
4339
4440 function unregisterToken (address user , address tntAddr ) external onlyDeployedTNT {
41+ if (! userHasTNT[user][tntAddr]) return ;
42+
4543 address [] storage userTokens = userTNTs[user];
4644 uint256 len = userTokens.length ;
4745
4846 for (uint256 i = 0 ; i < len; i++ ) {
4947 if (userTokens[i] == tntAddr) {
5048 userTokens[i] = userTokens[len - 1 ];
5149 userTokens.pop ();
50+ userHasTNT[user][tntAddr] = false ;
5251 emit TokenUnregistered (user, tntAddr);
5352 break ;
5453 }
0 commit comments