pragma solidity >=0.4.22 <0.7.0; contract uBloggerRegistry { mapping(address => string) public address2Name; mapping(string => address) public name2Address; int256 numOfAccounts; address admin; bool registrationDisabled; constructor () public { numOfAccounts = 0; admin = msg.sender; registrationDisabled = false; } function registerAccount(string memory accountName) public returns (int result) { if (registrationDisabled == true) { // Registration is disabled. result = -1; }else if ( bytes(accountName).length == 0 || bytes(accountName).length > 10) { // length of the accountName is invalid result = -2; } else if (bytes(address2Name[msg.sender]).length != 0 ) { // msg.sender already has a name registered result = -3; } else if (name2Address[accountName] != address(0) ) { // accountName is already taken result = -4; } else { address2Name[msg.sender] = accountName; name2Address[accountName] = msg.sender; numOfAccounts++; result = 0; } } function deleteAccount() public returns (int result) { if (bytes(address2Name[msg.sender]).length != 0 ) { string memory _accountName = address2Name[msg.sender]; delete address2Name[msg.sender]; delete name2Address[_accountName]; numOfAccounts -= 1; result = 0; } else { // User does not have an account registered result = -1; } } function getNumOfAccounts() public view returns (int result) { result = numOfAccounts; } function openRegistrations() public returns (int result) { if (admin == msg.sender) { registrationDisabled = false; } else { result = -1; } } function closeRegistrations() public returns (int result) { if (admin == msg.sender) { registrationDisabled = true; } else { result = -1; } } function getAdmin() public view returns(address _address) { _address = admin; } function getAccountName(address _address) public view returns(string memory _name) { _name = address2Name[_address]; } }