mapping(bytes32=>Record) records;
event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);
event Transfer(bytes32 indexed node, address owner);
event NewResolver(bytes32 indexed node, address resolver);
modifier only_owner(bytes32 node) {
if(records[node].owner != msg.sender) throw;
function ENS(address owner) {
records[0].owner = owner;
function owner(bytes32 node) constant returns (address) {
return records[node].owner;
function resolver(bytes32 node) constant returns (address) {
return records[node].resolver;
function ttl(bytes32 node) constant returns (uint64) {
return records[node].ttl;
function setOwner(bytes32 node, address owner) only_owner(node) {
records[node].owner = owner;
function setSubnodeOwner(bytes32 node, bytes32 label, address owner) only_owner(node) {
var subnode = sha3(node, label);
NewOwner(node, label, owner);
records[subnode].owner = owner;
function setResolver(bytes32 node, address resolver) only_owner(node) {
NewResolver(node, resolver);
records[node].resolver = resolver;
function setTTL(bytes32 node, uint64 ttl) only_owner(node) {