Contract 0x491C05896EF656d7FeE0FB90CE487315ff0aC14C 2

 
 
Txn Hash
Method
Block
From
To
Value
0x58dd65c13a5bc8d0ddc7e5e6defe890e3cc8fcd4194e76b40d81922f2923ea75Cancel Auction153517862022-08-16 10:15:113 days 6 hrs ago0x600ef2b29fb7d7c7234feeb1c483fc1a707ed538 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.00062289 7.80058289
0xa7b37151ba9094b462eb850dd60dccc9fe33ef96ad905824a75c120d1a2d0cb5Cancel Auction140813072022-01-26 12:45:45205 days 4 hrs ago0xde01a8e2f3b5f24c4c907acab50b5bad5363be07 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.00257769 107.30556948
0x45ddb16521075135af5b02403130afda5a98419a969a684c2c262b5cc286ce5fCancel Auction140693932022-01-24 16:24:05207 days 46 mins ago0xaba8930a413c4b4d39bc6b5c1f9f6eedc949d799 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.00747091 119.0527591
0x9aebb1db7afe0b5b041b27ffabab6d2fd5dfa189a5a3c272aad75c17d93a9d97Cancel Auction140693872022-01-24 16:23:17207 days 47 mins ago0xaba8930a413c4b4d39bc6b5c1f9f6eedc949d799 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.00919918 146.59362778
0x1ec42e48339c9b2709866b1e097229360f119652a56fd294a7756e15d2018042Cancel Auction140693852022-01-24 16:23:06207 days 47 mins ago0xaba8930a413c4b4d39bc6b5c1f9f6eedc949d799 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.01011688 161.21762692
0x4a9a413e4a93df40b9217379b3783c26769fbe587409971ea2f9a1be43b4f040Cancel Auction140693852022-01-24 16:23:06207 days 47 mins ago0xaba8930a413c4b4d39bc6b5c1f9f6eedc949d799 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.01011688 161.21762692
0x319a95669112c9a7269877a263db920e52ea594883b6abc3698bfa6c5f3f97c7Cancel Auction140693832022-01-24 16:22:28207 days 48 mins ago0xaba8930a413c4b4d39bc6b5c1f9f6eedc949d799 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.00866231 138.03829548
0x82db5f44bd7ae147c5f2d32b96d87ca5935e69bb229b1762cff433a631c60f80Bid140263472022-01-18 0:38:01213 days 16 hrs agoENS Name ilimer.eth IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c1 Ether0.01252168 150.58971162
0x0a130be998c77faf1d25f50821718a34e0be7a1f11754bfe77f3ae3f4c76937aBid140128172022-01-15 22:32:40215 days 18 hrs ago0x1651284b604ca36b56aaf8bc4859affca527c2d5 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.4 Ether0.00750337 98.16155229
0xd072a8f43dec59dbe60081fcccd76354fd37b7f09744f9f4e25ada5c601ce606Bid140127362022-01-15 22:15:56215 days 18 hrs ago0xac81aea55ffac56a7ef4630ccea931d3165b8fd3 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.4 Ether0.01007499 131.78369453
0xa4a86c248a321c4a76276978f881d27bc79269637286620de3f30a537403382cBid140123792022-01-15 21:03:53215 days 20 hrs ago0x1651284b604ca36b56aaf8bc4859affca527c2d5 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.4 Ether0.01083363 141.70688847
0x176dbefe238b137f073e63cc3e8feffccd5138c4845966d564b1f53229a2cb98Cancel Auction140120502022-01-15 19:56:12215 days 21 hrs ago0x05d85c0a87127b385438c1d909eb2206082d5f8a IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.00283183 117.88511043
0x2d23cf3d8948c52baf807adc82ac986da41f11c98f1a1aeaef6591c917ecb805Cancel Auction140120392022-01-15 19:54:09215 days 21 hrs ago0x05d85c0a87127b385438c1d909eb2206082d5f8a IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.00297186 123.71444894
0x206896bbfbd54a65d7dbc2408896f630c1861c159429a37491da875c89da3108Cancel Auction140120252022-01-15 19:51:12215 days 21 hrs ago0x05d85c0a87127b385438c1d909eb2206082d5f8a IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.00316608 134.72681438
0x67e82613e32f82dde2f51c0f3a76ada9d37517182bf10fdf909c8127f47af6fdCancel Auction140114802022-01-15 17:49:35215 days 23 hrs ago0xf3c1ddb57295af28c0f7e758b537756d04425d0f IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.01253724 199.78723821
0x5269b8084645a25d2003ec79b0b9f263e921875fae4e8b8062aa568f0866a42aCancel Auction140114802022-01-15 17:49:35215 days 23 hrs ago0xf3c1ddb57295af28c0f7e758b537756d04425d0f IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0 Ether0.01595361 199.78723821
0xe312c584f73b5e1f11c6e3d110f9c0498c5e80fdd1d160b26340ee6b6c422302Bid140099512022-01-15 12:12:27216 days 4 hrs ago0xb61f3c3f9066e95da36a32a0dcd8fd9684e892c7 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.369 Ether0.00748653 97.92598123
0x5415f7ed01f65ffa5e2a2826eac9a719e74d26cbe877beb052de97f82f26634cBid140097222022-01-15 11:27:07216 days 5 hrs ago0xb61f3c3f9066e95da36a32a0dcd8fd9684e892c7 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.99999 Ether0.01075592 140.69050657
0x5f2b29ca4c0dc2edfb56c70a97ffb9f645f20fad5479140b4877c7a90137402aBid140097202022-01-15 11:26:14216 days 5 hrs ago0xb61f3c3f9066e95da36a32a0dcd8fd9684e892c7 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.99999 Ether0.01018856 133.26918669
0x359a599f24239aee2964eabb821b949b1355486be9c5c68a5f69935fcfedd0a8Bid140097102022-01-15 11:22:51216 days 5 hrs ago0xb61f3c3f9066e95da36a32a0dcd8fd9684e892c7 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.6 Ether0.00900735 117.83713846
0x6360555c2960e816fea081252f7d63f1495c533f318f83aa1fd54fe3cfc4bf3cBid140096782022-01-15 11:12:54216 days 5 hrs agoENS Name gcamelz.eth IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.5 Ether0.0080812 105.70437349
0x03f02eaa852ef76cfa33807a4a4df7a1c9bbf4ebd6351bc9079a5e1638837278Bid140096682022-01-15 11:11:08216 days 5 hrs ago0x88a731d4ced2e662f2074a316491fc1d6e9b37b3 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.3 Ether0.01036252 135.54460021
0xe027e364b5037f7fbcc45161d071bbe684e13379bcf99b8f24c4f4ee91265f27Bid140096542022-01-15 11:06:45216 days 6 hrs ago0xb61f3c3f9066e95da36a32a0dcd8fd9684e892c7 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.35 Ether0.00850305 111.22234622
0xfc3c2e6deef43fac5cdde560176590775a3951e7928481a95cfa8f707edecce5Bid140096322022-01-15 11:01:29216 days 6 hrs ago0xb61f3c3f9066e95da36a32a0dcd8fd9684e892c7 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.75 Ether0.00800602 104.73746481
0x16eb330ba3401eb14d49ab686fbcafc40cc55b7c18b94142fb9553d6a637d7d1Bid140096302022-01-15 11:01:02216 days 6 hrs ago0xb61f3c3f9066e95da36a32a0dcd8fd9684e892c7 IN  0x491c05896ef656d7fee0fb90ce487315ff0ac14c0.349 Ether0.00769513 100.65442335
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x82db5f44bd7ae147c5f2d32b96d87ca5935e69bb229b1762cff433a631c60f80140263472022-01-18 0:38:01213 days 16 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14cENS Name ilimer.eth0.00001 Ether
0x82db5f44bd7ae147c5f2d32b96d87ca5935e69bb229b1762cff433a631c60f80140263472022-01-18 0:38:01213 days 16 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x9a4e05f09b5c4a2db686fb868b45561fefec8f0a0.9699903 Ether
0x0a130be998c77faf1d25f50821718a34e0be7a1f11754bfe77f3ae3f4c76937a140128172022-01-15 22:32:40215 days 18 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xa92360b4e3895dce3978f603ee76ac1c400717c40.388 Ether
0xd072a8f43dec59dbe60081fcccd76354fd37b7f09744f9f4e25ada5c601ce606140127362022-01-15 22:15:56215 days 18 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x7a92881f55bf105ff5954a637a37f2f9a07dc5a00.388 Ether
0xa4a86c248a321c4a76276978f881d27bc79269637286620de3f30a537403382c140123792022-01-15 21:03:53215 days 20 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xa92360b4e3895dce3978f603ee76ac1c400717c40.388 Ether
0xe312c584f73b5e1f11c6e3d110f9c0498c5e80fdd1d160b26340ee6b6c422302140099512022-01-15 12:12:27216 days 4 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xdb2786e08d9ab601446d3b92a5ba54cb25c784410.35793 Ether
0x5415f7ed01f65ffa5e2a2826eac9a719e74d26cbe877beb052de97f82f26634c140097222022-01-15 11:27:07216 days 5 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x39c4e59bea399f09818c817a7ad96ed4891396ef0.9699903 Ether
0x5f2b29ca4c0dc2edfb56c70a97ffb9f645f20fad5479140b4877c7a90137402a140097202022-01-15 11:26:14216 days 5 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xaba8930a413c4b4d39bc6b5c1f9f6eedc949d7990.9699903 Ether
0x359a599f24239aee2964eabb821b949b1355486be9c5c68a5f69935fcfedd0a8140097102022-01-15 11:22:51216 days 5 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x5777ee98b874bb1a9e59c932fc14bf564d2fe1a50.582 Ether
0x6360555c2960e816fea081252f7d63f1495c533f318f83aa1fd54fe3cfc4bf3c140096782022-01-15 11:12:54216 days 5 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xd736144c39dac0122d70a2ca6b1725a67b0fc00b0.485 Ether
0x03f02eaa852ef76cfa33807a4a4df7a1c9bbf4ebd6351bc9079a5e1638837278140096682022-01-15 11:11:08216 days 5 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xe9e1ff32c5dc9c67cca79c4d2480e146f5f030050.291 Ether
0xe027e364b5037f7fbcc45161d071bbe684e13379bcf99b8f24c4f4ee91265f27140096542022-01-15 11:06:45216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x14935cf2405bc8ff8c3baa4813f087631d9bcc220.3395 Ether
0xfc3c2e6deef43fac5cdde560176590775a3951e7928481a95cfa8f707edecce5140096322022-01-15 11:01:29216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x5777ee98b874bb1a9e59c932fc14bf564d2fe1a50.7275 Ether
0x16eb330ba3401eb14d49ab686fbcafc40cc55b7c18b94142fb9553d6a637d7d1140096302022-01-15 11:01:02216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x6cdbf40df984913ad01cd6a06160637462786c040.33853 Ether
0xb9b2db224dbaa0a686921a742da89760c885983221e7c69d55a87bf100b566f9140096112022-01-15 10:57:52216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xdb2786e08d9ab601446d3b92a5ba54cb25c784410.323301 Ether
0xd9325044d8856b0c04664e4ce443263b031b6e6c468c6ba645acccb6cdbb0900140096082022-01-15 10:56:54216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xa16f32f8a812357a2ef9d63a8bf97f9430448f580.291 Ether
0xb2fda5e5f6ad17f727b9040906d4cd153acbbc97173538623d806b9000b4bbcf140096032022-01-15 10:56:05216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x43e1cb99a288475fc54b295d2fabef314c101d420.4074 Ether
0x38383f87a2ffd21d54bd3c404aa268ebb8cfd1665c1fc7408a3d1d01abffdb10140095762022-01-15 10:49:46216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x3adb7ed3f47dd12c580f0f0bfd5114b516ce467b0.388 Ether
0x001e8b45b5705fc86dbe10eae65c29a7b182c121c09972b96554fb11fe7fb97a140095532022-01-15 10:44:46216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xa16f32f8a812357a2ef9d63a8bf97f9430448f580.291 Ether
0x47f230ea6a8a2da97c1910a4bdad3113ffc222b158e5c6d98181d0b0b4bdb3ce140095512022-01-15 10:44:11216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x1c54da45cfcee5127d9b401e8433b3a9f8c865450.291 Ether
0x0f8d1951458e92c30be060c6067f1feb92046aecf1ad7b40c84c4d48275dcc2c140095012022-01-15 10:32:26216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x4b4bec77dd17d82b0671cf4d0b092969e9be1f1b0.485 Ether
0xce3a7fa3f37dbb2ef1cb39291a37359891a7d8898a78c0a1f4a8bf14e6cd30ed140094712022-01-15 10:26:12216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x57031432769bd20cef776a736b1f8ef84961765a0.388 Ether
0x53eb95a81fc36841ab8b4a394df966163f9cae9b3c76e9bbe51e27d350a8bc59140094692022-01-15 10:25:49216 days 6 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x5777ee98b874bb1a9e59c932fc14bf564d2fe1a50.388 Ether
0xb6d81123e1067dd20690c2051ed63720ae8d7e8c460011ad6fd06bb5d5c83524140089412022-01-15 8:25:06216 days 8 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0xc9508795531733aa1e6b9aec5d738e51fc7f4aba0.29585 Ether
0x9c79ecba828a11ef34aa65508814803645e7bd3c81ec86553a2a5011e48b117d140089302022-01-15 8:21:06216 days 8 hrs ago 0x491c05896ef656d7fee0fb90ce487315ff0ac14c0x8a1ff1f8a84c78d89cbc3d2fd4e6442e68af4a9b0.291 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SaleClockAuction

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-05
*/

pragma solidity ^0.4.11;


contract Ownable {
    address public owner;

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner != address(0)) {
            owner = newOwner;
        }
    }
}


contract ERC721 {
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external view returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
}

contract GeneScienceInterface {
    function isGeneScience() public pure returns (bool);
    function mixGenes(uint256 genes1, uint256 genes2, uint256 targetBlock) public returns (uint256);
}

contract BotAccessControl {
    event ContractUpgrade(address newContract);
    address public ceoAddress;
    address public cfoAddress;
    address public cooAddress;
    bool public paused = false;

    modifier onlyCEO() {
        require(msg.sender == ceoAddress);
        _;
    }

    modifier onlyCFO() {
        require(msg.sender == cfoAddress);
        _;
    }

    modifier onlyCOO() {
        require(msg.sender == cooAddress);
        _;
    }

    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress ||
            msg.sender == ceoAddress ||
            msg.sender == cfoAddress
        );
        _;
    }

    function setCEO(address _newCEO) external onlyCEO {
        require(_newCEO != address(0));

        ceoAddress = _newCEO;
    }

    function setCFO(address _newCFO) external onlyCEO {
        require(_newCFO != address(0));

        cfoAddress = _newCFO;
    }

    function setCOO(address _newCOO) external onlyCEO {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() external onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCEO whenPaused {
        paused = false;
    }
}


contract BotBase is BotAccessControl {
    event Birth(
      address owner,
      uint256 botId,
      uint256 matronId,
      uint256 sireId,
      uint256 genes,
      uint256 birthTime
    );

    event Transfer(address from, address to, uint256 tokenId);

    struct Bot {
        uint256 genes;
        uint64 birthTime;
        uint64 cooldownEndBlock;
        uint32 matronId;
        uint32 sireId;
        uint32 siringWithId;
        uint16 cooldownIndex;
        uint16 generation;
    }

    uint32[14] public cooldowns = [
        uint32(1 minutes),
        uint32(2 minutes),
        uint32(5 minutes),
        uint32(10 minutes),
        uint32(30 minutes),
        uint32(1 hours),
        uint32(2 hours),
        uint32(4 hours),
        uint32(8 hours),
        uint32(16 hours),
        uint32(1 days),
        uint32(2 days),
        uint32(4 days),
        uint32(7 days)
    ];

    uint256 public secondsPerBlock = 15;

    Bot[] bots;

    mapping (uint256 => address) public botIndexToOwner;
    mapping (address => uint256) ownershipTokenCount;
    mapping (uint256 => address) public botIndexToApproved;
    mapping (uint256 => address) public sireAllowedToAddress;
    uint32 public destroyedBots;
    SaleClockAuction public saleAuction;
    SiringClockAuction public siringAuction;

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        if (_to == address(0)) {
            delete botIndexToOwner[_tokenId];
        } else {
            ownershipTokenCount[_to]++;
            botIndexToOwner[_tokenId] = _to;
        }
        if (_from != address(0)) {
            ownershipTokenCount[_from]--;
            delete sireAllowedToAddress[_tokenId];
            delete botIndexToApproved[_tokenId];
        }
        Transfer(_from, _to, _tokenId);
    }

    function _createBot(
        uint256 _matronId,
        uint256 _sireId,
        uint256 _generation,
        uint256 _genes,
        address _owner
    )
        internal
        returns (uint)
    {
        require(_matronId == uint256(uint32(_matronId)));
        require(_sireId == uint256(uint32(_sireId)));
        require(_generation == uint256(uint16(_generation)));

        uint16 cooldownIndex = uint16(_generation / 2);
        if (cooldownIndex > 13) {
            cooldownIndex = 13;
        }

        Bot memory _bot = Bot({
            genes: _genes,
            birthTime: uint64(now),
            cooldownEndBlock: 0,
            matronId: uint32(_matronId),
            sireId: uint32(_sireId),
            siringWithId: 0,
            cooldownIndex: cooldownIndex,
            generation: uint16(_generation)
        });
        uint256 newBotId = bots.push(_bot) - 1;

        require(newBotId == uint256(uint32(newBotId)));

        Birth(
            _owner,
            newBotId,
            uint256(_bot.matronId),
            uint256(_bot.sireId),
            _bot.genes,
            uint256(_bot.birthTime)
       );

        _transfer(0, _owner, newBotId);

        return newBotId;
    }

    function _destroyBot(uint256 _botId) internal {
        require(_botId > 0);
        address from = botIndexToOwner[_botId];
        require(from != address(0));
        destroyedBots++;
        _transfer(from, 0, _botId);
    }

    function setSecondsPerBlock(uint256 secs) external onlyCLevel {
        require(secs < cooldowns[0]);
        secondsPerBlock = secs;
    }
}


contract BotExtension is BotBase {
    event Lock(uint256 botId, uint16 mask);
    mapping (address => bool) extensions;
    mapping (uint256 => uint16) locks;
    uint16 constant LOCK_BREEDING = 1;
    uint16 constant LOCK_TRANSFER = 2;
    uint16 constant LOCK_ALL = LOCK_BREEDING | LOCK_TRANSFER;

    function addExtension(address _contract) external onlyCEO {
        extensions[_contract] = true;
    }

    function removeExtension(address _contract) external onlyCEO {
        delete extensions[_contract];
    }

    modifier onlyExtension() {
        require(extensions[msg.sender] == true);
        _;
    }

    function extCreateBot(
        uint256 _matronId,
        uint256 _sireId,
        uint256 _generation,
        uint256 _genes,
        address _owner
    )
        public
        onlyExtension
        returns (uint)
    {
        return _createBot(_matronId, _sireId, _generation, _genes, _owner);
    }

    function extDestroyBot(uint256 _botId)
        public
        onlyExtension
    {
        require(locks[_botId] == 0);

        _destroyBot(_botId);
    }

    function extLockBot(uint256 _botId, uint16 _mask)
        public
        onlyExtension
    {
        _lockBot(_botId, _mask);
    }

    function _lockBot(uint256 _botId, uint16 _mask)
        internal
    {
        require(_mask > 0);

        uint16 mask = locks[_botId];
        require(mask & _mask == 0);

        if (_mask & LOCK_BREEDING > 0) {
            Bot storage bot = bots[_botId];
            require(bot.siringWithId == 0);
        }

        if (_mask & LOCK_TRANSFER > 0) {
            address owner = botIndexToOwner[_botId];
            require(owner != address(saleAuction));
            require(owner != address(siringAuction));
        }

        mask |= _mask;

        locks[_botId] = mask;

        Lock(_botId, mask);
    }

    function extUnlockBot(uint256 _botId, uint16 _mask)
        public
        onlyExtension
        returns (uint16)
    {
        _unlockBot(_botId, _mask);
    }

    function _unlockBot(uint256 _botId, uint16 _mask)
        internal
    {
        require(_mask > 0);

        uint16 mask = locks[_botId];
        require(mask & _mask == _mask);
        mask ^= _mask;

        locks[_botId] = mask;

        Lock(_botId, mask);
    }

    function extGetLock(uint256 _botId)
        public
        view
        onlyExtension
        returns (uint16)
    {
        return locks[_botId];
    }
}


contract BotOwnership is BotExtension, ERC721 {
    string public constant name = "CryptoBots";
    string public constant symbol = "CBT";

    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return botIndexToOwner[_tokenId] == _claimant;
    }

    function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return botIndexToApproved[_tokenId] == _claimant;
    }

    function _approve(uint256 _tokenId, address _approved) internal {
        botIndexToApproved[_tokenId] = _approved;
    }

    function balanceOf(address _owner) public view returns (uint256 count) {
        return ownershipTokenCount[_owner];
    }

    function transfer(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_to != address(saleAuction));
        require(_to != address(siringAuction));
        require(_owns(msg.sender, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _transfer(msg.sender, _to, _tokenId);
    }

    function approve(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _approve(_tokenId, _to);
        Approval(msg.sender, _to, _tokenId);
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public view returns (uint) {
        return bots.length - destroyedBots;
    }

    function ownerOf(uint256 _tokenId)
        external
        view
        returns (address owner)
    {
        owner = botIndexToOwner[_tokenId];
        require(owner != address(0));
    }

    function tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) {
        uint256 tokenCount = balanceOf(_owner);

        if (tokenCount == 0) {
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 totalBots = bots.length - 1;
            uint256 resultIndex = 0;
            uint256 botId;
            for (botId = 0; botId <= totalBots; botId++) {
                if (botIndexToOwner[botId] == _owner) {
                    result[resultIndex] = botId;
                    resultIndex++;
                }
            }

            return result;
        }
    }
}


contract BotBreeding is BotOwnership {
    event Pregnant(address owner, uint256 matronId, uint256 sireId, uint256 cooldownEndBlock);
    uint256 public autoBirthFee = 2 finney;
    uint256 public pregnantBots;
    GeneScienceInterface public geneScience;

    function setGeneScienceAddress(address _address) external onlyCEO {
        GeneScienceInterface candidateContract = GeneScienceInterface(_address);
        require(candidateContract.isGeneScience());
        geneScience = candidateContract;
    }

    function _isReadyToBreed(uint256 _botId, Bot _bot) internal view returns (bool) {
        return
            (_bot.siringWithId == 0) &&
            (_bot.cooldownEndBlock <= uint64(block.number)) &&
            (locks[_botId] & LOCK_BREEDING == 0);
    }

    function _isSiringPermitted(uint256 _sireId, uint256 _matronId) internal view returns (bool) {
        address matronOwner = botIndexToOwner[_matronId];
        address sireOwner = botIndexToOwner[_sireId];
        return (matronOwner == sireOwner || sireAllowedToAddress[_sireId] == matronOwner);
    }

    function _triggerCooldown(Bot storage _bot) internal {
        _bot.cooldownEndBlock = uint64((cooldowns[_bot.cooldownIndex]/secondsPerBlock) + block.number);
        if (_bot.cooldownIndex < 13) {
            _bot.cooldownIndex += 1;
        }
    }

    function approveSiring(address _addr, uint256 _sireId)
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _sireId));
        sireAllowedToAddress[_sireId] = _addr;
    }

    function setAutoBirthFee(uint256 val) external onlyCOO {
        autoBirthFee = val;
    }

    function _isReadyToGiveBirth(Bot _matron) private view returns (bool) {
        return (_matron.siringWithId != 0) && (_matron.cooldownEndBlock <= uint64(block.number));
    }

    function isReadyToBreed(uint256 _botId)
        public
        view
        returns (bool)
    {
        Bot storage bot = bots[_botId];
        return _botId > 0 && _isReadyToBreed(_botId, bot);
    }

    function isPregnant(uint256 _botId)
        public
        view
        returns (bool)
    {
        return _botId > 0 && bots[_botId].siringWithId != 0;
    }

    function _isValidMatingPair(
        Bot storage _matron,
        uint256 _matronId,
        Bot storage _sire,
        uint256 _sireId
    )
        private
        view
        returns(bool)
    {
        if (_matronId == _sireId) {
            return false;
        }
        if (_matron.matronId == _sireId || _matron.sireId == _sireId) {
            return false;
        }
        if (_sire.matronId == _matronId || _sire.sireId == _matronId) {
            return false;
        }
        if (_sire.matronId == 0 || _matron.matronId == 0) {
            return true;
        }
        if (_sire.matronId == _matron.matronId || _sire.matronId == _matron.sireId) {
            return false;
        }
        if (_sire.sireId == _matron.matronId || _sire.sireId == _matron.sireId) {
            return false;
        }
        return true;
    }

    function _canBreedWithViaAuction(uint256 _matronId, uint256 _sireId)
        internal
        view
        returns (bool)
    {
        Bot storage matron = bots[_matronId];
        Bot storage sire = bots[_sireId];
        return _isValidMatingPair(matron, _matronId, sire, _sireId);
    }

    function canBreedWith(uint256 _matronId, uint256 _sireId)
        external
        view
        returns(bool)
    {
        require(_matronId > 0);
        require(_sireId > 0);
        Bot storage matron = bots[_matronId];
        Bot storage sire = bots[_sireId];
        return _isValidMatingPair(matron, _matronId, sire, _sireId) &&
            _isSiringPermitted(_sireId, _matronId);
    }

    function _breedWith(uint256 _matronId, uint256 _sireId) internal {
        Bot storage sire = bots[_sireId];
        Bot storage matron = bots[_matronId];
        matron.siringWithId = uint32(_sireId);
        _triggerCooldown(sire);
        _triggerCooldown(matron);
        delete sireAllowedToAddress[_matronId];
        delete sireAllowedToAddress[_sireId];
        pregnantBots++;
        Pregnant(botIndexToOwner[_matronId], _matronId, _sireId, matron.cooldownEndBlock);
    }

    function breedWithAuto(uint256 _matronId, uint256 _sireId)
        external
        payable
        whenNotPaused
    {
        require(msg.value >= autoBirthFee);
        require(_owns(msg.sender, _matronId));
        require(_isSiringPermitted(_sireId, _matronId));
        Bot storage matron = bots[_matronId];
        require(_isReadyToBreed(_matronId, matron));
        Bot storage sire = bots[_sireId];
        require(_isReadyToBreed(_sireId, sire));
        require(_isValidMatingPair(
            matron,
            _matronId,
            sire,
            _sireId
        ));
        _breedWith(_matronId, _sireId);
    }

    function giveBirth(uint256 _matronId)
        external
        whenNotPaused
        returns(uint256)
    {
        Bot storage matron = bots[_matronId];
        require(matron.birthTime != 0);
        require(_isReadyToGiveBirth(matron));
        uint256 sireId = matron.siringWithId;
        Bot storage sire = bots[sireId];
        uint16 parentGen = matron.generation;
        if (sire.generation > matron.generation) {
            parentGen = sire.generation;
        }
        uint256 childGenes = geneScience.mixGenes(matron.genes, sire.genes, matron.cooldownEndBlock - 1);
        address owner = botIndexToOwner[_matronId];
        uint256 botId = _createBot(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner);
        delete matron.siringWithId;
        pregnantBots--;
        msg.sender.send(autoBirthFee);
        return botId;
    }
}


contract ClockAuctionBase {
    struct Auction {
        address seller;
        uint128 startingPrice;
        uint128 endingPrice;
        uint64 duration;
        uint64 startedAt;
    }
    ERC721 public nonFungibleContract;
    uint256 public ownerCut;
    mapping (uint256 => Auction) tokenIdToAuction;
    event AuctionCreated(
      address seller,
      uint256 tokenId,
      uint256 startingPrice,
      uint256 endingPrice,
      uint256 creationTime,
      uint256 duration
    );
    event AuctionSuccessful(uint256 tokenId, uint256 totalPrice, address seller, address winner, uint256 time);
    event AuctionCancelled(uint256 tokenId, address seller, uint256 time);

    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return (nonFungibleContract.ownerOf(_tokenId) == _claimant);
    }

    function _escrow(address _owner, uint256 _tokenId) internal {
        nonFungibleContract.transferFrom(_owner, this, _tokenId);
    }

    function _transfer(address _receiver, uint256 _tokenId) internal {
        nonFungibleContract.transfer(_receiver, _tokenId);
    }

    function _addAuction(uint256 _tokenId, Auction _auction) internal {
        require(_auction.duration >= 1 minutes);
        tokenIdToAuction[_tokenId] = _auction;
        AuctionCreated(
            _auction.seller,
            uint256(_tokenId),
            uint256(_auction.startingPrice),
            uint256(_auction.endingPrice),
            uint256(_auction.startedAt),
            uint256(_auction.duration)
        );
    }

    function _cancelAuction(uint256 _tokenId, address _seller) internal {
        _removeAuction(_tokenId);
        _transfer(_seller, _tokenId);
        AuctionCancelled(_tokenId, _seller, uint256(now));
    }

    function _bid(uint256 _tokenId, uint256 _bidAmount)
        internal
        returns (uint256)
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        uint256 price = _currentPrice(auction);
        require(_bidAmount >= price);
        address seller = auction.seller;
        _removeAuction(_tokenId);
        if (price > 0) {
            uint256 auctioneerCut = _computeCut(price);
            uint256 sellerProceeds = price - auctioneerCut;
            seller.transfer(sellerProceeds);
        }
        uint256 bidExcess = _bidAmount - price;
        msg.sender.transfer(bidExcess);
        AuctionSuccessful(_tokenId, price, seller, msg.sender, uint256(now));
        return price;
    }

    function _removeAuction(uint256 _tokenId) internal {
        delete tokenIdToAuction[_tokenId];
    }

    function _isOnAuction(Auction storage _auction) internal view returns (bool) {
        return (_auction.startedAt > 0);
    }

    function _currentPrice(Auction storage _auction)
        internal
        view
        returns (uint256)
    {
        uint256 secondsPassed = 0;
        if (now > _auction.startedAt) {
            secondsPassed = now - _auction.startedAt;
        }
        return _computeCurrentPrice(
            _auction.startingPrice,
            _auction.endingPrice,
            _auction.duration,
            secondsPassed
        );
    }

    function _computeCurrentPrice(
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        uint256 _secondsPassed
    )
        internal
        pure
        returns (uint256)
    {
        if (_secondsPassed >= _duration) {
            return _endingPrice;
        } else {
            int256 totalPriceChange = int256(_endingPrice) - int256(_startingPrice);
            int256 currentPriceChange = totalPriceChange * int256(_secondsPassed) / int256(_duration);
            int256 currentPrice = int256(_startingPrice) + currentPriceChange;
            return uint256(currentPrice);
        }
    }

    function _computeCut(uint256 _price) internal view returns (uint256) {
        return _price * ownerCut / 10000;
    }
}


contract Pausable is Ownable {
    event Pause();
    event Unpause();
    bool public paused = false;

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() public onlyOwner whenNotPaused returns (bool) {
        paused = true;
        Pause();
        return true;
    }

    function unpause() public onlyOwner whenPaused returns (bool) {
        paused = false;
        Unpause();
        return true;
    }
}


contract ClockAuction is Pausable, ClockAuctionBase {
    function ClockAuction(address _nftAddress, uint256 _cut) public {
        require(_cut <= 10000);
        ownerCut = _cut;

        ERC721 candidateContract = ERC721(_nftAddress);
        nonFungibleContract = candidateContract;
    }

    function withdrawBalance() external {
        address nftAddress = address(nonFungibleContract);
        require(
            msg.sender == owner ||
            msg.sender == nftAddress
        );
        bool res = nftAddress.send(this.balance);
    }

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
        whenNotPaused
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(_owns(msg.sender, _tokenId));
        _escrow(msg.sender, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
        whenNotPaused
    {
        _bid(_tokenId, msg.value);
        _transfer(msg.sender, _tokenId);
    }

    function cancelAuction(uint256 _tokenId)
        external
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        address seller = auction.seller;
        require(msg.sender == seller);
        _cancelAuction(_tokenId, seller);
    }

    function cancelAuctionWhenPaused(uint256 _tokenId)
        external
        whenPaused
        onlyOwner
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        _cancelAuction(_tokenId, auction.seller);
    }

    function getAuction(uint256 _tokenId)
        external
        view
        returns
    (
        address seller,
        uint256 startingPrice,
        uint256 endingPrice,
        uint256 duration,
        uint256 startedAt
    )
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        return (
            auction.seller,
            auction.startingPrice,
            auction.endingPrice,
            auction.duration,
            auction.startedAt
        );
    }

    function getCurrentPrice(uint256 _tokenId)
        external
        view
        returns (uint256)
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        return _currentPrice(auction);
    }

}


contract SiringClockAuction is ClockAuction {
    bool public isSiringClockAuction = true;

    function SiringClockAuction(address _nftAddr, uint256 _cut) public
        ClockAuction(_nftAddr, _cut) {}

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(msg.sender == address(nonFungibleContract));
        _escrow(_seller, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
    {
        require(msg.sender == address(nonFungibleContract));
        address seller = tokenIdToAuction[_tokenId].seller;
        _bid(_tokenId, msg.value);
        _transfer(seller, _tokenId);
    }

}


contract SaleClockAuction is ClockAuction {
    bool public isSaleClockAuction = true;
    uint256 public gen0SaleCount;
    uint256[5] public lastGen0SalePrices;

    function SaleClockAuction(address _nftAddr, uint256 _cut) public
        ClockAuction(_nftAddr, _cut) {}

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(msg.sender == address(nonFungibleContract));
        _escrow(_seller, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
    {
        address seller = tokenIdToAuction[_tokenId].seller;
        uint256 price = _bid(_tokenId, msg.value);
        _transfer(msg.sender, _tokenId);
        if (seller == address(nonFungibleContract)) {
            lastGen0SalePrices[gen0SaleCount % 5] = price;
            gen0SaleCount++;
        }
    }

    function averageGen0SalePrice() external view returns (uint256) {
        uint256 sum = 0;
        for (uint256 i = 0; i < 5; i++) {
            sum += lastGen0SalePrices[i];
        }
        return sum / 5;
    }

}


contract BotAuction is BotBreeding {
    function setSaleAuctionAddress(address _address) external onlyCEO {
        SaleClockAuction candidateContract = SaleClockAuction(_address);
        require(candidateContract.isSaleClockAuction());
        saleAuction = candidateContract;
    }

    function setSiringAuctionAddress(address _address) external onlyCEO {
        SiringClockAuction candidateContract = SiringClockAuction(_address);
        require(candidateContract.isSiringClockAuction());
        siringAuction = candidateContract;
    }

    function createSaleAuction(
        uint256 _botId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _botId));
        require(!isPregnant(_botId));
        _approve(_botId, saleAuction);
        saleAuction.createAuction(
            _botId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    function createSiringAuction(
        uint256 _botId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _botId));
        require(isReadyToBreed(_botId));
        _approve(_botId, siringAuction);
        siringAuction.createAuction(
            _botId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    function bidOnSiringAuction(
        uint256 _sireId,
        uint256 _matronId
    )
        external
        payable
        whenNotPaused
    {
        require(_owns(msg.sender, _matronId));
        require(isReadyToBreed(_matronId));
        require(_canBreedWithViaAuction(_matronId, _sireId));
        uint256 currentPrice = siringAuction.getCurrentPrice(_sireId);
        require(msg.value >= currentPrice + autoBirthFee);
        siringAuction.bid.value(msg.value - autoBirthFee)(_sireId);
        _breedWith(uint32(_matronId), uint32(_sireId));
    }

    function withdrawAuctionBalances() external onlyCLevel {
        saleAuction.withdrawBalance();
        siringAuction.withdrawBalance();
    }
}


contract BotMinting is BotAuction {
    uint256 public constant PROMO_CREATION_LIMIT = 5000;
    uint256 public constant GEN0_CREATION_LIMIT = 45000;
    uint256 public constant GEN0_STARTING_PRICE = 10 finney;
    uint256 public constant GEN0_AUCTION_DURATION = 1 days;
    uint256 public promoCreatedCount;
    uint256 public gen0CreatedCount;

    function createPromoBot(uint256 _genes, address _owner) external onlyCOO {
        address botOwner = _owner;
        if (botOwner == address(0)) {
            botOwner = cooAddress;
        }
        require(promoCreatedCount < PROMO_CREATION_LIMIT);

        promoCreatedCount++;
        _createBot(0, 0, 0, _genes, botOwner);
    }

    function createGen0Auction(uint256 _genes) external onlyCOO {
        require(gen0CreatedCount < GEN0_CREATION_LIMIT);

        uint256 botId = _createBot(0, 0, 0, _genes, address(this));
        _approve(botId, saleAuction);

        saleAuction.createAuction(
            botId,
            _computeNextGen0Price(),
            0,
            GEN0_AUCTION_DURATION,
            address(this)
        );

        gen0CreatedCount++;
    }

    function _computeNextGen0Price() internal view returns (uint256) {
        uint256 avePrice = saleAuction.averageGen0SalePrice();
        require(avePrice == uint256(uint128(avePrice)));
        uint256 nextPrice = avePrice + (avePrice / 2);
        if (nextPrice < GEN0_STARTING_PRICE) {
            nextPrice = GEN0_STARTING_PRICE;
        }
        return nextPrice;
    }
}


contract BotCore is BotMinting {
    address public newContractAddress;

    function BotCore() public {
        paused = true;
        ceoAddress = msg.sender;
        cooAddress = msg.sender;
        _createBot(0, 0, 0, uint256(-1), msg.sender);
    }

    function setNewAddress(address _v2Address) external onlyCEO whenPaused {
        newContractAddress = _v2Address;
        ContractUpgrade(_v2Address);
    }

    function() external payable {
        require(
            msg.sender == address(saleAuction) ||
            msg.sender == address(siringAuction)
        );
    }

    function getBot(uint256 _id)
        external
        view
        returns (
        bool isGestating,
        bool isReady,
        uint256 cooldownIndex,
        uint256 nextActionAt,
        uint256 siringWithId,
        uint256 birthTime,
        uint256 matronId,
        uint256 sireId,
        uint256 generation,
        uint256 genes
    )
    {
        require(botIndexToOwner[_id] != address(0));
        Bot storage bot = bots[_id];
        isGestating = (bot.siringWithId != 0);
        isReady = (bot.cooldownEndBlock <= block.number);
        cooldownIndex = uint256(bot.cooldownIndex);
        nextActionAt = uint256(bot.cooldownEndBlock);
        siringWithId = uint256(bot.siringWithId);
        birthTime = uint256(bot.birthTime);
        matronId = uint256(bot.matronId);
        sireId = uint256(bot.sireId);
        generation = uint256(bot.generation);
        genes = bot.genes;
    }

    function unpause() public onlyCEO whenPaused {
        require(saleAuction != address(0));
        require(siringAuction != address(0));
        require(geneScience != address(0));
        require(newContractAddress == address(0));
        super.unpause();
    }

    function withdrawBalance() external onlyCFO {
        uint256 balance = this.balance;
        uint256 subtractFees = (pregnantBots + 1) * autoBirthFee;
        if (balance > subtractFees) {
            cfoAddress.send(balance - subtractFees);
        }
    }

    function destroyBot(uint256 _botId) external onlyCEO {
        require(locks[_botId] == 0);
        _destroyBot(_botId);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"},{"name":"_seller","type":"address"}],"name":"createAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"lastGen0SalePrices","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getAuction","outputs":[{"name":"seller","type":"address"},{"name":"startingPrice","type":"uint256"},{"name":"endingPrice","type":"uint256"},{"name":"duration","type":"uint256"},{"name":"startedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ownerCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isSaleClockAuction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancelAuctionWhenPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gen0SaleCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancelAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getCurrentPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nonFungibleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"averageGen0SalePrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_nftAddr","type":"address"},{"name":"_cut","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"seller","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"startingPrice","type":"uint256"},{"indexed":false,"name":"endingPrice","type":"uint256"},{"indexed":false,"name":"creationTime","type":"uint256"},{"indexed":false,"name":"duration","type":"uint256"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"totalPrice","type":"uint256"},{"indexed":false,"name":"seller","type":"address"},{"indexed":false,"name":"winner","type":"address"},{"indexed":false,"name":"time","type":"uint256"}],"name":"AuctionSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"seller","type":"address"},{"indexed":false,"name":"time","type":"uint256"}],"name":"AuctionCancelled","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

606060405260008060146101000a81548160ff0219169083151502179055506001600460006101000a81548160ff021916908315150217905550341561004457600080fd5b6040516040806118a28339810160405280805190602001909190805190602001909190505081816000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061271082111515156100be57600080fd5b8160028190555082905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506117858061011d6000396000f3006060604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806327ebe40a146101015780633f4ba83a1461015e578063454a2ab31461018b578063484eccb4146101a35780635c975abb146101da5780635fd8c7101461020757806378bd79351461021c57806383b5ff8b1461029b5780638456cb59146102c457806385b86188146102f1578063878eb3681461031e5780638a98a9cc146103415780638da5cb5b1461036a57806396b5a755146103bf578063c55d0f56146103e2578063dd1b7a0f14610419578063eac9d94c1461046e578063f2fde38b14610497575b600080fd5b341561010c57600080fd5b61015c600480803590602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506104d0565b005b341561016957600080fd5b610171610620565b604051808215151515815260200191505060405180910390f35b6101a160048080359060200190919050506106e5565b005b34156101ae57600080fd5b6101c460048080359060200190919050506107c7565b6040518082815260200191505060405180910390f35b34156101e557600080fd5b6101ed6107e1565b604051808215151515815260200191505060405180910390f35b341561021257600080fd5b61021a6107f4565b005b341561022757600080fd5b61023d60048080359060200190919050506108ff565b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b34156102a657600080fd5b6102ae610a22565b6040518082815260200191505060405180910390f35b34156102cf57600080fd5b6102d7610a28565b604051808215151515815260200191505060405180910390f35b34156102fc57600080fd5b610304610aef565b604051808215151515815260200191505060405180910390f35b341561032957600080fd5b61033f6004808035906020019091905050610b02565b005b341561034c57600080fd5b610354610bd4565b6040518082815260200191505060405180910390f35b341561037557600080fd5b61037d610bda565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103ca57600080fd5b6103e06004808035906020019091905050610bff565b005b34156103ed57600080fd5b6104036004808035906020019091905050610c9b565b6040518082815260200191505060405180910390f35b341561042457600080fd5b61042c610cd8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561047957600080fd5b610481610cfe565b6040518082815260200191505060405180910390f35b34156104a257600080fd5b6104ce600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610d4a565b005b6104d86116db565b846fffffffffffffffffffffffffffffffff16851415156104f857600080fd5b836fffffffffffffffffffffffffffffffff168414151561051857600080fd5b8267ffffffffffffffff168314151561053057600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561058c57600080fd5b6105968287610e1f565b60a0604051908101604052808373ffffffffffffffffffffffffffffffffffffffff168152602001866fffffffffffffffffffffffffffffffff168152602001856fffffffffffffffffffffffffffffffff1681526020018467ffffffffffffffff1681526020014267ffffffffffffffff1681525090506106188682610f2f565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561067d57600080fd5b600060149054906101000a900460ff16151561069857600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a16001905090565b6000806003600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915061072b8334611162565b9050610737338461133d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c2578060066005805481151561079d57fe5b066005811015156107aa57fe5b01819055506005600081548092919060010191905055505b505050565b6006816005811015156107d657fe5b016000915090505481565b600060149054906101000a900460ff1681565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108a257508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156108ad57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505090505050565b60008060008060008060036000888152602001908152602001600020905061092681611419565b151561093157600080fd5b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a90046fffffffffffffffffffffffffffffffff168260010160109054906101000a90046fffffffffffffffffffffffffffffffff168360020160009054906101000a900467ffffffffffffffff168460020160089054906101000a900467ffffffffffffffff16836fffffffffffffffffffffffffffffffff169350826fffffffffffffffffffffffffffffffff1692508167ffffffffffffffff1691508067ffffffffffffffff169050955095509550955095505091939590929450565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a8557600080fd5b600060149054906101000a900460ff16151515610aa157600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a16001905090565b600460009054906101000a900460ff1681565b60008060149054906101000a900460ff161515610b1e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b7957600080fd5b600360008381526020019081526020016000209050610b9781611419565b1515610ba257600080fd5b610bd0828260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611447565b5050565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600360008481526020019081526020016000209150610c2082611419565b1515610c2b57600080fd5b8160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c8c57600080fd5b610c968382611447565b505050565b600080600360008481526020019081526020016000209050610cbc81611419565b1515610cc757600080fd5b610cd0816114d1565b915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000809150600090505b6005811015610d3657600681600581101515610d2357fe5b0154820191508080600101915050610d0b565b600582811515610d4257fe5b049250505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610da557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610e1c57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1515610f1757600080fd5b6102c65a03f11515610f2857600080fd5b5050505050565b603c816060015167ffffffffffffffff1610151515610f4d57600080fd5b806003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060408201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050507fabdd2430f9e10eb5db384c1218c42f980dd5fcda760a680a0d95ec506f0963cb81600001518383602001516fffffffffffffffffffffffffffffffff1684604001516fffffffffffffffffffffffffffffffff16856080015167ffffffffffffffff16866060015167ffffffffffffffff16604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a15050565b6000806000806000806000600360008a8152602001908152602001600020955061118b86611419565b151561119657600080fd5b61119f866114d1565b94508488101515156111b057600080fd5b8560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693506111e0896115c4565b600085111561123a576111f285611680565b925082850391508373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561123957600080fd5b5b84880390503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561127f57600080fd5b7fc2a394cb356728b3540b84dee72ea6de41f44fd94de223565258efe1549ee06f8986863342604051808681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019550505050505060405180910390a184965050505050505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b151561140157600080fd5b6102c65a03f1151561141257600080fd5b5050505050565b6000808260020160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16119050919050565b611450826115c4565b61145a818361133d565b7f6a3d5a07d548e27ae884a742682e9b929c0a0e4040990bc28c04637c5c077104828242604051808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b600080600090508260020160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1642111561152a578260020160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16420390505b6115bc8360010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168460010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168560020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168461169b565b915050919050565b60036000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556001820160106101000a8154906fffffffffffffffffffffffffffffffff02191690556002820160006101000a81549067ffffffffffffffff02191690556002820160086101000a81549067ffffffffffffffff0219169055505050565b6000612710600254830281151561169357fe5b049050919050565b60008060008085851015156116b2578693506116d0565b8787039250858584028115156116c457fe5b05915081880190508093505b505050949350505050565b60a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff16815250905600a165627a7a72305820ce73472da5c157de9546269548efbca452f27ff4336c791069913da59e2a74900029000000000000000000000000f7a6e15dfd5cdd9ef12711bd757a9b6021abf643000000000000000000000000000000000000000000000000000000000000012c

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

000000000000000000000000f7a6e15dfd5cdd9ef12711bd757a9b6021abf643000000000000000000000000000000000000000000000000000000000000012c

-----Decoded View---------------
Arg [0] : _nftAddr (address): 0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf643
Arg [1] : _cut (uint256): 300

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f7a6e15dfd5cdd9ef12711bd757a9b6021abf643
Arg [1] : 000000000000000000000000000000000000000000000000000000000000012c


Swarm Source

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

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.