Contract 0x6f8F96A566663C1d4fEe70edD37E9b62Fe39dE5D

Contract Overview

Balance:
0 Ether
Txn Hash
Method
Block
From
To
Value
0xc0a098b6c9b0d27f6ff63addd46413b5834ccbb126c5655a66caa86c41024a59Mint Child97759422021-12-08 0:23:06210 days 19 hrs ago0xed2c996a0ecdf653ce4514d5b2c4f52df3f837a5 IN  0x6f8f96a566663c1d4fee70edd37e9b62fe39de5d0 Ether0.00002759 1.00013482
0xc391c02a64145b66ddf0a567825a85a12fa543ab0b94ba404f5461f6e91e91caAdd Whitelisted97300982021-11-30 1:14:55218 days 18 hrs ago0x685ff12fb38900471eaac00b7089673c4d1db6cc IN  0x6f8f96a566663c1d4fee70edd37e9b62fe39de5d0 Ether0.00002454 1.00000001
0x014750fc5eeedc87ccd573824c2d19125f0876235a5177afc09cde0ca8cf6e08Bulk Add Whiteli...74841112020-11-03 16:11:31610 days 3 hrs ago0x3c45a6935d3d2eb9d1e348faafca78bdd6ae0906 IN  0x6f8f96a566663c1d4fee70edd37e9b62fe39de5d0 Ether0.0028660420
0xac846ae0d8dc4340d481d9c7d46668918f76ed1f24a5783f143c5756f4b65f3cAdd Whitelist Ad...74841082020-11-03 16:10:46610 days 3 hrs ago0x3c45a6935d3d2eb9d1e348faafca78bdd6ae0906 IN  0x6f8f96a566663c1d4fee70edd37e9b62fe39de5d0 Ether0.000926620
0xc3d1a3fd8702bbffb5a23e27fc4b8fb89981ec005566b466e24a52cca083504dAdd Whitelist Ad...74841052020-11-03 16:10:01610 days 3 hrs ago0x3c45a6935d3d2eb9d1e348faafca78bdd6ae0906 IN  0x6f8f96a566663c1d4fee70edd37e9b62fe39de5d0 Ether0.000926620
0x262b3a25fa2774c57f1b202f012b06318b5cabbefcee7b466d017e8d49966c7f0x6080604074840982020-11-03 16:08:16610 days 3 hrs ago0x3c45a6935d3d2eb9d1e348faafca78bdd6ae0906 IN  Create: DomainZoneController0 Ether0.0311886620
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DomainZoneController

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
No with 200 runs

Other Settings:
petersburg EvmVersion
File 1 of 10 : IRegistry.sol
pragma solidity 0.5.12;

import "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol";

contract IRegistry is IERC721Metadata {

    event NewURI(uint256 indexed tokenId, string uri);

    event NewURIPrefix(string prefix);

    event Resolve(uint256 indexed tokenId, address indexed to);

    event Sync(address indexed resolver, uint256 indexed updateId, uint256 indexed tokenId);

    /**
     * @dev Controlled function to set the token URI Prefix for all tokens.
     * @param prefix string URI to assign
     */
    function controlledSetTokenURIPrefix(string calldata prefix) external;

    /**
     * @dev Returns whether the given spender can transfer a given token ID.
     * @param spender address of the spender to query
     * @param tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     * is an operator of the owner, or is the owner of the token
     */
    function isApprovedOrOwner(address spender, uint256 tokenId) external view returns (bool);

    /**
     * @dev Mints a new a child token.
     * Calculates child token ID using a namehash function.
     * Requires the msg.sender to be the owner, approved, or operator of tokenId.
     * Requires the token not exist.
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the parent token
     * @param label subdomain label of the child token ID
     */
    function mintChild(address to, uint256 tokenId, string calldata label) external;

    /**
     * @dev Controlled function to mint a given token ID.
     * Requires the msg.sender to be controller.
     * Requires the token ID to not exist.
     * @param to address the given token ID will be minted to
     * @param label string that is a subdomain
     * @param tokenId uint256 ID of the parent token
     */
    function controlledMintChild(address to, uint256 tokenId, string calldata label) external;

    /**
     * @dev Transfers the ownership of a child token ID to another address.
     * Calculates child token ID using a namehash function.
     * Requires the msg.sender to be the owner, approved, or operator of tokenId.
     * Requires the token already exist.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     * @param label subdomain label of the child token ID
     */
    function transferFromChild(address from, address to, uint256 tokenId, string calldata label) external;

    /**
     * @dev Controlled function to transfers the ownership of a token ID to
     * another address.
     * Requires the msg.sender to be controller.
     * Requires the token already exist.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function controlledTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Safely transfers the ownership of a child token ID to another address.
     * Calculates child token ID using a namehash function.
     * Implements a ERC721Reciever check unlike transferFromChild.
     * Requires the msg.sender to be the owner, approved, or operator of tokenId.
     * Requires the token already exist.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 parent ID of the token to be transferred
     * @param label subdomain label of the child token ID
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFromChild(address from, address to, uint256 tokenId, string calldata label, bytes calldata _data) external;

    /// Shorthand for calling the above ^^^ safeTransferFromChild function with an empty _data parameter. Similar to ERC721.safeTransferFrom.
    function safeTransferFromChild(address from, address to, uint256 tokenId, string calldata label) external;

    /**
     * @dev Controlled frunction to safely transfers the ownership of a token ID
     * to another address.
     * Implements a ERC721Reciever check unlike controlledSafeTransferFrom.
     * Requires the msg.sender to be controller.
     * Requires the token already exist.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 parent ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function controlledSafeTransferFrom(address from, address to, uint256 tokenId, bytes calldata _data) external;

    /**
     * @dev Burns a child token ID.
     * Calculates child token ID using a namehash function.
     * Requires the msg.sender to be the owner, approved, or operator of tokenId.
     * Requires the token already exist.
     * @param tokenId uint256 ID of the token to be transferred
     * @param label subdomain label of the child token ID
     */
    function burnChild(uint256 tokenId, string calldata label) external;

    /**
     * @dev Controlled function to burn a given token ID.
     * Requires the msg.sender to be controller.
     * Requires the token already exist.
     * @param tokenId uint256 ID of the token to be burned
     */
    function controlledBurn(uint256 tokenId) external;

    /**
     * @dev Sets the resolver of a given token ID to another address.
     * Requires the msg.sender to be the owner, approved, or operator.
     * @param to address the given token ID will resolve to
     * @param tokenId uint256 ID of the token to be transferred
     */
    function resolveTo(address to, uint256 tokenId) external;

    /**
     * @dev Gets the resolver of the specified token ID.
     * @param tokenId uint256 ID of the token to query the resolver of
     * @return address currently marked as the resolver of the given token ID
     */
    function resolverOf(uint256 tokenId) external view returns (address);

    /**
     * @dev Controlled function to sets the resolver of a given token ID.
     * Requires the msg.sender to be controller.
     * @param to address the given token ID will resolve to
     * @param tokenId uint256 ID of the token to be transferred
     */
    function controlledResolveTo(address to, uint256 tokenId) external;

    /**
     * @dev Provides child token (subdomain) of provided tokenId.
     * @param tokenId uint256 ID of the token
     * @param label label of subdomain (for `aaa.bbb.crypto` it will be `aaa`)
     */
    function childIdOf(uint256 tokenId, string calldata label) external pure returns (uint256);

    /**
     * @dev Transfer domain ownership without resetting domain records.
     * @param to address of new domain owner
     * @param tokenId uint256 ID of the token to be transferred
     */
    function setOwner(address to, uint256 tokenId) external;
}

File 2 of 10 : IResolver.sol
pragma solidity 0.5.12;
pragma experimental ABIEncoderV2;

contract IResolver {
    /**
     * @dev Reset all domain records and set new ones
     * @param keys New record keys
     * @param values New record values
     * @param tokenId ERC-721 token id of the domain
     */
    function reconfigure(string[] memory keys, string[] memory values, uint256 tokenId) public;

    /**
     * @dev Set or update domain records
     * @param keys New record keys
     * @param values New record values
     * @param tokenId ERC-721 token id of the domain
     */
    function setMany(string[] memory keys, string[] memory values, uint256 tokenId) public;

    /**
     * @dev Function to set record.
     * @param key The key set the value of.
     * @param value The value to set key to.
     * @param tokenId ERC-721 token id to set.
     */
    function set(string calldata key, string calldata value, uint256 tokenId) external;

    /**
     * @dev Function to reset all existing records on a domain.
     * @param tokenId ERC-721 token id to set.
     */
    function reset(uint256 tokenId) external;
}

File 3 of 10 : DomainZoneController.sol
pragma solidity 0.5.12;
pragma experimental ABIEncoderV2;

import "../util/BulkWhitelistedRole.sol";
import "../IRegistry.sol";
import "../IResolver.sol";

contract DomainZoneController is BulkWhitelistedRole {

    event MintChild(uint256 indexed tokenId, uint256 indexed parentTokenId, string label);

    IRegistry internal _registry;

    constructor (IRegistry registry, address[] memory accounts) public {
        _registry = registry;
        for (uint256 index = 0; index < accounts.length; index++) {
            _addWhitelisted(accounts[index]);
        }
    }

    function mintChild(address to, uint256 tokenId, string memory label, string[] memory keys, string[] memory values) public onlyWhitelisted {
        address resolver = _registry.resolverOf(tokenId);
        uint256 childTokenId = _registry.childIdOf(tokenId, label);
        if (keys.length > 0) {
            _registry.mintChild(address(this), tokenId, label);
            _registry.resolveTo(resolver, childTokenId);
            IResolver(resolver).reconfigure(keys, values, childTokenId);
            _registry.setOwner(to, childTokenId);
        } else {
            _registry.mintChild(to, tokenId, label);
        }

        emit MintChild(childTokenId, tokenId, label);
    }

    function resolveTo(address to, uint256 tokenId) external onlyWhitelisted {
        _registry.resolveTo(to, tokenId);
    }

    function setMany(string[] memory keys, string[] memory values, uint256 tokenId) public onlyWhitelisted {
        address resolver = _registry.resolverOf(tokenId);
        IResolver(resolver).setMany(keys, values, tokenId);
    }
}

File 4 of 10 : BulkWhitelistedRole.sol
pragma solidity 0.5.12;

import "@openzeppelin/contracts/access/Roles.sol";
import "@openzeppelin/contracts/access/roles/WhitelistedRole.sol";

/**
 * @title BulkWhitelistedRole
 * @dev a Whitelist role defined using the Open Zeppelin Role system with the addition of bulkAddWhitelisted and
 * bulkRemoveWhitelisted.
 * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a
 * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove
 * it), and not Whitelisteds themselves.
 */
contract BulkWhitelistedRole is WhitelistedRole {

    function bulkAddWhitelisted(address[] memory accounts) public onlyWhitelistAdmin {
        for (uint256 index = 0; index < accounts.length; index++) {
            _addWhitelisted(accounts[index]);
        }
    }

    function bulkRemoveWhitelisted(address[] memory accounts) public onlyWhitelistAdmin {
        for (uint256 index = 0; index < accounts.length; index++) {
            _removeWhitelisted(accounts[index]);
        }
    }

}

File 5 of 10 : Roles.sol
pragma solidity ^0.5.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

File 6 of 10 : WhitelistAdminRole.sol
pragma solidity ^0.5.0;

import "../Roles.sol";

/**
 * @title WhitelistAdminRole
 * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
 */
contract WhitelistAdminRole {
    using Roles for Roles.Role;

    event WhitelistAdminAdded(address indexed account);
    event WhitelistAdminRemoved(address indexed account);

    Roles.Role private _whitelistAdmins;

    constructor () internal {
        _addWhitelistAdmin(msg.sender);
    }

    modifier onlyWhitelistAdmin() {
        require(isWhitelistAdmin(msg.sender), "WhitelistAdminRole: caller does not have the WhitelistAdmin role");
        _;
    }

    function isWhitelistAdmin(address account) public view returns (bool) {
        return _whitelistAdmins.has(account);
    }

    function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
        _addWhitelistAdmin(account);
    }

    function renounceWhitelistAdmin() public {
        _removeWhitelistAdmin(msg.sender);
    }

    function _addWhitelistAdmin(address account) internal {
        _whitelistAdmins.add(account);
        emit WhitelistAdminAdded(account);
    }

    function _removeWhitelistAdmin(address account) internal {
        _whitelistAdmins.remove(account);
        emit WhitelistAdminRemoved(account);
    }
}

File 7 of 10 : WhitelistedRole.sol
pragma solidity ^0.5.0;

import "../Roles.sol";
import "./WhitelistAdminRole.sol";

/**
 * @title WhitelistedRole
 * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a
 * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove
 * it), and not Whitelisteds themselves.
 */
contract WhitelistedRole is WhitelistAdminRole {
    using Roles for Roles.Role;

    event WhitelistedAdded(address indexed account);
    event WhitelistedRemoved(address indexed account);

    Roles.Role private _whitelisteds;

    modifier onlyWhitelisted() {
        require(isWhitelisted(msg.sender), "WhitelistedRole: caller does not have the Whitelisted role");
        _;
    }

    function isWhitelisted(address account) public view returns (bool) {
        return _whitelisteds.has(account);
    }

    function addWhitelisted(address account) public onlyWhitelistAdmin {
        _addWhitelisted(account);
    }

    function removeWhitelisted(address account) public onlyWhitelistAdmin {
        _removeWhitelisted(account);
    }

    function renounceWhitelisted() public {
        _removeWhitelisted(msg.sender);
    }

    function _addWhitelisted(address account) internal {
        _whitelisteds.add(account);
        emit WhitelistedAdded(account);
    }

    function _removeWhitelisted(address account) internal {
        _whitelisteds.remove(account);
        emit WhitelistedRemoved(account);
    }
}

File 8 of 10 : IERC165.sol
pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * [EIP](https://eips.ethereum.org/EIPS/eip-165).
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others (`ERC165Checker`).
 *
 * For an implementation, see `ERC165`.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 9 of 10 : IERC721.sol
pragma solidity ^0.5.0;

import "../../introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of NFTs in `owner`'s account.
     */
    function balanceOf(address owner) public view returns (uint256 balance);

    /**
     * @dev Returns the owner of the NFT specified by `tokenId`.
     */
    function ownerOf(uint256 tokenId) public view returns (address owner);

    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     * 
     *
     * Requirements:
     * - `from`, `to` cannot be zero.
     * - `tokenId` must be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this
     * NFT by either `approve` or `setApproveForAll`.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public;
    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     * Requirements:
     * - If the caller is not `from`, it must be approved to move this NFT by
     * either `approve` or `setApproveForAll`.
     */
    function transferFrom(address from, address to, uint256 tokenId) public;
    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);


    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

File 10 of 10 : IERC721Metadata.sol
pragma solidity ^0.5.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "petersburg",
  "libraries": {
    "": {}
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"contract IRegistry","name":"registry","type":"address"},{"internalType":"address[]","name":"accounts","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"parentTokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"label","type":"string"}],"name":"MintChild","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistedRemoved","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"bulkAddWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"bulkRemoveWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"mintChild","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resolveTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setMany","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200202b3803806200202b8339818101604052620000379190810190620003d0565b6200004833620000d560201b60201c565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008090505b8151811015620000cc57620000be828281518110620000aa57fe5b60200260200101516200013660201b60201c565b80806001019150506200008f565b505050620005fc565b620000f08160006200019760201b62000d811790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b620001518160016200019760201b62000d811790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f60405160405180910390a250565b620001a982826200024a60201b60201c565b15620001ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e390620004d4565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b590620004f6565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000815190506200032681620005c8565b92915050565b600082601f8301126200033e57600080fd5b8151620003556200034f8262000546565b62000518565b915081818352602084019350602081019050838560208402820111156200037b57600080fd5b60005b83811015620003af578162000394888262000315565b8452602084019350602083019250506001810190506200037e565b5050505092915050565b600081519050620003ca81620005e2565b92915050565b60008060408385031215620003e457600080fd5b6000620003f485828601620003b9565b925050602083015167ffffffffffffffff8111156200041257600080fd5b62000420858286016200032c565b9150509250929050565b600062000439601f836200056f565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b60006200047b6022836200056f565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006020820190508181036000830152620004ef816200042a565b9050919050565b6000602082019050818103600083015262000511816200046c565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200053c57600080fd5b8060405250919050565b600067ffffffffffffffff8211156200055e57600080fd5b602082029050602081019050919050565b600082825260208201905092915050565b60006200058d82620005a8565b9050919050565b6000620005a18262000580565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620005d38162000580565b8114620005df57600080fd5b50565b620005ed8162000594565b8114620005f957600080fd5b50565b611a1f806200060c6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063841cb28e11610071578063841cb28e14610163578063bb5f747b1461017f578063ce92b33e146101af578063d6cd9473146101cb578063f6e491aa146101d5578063f8a6c3d6146101f1576100b4565b806310154bad146100b95780632392c189146100d5578063291d9549146100f15780633af32abf1461010d5780634c5a628c1461013d5780637362d9c814610147575b600080fd5b6100d360048036036100ce91908101906110c3565b61020d565b005b6100ef60048036036100ea9190810190611115565b610261565b005b61010b600480360361010691908101906110c3565b61033c565b005b610127600480360361012291908101906110c3565b610390565b60405161013491906116a5565b60405180910390f35b6101456103ad565b005b610161600480360361015c91908101906110c3565b6103b8565b005b61017d60048036036101789190810190611151565b61040c565b005b610199600480360361019491908101906110c3565b6108b5565b6040516101a691906116a5565b60405180910390f35b6101c960048036036101c49190810190611251565b6108d2565b005b6101d3610a3e565b005b6101ef60048036036101ea9190810190611210565b610a49565b005b61020b60048036036102069190810190611210565b610acd565b005b610216336108b5565b610255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c90611742565b60405180910390fd5b61025e81610b51565b50565b61026a33610390565b6102a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a090611762565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632392c18983836040518363ffffffff1660e01b81526004016103069291906115f9565b600060405180830381600087803b15801561032057600080fd5b505af1158015610334573d6000803e3d6000fd5b505050505050565b610345336108b5565b610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037b90611742565b60405180910390fd5b61038d81610bab565b50565b60006103a6826001610c0590919063ffffffff16565b9050919050565b6103b633610ccd565b565b6103c1336108b5565b610400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f790611742565b60405180910390fd5b61040981610d27565b50565b61041533610390565b610454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044b90611762565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b3f9e4cb866040518263ffffffff1660e01b81526004016104b19190611782565b60206040518083038186803b1580156104c957600080fd5b505afa1580156104dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061050191908101906110ec565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368b62d3287876040518363ffffffff1660e01b815260040161056292919061179d565b60206040518083038186803b15801561057a57600080fd5b505afa15801561058e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105b291908101906112d0565b90506000845111156107e157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8d3cc6e3088886040518463ffffffff1660e01b815260040161061d93929190611622565b600060405180830381600087803b15801561063757600080fd5b505af115801561064b573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632392c18983836040518363ffffffff1660e01b81526004016106ac9291906115f9565b600060405180830381600087803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663ec129eea8585846040518463ffffffff1660e01b815260040161071b93929190611660565b600060405180830381600087803b15801561073557600080fd5b505af1158015610749573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab3b87fe88836040518363ffffffff1660e01b81526004016107aa9291906115f9565b600060405180830381600087803b1580156107c457600080fd5b505af11580156107d8573d6000803e3d6000fd5b50505050610873565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8d3cc6e8888886040518463ffffffff1660e01b815260040161084093929190611622565b600060405180830381600087803b15801561085a57600080fd5b505af115801561086e573d6000803e3d6000fd5b505050505b85817f5653f60014b57c7e76e4b4be42e724badf242bc2918de8c398c2c3ab542dea38876040516108a491906116c0565b60405180910390a350505050505050565b60006108cb826000610c0590919063ffffffff16565b9050919050565b6108db33610390565b61091a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091190611762565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b3f9e4cb836040518263ffffffff1660e01b81526004016109779190611782565b60206040518083038186803b15801561098f57600080fd5b505afa1580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109c791908101906110ec565b90508073ffffffffffffffffffffffffffffffffffffffff1663ce92b33e8585856040518463ffffffff1660e01b8152600401610a0693929190611660565b600060405180830381600087803b158015610a2057600080fd5b505af1158015610a34573d6000803e3d6000fd5b5050505050505050565b610a4733610bab565b565b610a52336108b5565b610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890611742565b60405180910390fd5b60008090505b8151811015610ac957610abc828281518110610aaf57fe5b6020026020010151610b51565b8080600101915050610a97565b5050565b610ad6336108b5565b610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611742565b60405180910390fd5b60008090505b8151811015610b4d57610b40828281518110610b3357fe5b6020026020010151610bab565b8080600101915050610b1b565b5050565b610b65816001610d8190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f60405160405180910390a250565b610bbf816001610e2990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b660405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d90611722565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ce1816000610e2990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b610d3b816000610d8190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b610d8b8282610c05565b15610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc2906116e2565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610e338282610c05565b610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6990611702565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600081359050610edf816119ae565b92915050565b600081519050610ef4816119ae565b92915050565b600082601f830112610f0b57600080fd5b8135610f1e610f19826117fa565b6117cd565b91508181835260208401935060208101905083856020840282011115610f4357600080fd5b60005b83811015610f735781610f598882610ed0565b845260208401935060208301925050600181019050610f46565b5050505092915050565b600082601f830112610f8e57600080fd5b8135610fa1610f9c82611822565b6117cd565b9150818183526020840193506020810190508360005b83811015610fe75781358601610fcd8882610ff1565b845260208401935060208301925050600181019050610fb7565b5050505092915050565b600082601f83011261100257600080fd5b81356110156110108261184a565b6117cd565b9150808252602083016020830185838301111561103157600080fd5b61103c83828461195b565b50505092915050565b600082601f83011261105657600080fd5b813561106961106482611876565b6117cd565b9150808252602083016020830185838301111561108557600080fd5b61109083828461195b565b50505092915050565b6000813590506110a8816119c5565b92915050565b6000815190506110bd816119c5565b92915050565b6000602082840312156110d557600080fd5b60006110e384828501610ed0565b91505092915050565b6000602082840312156110fe57600080fd5b600061110c84828501610ee5565b91505092915050565b6000806040838503121561112857600080fd5b600061113685828601610ed0565b925050602061114785828601611099565b9150509250929050565b600080600080600060a0868803121561116957600080fd5b600061117788828901610ed0565b955050602061118888828901611099565b945050604086013567ffffffffffffffff8111156111a557600080fd5b6111b188828901611045565b935050606086013567ffffffffffffffff8111156111ce57600080fd5b6111da88828901610f7d565b925050608086013567ffffffffffffffff8111156111f757600080fd5b61120388828901610f7d565b9150509295509295909350565b60006020828403121561122257600080fd5b600082013567ffffffffffffffff81111561123c57600080fd5b61124884828501610efa565b91505092915050565b60008060006060848603121561126657600080fd5b600084013567ffffffffffffffff81111561128057600080fd5b61128c86828701610f7d565b935050602084013567ffffffffffffffff8111156112a957600080fd5b6112b586828701610f7d565b92505060406112c686828701611099565b9150509250925092565b6000602082840312156112e257600080fd5b60006112f0848285016110ae565b91505092915050565b600061130583836113d9565b905092915050565b61131681611913565b82525050565b6000611327826118b2565b61133181856118e0565b935083602082028501611343856118a2565b8060005b8581101561137f578484038952815161136085826112f9565b945061136b836118d3565b925060208a01995050600181019050611347565b50829750879550505050505092915050565b61139a81611925565b82525050565b60006113ab826118c8565b6113b58185611902565b93506113c581856020860161196a565b6113ce8161199d565b840191505092915050565b60006113e4826118bd565b6113ee81856118f1565b93506113fe81856020860161196a565b6114078161199d565b840191505092915050565b600061141f601f83611902565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b600061145f602183611902565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114c5602283611902565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061152b604083611902565b91507f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008301527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c656020830152604082019050919050565b6000611591603a83611902565b91507f57686974656c6973746564526f6c653a2063616c6c657220646f6573206e6f7460008301527f2068617665207468652057686974656c697374656420726f6c650000000000006020830152604082019050919050565b6115f381611951565b82525050565b600060408201905061160e600083018561130d565b61161b60208301846115ea565b9392505050565b6000606082019050611637600083018661130d565b61164460208301856115ea565b818103604083015261165681846113a0565b9050949350505050565b6000606082019050818103600083015261167a818661131c565b9050818103602083015261168e818561131c565b905061169d60408301846115ea565b949350505050565b60006020820190506116ba6000830184611391565b92915050565b600060208201905081810360008301526116da81846113a0565b905092915050565b600060208201905081810360008301526116fb81611412565b9050919050565b6000602082019050818103600083015261171b81611452565b9050919050565b6000602082019050818103600083015261173b816114b8565b9050919050565b6000602082019050818103600083015261175b8161151e565b9050919050565b6000602082019050818103600083015261177b81611584565b9050919050565b600060208201905061179760008301846115ea565b92915050565b60006040820190506117b260008301856115ea565b81810360208301526117c481846113a0565b90509392505050565b6000604051905081810181811067ffffffffffffffff821117156117f057600080fd5b8060405250919050565b600067ffffffffffffffff82111561181157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561183957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561186157600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561188d57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061191e82611931565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561198857808201518184015260208101905061196d565b83811115611997576000848401525b50505050565b6000601f19601f8301169050919050565b6119b781611913565b81146119c257600080fd5b50565b6119ce81611951565b81146119d957600080fd5b5056fea365627a7a72315820a180cd845393a5854ea7b4e2b5f8a4d2d1b40c8ea8b68cc7776c50eef78e8d1b6c6578706572696d656e74616cf564736f6c634300050c0040000000000000000000000000aad76bea7cfec82927239415bb18d2e93518ecbb00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000aad76bea7cfec82927239415bb18d2e93518ecbb00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : registry (address): 0xaad76bea7cfec82927239415bb18d2e93518ecbb

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000aad76bea7cfec82927239415bb18d2e93518ecbb
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

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.