Skip to content

Instantly share code, notes, and snippets.

@bijeebuss
Created June 13, 2018 17:36
Show Gist options
  • Save bijeebuss/38b728d4c2c4928965eb4990c678b69a to your computer and use it in GitHub Desktop.
Save bijeebuss/38b728d4c2c4928965eb4990c678b69a to your computer and use it in GitHub Desktop.
contract AccountRegistry is Ownable {
mapping(address => bool) public accounts;
mapping(address => bool) public invites;
address public registryAdmin;
event AccountCreated(address indexed newUser);
event Invite(address indexed newUser);
function AccountRegistry() public {
accounts[owner] = true;
registryAdmin = owner;
}
function setRegistryAdmin(address _newRegistryAdmin) public onlyOwner nonZero(_newRegistryAdmin) {
registryAdmin = _newRegistryAdmin;
}
function createAccount(address _newUser) public onlyRegistryAdmin {
require(!accounts[_newUser]);
createAccountFor(_newUser);
}
function createAccountFor(address _newUser) private {
accounts[_newUser] = true;
emit AccountCreated(_newUser);
}
function inviteUser(address _newUser) public nonZero(_newUser) {
requie(accounts[msg.sender]);
require(!accounts[_newUser]);
requie(!invites[_newUser]);
invites[_newUser] = true;
emit Invite(_newUser);
}
function acceptInvite() public {
require(invites[msg.sender]);
require(!accounts[msg.sender]);
createAccountFor(msg.sender);
}
modifier nonZero(address _address) {
require(_address != 0);
_;
}
modifier onlyRegistryAdmin {
require(msg.sender == registryAdmin);
_;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment