pragma solidity ^0.4.18; import './ENS.sol'; import './Resolver.sol'; /** * A registrar that allocates subdomains to the first person to claim them. */ contract FIFSRegistrar { ENS ens; bytes32 rootNode; modifier only_owner(bytes32 subnode) { bytes32 node = keccak256(abi.encodePacked(rootNode, subnode)); address currentOwner = ens.owner(node); require(currentOwner == 0 || currentOwner == msg.sender); _; } /** * Constructor. * @param ensAddr The address of the ENS registry. * @param node The node that this registrar administers. */ constructor(ENS ensAddr, bytes32 node) public { ens = ensAddr; rootNode = node; } /** * Register a name, or change the owner of an existing registration. * @param subnode The hash of the label to register. * @param owner The address of the new owner. */ function register(bytes32 subnode, address owner) public only_owner(subnode) { ens.setSubnodeOwner(rootNode, subnode, owner); } }