Skip to Content

@cfxdevkit/compiler


@cfxdevkit/compiler / REGISTRY_SOURCE

Variable: REGISTRY_SOURCE

const REGISTRY_SOURCE: ”// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\n/**\n * @title Registry\n * @notice A name-service-style registry. Any account can register a unique\n * human-readable name and point it to an address (or any string of\n * metadata). Teaches: keccak256 hashing, mapping lookups, require.\n */\ncontract Registry {\n struct Record {\n address owner;\n string value; // arbitrary value, e.g. an address string or URL\n uint256 createdAt;\n uint256 updatedAt;\n }\n\n mapping(bytes32 => Record) private _records; // keccak256(name) → Record\n mapping(address => string[]) private _ownedNames;\n\n event NameRegistered(string indexed name, address indexed owner, string value);\n event NameUpdated(string indexed name, address indexed owner, string newValue);\n event NameReleased(string indexed name, address indexed owner);\n\n modifier onlyNameOwner(string calldata name) {\n require(_records[_key(name)].owner == msg.sender, “Registry: not the name owner”);\n _;\n }\n\n /// @notice Register `name` pointing to `value`. Name must not already be taken.\n function register(string calldata name, string calldata value) external {\n require(bytes(name).length > 0, “Registry: empty name”);\n bytes32 key = _key(name);\n require(_records[key].owner == address(0), “Registry: name already taken”);\n _records[key] = Record({\n owner: msg.sender,\n value: value,\n createdAt: block.timestamp,\n updatedAt: block.timestamp\n });\n _ownedNames[msg.sender].push(name);\n emit NameRegistered(name, msg.sender, value);\n }\n\n /// @notice Update the value stored under a name you own.\n function update(string calldata name, string calldata newValue)\n external onlyNameOwner(name)\n {\n bytes32 key = _key(name);\n _records[key].value = newValue;\n _records[key].updatedAt = block.timestamp;\n emit NameUpdated(name, msg.sender, newValue);\n }\n\n /// @notice Release a name you own, making it available for re-registration.\n function release(string calldata name) external onlyNameOwner(name) {\n bytes32 key = _key(name);\n emit NameReleased(name, msg.sender);\n delete _records[key];\n }\n\n /// @notice Resolve a name to its stored value.\n function resolve(string calldata name) external view returns (string memory) {\n return _records[_key(name)].value;\n }\n\n /// @notice Return the full record for a name.\n function lookup(string calldata name)\n external view\n returns (address nameOwner, string memory value, uint256 createdAt, uint256 updatedAt)\n {\n Record storage r = _records[_key(name)];\n return (r.owner, r.value, r.createdAt, r.updatedAt);\n }\n\n /// @notice Check whether a name is available (not yet registered).\n function isAvailable(string calldata name) external view returns (bool) {\n return _records[_key(name)].owner == address(0);\n }\n\n /// @notice Return all names registered by `account`.\n function namesOf(address account) external view returns (string[] memory) {\n return _ownedNames[account];\n }\n\n function _key(string calldata name) private pure returns (bytes32) {\n return keccak256(bytes(name));\n }\n}”

Defined in: templates/registry.ts:13