From 5356ae7c783061975109a6dd55218e4adcfb6489 Mon Sep 17 00:00:00 2001 From: Crisgarner <@crisgarner> Date: Fri, 1 Mar 2024 18:24:18 -0600 Subject: [PATCH 1/4] added Zupass User Registry --- .../userRegistry/ZupassUserRegistry.sol | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 contracts/contracts/userRegistry/ZupassUserRegistry.sol diff --git a/contracts/contracts/userRegistry/ZupassUserRegistry.sol b/contracts/contracts/userRegistry/ZupassUserRegistry.sol new file mode 100644 index 000000000..0d7165bc9 --- /dev/null +++ b/contracts/contracts/userRegistry/ZupassUserRegistry.sol @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-3.0 + +pragma solidity ^0.6.12; + +import '@openzeppelin/contracts/access/Ownable.sol'; + +import './IUserRegistry.sol'; + +/** + * @dev A simple user registry managed by a trusted entity. + */ +contract ZupassUserRegistry is Ownable, IUserRegistry { + + mapping(address => bool) private users; + mapping(uint256 => bool) private semaphoreIds; + mapping(address => uint256) private userTosemaphoreId; + + // Events + event UserAdded(address indexed _user, uint256 _semaphoreId); + event UserRemoved(address indexed _user); + + /** + * @dev Add verified unique user to the registry. + */ + function addUser(address _user, uint256 _semaphoreId) + external + onlyOwner + { + require(_user != address(0), 'UserRegistry: User address is zero'); + require(!users[_user], 'UserRegistry: User already verified'); + users[_user] = true; + semaphoreIds[_semaphoreId] = true; + userTosemaphoreId[_user] = _semaphoreId; + emit UserAdded(_user, _semaphoreId); + } + + /** + * @dev Remove user from the registry. + */ + function removeUser(address _user) + external + onlyOwner + { + require(users[_user], 'UserRegistry: User is not in the registry'); + uint256 _semaphoreId = userTosemaphoreId[_user]; + delete users[_user]; + delete semaphoreIds[_semaphoreId]; + delete userTosemaphoreId[_user]; + emit UserRemoved(_user); + } + + /** + * @dev Check if the user is verified. + */ + function isVerifiedUser(address _user) + override + external + view + returns (bool) + { + return users[_user]; + } + + /** + * @dev Check if the semaphore Id is verified. + */ + function isVerifiedSemaphoreId(uint256 _semaphoreId) + override + external + view + returns (bool) + { + return semaphoreIds[_semaphoreId]; + } + +} From 23f5c481c223fd10541211a95b6561c1b46e85f5 Mon Sep 17 00:00:00 2001 From: Crisgarner <@crisgarner> Date: Fri, 1 Mar 2024 18:32:08 -0600 Subject: [PATCH 2/4] removed override --- contracts/contracts/userRegistry/ZupassUserRegistry.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/contracts/userRegistry/ZupassUserRegistry.sol b/contracts/contracts/userRegistry/ZupassUserRegistry.sol index 0d7165bc9..05f07c863 100644 --- a/contracts/contracts/userRegistry/ZupassUserRegistry.sol +++ b/contracts/contracts/userRegistry/ZupassUserRegistry.sol @@ -65,7 +65,6 @@ contract ZupassUserRegistry is Ownable, IUserRegistry { * @dev Check if the semaphore Id is verified. */ function isVerifiedSemaphoreId(uint256 _semaphoreId) - override external view returns (bool) From c5a5afa79b0b596a1da2e7b2261e09755228b174 Mon Sep 17 00:00:00 2001 From: Crisgarner <@crisgarner> Date: Fri, 1 Mar 2024 18:44:59 -0600 Subject: [PATCH 3/4] added verification on addUser --- contracts/contracts/userRegistry/ZupassUserRegistry.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/contracts/userRegistry/ZupassUserRegistry.sol b/contracts/contracts/userRegistry/ZupassUserRegistry.sol index 05f07c863..d15f21506 100644 --- a/contracts/contracts/userRegistry/ZupassUserRegistry.sol +++ b/contracts/contracts/userRegistry/ZupassUserRegistry.sol @@ -28,6 +28,7 @@ contract ZupassUserRegistry is Ownable, IUserRegistry { { require(_user != address(0), 'UserRegistry: User address is zero'); require(!users[_user], 'UserRegistry: User already verified'); + require(!semaphoreIds[_semaphoreId], 'UserRegistry: Semaphore Id already registred' ); users[_user] = true; semaphoreIds[_semaphoreId] = true; userTosemaphoreId[_user] = _semaphoreId; From 69a6919b58bb601a611850740a3fbdd9f7306be3 Mon Sep 17 00:00:00 2001 From: Crisgarner <@crisgarner> Date: Fri, 1 Mar 2024 18:59:36 -0600 Subject: [PATCH 4/4] fixed typo + check if semaphoreId not zero --- contracts/contracts/userRegistry/ZupassUserRegistry.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/contracts/userRegistry/ZupassUserRegistry.sol b/contracts/contracts/userRegistry/ZupassUserRegistry.sol index d15f21506..7a3a8a9ef 100644 --- a/contracts/contracts/userRegistry/ZupassUserRegistry.sol +++ b/contracts/contracts/userRegistry/ZupassUserRegistry.sol @@ -27,8 +27,9 @@ contract ZupassUserRegistry is Ownable, IUserRegistry { onlyOwner { require(_user != address(0), 'UserRegistry: User address is zero'); + require(_semaphoreId != 0, 'UserRegistry: Semaphore Id is zero'); require(!users[_user], 'UserRegistry: User already verified'); - require(!semaphoreIds[_semaphoreId], 'UserRegistry: Semaphore Id already registred' ); + require(!semaphoreIds[_semaphoreId], 'UserRegistry: Semaphore Id already registered' ); users[_user] = true; semaphoreIds[_semaphoreId] = true; userTosemaphoreId[_user] = _semaphoreId;