-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTipsnameserver.sol
More file actions
42 lines (34 loc) · 1.47 KB
/
Tipsnameserver.sol
File metadata and controls
42 lines (34 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
cat > ~/tips-ecosystem/contracts/TipsNameService.sol << 'EOF'
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/access/Ownable.sol";
/**
* @title TipsNameService
* @dev Human-readable name registration for addresses
*/
contract TipsNameService is Ownable {
mapping(string => address) private nameToAddress;
mapping(address => string) private addressToName;
event NameRegistered(string indexed name, address indexed owner, uint256 timestamp);
constructor() Ownable() {}
function registerName(string calldata _name) external {
require(bytes(_name).length >= 3, "Name too short");
require(bytes(_name).length <= 20, "Name too long");
require(bytes(addressToName[msg.sender]) == 0, "Address already has name");
require(nameToAddress[_name] == address(0), "Name already taken");
addressToName[msg.sender] = _name;
nameToAddress[_name] = msg.sender;
emit NameRegistered(_name, msg.sender, block.timestamp);
}
function resolve(string calldata _name) external view returns (address) {
address target = nameToAddress[_name];
require(target != address(0), "Name not found");
return target;
}
function lookup(address _addr) external view returns (string memory) {
string memory name = addressToName[_addr];
require(bytes(name).length > 0, "No name found");
return name;
}
}
EOF