Contract 0x6090a6e47849629b7245dfa1ca21d94cd15878ef

ENS  

 

TxHash Block Age From To Value [TxFee]
0x7b881480d0a3988b6ec2b00955968073fa7ad6e3e9c0745e0e675467f8752d4b742002117 mins ago0x9505b8ac561681f9fd6b05048d5d703c6bffdc71 IN  ENS-Registrar0.12 Ether0.001829276
0x95c435f3c3d45d93b85254712178fe70360b20439eaed768d1ce0ad84827b0b9741996429 mins ago0x24172d1c6f499bd5806cc2a6563b2ea2d3ccfdd1 IN  ENS-Registrar0 Ether0.0000141939
0x98474dbce396364afc85c44225d94ccd6227d67bf787d67fd73315ea5cdc0dee741992936 mins ago0x6e5e7d5dcad928c814caf7af7b0e706049a36629 IN  ENS-Registrar0 Ether0.00020802
0xd5e8ba177e2799ce734eb6673893825a8f1937a1cff49d31b3661ce59db3d33574197561 hr 20 mins ago0xb4837c3507c5c19125ec14fe2ff9bf7b16eeb806 IN  ENS-Registrar0 Ether0.000087815
0xf17a82930cd62945327767e84953feecbcc8fcc42eb31d4c9e7f0f36bba6cc0674197141 hr 30 mins ago0xb4837c3507c5c19125ec14fe2ff9bf7b16eeb806 IN  ENS-Registrar0 Ether0.000107184
0x93d13798242fb8328f8d7a2c28f2eb55a9382aa562db3f636819f2d063872c8174194752 hrs 22 mins ago0xf33cd1baccba3e90de6a541bab3ac04710d740b9 IN  ENS-Registrar0.02 Ether0.004115295
0x1e773ebe63f29c582ce0fba5366c9a532fffb487f23fda3e766dfaef26cde19e74194672 hrs 24 mins ago0xf33cd1baccba3e90de6a541bab3ac04710d740b9 IN  ENS-Registrar0.02 Ether0.004115295
0x69841c5387d303d25fb818583ac73a7cbbc1fd4ca45d6c6c830d10157e95628174194652 hrs 24 mins ago0x66e6c282a304ceed7a08828b7e5958b788430fa0 IN  ENS-Registrar0 Ether0.00172476
0x25a231eecb69e872d4d4b75f837332b526d5643cfa8410b6d71826aa7aa0d84c74194422 hrs 29 mins ago0xf33cd1baccba3e90de6a541bab3ac04710d740b9 IN  ENS-Registrar0.02 Ether0.004115295
0xbf7314804b9456619c036aef4588c928c6ef4f6f8145837a5dd76b898d36f6b074194412 hrs 29 mins ago0x7770df807f16468bb642d2346c013b1ed1b384af IN  ENS-Registrar0 Ether0.00024354
0x930ceaa110e7f00331fa77e4b5e16b01171e7feacebb0b07e00ea4ba02e4c91f74194112 hrs 36 mins ago0xf33cd1baccba3e90de6a541bab3ac04710d740b9 IN  ENS-Registrar0.02 Ether0.003980871
0x49f0470cdb542889d871ddb68c183b6f1da9c5d98076e0525259b580186c8b2f74193872 hrs 42 mins ago0xce480fe724975231748281c7a230e20ddea83a3f IN  ENS-Registrar0 Ether0.000729468
0x88c7b72f0493f4459ad31d6ef424e69d7ece9d26c637243aa34ec23707e86bb574193712 hrs 46 mins ago0xce480fe724975231748281c7a230e20ddea83a3f IN  ENS-Registrar0 Ether0.000648928
0x83358b147bb0ccc6c4aafdfdf0c22457d4165436202ec0afa385e62e0d303e6174192733 hrs 4 mins ago0x7770df807f16468bb642d2346c013b1ed1b384af IN  ENS-Registrar0.1 Ether0.002667565
0x728bdfda282cec9623f85e881c1292c06ea953c2bdf5334680e49f5bd5adbe9b74192503 hrs 8 mins ago0x34ef98030cf2a2a7b411fdc43642d67ffcbc4f31 IN  ENS-Registrar0 Ether0.00169836
0xe885ace896590595bb42b5e8e72a120e4825f88924fcaeb13baf6f9acf278ced74192443 hrs 9 mins ago0x34ef98030cf2a2a7b411fdc43642d67ffcbc4f31 IN  ENS-Registrar0 Ether0.0016971
0x6901adabf4ee9686e51a1c6b55acde895083ca24d9b0b8412c78ab5d33ca974074187734 hrs 55 mins ago0x4fd5399c5667dc48971394746c88a7891bb12ecc IN  ENS-Registrar0 Ether0.000175758
0x6498487b43d227d54d5134588315949ba1da684a3b31609a75ab4b6de476b77274187355 hrs 2 mins ago0x613d28514edc22b8ca98d7144a8fc111a4c554e9 IN  ENS-Registrar0 Ether0.00035619
0x57642b37002cc1eab6f99f1cc0cf8720da06b401842486a1b31b10901cfbcdc074187345 hrs 2 mins ago0x613d28514edc22b8ca98d7144a8fc111a4c554e9 IN  ENS-Registrar0 Ether0.00035619
0xa538668b6da69e02369cb481f43b207b1e07480710275fcf004719bdc648932a74186455 hrs 23 mins ago0xb4837c3507c5c19125ec14fe2ff9bf7b16eeb806 IN  ENS-Registrar0.011 Ether0.000914638
0x2a67aaaf3cec4adb3e08e3fbb10cd6890756b658064db6e05e678d9abf6ec0b274185615 hrs 42 mins ago0xb4837c3507c5c19125ec14fe2ff9bf7b16eeb806 IN  ENS-Registrar0 Ether0.00017563
0x8c918093fdbe3036e67c3b7c27e478dda6ae06c429c3068a8676e8c1153fa57d74185215 hrs 49 mins ago0x1f17a8fed594894a6b486ef1b0d19f39660cb143 IN  ENS-Registrar0 Ether0.000093219
0x180aa26014c70d6c4fdab2bd9e9a8bad7d7a6eca75f51dedf079bdacfa65fb2574183186 hrs 35 mins ago0xc50ffdffab1a40a60c2532d8feb9ee0ced4ac29a IN  ENS-Registrar0 Ether0.000199838
0x64f2586158df055f0659c398152238ee9bf4db43453dd3d491f9f49491c97e9e74182706 hrs 47 mins ago0x9facdd1a64932ae597f39b11679f63804601bfd5 IN  ENS-Registrar0 Ether0.000466095
0xdd2e98fd517bba06ad98ff08c5e5e82df4a7027ed92d526fd4d6abd9c8baed3374182256 hrs 58 mins ago0x9facdd1a64932ae597f39b11679f63804601bfd5 IN  ENS-Registrar0 Ether0.000466095
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x7b881480d0a3988b6ec2b00955968073fa7ad6e3e9c0745e0e675467f8752d4b742002117 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.12 Ether
0x93d13798242fb8328f8d7a2c28f2eb55a9382aa562db3f636819f2d063872c8174194752 hrs 22 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.02 Ether
0x1e773ebe63f29c582ce0fba5366c9a532fffb487f23fda3e766dfaef26cde19e74194672 hrs 24 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.02 Ether
0x25a231eecb69e872d4d4b75f837332b526d5643cfa8410b6d71826aa7aa0d84c74194422 hrs 29 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.02 Ether
0x930ceaa110e7f00331fa77e4b5e16b01171e7feacebb0b07e00ea4ba02e4c91f74194112 hrs 36 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.02 Ether
0x83358b147bb0ccc6c4aafdfdf0c22457d4165436202ec0afa385e62e0d303e6174192733 hrs 4 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.1 Ether
0xa538668b6da69e02369cb481f43b207b1e07480710275fcf004719bdc648932a74186455 hrs 23 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.011 Ether
0x875810821c496a95a12bbc7ad8a62198e32f9bcfd3a9f0ce44b22dccb7ffe08e74178728 hrs 24 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.01 Ether
0x16b3f5c231c50fac247d3c646ba936b877e017004ae4cc7f484b118ee445c16c74177149 hrs ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.01 Ether
0x0881c4eb7773b190bf3f3cb664490c2d735ea9ab3239950974a2e38203f2253174177129 hrs 1 min ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.01 Ether
0x8ff13ebd3a5d15315e18c3fe225d0ec43522b8c63363038e6807bf959754da8d74176069 hrs 25 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.01 Ether
0x3876e02d6ef6bd0c05e80c82485855f309b50247043de3e2db4f504d2a7f46c5741723110 hrs 41 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.02 Ether
0x8880c237e6130318e2a5dafc28c1ef95167f3cf2a91e7e28a5e90dc8acd37707741720310 hrs 49 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.02 Ether
0xfef24b897b9c89a0c0d20f10b076a3311df7372d3bef9f00d2c533dd3b890eee741656613 hrs 17 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.01 Ether
0x1be796fdad4c065c15a4e6d72cab2b7107fef9ed3d662fb723eff13f77704b77741654813 hrs 20 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.01 Ether
0xe727c88f67e5e752d1153ee5a34af8ee0dd530bd77d6888680a471eec8997e18741653113 hrs 24 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.02 Ether
0xde117feba9f885370d11fbe7ef3c317a824091e8cb68534be48c6f11f5780740741651413 hrs 28 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.02 Ether
0x1dedabc958ba486b8ce7df935968b473635d214e3502c92c4b4033bf51c41841741638813 hrs 53 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.01 Ether
0x746065d9de5148984d1ddaf0b96e5b15a4587f061286695bc207ca4c7e844a83741630114 hrs 10 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.05 Ether
0xe04f54c2df23011f0ec8e1aa15a8065f88f9c6615b89f2124dfe128d9205f2a1741628914 hrs 13 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.11 Ether
0xdddaa2cffa3957a730a0893d60b6f6a7db1ce6b860b0ae9fd2cd68be5d2aae29741628214 hrs 15 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.021 Ether
0x9250773576b4b4c317dc25ee0b3cd1d3075559d70082350d610e03c82fd602a4741627914 hrs 16 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.032 Ether
0xcbaf8d4830b3de66f37d5c0369d01bfd3e12dd1da833ca074e2e90dac20147fc741627414 hrs 16 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.12 Ether
0x53e218bc45771084ae9bcfee290c0444f17fee63eef5e94cefa8da48ae0bac25741624514 hrs 21 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.031 Ether
0x1bf1f18d02099bbb142cb55692c04ce4a7683cb7ed9ce0e65576b4f4e745d4d0741621314 hrs 28 mins ago0x6090a6e47849629b7245dfa1ca21d94cd15878ef  Contract Creation0.1 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
Registrar

Compiler Version
v0.4.10+commit.f0d539ae

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.0;


/*

Temporary Hash Registrar
========================

This is a simplified version of a hash registrar. It is purporsefully limited:
names cannot be six letters or shorter, new auctions will stop after 4 years.

The plan is to test the basic features and then move to a new contract in at most
2 years, when some sort of renewal mechanism will be enabled.
*/

contract 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);
}

/**
 * @title Deed to hold ether in exchange for ownership of a node
 * @dev The deed can be controlled only by the registrar and can only send ether back to the owner.
 */
contract Deed {
    address public registrar;
    address constant burn = 0xdead;
    uint public creationDate;
    address public owner;
    address public previousOwner;
    uint public value;
    event OwnerChanged(address newOwner);
    event DeedClosed();
    bool active;


    modifier onlyRegistrar {
        if (msg.sender != registrar) throw;
        _;
    }

    modifier onlyActive {
        if (!active) throw;
        _;
    }

    function Deed(address _owner) payable {
        owner = _owner;
        registrar = msg.sender;
        creationDate = now;
        active = true;
        value = msg.value;
    }

    function setOwner(address newOwner) onlyRegistrar {
        if (newOwner == 0) throw;
        previousOwner = owner;  // This allows contracts to check who sent them the ownership
        owner = newOwner;
        OwnerChanged(newOwner);
    }

    function setRegistrar(address newRegistrar) onlyRegistrar {
        registrar = newRegistrar;
    }

    function setBalance(uint newValue, bool throwOnFailure) onlyRegistrar onlyActive {
        // Check if it has enough balance to set the value
        if (value < newValue) throw;
        value = newValue;
        // Send the difference to the owner
        if (!owner.send(this.balance - newValue) && throwOnFailure) throw;
    }

    /**
     * @dev Close a deed and refund a specified fraction of the bid value
     * @param refundRatio The amount*1/1000 to refund
     */
    function closeDeed(uint refundRatio) onlyRegistrar onlyActive {
        active = false;
        if (! burn.send(((1000 - refundRatio) * this.balance)/1000)) throw;
        DeedClosed();
        destroyDeed();
    }

    /**
     * @dev Close a deed and refund a specified fraction of the bid value
     */
    function destroyDeed() {
        if (active) throw;
        
        // Instead of selfdestruct(owner), invoke owner fallback function to allow
        // owner to log an event if desired; but owner should also be aware that
        // its fallback function can also be invoked by setBalance
        if(owner.send(this.balance)) {
            selfdestruct(burn);
        }
    }
}

/**
 * @title Registrar
 * @dev The registrar handles the auction process for each subnode of the node it owns.
 */
contract Registrar {
    AbstractENS public ens;
    bytes32 public rootNode;

    mapping (bytes32 => entry) _entries;
    mapping (address => mapping(bytes32 => Deed)) public sealedBids;
    
    enum Mode { Open, Auction, Owned, Forbidden, Reveal, NotYetAvailable }

    uint32 constant totalAuctionLength = 5 days;
    uint32 constant revealPeriod = 48 hours;
    uint32 public constant launchLength = 8 weeks;

    uint constant minPrice = 0.01 ether;
    uint public registryStarted;

    event AuctionStarted(bytes32 indexed hash, uint registrationDate);
    event NewBid(bytes32 indexed hash, address indexed bidder, uint deposit);
    event BidRevealed(bytes32 indexed hash, address indexed owner, uint value, uint8 status);
    event HashRegistered(bytes32 indexed hash, address indexed owner, uint value, uint registrationDate);
    event HashReleased(bytes32 indexed hash, uint value);
    event HashInvalidated(bytes32 indexed hash, string indexed name, uint value, uint registrationDate);

    struct entry {
        Deed deed;
        uint registrationDate;
        uint value;
        uint highestBid;
    }

    // State transitions for names:
    //   Open -> Auction (startAuction)
    //   Auction -> Reveal
    //   Reveal -> Owned
    //   Reveal -> Open (if nobody bid)
    //   Owned -> Open (releaseDeed or invalidateName)
    function state(bytes32 _hash) constant returns (Mode) {
        var entry = _entries[_hash];
        
        if(!isAllowed(_hash, now)) {
            return Mode.NotYetAvailable;
        } else if(now < entry.registrationDate) {
            if (now < entry.registrationDate - revealPeriod) {
                return Mode.Auction;
            } else {
                return Mode.Reveal;
            }
        } else {
            if(entry.highestBid == 0) {
                return Mode.Open;
            } else {
                return Mode.Owned;
            }
        }
    }

    modifier inState(bytes32 _hash, Mode _state) {
        if(state(_hash) != _state) throw;
        _;
    }

    modifier onlyOwner(bytes32 _hash) {
        if (state(_hash) != Mode.Owned || msg.sender != _entries[_hash].deed.owner()) throw;
        _;
    }

    modifier registryOpen() {
        if(now < registryStarted  || now > registryStarted + 4 years || ens.owner(rootNode) != address(this)) throw;
        _;
    }

    function entries(bytes32 _hash) constant returns (Mode, address, uint, uint, uint) {
        entry h = _entries[_hash];
        return (state(_hash), h.deed, h.registrationDate, h.value, h.highestBid);
    }

    /**
     * @dev Constructs a new Registrar, with the provided address as the owner of the root node.
     * @param _ens The address of the ENS
     * @param _rootNode The hash of the rootnode.
     */
    function Registrar(AbstractENS _ens, bytes32 _rootNode, uint _startDate) {
        ens = _ens;
        rootNode = _rootNode;
        registryStarted = _startDate > 0 ? _startDate : now;
    }

    /**
     * @dev Returns the maximum of two unsigned integers
     * @param a A number to compare
     * @param b A number to compare
     * @return The maximum of two unsigned integers
     */
    function max(uint a, uint b) internal constant returns (uint max) {
        if (a > b)
            return a;
        else
            return b;
    }

    /**
     * @dev Returns the minimum of two unsigned integers
     * @param a A number to compare
     * @param b A number to compare
     * @return The minimum of two unsigned integers
     */
    function min(uint a, uint b) internal constant returns (uint min) {
        if (a < b)
            return a;
        else
            return b;
    }

    /**
     * @dev Returns the length of a given string
     * @param s The string to measure the length of
     * @return The length of the input string
     */
    function strlen(string s) internal constant returns (uint) {
        // Starting here means the LSB will be the byte we care about
        uint ptr;
        uint end;
        assembly {
            ptr := add(s, 1)
            end := add(mload(s), ptr)
        }
        for (uint len = 0; ptr < end; len++) {
            uint8 b;
            assembly { b := and(mload(ptr), 0xFF) }
            if (b < 0x80) {
                ptr += 1;
            } else if(b < 0xE0) {
                ptr += 2;
            } else if(b < 0xF0) {
                ptr += 3;
            } else if(b < 0xF8) {
                ptr += 4;
            } else if(b < 0xFC) {
                ptr += 5;
            } else {
                ptr += 6;
            }
        }
        return len;
    }
    
    /** 
     * @dev Determines if a name is available for registration yet
     * 
     * Each name will be assigned a random date in which its auction 
     * can be started, from 0 to 13 weeks
     * 
     * @param _hash The hash to start an auction on
     * @param _timestamp The timestamp to query about
     */
     
    function isAllowed(bytes32 _hash, uint _timestamp) constant returns (bool allowed){
        return _timestamp > getAllowedTime(_hash);
    }

    /** 
     * @dev Returns available date for hash
     * 
     * @param _hash The hash to start an auction on
     */
    function getAllowedTime(bytes32 _hash) constant returns (uint timestamp) {
        return registryStarted + (launchLength*(uint(_hash)>>128)>>128);
        // right shift operator: a >> b == a / 2**b
    }
    /**
     * @dev Assign the owner in ENS, if we're still the registrar
     * @param _hash hash to change owner
     * @param _newOwner new owner to transfer to
     */
    function trySetSubnodeOwner(bytes32 _hash, address _newOwner) internal {
        if(ens.owner(rootNode) == address(this))
            ens.setSubnodeOwner(rootNode, _hash, _newOwner);        
    }

    /**
     * @dev Start an auction for an available hash
     *
     * Anyone can start an auction by sending an array of hashes that they want to bid for.
     * Arrays are sent so that someone can open up an auction for X dummy hashes when they
     * are only really interested in bidding for one. This will increase the cost for an
     * attacker to simply bid blindly on all new auctions. Dummy auctions that are
     * open but not bid on are closed after a week.
     *
     * @param _hash The hash to start an auction on
     */
    function startAuction(bytes32 _hash) registryOpen() {
        var mode = state(_hash);
        if(mode == Mode.Auction) return;
        if(mode != Mode.Open) throw;

        entry newAuction = _entries[_hash];
        newAuction.registrationDate = now + totalAuctionLength;
        newAuction.value = 0;
        newAuction.highestBid = 0;
        AuctionStarted(_hash, newAuction.registrationDate);
    }

    /**
     * @dev Start multiple auctions for better anonymity
     * @param _hashes An array of hashes, at least one of which you presumably want to bid on
     */
    function startAuctions(bytes32[] _hashes)  {
        for (uint i = 0; i < _hashes.length; i ++ ) {
            startAuction(_hashes[i]);
        }
    }

    /**
     * @dev Hash the values required for a secret bid
     * @param hash The node corresponding to the desired namehash
     * @param value The bid amount
     * @param salt A random value to ensure secrecy of the bid
     * @return The hash of the bid values
     */
    function shaBid(bytes32 hash, address owner, uint value, bytes32 salt) constant returns (bytes32 sealedBid) {
        return sha3(hash, owner, value, salt);
    }

    /**
     * @dev Submit a new sealed bid on a desired hash in a blind auction
     *
     * Bids are sent by sending a message to the main contract with a hash and an amount. The hash
     * contains information about the bid, including the bidded hash, the bid amount, and a random
     * salt. Bids are not tied to any one auction until they are revealed. The value of the bid
     * itself can be masqueraded by sending more than the value of your actual bid. This is
     * followed by a 48h reveal period. Bids revealed after this period will be burned and the ether unrecoverable.
     * Since this is an auction, it is expected that most public hashes, like known domains and common dictionary
     * words, will have multiple bidders pushing the price up.
     *
     * @param sealedBid A sealedBid, created by the shaBid function
     */
    function newBid(bytes32 sealedBid) payable {
        if (address(sealedBids[msg.sender][sealedBid]) > 0 ) throw;
        if (msg.value < minPrice) throw;
        // creates a new hash contract with the owner
        Deed newBid = (new Deed).value(msg.value)(msg.sender);
        sealedBids[msg.sender][sealedBid] = newBid;
        NewBid(sealedBid, msg.sender, msg.value);
    }

    /**
     * @dev Start a set of auctions and bid on one of them
     *
     * This method functions identically to calling `startAuctions` followed by `newBid`,
     * but all in one transaction.
     * @param hashes A list of hashes to start auctions on.
     * @param sealedBid A sealed bid for one of the auctions.
     */
    function startAuctionsAndBid(bytes32[] hashes, bytes32 sealedBid) payable {
        startAuctions(hashes);
        newBid(sealedBid);
    }

    /**
     * @dev Submit the properties of a bid to reveal them
     * @param _hash The node in the sealedBid
     * @param _value The bid amount in the sealedBid
     * @param _salt The sale in the sealedBid
     */
    function unsealBid(bytes32 _hash, uint _value, bytes32 _salt) {
        bytes32 seal = shaBid(_hash, msg.sender, _value, _salt);
        Deed bid = sealedBids[msg.sender][seal];
        if (address(bid) == 0 ) throw;
        sealedBids[msg.sender][seal] = Deed(0);
        entry h = _entries[_hash];
        uint value = min(_value, bid.value());
        bid.setBalance(value, true);

        var auctionState = state(_hash);
        if(auctionState == Mode.Owned) {
            // Too late! Bidder loses their bid. Get's 0.5% back.
            bid.closeDeed(5);
            BidRevealed(_hash, msg.sender, value, 1);
        } else if(auctionState != Mode.Reveal) {
            // Invalid phase
            throw;
        } else if (value < minPrice || bid.creationDate() > h.registrationDate - revealPeriod) {
            // Bid too low or too late, refund 99.5%
            bid.closeDeed(995);
            BidRevealed(_hash, msg.sender, value, 0);
        } else if (value > h.highestBid) {
            // new winner
            // cancel the other bid, refund 99.5%
            if(address(h.deed) != 0) {
                Deed previousWinner = h.deed;
                previousWinner.closeDeed(995);
            }

            // set new winner
            // per the rules of a vickery auction, the value becomes the previous highestBid
            h.value = h.highestBid;  // will be zero if there's only 1 bidder
            h.highestBid = value;
            h.deed = bid;
            BidRevealed(_hash, msg.sender, value, 2);
        } else if (value > h.value) {
            // not winner, but affects second place
            h.value = value;
            bid.closeDeed(995);
            BidRevealed(_hash, msg.sender, value, 3);
        } else {
            // bid doesn't affect auction
            bid.closeDeed(995);
            BidRevealed(_hash, msg.sender, value, 4);
        }
    }

    /**
     * @dev Cancel a bid
     * @param seal The value returned by the shaBid function
     */
    function cancelBid(address bidder, bytes32 seal) {
        Deed bid = sealedBids[bidder][seal];
        
        // If a sole bidder does not `unsealBid` in time, they have a few more days
        // where they can call `startAuction` (again) and then `unsealBid` during
        // the revealPeriod to get back their bid value.
        // For simplicity, they should call `startAuction` within
        // 9 days (2 weeks - totalAuctionLength), otherwise their bid will be
        // cancellable by anyone.
        if (address(bid) == 0
            || now < bid.creationDate() + totalAuctionLength + 2 weeks) throw;

        // Send the canceller 0.5% of the bid, and burn the rest.
        bid.setOwner(msg.sender);
        bid.closeDeed(5);
        sealedBids[bidder][seal] = Deed(0);
        BidRevealed(seal, bidder, 0, 5);
    }

    /**
     * @dev Finalize an auction after the registration date has passed
     * @param _hash The hash of the name the auction is for
     */
    function finalizeAuction(bytes32 _hash) onlyOwner(_hash) {
        entry h = _entries[_hash];
        
        // handles the case when there's only a single bidder (h.value is zero)
        h.value =  max(h.value, minPrice);
        h.deed.setBalance(h.value, true);

        trySetSubnodeOwner(_hash, h.deed.owner());
        HashRegistered(_hash, h.deed.owner(), h.value, h.registrationDate);
    }

    /**
     * @dev The owner of a domain may transfer it to someone else at any time.
     * @param _hash The node to transfer
     * @param newOwner The address to transfer ownership to
     */
    function transfer(bytes32 _hash, address newOwner) onlyOwner(_hash) {
        if (newOwner == 0) throw;

        entry h = _entries[_hash];
        h.deed.setOwner(newOwner);
        trySetSubnodeOwner(_hash, newOwner);
    }

    /**
     * @dev After some time, or if we're no longer the registrar, the owner can release
     *      the name and get their ether back.
     * @param _hash The node to release
     */
    function releaseDeed(bytes32 _hash) onlyOwner(_hash) {
        entry h = _entries[_hash];
        Deed deedContract = h.deed;
        if(now < h.registrationDate + 1 years && ens.owner(rootNode) == address(this)) throw;

        h.value = 0;
        h.highestBid = 0;
        h.deed = Deed(0);

        _tryEraseSingleNode(_hash);
        deedContract.closeDeed(1000);
        HashReleased(_hash, h.value);        
    }

    /**
     * @dev Submit a name 6 characters long or less. If it has been registered,
     * the submitter will earn 50% of the deed value. We are purposefully
     * handicapping the simplified registrar as a way to force it into being restructured
     * in a few years.
     * @param unhashedName An invalid name to search for in the registry.
     *
     */
    function invalidateName(string unhashedName) inState(sha3(unhashedName), Mode.Owned) {
        if (strlen(unhashedName) > 6 ) throw;
        bytes32 hash = sha3(unhashedName);

        entry h = _entries[hash];

        _tryEraseSingleNode(hash);

        if(address(h.deed) != 0) {
            // Reward the discoverer with 50% of the deed
            // The previous owner gets 50%
            h.value = max(h.value, minPrice);
            h.deed.setBalance(h.value/2, false);
            h.deed.setOwner(msg.sender);
            h.deed.closeDeed(1000);
        }

        HashInvalidated(hash, unhashedName, h.value, h.registrationDate);

        h.value = 0;
        h.highestBid = 0;
        h.deed = Deed(0);
    }

    /**
     * @dev Allows anyone to delete the owner and resolver records for a (subdomain of) a
     *      name that is not currently owned in the registrar. If passing, eg, 'foo.bar.eth',
     *      the owner and resolver fields on 'foo.bar.eth' and 'bar.eth' will all be cleared.
     * @param labels A series of label hashes identifying the name to zero out, rooted at the
     *        registrar's root. Must contain at least one element. For instance, to zero 
     *        'foo.bar.eth' on a registrar that owns '.eth', pass an array containing
     *        [sha3('foo'), sha3('bar')].
     */
    function eraseNode(bytes32[] labels) {
        if(labels.length == 0) throw;
        if(state(labels[labels.length - 1]) == Mode.Owned) throw;

        _eraseNodeHierarchy(labels.length - 1, labels, rootNode);
    }

    function _tryEraseSingleNode(bytes32 label) internal {
        if(ens.owner(rootNode) == address(this)) {
            ens.setSubnodeOwner(rootNode, label, address(this));
            var node = sha3(rootNode, label);
            ens.setResolver(node, 0);
            ens.setOwner(node, 0);
        }
    }

    function _eraseNodeHierarchy(uint idx, bytes32[] labels, bytes32 node) internal {
        // Take ownership of the node
        ens.setSubnodeOwner(node, labels[idx], address(this));
        node = sha3(node, labels[idx]);
        
        // Recurse if there's more labels
        if(idx > 0)
            _eraseNodeHierarchy(idx - 1, labels, node);

        // Erase the resolver and owner records
        ens.setResolver(node, 0);
        ens.setOwner(node, 0);
    }

    /**
     * @dev Transfers the deed to the current registrar, if different from this one.
     * Used during the upgrade process to a permanent registrar.
     * @param _hash The name hash to transfer.
     */
    function transferRegistrars(bytes32 _hash) onlyOwner(_hash) {
        var registrar = ens.owner(rootNode);
        if(registrar == address(this))
            throw;

        // Migrate the deed
        entry h = _entries[_hash];
        h.deed.setRegistrar(registrar);

        // Call the new registrar to accept the transfer
        Registrar(registrar).acceptRegistrarTransfer(_hash, h.deed, h.registrationDate);

        // Zero out the entry
        h.deed = Deed(0);
        h.registrationDate = 0;
        h.value = 0;
        h.highestBid = 0;
    }

    /**
     * @dev Accepts a transfer from a previous registrar; stubbed out here since there
     *      is no previous registrar implementing this interface.
     * @param hash The sha3 hash of the label to transfer.
     * @param deed The Deed object for the name being transferred in.
     * @param registrationDate The date at which the name was originally registered.
     */
    function acceptRegistrarTransfer(bytes32 hash, Deed deed, uint registrationDate) {}

}

Contract ABI

[{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"releaseDeed","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"getAllowedTime","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"unhashedName","type":"string"}],"name":"invalidateName","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"owner","type":"address"},{"name":"value","type":"uint256"},{"name":"salt","type":"bytes32"}],"name":"shaBid","outputs":[{"name":"sealedBid","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"bidder","type":"address"},{"name":"seal","type":"bytes32"}],"name":"cancelBid","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"entries","outputs":[{"name":"","type":"uint8"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ens","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_salt","type":"bytes32"}],"name":"unsealBid","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"transferRegistrars","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"sealedBids","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"},{"name":"newOwner","type":"address"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"},{"name":"_timestamp","type":"uint256"}],"name":"isAllowed","outputs":[{"name":"allowed","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"finalizeAuction","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"registryStarted","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"launchLength","outputs":[{"name":"","type":"uint32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sealedBid","type":"bytes32"}],"name":"newBid","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"labels","type":"bytes32[]"}],"name":"eraseNode","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hashes","type":"bytes32[]"}],"name":"startAuctions","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"hash","type":"bytes32"},{"name":"deed","type":"address"},{"name":"registrationDate","type":"uint256"}],"name":"acceptRegistrarTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"startAuction","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"rootNode","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"hashes","type":"bytes32[]"},{"name":"sealedBid","type":"bytes32"}],"name":"startAuctionsAndBid","outputs":[],"payable":true,"type":"function"},{"inputs":[{"name":"_ens","type":"address"},{"name":"_rootNode","type":"bytes32"},{"name":"_startDate","type":"uint256"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hash","type":"bytes32"},{"indexed":false,"name":"registrationDate","type":"uint256"}],"name":"AuctionStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hash","type":"bytes32"},{"indexed":true,"name":"bidder","type":"address"},{"indexed":false,"name":"deposit","type":"uint256"}],"name":"NewBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hash","type":"bytes32"},{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"status","type":"uint8"}],"name":"BidRevealed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hash","type":"bytes32"},{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"registrationDate","type":"uint256"}],"name":"HashRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hash","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"HashReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hash","type":"bytes32"},{"indexed":true,"name":"name","type":"string"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"registrationDate","type":"uint256"}],"name":"HashInvalidated","type":"event"}]

Contract Creation Code

6060604052341561000c57fe5b6040516060806127778339810160409081528151602083015191909201515b60008054600160a060020a031916600160a060020a038516178155600183905581116100575742610059565b805b6004555b5050505b612707806100706000396000f300606060405236156101175763ffffffff60e060020a6000350416630230a07c811461011957806313c89a8f1461012e57806315f733311461015357806322ec1244146101ab5780632525f5c1146101e2578063267b6922146102035780633f15457f1461025e57806347872b421461028a5780635ddae283146102a55780635e431709146102ba57806361d585da146102f557806379ce9fac1461032c578063935033371461034d578063983b94fb146103775780639c67f06f1461038c578063ae1a0b0c146103ae578063ce92dced146103d7578063de10f04b146103e4578063e27fe50f14610439578063ea9e107a1461048e578063ede8acdb146104b2578063faff50a8146104c7578063febefd61146104e9575bfe5b341561012157fe5b61012c600435610538565b005b341561013657fe5b610141600435610764565b60408051918252519081900360200190f35b341561015b57fe5b61012c600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965061078995505050505050565b005b34156101b357fe5b610141600435600160a060020a0360243516604435606435610aac565b60408051918252519081900360200190f35b34156101ea57fe5b61012c600160a060020a0360043516602435610af3565b005b341561020b57fe5b610216600435610cb9565b6040518086600581111561022657fe5b60ff168152600160a060020a0390951660208601525060408085019390935260608401919091526080830152519081900360a0019150f35b341561026657fe5b61026e610d0a565b60408051600160a060020a039092168252519081900360200190f35b341561029257fe5b61012c600435602435604435610d19565b005b34156102ad57fe5b61012c600435611277565b005b34156102c257fe5b61026e600160a060020a03600435166024356114e7565b60408051600160a060020a039092168252519081900360200190f35b34156102fd57fe5b61030860043561150d565b6040518082600581111561031857fe5b60ff16815260200191505060405180910390f35b341561033457fe5b61012c600435600160a060020a036024351661158b565b005b341561035557fe5b6103636004356024356116cb565b604080519115158252519081900360200190f35b341561037f57fe5b61012c6004356116e1565b005b341561039457fe5b610141611944565b60408051918252519081900360200190f35b34156103b657fe5b6103be61194a565b6040805163ffffffff9092168252519081900360200190f35b61012c600435611951565b005b34156103ec57fe5b61012c600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650611a4495505050505050565b005b341561044157fe5b61012c600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650611aa595505050505050565b005b341561049657fe5b61012c600435600160a060020a0360243516604435610cb4565b005b34156104ba57fe5b61012c600435611ae5565b005b34156104cf57fe5b610141611c34565b60408051918252519081900360200190f35b61012c6004808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496505093359350611c3a92505050565b005b6000808260025b6105488261150d565b600581111561055357fe5b1415806105e0575060008181526002602090815260408083205481518301849052815160e060020a638da5cb5b0281529151600160a060020a0390911693638da5cb5b93600480850194919392918390030190829087803b15156105b357fe5b60325a03f115156105c057fe5b50505060405180519050600160a060020a031633600160a060020a031614155b156105eb5760006000fd5b600084815260026020526040902080546001820154919450600160a060020a031692506301e13380014210801561069b575060008054600154604080516020908101859052815160e060020a6302571be302815260048101939093529051600160a060020a03308116959416936302571be3936024808201949392918390030190829087803b151561067957fe5b60325a03f1151561068657fe5b50505060405180519050600160a060020a0316145b156106a65760006000fd5b60006002840181905560038401558254600160a060020a03191683556106cb84611c51565b81600160a060020a031663bbe427716103e86040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b151561071257fe5b60325a03f1151561071f57fe5b5050506002830154604080519182525185917f292b79b9246fa2c8e77d3fe195b251f9cb839d7d038e667c069ee7708c631e16919081900360200190a25b5b50505050565b6004547001000000000000000000000000000000006249d4008184040204015b919050565b60006000826040518082805190602001908083835b602083106107bd5780518252601f19909201916020918201910161079e565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209250600291508190505b6107f98361150d565b600581111561080457fe5b1461080f5760006000fd5b600661081a86611e19565b11156108265760006000fd5b846040518082805190602001908083835b602083106108565780518252601f199092019160209182019101610837565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260029092529290209197509095506108a09250869150611c519050565b8254600160a060020a0316156109e8576108c58360020154662386f26fc10000611ecc565b60028085018290558454600160a060020a03169163b0c8097291905b6040805160e060020a63ffffffff8616028152929091046004830152600060248301819052905160448084019382900301818387803b151561091f57fe5b60325a03f1151561092c57fe5b505083546040805160e060020a6313af4035028152600160a060020a03338116600483015291519190921692506313af40359160248082019260009290919082900301818387803b151561097c57fe5b60325a03f1151561098957fe5b505083546040805160e060020a63bbe427710281526103e860048201529051600160a060020a03909216925063bbe4277191602480830192600092919082900301818387803b15156109d757fe5b60325a03f115156109e457fe5b5050505b846040518082805190602001908083835b60208310610a185780518252601f1990920191602091820191016109f9565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060028a015460018b01549084529183019190915283519095508994507f1f9c649fe47e58bb60f4e52f0d90e4c47a526c9f90c5113df842c025970b66ad93918190039091019150a360006002840181905560038401558254600160a060020a03191683555b5b5050505050565b604080518581526c01000000000000000000000000600160a060020a038616026020820152603481018490526054810183905290519081900360740190205b949350505050565b600160a060020a03808316600090815260036020908152604080832085845290915290205416801580610b9157506206978063ffffffff1681600160a060020a03166305b344106000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610b7157fe5b60325a03f11515610b7e57fe5b5050506040518051905001621275000142105b15610b9c5760006000fd5b80600160a060020a03166313af4035336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1515610bf357fe5b60325a03f11515610c0057fe5b50505080600160a060020a031663bbe4277160056040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b1515610c4957fe5b60325a03f11515610c5657fe5b505050600160a060020a038316600081815260036020908152604080832086845282528083208054600160a060020a03191690558051928352600591830191909152805185926000805160206126bc83398151915292908290030190a35b505050565b60008181526002602052604081208190819081908190610cd88761150d565b8154600183015460028401546003850154939950600160a060020a0390921697509550935091505b5091939590929450565b600054600160a060020a031681565b600060006000600060006000610d3189338a8a610aac565b600160a060020a033381166000908152600360209081526040808320858452909152902054919750169450841515610d695760006000fd5b600160a060020a0333811660009081526003602090815260408083208a845282528083208054600160a060020a03191690558c8352600282528083208151830184905281517f3fa4f2450000000000000000000000000000000000000000000000000000000081529151909850610e1b948d94908b1693633fa4f245936004808201949293918390030190829087803b1515610e0157fe5b60325a03f11515610e0e57fe5b5050604051519050611eeb565b6040805160e160020a63586404b902815260048101839052600160248201529051919450600160a060020a0387169163b0c809729160448082019260009290919082900301818387803b1515610e6d57fe5b60325a03f11515610e7a57fe5b505050610e868961150d565b915060025b826005811115610e9757fe5b1415610f2b5784600160a060020a031663bbe4277160056040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b1515610ee357fe5b60325a03f11515610ef057fe5b505060408051858152600160208201528151600160a060020a03331693508c926000805160206126bc833981519152928290030190a3611267565b60045b826005811115610f3a57fe5b14610f455760006000fd5b662386f26fc10000831080610fc457506202a30063ffffffff1684600101540385600160a060020a03166305b344106000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610fab57fe5b60325a03f11515610fb857fe5b50505060405180519050115b156110585784600160a060020a031663bbe427716103e36040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b151561101057fe5b60325a03f1151561101d57fe5b505060408051858152600060208201528151600160a060020a03331693508c926000805160206126bc833981519152928290030190a3611267565b8360030154831115611139578354600160a060020a0316156110d3575082546040805160e060020a63bbe427710281526103e360048201529051600160a060020a0390921691829163bbe4277191602480830192600092919082900301818387803b15156110c257fe5b60325a03f115156110cf57fe5b5050505b600384018054600280870191909155908490558454600160a060020a031916600160a060020a03878116919091178655604080518681526020810193909352805133909216928c926000805160206126bc833981519152929181900390910190a3611267565b83600201548311156111dc57600284018390556040805160e060020a63bbe427710281526103e360048201529051600160a060020a0387169163bbe4277191602480830192600092919082900301818387803b151561119457fe5b60325a03f115156111a157fe5b505060408051858152600360208201528151600160a060020a03331693508c926000805160206126bc833981519152928290030190a3611267565b84600160a060020a031663bbe427716103e36040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b151561122357fe5b60325a03f1151561123057fe5b505060408051858152600460208201528151600160a060020a03331693508c926000805160206126bc833981519152928290030190a35b5b5b5b5b5b505050505050505050565b6000808260025b6112878261150d565b600581111561129257fe5b14158061131f575060008181526002602090815260408083205481518301849052815160e060020a638da5cb5b0281529151600160a060020a0390911693638da5cb5b93600480850194919392918390030190829087803b15156112f257fe5b60325a03f115156112ff57fe5b50505060405180519050600160a060020a031633600160a060020a031614155b1561132a5760006000fd5b60008054600154604080516020908101859052815160e060020a6302571be302815260048101939093529051600160a060020a03909316936302571be3936024808501949192918390030190829087803b151561138357fe5b60325a03f1151561139057fe5b50505060405180519050925030600160a060020a031683600160a060020a031614156113bc5760006000fd5b600084815260026020526040808220805482517ffaab9d39000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152935192965092169263faab9d39926024808201939182900301818387803b151561142857fe5b60325a03f1151561143557fe5b505082546001840154604080517fea9e107a00000000000000000000000000000000000000000000000000000000815260048101899052600160a060020a039384166024820152604481019290925251918616925063ea9e107a91606480830192600092919082900301818387803b15156114ac57fe5b60325a03f115156114b957fe5b50508254600160a060020a0319168355506000600183018190556002830181905560038301555b5b50505050565b6003602090815260009283526040808420909152908252902054600160a060020a031681565b600081815260026020526040812061152583426116cb565b15156115345760059150611582565b80600101544210156115695760018101546202a2ff190142101561155b5760019150611582565b60049150611582565b611582565b6003810154151561157d5760009150611582565b600291505b5b5b5b50919050565b60008260025b61159a8261150d565b60058111156115a557fe5b141580611632575060008181526002602090815260408083205481518301849052815160e060020a638da5cb5b0281529151600160a060020a0390911693638da5cb5b93600480850194919392918390030190829087803b151561160557fe5b60325a03f1151561161257fe5b50505060405180519050600160a060020a031633600160a060020a031614155b1561163d5760006000fd5b600160a060020a03831615156116535760006000fd5b6000848152600260205260408082208054825160e060020a6313af4035028152600160a060020a03888116600483015293519296509216926313af4035926024808201939182900301818387803b15156116a957fe5b60325a03f115156116b657fe5b50505061075d8484611f0a565b5b5b50505050565b60006116d683610764565b821190505b92915050565b60008160025b6116f08261150d565b60058111156116fb57fe5b141580611788575060008181526002602090815260408083205481518301849052815160e060020a638da5cb5b0281529151600160a060020a0390911693638da5cb5b93600480850194919392918390030190829087803b151561175b57fe5b60325a03f1151561176857fe5b50505060405180519050600160a060020a031633600160a060020a031614155b156117935760006000fd5b6000838152600260208190526040909120908101549092506117bc90662386f26fc10000611ecc565b6002830181905582546040805160e160020a63586404b902815260048101939093526001602484015251600160a060020a039091169163b0c8097291604480830192600092919082900301818387803b151561181457fe5b60325a03f1151561182157fe5b505082546040805160006020918201819052825160e060020a638da5cb5b028152925161189095508894600160a060020a031693638da5cb5b936004808301949193928390030190829087803b151561187657fe5b60325a03f1151561188357fe5b5050604051519050611f0a565b81546040805160006020918201819052825160e060020a638da5cb5b0281529251600160a060020a0390941693638da5cb5b9360048082019493918390030190829087803b15156118dd57fe5b60325a03f115156118ea57fe5b50506040805180516002860154600187015490835260208301528251600160a060020a03909116935086927f0f0c27adfd84b60b6f456b0e87cdccb1e5fb9603991588d87fa99f5b6b61e670928290030190a35b5b505050565b60045481565b6249d40081565b600160a060020a033381166000908152600360209081526040808320858452909152812054909116819011156119875760006000fd5b662386f26fc1000034101561199c5760006000fd5b34336119a6612195565b600160a060020a039091168152604051908190036020019082f08015156119c957fe5b33600160a060020a0390811660008181526003602090815260408083208984528252918290208054600160a060020a031916948616949094179093558051348152905193955090935085927fb556ff269c1b6714f432c36431e2041d28436a73b6c3f19c021827bbdc6bfc29929181900390910190a35b5050565b80511515611a525760006000fd5b60025b611a79826001845103815181101515611a6a57fe5b9060200190602002015161150d565b6005811115611a8457fe5b1415611a905760006000fd5b611aa1600182510382600154611ffb565b5b50565b60005b8151811015611a4057611ad18282815181101515611ac257fe5b90602001906020020151611ae5565b5b600101611aa8565b5b5050565b5b505050565b60006000600454421080611b005750600454630784ce000142115b80611b85575060008054600154604080516020908101859052815160e060020a6302571be302815260048101939093529051600160a060020a03308116959416936302571be3936024808201949392918390030190829087803b1515611b6257fe5b60325a03f11515611b6f57fe5b50505060405180519050600160a060020a031614155b15611b905760006000fd5b611b998361150d565b915060015b826005811115611baa57fe5b1415611bb557610cb4565b60005b826005811115611bc457fe5b14611bcf5760006000fd5b50600082815260026020818152604080842042620697800160018201819055938101859055600381019490945580519283525185927f87e97e825a1d1fa0c54e1d36c7506c1dea8b1efd451fe68b000cf96f7cf4000392908290030190a25b5b505050565b60015481565b611c4382611aa5565b611a4081611951565b5b5050565b60008054600154604080516020908101859052815160e060020a6302571be302815260048101939093529051600160a060020a033081169416926302571be392602480830193919282900301818887803b1515611caa57fe5b60325a03f11515611cb757fe5b50505060405180519050600160a060020a03161415611a4057600080546001546040805160e060020a6306ab5923028152600481019290925260248201869052600160a060020a03308116604484015290519216926306ab59239260648084019382900301818387803b1515611d2957fe5b60325a03f11515611d3657fe5b50506001546040805191825260208201859052805191829003810182206000805460e160020a630c4b7b8502855260048501839052602485018290529251919550600160a060020a039092169350631896f70a92604480820193929182900301818387803b1515611da357fe5b60325a03f11515611db057fe5b5050600080546040805160e060020a635b0fc9c302815260048101869052602481018490529051600160a060020a039092169350635b0fc9c392604480830193919282900301818387803b1515611e0357fe5b60325a03f11515610aa457fe5b5050505b5b5050565b805160009060018381019184010182805b82841015611ebf5750825160ff166080811015611e4c57600184019350611eaf565b60e08160ff161015611e6357600284019350611eaf565b60f08160ff161015611e7a57600384019350611eaf565b60f88160ff161015611e9157600484019350611eaf565b60fc8160ff161015611ea857600584019350611eaf565b6006840193505b5b5b5b5b5b600190910190611e2a565b8194505b50505050919050565b600081831115611edd5750816116db565b50806116db565b5b92915050565b600081831015611edd5750816116db565b50806116db565b5b92915050565b60008054600154604080516020908101859052815160e060020a6302571be302815260048101939093529051600160a060020a03308116959416936302571be3936024808201949392918390030190829087803b1515611f6657fe5b60325a03f11515611f7357fe5b50505060405180519050600160a060020a03161415611a4057600080546001546040805160e060020a6306ab5923028152600481019290925260248201869052600160a060020a03858116604484015290519216926306ab59239260648084019382900301818387803b1515611e0357fe5b60325a03f11515610aa457fe5b5050505b5b5050565b6000548251600160a060020a03909116906306ab592390839085908790811061202057fe5b602090810290910101516040805160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a033016604483015251606480830192600092919082900301818387803b151561207957fe5b60325a03f1151561208657fe5b50505080828481518110151561209857fe5b60209081029091018101516040805193845291830152805191829003019020905060008311156120d0576120d0600184038383611ffb565b5b600080546040805160e160020a630c4b7b8502815260048101859052602481018490529051600160a060020a0390921692631896f70a9260448084019382900301818387803b151561211f57fe5b60325a03f1151561212c57fe5b5050600080546040805160e060020a635b0fc9c302815260048101869052602481018490529051600160a060020a039092169350635b0fc9c392604480830193919282900301818387803b151561217f57fe5b60325a03f1151561218c57fe5b5050505b505050565b604051610516806121a6833901905600606060405260405160208061051683398101604052515b60028054600160a060020a03808416600160a060020a0319928316179092556000805433909316929091169190911790554260019081556005805460ff19169091179055346004555b505b6104a6806100706000396000f300606060405236156100885763ffffffff60e060020a60003504166305b34410811461008a5780630b5ab3d5146100ac57806313af4035146100be5780632b20e397146100dc5780633fa4f24514610108578063674f220f1461012a5780638da5cb5b14610156578063b0c8097214610182578063bbe427711461019c578063faab9d39146101b1575bfe5b341561009257fe5b61009a6101cf565b60408051918252519081900360200190f35b34156100b457fe5b6100bc6101d5565b005b34156100c657fe5b6100bc600160a060020a036004351661021d565b005b34156100e457fe5b6100ec6102c3565b60408051600160a060020a039092168252519081900360200190f35b341561011057fe5b61009a6102d2565b60408051918252519081900360200190f35b341561013257fe5b6100ec6102d8565b60408051600160a060020a039092168252519081900360200190f35b341561015e57fe5b6100ec6102e7565b60408051600160a060020a039092168252519081900360200190f35b341561018a57fe5b6100bc60043560243515156102f6565b005b34156101a457fe5b6100bc600435610382565b005b34156101b957fe5b6100bc600160a060020a0360043516610431565b005b60015481565b60055460ff16156101e65760006000fd5b600254604051600160a060020a039182169130163180156108fc02916000818181858888f193505050501561021a5761deadff5b5b565b60005433600160a060020a039081169116146102395760006000fd5b600160a060020a038116151561024f5760006000fd5b600280546003805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03808516919091179092559084169116811790915560408051918252517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369181900360200190a15b5b50565b600054600160a060020a031681565b60045481565b600354600160a060020a031681565b600254600160a060020a031681565b60005433600160a060020a039081169116146103125760006000fd5b60055460ff1615156103245760006000fd5b8160045410156103345760006000fd5b6004829055600254604051600160a060020a039182169130163184900380156108fc02916000818181858888f193505050501580156103705750805b1561037b5760006000fd5b5b5b5b5050565b60005433600160a060020a0390811691161461039e5760006000fd5b60055460ff1615156103b05760006000fd5b6005805460ff1916905561dead6108fc6103e883810330600160a060020a031631025b604051919004801590920291906000818181858888f1935050505015156103fa5760006000fd5b6040517fbb2ce2f51803bba16bc85282b47deeea9a5c6223eabea1077be696b3f265cf1390600090a16102bf6101d5565b5b5b5b50565b60005433600160a060020a0390811691161461044d5760006000fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b505600a165627a7a72305820fbfa6f8a2024760ef0e0eb29a332c9a820526e92f8b4fbcce6f00c7643234b1400297b6c4b278d165a6b33958f8ea5dfb00c8c9d4d0acf1985bef5d10786898bc3e7a165627a7a723058203c2db82e7c80cd1e371fe349b03d49b812c324ba4a3fcd063b7bc2662353c5de0029000000000000000000000000314159265dd8dbb310642f98f50c066173c1259b93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae00000000000000000000000000000000000000000000000000000000590b09b0

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

000000000000000000000000314159265dd8dbb310642f98f50c066173c1259b93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae00000000000000000000000000000000000000000000000000000000590b09b0

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000314159265dd8dbb310642f98f50c066173c1259b
Arg [1] : 93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae
Arg [2] : 00000000000000000000000000000000000000000000000000000000590b09b0

Swarm Source

bzzr://3c2db82e7c80cd1e371fe349b03d49b812c324ba4a3fcd063b7bc2662353c5de
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.