ETH Price: $2,521.46 (+0.25%)

Contract

0x22ee96d6770A233b7d4363f770999331DD7c0fad
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x6060604052545872018-03-14 15:48:202361 days ago1521042500IN
 Create: ENSSubdomainRegistrar
0 ETH0.004752654

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ENSSubdomainRegistrar

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-14
*/

//File: contracts/lib/ens/AbstractENS.sol
pragma solidity ^0.4.15;


interface AbstractENS {
    function owner(bytes32 _node) constant returns (address);
    function resolver(bytes32 _node) constant returns (address);
    function ttl(bytes32 _node) constant returns (uint64);
    function setOwner(bytes32 _node, address _owner);
    function setSubnodeOwner(bytes32 _node, bytes32 label, address _owner);
    function setResolver(bytes32 _node, address _resolver);
    function setTTL(bytes32 _node, uint64 _ttl);

    // Logged when the owner of a node assigns a new owner to a subnode.
    event NewOwner(bytes32 indexed _node, bytes32 indexed _label, address _owner);

    // Logged when the owner of a node transfers ownership to a new account.
    event Transfer(bytes32 indexed _node, address _owner);

    // Logged when the resolver for a node changes.
    event NewResolver(bytes32 indexed _node, address _resolver);

    // Logged when the TTL of a node changes
    event NewTTL(bytes32 indexed _node, uint64 _ttl);
}

//File: contracts/lib/ens/PublicResolver.sol
pragma solidity ^0.4.0;



/**
 * A simple resolver anyone can use; only allows the owner of a node to set its
 * address.
 */
contract PublicResolver {
    bytes4 constant INTERFACE_META_ID = 0x01ffc9a7;
    bytes4 constant ADDR_INTERFACE_ID = 0x3b3b57de;
    bytes4 constant CONTENT_INTERFACE_ID = 0xd8389dc5;
    bytes4 constant NAME_INTERFACE_ID = 0x691f3431;
    bytes4 constant ABI_INTERFACE_ID = 0x2203ab56;
    bytes4 constant PUBKEY_INTERFACE_ID = 0xc8690233;
    bytes4 constant TEXT_INTERFACE_ID = 0x59d1d43c;

    event AddrChanged(bytes32 indexed node, address a);
    event ContentChanged(bytes32 indexed node, bytes32 hash);
    event NameChanged(bytes32 indexed node, string name);
    event ABIChanged(bytes32 indexed node, uint256 indexed contentType);
    event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);
    event TextChanged(bytes32 indexed node, string indexed indexedKey, string key);

    struct PublicKey {
        bytes32 x;
        bytes32 y;
    }

    struct Record {
        address addr;
        bytes32 content;
        string name;
        PublicKey pubkey;
        mapping(string=>string) text;
        mapping(uint256=>bytes) abis;
    }

    AbstractENS ens;
    mapping(bytes32=>Record) records;

    modifier only_owner(bytes32 node) {
        if (ens.owner(node) != msg.sender) throw;
        _;
    }

    /**
     * Constructor.
     * @param ensAddr The ENS registrar contract.
     */
    function PublicResolver(AbstractENS ensAddr) {
        ens = ensAddr;
    }

    /**
     * Returns true if the resolver implements the interface specified by the provided hash.
     * @param interfaceID The ID of the interface to check for.
     * @return True if the contract implements the requested interface.
     */
    function supportsInterface(bytes4 interfaceID) constant returns (bool) {
        return interfaceID == ADDR_INTERFACE_ID ||
               interfaceID == CONTENT_INTERFACE_ID ||
               interfaceID == NAME_INTERFACE_ID ||
               interfaceID == ABI_INTERFACE_ID ||
               interfaceID == PUBKEY_INTERFACE_ID ||
               interfaceID == TEXT_INTERFACE_ID ||
               interfaceID == INTERFACE_META_ID;
    }

    /**
     * Returns the address associated with an ENS node.
     * @param node The ENS node to query.
     * @return The associated address.
     */
    function addr(bytes32 node) constant returns (address ret) {
        ret = records[node].addr;
    }

    /**
     * Sets the address associated with an ENS node.
     * May only be called by the owner of that node in the ENS registry.
     * @param node The node to update.
     * @param addr The address to set.
     */
    function setAddr(bytes32 node, address addr) only_owner(node) {
        records[node].addr = addr;
        AddrChanged(node, addr);
    }

    /**
     * Returns the content hash associated with an ENS node.
     * Note that this resource type is not standardized, and will likely change
     * in future to a resource type based on multihash.
     * @param node The ENS node to query.
     * @return The associated content hash.
     */
    function content(bytes32 node) constant returns (bytes32 ret) {
        ret = records[node].content;
    }

    /**
     * Sets the content hash associated with an ENS node.
     * May only be called by the owner of that node in the ENS registry.
     * Note that this resource type is not standardized, and will likely change
     * in future to a resource type based on multihash.
     * @param node The node to update.
     * @param hash The content hash to set
     */
    function setContent(bytes32 node, bytes32 hash) only_owner(node) {
        records[node].content = hash;
        ContentChanged(node, hash);
    }

    /**
     * Returns the name associated with an ENS node, for reverse records.
     * Defined in EIP181.
     * @param node The ENS node to query.
     * @return The associated name.
     */
    function name(bytes32 node) constant returns (string ret) {
        ret = records[node].name;
    }

    /**
     * Sets the name associated with an ENS node, for reverse records.
     * May only be called by the owner of that node in the ENS registry.
     * @param node The node to update.
     * @param name The name to set.
     */
    function setName(bytes32 node, string name) only_owner(node) {
        records[node].name = name;
        NameChanged(node, name);
    }

    /**
     * Returns the ABI associated with an ENS node.
     * Defined in EIP205.
     * @param node The ENS node to query
     * @param contentTypes A bitwise OR of the ABI formats accepted by the caller.
     * @return contentType The content type of the return value
     * @return data The ABI data
     */
    function ABI(bytes32 node, uint256 contentTypes) constant returns (uint256 contentType, bytes data) {
        var record = records[node];
        for(contentType = 1; contentType <= contentTypes; contentType <<= 1) {
            if ((contentType & contentTypes) != 0 && record.abis[contentType].length > 0) {
                data = record.abis[contentType];
                return;
            }
        }
        contentType = 0;
    }

    /**
     * Sets the ABI associated with an ENS node.
     * Nodes may have one ABI of each content type. To remove an ABI, set it to
     * the empty string.
     * @param node The node to update.
     * @param contentType The content type of the ABI
     * @param data The ABI data.
     */
    function setABI(bytes32 node, uint256 contentType, bytes data) only_owner(node) {
        // Content types must be powers of 2
        if (((contentType - 1) & contentType) != 0) throw;

        records[node].abis[contentType] = data;
        ABIChanged(node, contentType);
    }

    /**
     * Returns the SECP256k1 public key associated with an ENS node.
     * Defined in EIP 619.
     * @param node The ENS node to query
     * @return x, y the X and Y coordinates of the curve point for the public key.
     */
    function pubkey(bytes32 node) constant returns (bytes32 x, bytes32 y) {
        return (records[node].pubkey.x, records[node].pubkey.y);
    }

    /**
     * Sets the SECP256k1 public key associated with an ENS node.
     * @param node The ENS node to query
     * @param x the X coordinate of the curve point for the public key.
     * @param y the Y coordinate of the curve point for the public key.
     */
    function setPubkey(bytes32 node, bytes32 x, bytes32 y) only_owner(node) {
        records[node].pubkey = PublicKey(x, y);
        PubkeyChanged(node, x, y);
    }

    /**
     * Returns the text data associated with an ENS node and key.
     * @param node The ENS node to query.
     * @param key The text data key to query.
     * @return The associated text data.
     */
    function text(bytes32 node, string key) constant returns (string ret) {
        ret = records[node].text[key];
    }

    /**
     * Sets the text data associated with an ENS node and key.
     * May only be called by the owner of that node in the ENS registry.
     * @param node The node to update.
     * @param key The key to set.
     * @param value The text data value to set.
     */
    function setText(bytes32 node, string key, string value) only_owner(node) {
        records[node].text[key] = value;
        TextChanged(node, key, key);
    }
}

//File: contracts/ens/ENSConstants.sol
pragma solidity ^0.4.18;


contract ENSConstants {
    bytes32 constant public ENS_ROOT = bytes32(0);
    bytes32 constant public ETH_TLD_LABEL = keccak256("eth");
    bytes32 constant public ETH_TLD_NODE = keccak256(ENS_ROOT, ETH_TLD_LABEL);
    bytes32 constant public PUBLIC_RESOLVER_LABEL = keccak256("resolver");
    bytes32 constant public PUBLIC_RESOLVER_NODE = keccak256(ETH_TLD_NODE, PUBLIC_RESOLVER_LABEL);
}

//File: contracts/acl/IACL.sol
pragma solidity ^0.4.18;


interface IACL {
    function initialize(address permissionsCreator) public;
    function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);
}

//File: contracts/kernel/IKernel.sol
pragma solidity ^0.4.18;



interface IKernel {
    event SetApp(bytes32 indexed namespace, bytes32 indexed name, bytes32 indexed id, address app);

    function acl() public view returns (IACL);
    function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);

    function setApp(bytes32 namespace, bytes32 name, address app) public returns (bytes32 id);
    function getApp(bytes32 id) public view returns (address);
}
//File: contracts/apps/AppStorage.sol
pragma solidity ^0.4.18;




contract AppStorage {
    IKernel public kernel;
    bytes32 public appId;
    address internal pinnedCode; // used by Proxy Pinned
    uint256 internal initializationBlock; // used by Initializable
    uint256[95] private storageOffset; // forces App storage to start at after 100 slots
    uint256 private offset;
}

//File: contracts/common/Initializable.sol
pragma solidity ^0.4.18;




contract Initializable is AppStorage {
    modifier onlyInit {
        require(initializationBlock == 0);
        _;
    }

    /**
    * @return Block number in which the contract was initialized
    */
    function getInitializationBlock() public view returns (uint256) {
        return initializationBlock;
    }

    /**
    * @dev Function to be called by top level contract after initialization has finished.
    */
    function initialized() internal onlyInit {
        initializationBlock = getBlockNumber();
    }

    /**
    * @dev Returns the current block number.
    *      Using a function rather than `block.number` allows us to easily mock the block number in
    *      tests.
    */
    function getBlockNumber() internal view returns (uint256) {
        return block.number;
    }
}

//File: contracts/evmscript/IEVMScriptExecutor.sol
pragma solidity ^0.4.18;


interface IEVMScriptExecutor {
    function execScript(bytes script, bytes input, address[] blacklist) external returns (bytes);
}

//File: contracts/evmscript/IEVMScriptRegistry.sol
pragma solidity 0.4.18;


contract EVMScriptRegistryConstants {
    bytes32 constant public EVMSCRIPT_REGISTRY_APP_ID = keccak256("evmreg.aragonpm.eth");
    bytes32 constant public EVMSCRIPT_REGISTRY_APP = keccak256(keccak256("app"), EVMSCRIPT_REGISTRY_APP_ID);
}


interface IEVMScriptRegistry {
    function addScriptExecutor(address executor) external returns (uint id);
    function disableScriptExecutor(uint256 executorId) external;

    function getScriptExecutor(bytes script) public view returns (address);
}
//File: contracts/evmscript/ScriptHelpers.sol
pragma solidity 0.4.18;


library ScriptHelpers {
    // To test with JS and compare with actual encoder. Maintaining for reference.
    // t = function() { return IEVMScriptExecutor.at('0x4bcdd59d6c77774ee7317fc1095f69ec84421e49').contract.execScript.getData(...[].slice.call(arguments)).slice(10).match(/.{1,64}/g) }
    // run = function() { return ScriptHelpers.new().then(sh => { sh.abiEncode.call(...[].slice.call(arguments)).then(a => console.log(a.slice(2).match(/.{1,64}/g)) ) }) }
    // This is truly not beautiful but lets no daydream to the day solidity gets reflection features

    function abiEncode(bytes _a, bytes _b, address[] _c) public pure returns (bytes d) {
        return encode(_a, _b, _c);
    }

    function encode(bytes memory _a, bytes memory _b, address[] memory _c) internal pure returns (bytes memory d) {
        // A is positioned after the 3 position words
        uint256 aPosition = 0x60;
        uint256 bPosition = aPosition + 32 * abiLength(_a);
        uint256 cPosition = bPosition + 32 * abiLength(_b);
        uint256 length = cPosition + 32 * abiLength(_c);

        d = new bytes(length);
        assembly {
            // Store positions
            mstore(add(d, 0x20), aPosition)
            mstore(add(d, 0x40), bPosition)
            mstore(add(d, 0x60), cPosition)
        }

        // Copy memory to correct position
        copy(d, getPtr(_a), aPosition, _a.length);
        copy(d, getPtr(_b), bPosition, _b.length);
        copy(d, getPtr(_c), cPosition, _c.length * 32); // 1 word per address
    }

    function abiLength(bytes memory _a) internal pure returns (uint256) {
        // 1 for length +
        // memory words + 1 if not divisible for 32 to offset word
        return 1 + (_a.length / 32) + (_a.length % 32 > 0 ? 1 : 0);
    }

    function abiLength(address[] _a) internal pure returns (uint256) {
        // 1 for length + 1 per item
        return 1 + _a.length;
    }

    function copy(bytes _d, uint256 _src, uint256 _pos, uint256 _length) internal pure {
        uint dest;
        assembly {
            dest := add(add(_d, 0x20), _pos)
        }
        memcpy(dest, _src, _length + 32);
    }

    function getPtr(bytes memory _x) internal pure returns (uint256 ptr) {
        assembly {
            ptr := _x
        }
    }

    function getPtr(address[] memory _x) internal pure returns (uint256 ptr) {
        assembly {
            ptr := _x
        }
    }

    function getSpecId(bytes _script) internal pure returns (uint32) {
        return uint32At(_script, 0);
    }

    function uint256At(bytes _data, uint256 _location) internal pure returns (uint256 result) {
        assembly {
            result := mload(add(_data, add(0x20, _location)))
        }
    }

    function addressAt(bytes _data, uint256 _location) internal pure returns (address result) {
        uint256 word = uint256At(_data, _location);

        assembly {
            result := div(and(word, 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000),
            0x1000000000000000000000000)
        }
    }

    function uint32At(bytes _data, uint256 _location) internal pure returns (uint32 result) {
        uint256 word = uint256At(_data, _location);

        assembly {
            result := div(and(word, 0xffffffff00000000000000000000000000000000000000000000000000000000),
            0x100000000000000000000000000000000000000000000000000000000)
        }
    }

    function locationOf(bytes _data, uint256 _location) internal pure returns (uint256 result) {
        assembly {
            result := add(_data, add(0x20, _location))
        }
    }

    function toBytes(bytes4 _sig) internal pure returns (bytes) {
        bytes memory payload = new bytes(4);
        payload[0] = bytes1(_sig);
        payload[1] = bytes1(_sig << 8);
        payload[2] = bytes1(_sig << 16);
        payload[3] = bytes1(_sig << 24);
        return payload;
    }

    function memcpy(uint _dest, uint _src, uint _len) public pure {
        uint256 src = _src;
        uint256 dest = _dest;
        uint256 len = _len;

        // Copy word-length chunks while possible
        for (; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }

        // Copy remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }
}
//File: contracts/evmscript/EVMScriptRunner.sol
pragma solidity ^0.4.18;








contract EVMScriptRunner is AppStorage, EVMScriptRegistryConstants {
    using ScriptHelpers for bytes;

    function runScript(bytes _script, bytes _input, address[] _blacklist) protectState internal returns (bytes output) {
        // TODO: Too much data flying around, maybe extracting spec id here is cheaper
        address executorAddr = getExecutor(_script);
        require(executorAddr != address(0));

        bytes memory calldataArgs = _script.encode(_input, _blacklist);
        bytes4 sig = IEVMScriptExecutor(0).execScript.selector;

        require(executorAddr.delegatecall(sig, calldataArgs));

        return returnedDataDecoded();
    }

    function getExecutor(bytes _script) public view returns (IEVMScriptExecutor) {
        return IEVMScriptExecutor(getExecutorRegistry().getScriptExecutor(_script));
    }

    // TODO: Internal
    function getExecutorRegistry() internal view returns (IEVMScriptRegistry) {
        address registryAddr = kernel.getApp(EVMSCRIPT_REGISTRY_APP);
        return IEVMScriptRegistry(registryAddr);
    }

    /**
    * @dev copies and returns last's call data. Needs to ABI decode first
    */
    function returnedDataDecoded() internal view returns (bytes ret) {
        assembly {
            let size := returndatasize
            switch size
            case 0 {}
            default {
                ret := mload(0x40) // free mem ptr get
                mstore(0x40, add(ret, add(size, 0x20))) // free mem ptr set
                returndatacopy(ret, 0x20, sub(size, 0x20)) // copy return data
            }
        }
        return ret;
    }

    modifier protectState {
        address preKernel = kernel;
        bytes32 preAppId = appId;
        _; // exec
        require(kernel == preKernel);
        require(appId == preAppId);
    }
}
//File: contracts/acl/ACLSyntaxSugar.sol
pragma solidity 0.4.18;


contract ACLSyntaxSugar {
    function arr() internal pure returns (uint256[] r) {}

    function arr(bytes32 _a) internal pure returns (uint256[] r) {
        return arr(uint256(_a));
    }

    function arr(bytes32 _a, bytes32 _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a) internal pure returns (uint256[] r) {
        return arr(uint256(_a));
    }

    function arr(address _a, address _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a, uint256 _b, uint256 _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), _b, _c);
    }

    function arr(address _a, uint256 _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a, address _b, uint256 _c, uint256 _d, uint256 _e) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), _c, _d, _e);
    }

    function arr(address _a, address _b, address _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), uint256(_c));
    }

    function arr(address _a, address _b, uint256 _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), uint256(_c));
    }

    function arr(uint256 _a) internal pure returns (uint256[] r) {
        r = new uint256[](1);
        r[0] = _a;
    }

    function arr(uint256 _a, uint256 _b) internal pure returns (uint256[] r) {
        r = new uint256[](2);
        r[0] = _a;
        r[1] = _b;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c) internal pure returns (uint256[] r) {
        r = new uint256[](3);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c, uint256 _d) internal pure returns (uint256[] r) {
        r = new uint256[](4);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
        r[3] = _d;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c, uint256 _d, uint256 _e) internal pure returns (uint256[] r) {
        r = new uint256[](5);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
        r[3] = _d;
        r[4] = _e;
    }
}


contract ACLHelpers {
    function decodeParamOp(uint256 _x) internal pure returns (uint8 b) {
        return uint8(_x >> (8 * 30));
    }

    function decodeParamId(uint256 _x) internal pure returns (uint8 b) {
        return uint8(_x >> (8 * 31));
    }

    function decodeParamsList(uint256 _x) internal pure returns (uint32 a, uint32 b, uint32 c) {
        a = uint32(_x);
        b = uint32(_x >> (8 * 4));
        c = uint32(_x >> (8 * 8));
    }
}

//File: contracts/apps/AragonApp.sol
pragma solidity ^0.4.18;







contract AragonApp is AppStorage, Initializable, ACLSyntaxSugar, EVMScriptRunner {
    modifier auth(bytes32 _role) {
        require(canPerform(msg.sender, _role, new uint256[](0)));
        _;
    }

    modifier authP(bytes32 _role, uint256[] params) {
        require(canPerform(msg.sender, _role, params));
        _;
    }

    function canPerform(address _sender, bytes32 _role, uint256[] params) public view returns (bool) {
        bytes memory how; // no need to init memory as it is never used
        if (params.length > 0) {
            uint256 byteLength = params.length * 32;
            assembly {
                how := params // forced casting
                mstore(how, byteLength)
            }
        }
        return address(kernel) == 0 || kernel.hasPermission(_sender, address(this), _role, how);
    }
}

//File: contracts/ens/ENSSubdomainRegistrar.sol
pragma solidity 0.4.18;








contract ENSSubdomainRegistrar is AragonApp, ENSConstants {
    bytes32 constant public CREATE_NAME_ROLE = bytes32(1);
    bytes32 constant public DELETE_NAME_ROLE = bytes32(2);
    bytes32 constant public POINT_ROOTNODE_ROLE = bytes32(3);

    AbstractENS public ens;
    bytes32 public rootNode;

    event NewName(bytes32 indexed node, bytes32 indexed label);
    event DeleteName(bytes32 indexed node, bytes32 indexed label);

    function initialize(AbstractENS _ens, bytes32 _rootNode) onlyInit public {
        initialized();

        // We need ownership to create subnodes
        require(_ens.owner(_rootNode) == address(this));

        ens = _ens;
        rootNode = _rootNode;
    }

    function createName(bytes32 _label, address _owner) auth(CREATE_NAME_ROLE) external returns (bytes32 node) {
        return _createName(_label, _owner);
    }

    function createNameAndPoint(bytes32 _label, address _target) auth(CREATE_NAME_ROLE) external returns (bytes32 node) {
        node = _createName(_label, this);
        _pointToResolverAndResolve(node, _target);
    }

    function deleteName(bytes32 _label) auth(DELETE_NAME_ROLE) external {
        bytes32 node = keccak256(rootNode, _label);

        address currentOwner = ens.owner(node);

        require(currentOwner != address(0)); // fail if deleting unset name

        if (currentOwner != address(this)) { // needs to reclaim ownership so it can set resolver
            ens.setSubnodeOwner(rootNode, _label, this);
        }

        ens.setResolver(node, address(0)); // remove resolver so it ends resolving
        ens.setOwner(node, address(0));

        DeleteName(node, _label);
    }

    function pointRootNode(address _target) auth(POINT_ROOTNODE_ROLE) external {
        _pointToResolverAndResolve(rootNode, _target);
    }

    function _createName(bytes32 _label, address _owner) internal returns (bytes32 node) {
        node = keccak256(rootNode, _label);
        require(ens.owner(node) == address(0)); // avoid name reset

        ens.setSubnodeOwner(rootNode, _label, _owner);

        NewName(node, _label);
    }

    function _pointToResolverAndResolve(bytes32 _node, address _target) internal {
        address publicResolver = getAddr(PUBLIC_RESOLVER_NODE);
        ens.setResolver(_node, publicResolver);

        PublicResolver(publicResolver).setAddr(_node, _target);
    }

    function getAddr(bytes32 node) internal view returns (address) {
        address resolver = ens.resolver(node);
        return PublicResolver(resolver).addr(node);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"POINT_ROOTNODE_ROLE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PUBLIC_RESOLVER_NODE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EVMSCRIPT_REGISTRY_APP_ID","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_label","type":"bytes32"},{"name":"_target","type":"address"}],"name":"createNameAndPoint","outputs":[{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_label","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"createName","outputs":[{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"appId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInitializationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH_TLD_LABEL","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EVMSCRIPT_REGISTRY_APP","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender","type":"address"},{"name":"_role","type":"bytes32"},{"name":"params","type":"uint256[]"}],"name":"canPerform","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ENS_ROOT","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DELETE_NAME_ROLE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ens","type":"address"},{"name":"_rootNode","type":"bytes32"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PUBLIC_RESOLVER_LABEL","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kernel","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"}],"name":"pointRootNode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_label","type":"bytes32"}],"name":"deleteName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_script","type":"bytes"}],"name":"getExecutor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rootNode","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH_TLD_NODE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CREATE_NAME_ROLE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"label","type":"bytes32"}],"name":"NewName","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"label","type":"bytes32"}],"name":"DeleteName","type":"event"}]

6060604052341561000f57600080fd5b6110c68061001e6000396000f30060606040526004361061010e5763ffffffff60e060020a600035041663307482cf81146101135780633f15457f146101385780633f82e2c61461016757806360b1e0571461017a57806365b0bc851461018d5780636b62cb1b146101af57806380afdea8146101d15780638b3dd749146101e45780639b227a97146101f75780639b3fdf4c1461020a578063a1658fad1461021d578063a9bf1c9f14610294578063bdbf7d4c146102a7578063be13f47c146102ba578063c84b1ce7146102de578063d4aae0c4146102f1578063db60693114610304578063dc371e5414610323578063f92a79ff14610339578063faff50a81461038a578063fdee38a91461039d578063fef47e38146103b0575b600080fd5b341561011e57600080fd5b6101266103c3565b60405190815260200160405180910390f35b341561014357600080fd5b61014b6103c8565b604051600160a060020a03909116815260200160405180910390f35b341561017257600080fd5b6101266103d7565b341561018557600080fd5b610126610455565b341561019857600080fd5b610126600435600160a060020a0360243516610489565b34156101ba57600080fd5b610126600435600160a060020a03602435166104de565b34156101dc57600080fd5b610126610527565b34156101ef57600080fd5b61012661052d565b341561020257600080fd5b610126610533565b341561021557600080fd5b610126610550565b341561022857600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496506105cc95505050505050565b604051901515815260200160405180910390f35b341561029f57600080fd5b61012661070a565b34156102b257600080fd5b61012661070f565b34156102c557600080fd5b6102dc600160a060020a0360043516602435610714565b005b34156102e957600080fd5b6101266107e5565b34156102fc57600080fd5b61014b610819565b341561030f57600080fd5b6102dc600160a060020a0360043516610828565b341561032e57600080fd5b6102dc60043561086e565b341561034457600080fd5b61014b60046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610aec95505050505050565b341561039557600080fd5b610126610bc8565b34156103a857600080fd5b610126610bce565b34156103bb57600080fd5b610126610c04565b600381565b606454600160a060020a031681565b600060405160eb60020a620cae8d028152600301604051809103902060405191825260208201526040908101905180910390206040517f7265736f6c76657200000000000000000000000000000000000000000000000081526008016040518091039020604051918252602082015260409081019051809103902081565b6040517f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b600060016104b63382846040518059106104a05750595b90808252806020026020018201604052506105cc565b15156104c157600080fd5b6104cb8430610c09565b91506104d78284610d5d565b5092915050565b6000600161050a3382846040518059106104a057505990808252806020026020018201604052506105cc565b151561051557600080fd5b61051f8484610c09565b949350505050565b60015481565b60035490565b60405160eb60020a620cae8d028152600301604051809103902081565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b60006105d6611088565b600080845111156105ef57835160200290508391508082525b600054600160a060020a03161580610700575060008054600160a060020a03169063fdef91069088903090899087906040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b8381101561069657808201518382015260200161067e565b50505050905090810190601f1680156106c35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15156106e457600080fd5b6102c65a03f115156106f557600080fd5b505050604051805190505b9695505050505050565b600081565b600281565b6003541561072157600080fd5b610729610ebd565b30600160a060020a031682600160a060020a03166302571be38360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561078257600080fd5b6102c65a03f1151561079357600080fd5b50505060405180519050600160a060020a03161415156107b257600080fd5b6064805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039390931692909217909155606555565b6040517f7265736f6c7665720000000000000000000000000000000000000000000000008152600801604051809103902081565b600054600160a060020a031681565b6003610853338260006040518059106104a057505990808252806020026020018201604052506105cc565b151561085e57600080fd5b61086a60655483610d5d565b5050565b600080600261089b3382846040518059106104a057505990808252806020026020018201604052506105cc565b15156108a657600080fd5b60655484604051918252602082015260409081019051908190039020606454909350600160a060020a03166302571be38460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561091657600080fd5b6102c65a03f1151561092757600080fd5b5050506040518051925050600160a060020a038216151561094757600080fd5b30600160a060020a031682600160a060020a03161415156109dd57606454606554600160a060020a03909116906306ab592390863060405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b15156109c857600080fd5b6102c65a03f115156109d957600080fd5b5050505b606454600160a060020a0316631896f70a84600060405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515610a3557600080fd5b6102c65a03f11515610a4657600080fd5b5050606454600160a060020a03169050635b0fc9c384600060405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515610aa257600080fd5b6102c65a03f11515610ab357600080fd5b508591508490507f49a4cd9bb38e10e402c44a680c5e13f710666ed683cb9cbbc131f7dc9f8b9d6060405160405180910390a350505050565b6000610af6610ed7565b600160a060020a03166304bf2a7f836000604051602001526040518263ffffffff1660e060020a0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b5d578082015183820152602001610b45565b50505050905090810190601f168015610b8a5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1515610ba857600080fd5b6102c65a03f11515610bb957600080fd5b50505060405180519392505050565b60655481565b600060405160eb60020a620cae8d0281526003016040518091039020604051918252602082015260409081019051809103902081565b600181565b600060655483604051918252602082015260409081019051908190039020606454909150600090600160a060020a03166302571be383836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c7d57600080fd5b6102c65a03f11515610c8e57600080fd5b50505060405180519050600160a060020a0316141515610cad57600080fd5b606454606554600160a060020a03909116906306ab592390858560405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b1515610d1357600080fd5b6102c65a03f11515610d2457600080fd5b508491508290507f8f858576a6066f5ecb4d2f49d40fac9db317ff8d5f7610d58b616b657d7044cf60405160405180910390a392915050565b6000610de18160405160eb60020a620cae8d028152600301604051809103902060405191825260208201526040908101905180910390206040517f7265736f6c766572000000000000000000000000000000000000000000000000815260080160405180910390206040519182526020820152604090810190518091039020610fa3565b606454909150600160a060020a0316631896f70a848360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515610e3b57600080fd5b6102c65a03f11515610e4c57600080fd5b50505080600160a060020a031663d5fa2b00848460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515610ea457600080fd5b6102c65a03f11515610eb557600080fd5b505050505050565b60035415610eca57600080fd5b610ed2611084565b600355565b600080548190600160a060020a03166342c71f1d6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ba857600080fd5b6064546000908190600160a060020a0316630178b8bf84836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ff857600080fd5b6102c65a03f1151561100957600080fd5b5050506040518051915050600160a060020a038116633b3b57de8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561106357600080fd5b6102c65a03f1151561107457600080fd5b5050506040518051949350505050565b4390565b602060405190810160405260008152905600a165627a7a723058207961894415363ad3f851a9bafa8bdd03868a99660c59308ecacab5a5fa867d540029

Deployed Bytecode

0x60606040526004361061010e5763ffffffff60e060020a600035041663307482cf81146101135780633f15457f146101385780633f82e2c61461016757806360b1e0571461017a57806365b0bc851461018d5780636b62cb1b146101af57806380afdea8146101d15780638b3dd749146101e45780639b227a97146101f75780639b3fdf4c1461020a578063a1658fad1461021d578063a9bf1c9f14610294578063bdbf7d4c146102a7578063be13f47c146102ba578063c84b1ce7146102de578063d4aae0c4146102f1578063db60693114610304578063dc371e5414610323578063f92a79ff14610339578063faff50a81461038a578063fdee38a91461039d578063fef47e38146103b0575b600080fd5b341561011e57600080fd5b6101266103c3565b60405190815260200160405180910390f35b341561014357600080fd5b61014b6103c8565b604051600160a060020a03909116815260200160405180910390f35b341561017257600080fd5b6101266103d7565b341561018557600080fd5b610126610455565b341561019857600080fd5b610126600435600160a060020a0360243516610489565b34156101ba57600080fd5b610126600435600160a060020a03602435166104de565b34156101dc57600080fd5b610126610527565b34156101ef57600080fd5b61012661052d565b341561020257600080fd5b610126610533565b341561021557600080fd5b610126610550565b341561022857600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496506105cc95505050505050565b604051901515815260200160405180910390f35b341561029f57600080fd5b61012661070a565b34156102b257600080fd5b61012661070f565b34156102c557600080fd5b6102dc600160a060020a0360043516602435610714565b005b34156102e957600080fd5b6101266107e5565b34156102fc57600080fd5b61014b610819565b341561030f57600080fd5b6102dc600160a060020a0360043516610828565b341561032e57600080fd5b6102dc60043561086e565b341561034457600080fd5b61014b60046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610aec95505050505050565b341561039557600080fd5b610126610bc8565b34156103a857600080fd5b610126610bce565b34156103bb57600080fd5b610126610c04565b600381565b606454600160a060020a031681565b600060405160eb60020a620cae8d028152600301604051809103902060405191825260208201526040908101905180910390206040517f7265736f6c76657200000000000000000000000000000000000000000000000081526008016040518091039020604051918252602082015260409081019051809103902081565b6040517f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b600060016104b63382846040518059106104a05750595b90808252806020026020018201604052506105cc565b15156104c157600080fd5b6104cb8430610c09565b91506104d78284610d5d565b5092915050565b6000600161050a3382846040518059106104a057505990808252806020026020018201604052506105cc565b151561051557600080fd5b61051f8484610c09565b949350505050565b60015481565b60035490565b60405160eb60020a620cae8d028152600301604051809103902081565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b60006105d6611088565b600080845111156105ef57835160200290508391508082525b600054600160a060020a03161580610700575060008054600160a060020a03169063fdef91069088903090899087906040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b8381101561069657808201518382015260200161067e565b50505050905090810190601f1680156106c35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15156106e457600080fd5b6102c65a03f115156106f557600080fd5b505050604051805190505b9695505050505050565b600081565b600281565b6003541561072157600080fd5b610729610ebd565b30600160a060020a031682600160a060020a03166302571be38360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561078257600080fd5b6102c65a03f1151561079357600080fd5b50505060405180519050600160a060020a03161415156107b257600080fd5b6064805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039390931692909217909155606555565b6040517f7265736f6c7665720000000000000000000000000000000000000000000000008152600801604051809103902081565b600054600160a060020a031681565b6003610853338260006040518059106104a057505990808252806020026020018201604052506105cc565b151561085e57600080fd5b61086a60655483610d5d565b5050565b600080600261089b3382846040518059106104a057505990808252806020026020018201604052506105cc565b15156108a657600080fd5b60655484604051918252602082015260409081019051908190039020606454909350600160a060020a03166302571be38460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561091657600080fd5b6102c65a03f1151561092757600080fd5b5050506040518051925050600160a060020a038216151561094757600080fd5b30600160a060020a031682600160a060020a03161415156109dd57606454606554600160a060020a03909116906306ab592390863060405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b15156109c857600080fd5b6102c65a03f115156109d957600080fd5b5050505b606454600160a060020a0316631896f70a84600060405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515610a3557600080fd5b6102c65a03f11515610a4657600080fd5b5050606454600160a060020a03169050635b0fc9c384600060405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515610aa257600080fd5b6102c65a03f11515610ab357600080fd5b508591508490507f49a4cd9bb38e10e402c44a680c5e13f710666ed683cb9cbbc131f7dc9f8b9d6060405160405180910390a350505050565b6000610af6610ed7565b600160a060020a03166304bf2a7f836000604051602001526040518263ffffffff1660e060020a0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b5d578082015183820152602001610b45565b50505050905090810190601f168015610b8a5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1515610ba857600080fd5b6102c65a03f11515610bb957600080fd5b50505060405180519392505050565b60655481565b600060405160eb60020a620cae8d0281526003016040518091039020604051918252602082015260409081019051809103902081565b600181565b600060655483604051918252602082015260409081019051908190039020606454909150600090600160a060020a03166302571be383836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c7d57600080fd5b6102c65a03f11515610c8e57600080fd5b50505060405180519050600160a060020a0316141515610cad57600080fd5b606454606554600160a060020a03909116906306ab592390858560405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b1515610d1357600080fd5b6102c65a03f11515610d2457600080fd5b508491508290507f8f858576a6066f5ecb4d2f49d40fac9db317ff8d5f7610d58b616b657d7044cf60405160405180910390a392915050565b6000610de18160405160eb60020a620cae8d028152600301604051809103902060405191825260208201526040908101905180910390206040517f7265736f6c766572000000000000000000000000000000000000000000000000815260080160405180910390206040519182526020820152604090810190518091039020610fa3565b606454909150600160a060020a0316631896f70a848360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515610e3b57600080fd5b6102c65a03f11515610e4c57600080fd5b50505080600160a060020a031663d5fa2b00848460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515610ea457600080fd5b6102c65a03f11515610eb557600080fd5b505050505050565b60035415610eca57600080fd5b610ed2611084565b600355565b600080548190600160a060020a03166342c71f1d6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ba857600080fd5b6064546000908190600160a060020a0316630178b8bf84836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ff857600080fd5b6102c65a03f1151561100957600080fd5b5050506040518051915050600160a060020a038116633b3b57de8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561106357600080fd5b6102c65a03f1151561107457600080fd5b5050506040518051949350505050565b4390565b602060405190810160405260008152905600a165627a7a723058207961894415363ad3f851a9bafa8bdd03868a99660c59308ecacab5a5fa867d540029

Swarm Source

bzzr://7961894415363ad3f851a9bafa8bdd03868a99660c59308ecacab5a5fa867d54

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.