Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added Zupass User Registry #727

Merged
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions contracts/contracts/userRegistry/ZupassUserRegistry.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// 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 {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick but I'd say SemaphoreUserRegistry would be more fitting for what this registry does

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick but I'd say SemaphoreUserRegistry would be more fitting for what this registry does

I'm happy to change the name to SemaphoreUserRegistry. This just means that the registry can be used to integrate with any system that can generate a unique semaphore id, not just by Zupass.


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;
crisgarner marked this conversation as resolved.
Show resolved Hide resolved
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)
crisgarner marked this conversation as resolved.
Show resolved Hide resolved
external
view
returns (bool)
{
return semaphoreIds[_semaphoreId];
}

}