Contract 0xCa891ae246e7177aad7b50dFB1b5E9993A63EaFe

 
Txn Hash Method
Block
From
To
Value
0xb3773780808ddfbec12b7cba6984bf1bd30c20667ffb8351d5f37fb1bbd44652Bid123135952021-04-26 3:49:4558 days 8 hrs ago0xb75dcd3c785ba6a18ae89a8a91b54e554a9622bd IN  BC: Sale Market 50.090000009 Ether0.00233683543
0x37b1b38613260ffa7ab550add3fffff585d00dc2375613506831c59e46f8ef72Bid120854512021-03-22 0:42:1093 days 11 hrs ago0x1588846aefb92e774e7592f05b42defb500f5a2b IN  BC: Sale Market 50.0890000089 Ether0.010298975155
0xc154447259d871ae75b0cf7ba2783b1214703bf29005e61761c0ef3a44d87bf7Cancel Active Au...119643792021-03-03 9:07:49112 days 3 hrs ago0xab3009dbb3c9a5694ed818cf0d159e069dd55107 IN  BC: Sale Market 50 Ether0.003134885
0x552bc0b5196418c6fb3bb4b57f4636c357ef84cb66a56c959d694f5ea44c67bbBid118319712021-02-11 0:11:08132 days 12 hrs ago0x7083968bd08873d402f879c09fbf69ed05176572 IN  BC: Sale Market 50.0060000006 Ether0.005952397139
0xa80374361037783c715f5a7b14b5a1ad35aa3b0313dac5f4aa6da5654c959173Bid116583352021-01-15 7:29:34159 days 5 hrs ago0x3e0590bf02762888431eb19767333029d0f240d2 IN  BC: Sale Market 50.010000001 Ether0.0021606942
0x3dee16f2c49776a223f65b6f5ba0319d3b006255e8ea6741798db3d28dced6b4Bid116581472021-01-15 6:51:21159 days 5 hrs ago0x3e0590bf02762888431eb19767333029d0f240d2 IN  BC: Sale Market 50.010000001 Ether0.0021606942
0x3d41dd32b8cabb5d985079ab96858848055ec0d48f0ca10cd5e3b3797c0ff148Bid116490642021-01-13 21:04:06160 days 15 hrs ago0x3e0590bf02762888431eb19767333029d0f240d2 IN  BC: Sale Market 50.0250000025 Ether0.00200635539
0xa2ebc3a36e043c6adfe25bd34a983bbadcb75867ea2607792afc9ddd3f1d9de0Bid116442662021-01-13 3:37:54161 days 8 hrs ago0x3e0590bf02762888431eb19767333029d0f240d2 IN  BC: Sale Market 50.0150000015 Ether0.0046300590
0x5ccf6df7a279395db9bca1488c11fca747056bfc92338beb6036c8561dd4f12aBid116190832021-01-09 6:49:35165 days 5 hrs ago0x3e0590bf02762888431eb19767333029d0f240d2 IN  BC: Sale Market 50.0080000008 Ether0.00282947555
0x41386cf67721b91c0d6498862962a140f46e132d79e26b6b349f39366738f4f0Bid110634802020-10-15 23:42:13250 days 12 hrs ago0xac959487a2bc39a46c87fc882e68db334830c4e6 IN  BC: Sale Market 50.0050000005 Ether0.00169768533
0xa9f323dcd4cf2da1de379dd69e96fcf71d751b52c2f4582bbf3cc466e82be226Bid110495132020-10-13 20:36:56252 days 16 hrs ago0x8edac8633cd4f1cf4d8c92523229202a6d9c383e IN  BC: Sale Market 50.0040000004 Ether0.00352158553
0x5e3702873138c82a020026cc365a0e7925830ac7535e9a6bdfb57dd935c17a3dBid109752692020-10-02 7:24:25264 days 5 hrs ago0xac959487a2bc39a46c87fc882e68db334830c4e6 IN  BC: Sale Market 50.0030000003 Ether0.0047840472
0x6abec75df88ad6263626bfa1d390ae324d271d10d5c6a751db91b11afe67746cBid109448832020-09-27 13:22:15268 days 23 hrs ago0xd5fb0d915a18b2832d5c59f1652f7eb326017909 IN  BC: Sale Market 50.00850000085 Ether0.00262369551
0x34601eca2457807b8078e16135d507b867825d10940bc89935d4bf2c3827e6bfCancel Active Au...98408752020-04-09 23:04:58439 days 13 hrs ago0x7eb0fd6a30d1ff304b8011a6b13673e1f40dfbbc IN  BC: Sale Market 50 Ether0.000036881
0xaee7836d37da5b7592410e62812004d1413910462c1133a5bced5f215b94cee3Cancel Active Au...98408752020-04-09 23:04:58439 days 13 hrs ago0x7eb0fd6a30d1ff304b8011a6b13673e1f40dfbbc IN  BC: Sale Market 50 Ether0.000051881
0xdd7a1c784d6f3918e08b3f31d5c331f67e3f76b0021d8ed290af15f981eae0c2Cancel Active Au...98112612020-04-05 9:31:24444 days 3 hrs ago0x093c22ab6d9a14b364efcb7848c94b600a30389b IN  BC: Sale Market 50 Ether0.0001032642.8
0x5ef76b74c0a3f4f9e1923e1f962d7f1784c344dcde87b3e244c0d257085445b8Cancel Active Au...98069872020-04-04 17:52:00444 days 18 hrs ago0x65bcdca99916a6eb6a8fcd0d36633b981438391a IN  BC: Sale Market 50 Ether0.000036881
0x47bf8901c80723a161ca8e0f5c3b6bfe66eddb0cced62b39afbfc5aefc47c9b6Cancel Active Au...98069872020-04-04 17:52:00444 days 18 hrs ago0x65bcdca99916a6eb6a8fcd0d36633b981438391a IN  BC: Sale Market 50 Ether0.000036881
0xbc39c67a644898718bf40a912e5ae57b35e812ccb903e08d359d68eb84cc53b4Bid97802032020-03-31 15:02:27448 days 21 hrs ago0xe069f62a3ac39e3d82c3396bab7efd65392a4b64 IN  BC: Sale Market 50.0020000002 Ether0.0002572255
0xaf3c4ace6a1ed48258af6e69747c3b33858e651afe48071361f0544bcfba14cbBid95950502020-03-03 0:53:13477 days 11 hrs ago0x050d1c69bbf37ecbbf22bab0241773d9682b7b08 IN  BC: Sale Market 50.010000001 Ether0.0000514451
0x39ae0ff85d89d5a6c3c2e90c35e0afa6d4c4c0902428a73f577f1f601e3bff62Cancel Active Au...94516122020-02-09 23:41:52499 days 12 hrs ago0xdb014277e9e353f18b51e5f8225db790784c5040 IN  BC: Sale Market 50 Ether0.000035541
0xf6ddb8b3f91954dc7ad0ee786d0f6535b3d75ad5bb0e3dc755752ca6d4b1f63eCancel Active Au...94516122020-02-09 23:41:52499 days 12 hrs ago0xdb014277e9e353f18b51e5f8225db790784c5040 IN  BC: Sale Market 50 Ether0.000036881
0x44b97b53f64bbb351594624071e4ff69136cb02bbb9f443c61409fe5f56edca0Cancel Active Au...94516022020-02-09 23:39:38499 days 12 hrs ago0xdb014277e9e353f18b51e5f8225db790784c5040 IN  BC: Sale Market 50 Ether0.000036881
0x846472754be79bc95a0094dd536830d5240d044b5a57b5d671b94e9a0086f7deCancel Active Au...94516002020-02-09 23:38:55499 days 12 hrs ago0xdb014277e9e353f18b51e5f8225db790784c5040 IN  BC: Sale Market 50 Ether0.000035541
0x581c05ce0f7ae339c3e92c7ca9a94d68f78c181d1a6959075c35bffbfabb25eeCancel Active Au...94516002020-02-09 23:38:55499 days 12 hrs ago0xdb014277e9e353f18b51e5f8225db790784c5040 IN  BC: Sale Market 50 Ether0.000036881
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb3773780808ddfbec12b7cba6984bf1bd30c20667ffb8351d5f37fb1bbd44652123135952021-04-26 3:49:4558 days 8 hrs ago BC: Sale Market 50x708e1d71c15bfe87ffb0252d228b2ef0285c022c0.0864 Ether
0x37b1b38613260ffa7ab550add3fffff585d00dc2375613506831c59e46f8ef72120854512021-03-22 0:42:1093 days 11 hrs ago BC: Sale Market 50x25967b65c16add1c20ecb019a6a96b7f10496e3b0.08544 Ether
0x552bc0b5196418c6fb3bb4b57f4636c357ef84cb66a56c959d694f5ea44c67bb118319712021-02-11 0:11:08132 days 12 hrs ago BC: Sale Market 50x1e6455b54fd8253138a28199710855bd3f2e79a70.00576 Ether
0xa80374361037783c715f5a7b14b5a1ad35aa3b0313dac5f4aa6da5654c959173116583352021-01-15 7:29:34159 days 5 hrs ago BC: Sale Market 50x1e6455b54fd8253138a28199710855bd3f2e79a70.0096 Ether
0x3dee16f2c49776a223f65b6f5ba0319d3b006255e8ea6741798db3d28dced6b4116581472021-01-15 6:51:21159 days 5 hrs ago BC: Sale Market 50x6fc3ef1a595edbc5098e00c2681232384cb5528a0.0096 Ether
0x3d41dd32b8cabb5d985079ab96858848055ec0d48f0ca10cd5e3b3797c0ff148116490642021-01-13 21:04:06160 days 15 hrs ago BC: Sale Market 50x5170d95b593027ec7d4ba7bbbfa36e9314afb7f70.024 Ether
0xa2ebc3a36e043c6adfe25bd34a983bbadcb75867ea2607792afc9ddd3f1d9de0116442662021-01-13 3:37:54161 days 8 hrs ago BC: Sale Market 50x33bf13999f39ec252c6afea84c246c45594c08d90.0144 Ether
0x5ccf6df7a279395db9bca1488c11fca747056bfc92338beb6036c8561dd4f12a116190832021-01-09 6:49:35165 days 5 hrs ago BC: Sale Market 50x1e6455b54fd8253138a28199710855bd3f2e79a70.00768 Ether
0x41386cf67721b91c0d6498862962a140f46e132d79e26b6b349f39366738f4f0110634802020-10-15 23:42:13250 days 12 hrs ago BC: Sale Market 50x1e6455b54fd8253138a28199710855bd3f2e79a70.0048 Ether
0xa9f323dcd4cf2da1de379dd69e96fcf71d751b52c2f4582bbf3cc466e82be226110495132020-10-13 20:36:56252 days 16 hrs ago BC: Sale Market 50xc6de38110c5915fcc02729dc4c8163481e1194090.00384 Ether
0x5e3702873138c82a020026cc365a0e7925830ac7535e9a6bdfb57dd935c17a3d109752692020-10-02 7:24:25264 days 5 hrs ago BC: Sale Market 50x9ddb22480bd6f3d56de73457fe657520d5da66930.00288 Ether
0x6abec75df88ad6263626bfa1d390ae324d271d10d5c6a751db91b11afe67746c109448832020-09-27 13:22:15268 days 23 hrs ago BC: Sale Market 50x6f0f082c8d24c7a7d9b8bfee8ac7c346f4f2798c0.008160000000000001 Ether
0xbc39c67a644898718bf40a912e5ae57b35e812ccb903e08d359d68eb84cc53b497802032020-03-31 15:02:27448 days 21 hrs ago BC: Sale Market 5ENS Name *jackp💰t.eth0.00192 Ether
0xaf3c4ace6a1ed48258af6e69747c3b33858e651afe48071361f0544bcfba14cb95950502020-03-03 0:53:13477 days 11 hrs ago BC: Sale Market 50x4985322bbcd8f8fd4a206d4edfb84cbdcb9b313f0.0096 Ether
0x4150908021117cd9f02c8b7e5df9d515e367091ffdaf6ca4b2a246aed9e1258e93890012020-01-31 8:37:47509 days 3 hrs ago BC: Sale Market 50xd5d34deed1aa357898c96a7e26ad8d1d4bd6b5d60.0096 Ether
0xf4fb2dedc5553d7022252105562786261ad867ae2d0e069c50b70a144fcdc02993885462020-01-31 6:52:19509 days 5 hrs ago BC: Sale Market 50x6fc3ef1a595edbc5098e00c2681232384cb5528a0.00576 Ether
0x71c98660bc2bb589ac78a5832bffdba0f1d8382e4620f9177fe7ea1a993d3fd593058242020-01-18 14:39:27521 days 21 hrs ago BC: Sale Market 50xe17897a2a584f6acf9d812701f162a44da137d670.00096 Ether
0xb0febcd63109dd5332feb6aacc329bf88a158590e1d1341d4a760007ca04a4cd92405282020-01-08 14:30:08531 days 22 hrs ago BC: Sale Market 50x22c2e4ffa70fb16005c308ec58560dbb88c2e2a20.0096 Ether
0xadfe9ce19cc7897d452461245136a924ed37a501577af29b13345f6203ea97d591862302019-12-30 14:21:28540 days 22 hrs ago BC: Sale Market 50x6f0f082c8d24c7a7d9b8bfee8ac7c346f4f2798c0.00624 Ether
0xdfca5d6f09add3e47d51ff353b496d83c867b4e63518b99b5dccc62966d2c39b91701872019-12-27 9:50:57544 days 2 hrs ago BC: Sale Market 50xe17897a2a584f6acf9d812701f162a44da137d670.00096 Ether
0xc3d8e1a799e890157b32814a2a0eb6bfd792ad5572de99f8c12bcea3e6a2b1e091646482019-12-26 7:21:42545 days 5 hrs ago BC: Sale Market 50xe17897a2a584f6acf9d812701f162a44da137d670.00096 Ether
0x02fcadbfdb2fe9a7f583ced3f90bd258fae22d9d143c666ff063c3440f50f07d91553092019-12-24 10:37:10547 days 1 hr ago BC: Sale Market 5ENS Name *jackp💰t.eth0.001323011598173517 Ether
0x134843f243c6a536755e07a0319d7a94351eb56d32170458cfd89aac62d4001090812332019-12-10 4:37:59561 days 7 hrs ago BC: Sale Market 50x1e6455b54fd8253138a28199710855bd3f2e79a70.00576 Ether
0x3c2d9c972dca1ad177057bad654156f3b505b06a229a947b18e3b813d396117889743592019-11-21 12:17:11580 days 19 mins ago BC: Sale Market 50xf5ac68a1c974a910c10c5c01b5d7a6d6835df9750.0096 Ether
0x7092d6312fe912d0d668005d77e6397df9b6ddcdc6513c0147e49220092da83d89550922019-11-18 6:56:35583 days 5 hrs ago BC: Sale Market 50x1b8a59d276dbfa0edf3a677f9b7fe3afbfc2b7500.0048 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SaleMarket

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-09-20
*/

pragma solidity ^0.4.24;


contract CutieCoreInterface
{
    function isCutieCore() pure public returns (bool);

    function transferFrom(address _from, address _to, uint256 _cutieId) external;
    function transfer(address _to, uint256 _cutieId) external;

    function ownerOf(uint256 _cutieId)
        external
        view
        returns (address owner);

    function getCutie(uint40 _id)
        external
        view
        returns (
        uint256 genes,
        uint40 birthTime,
        uint40 cooldownEndTime,
        uint40 momId,
        uint40 dadId,
        uint16 cooldownIndex,
        uint16 generation
    );

    function getGenes(uint40 _id)
        public
        view
        returns (
        uint256 genes
    );


    function getCooldownEndTime(uint40 _id)
        public
        view
        returns (
        uint40 cooldownEndTime
    );

    function getCooldownIndex(uint40 _id)
        public
        view
        returns (
        uint16 cooldownIndex
    );


    function getGeneration(uint40 _id)
        public
        view
        returns (
        uint16 generation
    );

    function getOptional(uint40 _id)
        public
        view
        returns (
        uint64 optional
    );


    function changeGenes(
        uint40 _cutieId,
        uint256 _genes)
        public;

    function changeCooldownEndTime(
        uint40 _cutieId,
        uint40 _cooldownEndTime)
        public;

    function changeCooldownIndex(
        uint40 _cutieId,
        uint16 _cooldownIndex)
        public;

    function changeOptional(
        uint40 _cutieId,
        uint64 _optional)
        public;

    function changeGeneration(
        uint40 _cutieId,
        uint16 _generation)
        public;

    function createSaleAuction(
        uint40 _cutieId,
        uint128 _startPrice,
        uint128 _endPrice,
        uint40 _duration
    )
    public;

    function getApproved(uint256 _tokenId) external returns (address);
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}



/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

pragma solidity ^0.4.24;

/// @title Auction Market for Blockchain Cuties.
/// @author https://BlockChainArchitect.io
contract MarketInterface 
{
    function withdrawEthFromBalance() external;    

    function createAuction(uint40 _cutieId, uint128 _startPrice, uint128 _endPrice, uint40 _duration, address _seller) public payable;

    function bid(uint40 _cutieId) public payable;

    function cancelActiveAuctionWhenPaused(uint40 _cutieId) public;

	function getAuctionInfo(uint40 _cutieId)
        public
        view
        returns
    (
        address seller,
        uint128 startPrice,
        uint128 endPrice,
        uint40 duration,
        uint40 startedAt,
        uint128 featuringFee,
        bool tokensAllowed
    );
}

pragma solidity ^0.4.24;

// https://etherscan.io/address/0x4118d7f757ad5893b8fa2f95e067994e1f531371#code
contract ERC20 {

	string public name;

	string public symbol;

	uint8 public decimals;

	 /**
     * Transfer tokens from other address
     *
     * Send `_value` tokens to `_to` on behalf of `_from`
     *
     * @param _from The address of the sender
     * @param _to The address of the recipient
     * @param _value the amount to send
     */
	function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);

	function approveAndCall(address _spender, uint256 _value, bytes _extraData) external
        returns (bool success);

	/**
	 * Transfer tokens
	 *
	 * Send `_value` tokens to `_to` from your account
	 *
	 * @param _to The address of the recipient
	 * @param _value the amount to send
	 */
	function transfer(address _to, uint256 _value) external;

    /// @notice Count all tokens assigned to an owner
    function balanceOf(address _owner) external view returns (uint256);
}

pragma solidity ^0.4.24;

// https://etherscan.io/address/0x3127be52acba38beab6b4b3a406dc04e557c037c#code
contract PriceOracleInterface {

    // How much TOKENs you get for 1 ETH, multiplied by 10^18
    uint256 public ETHPrice;
}

pragma solidity ^0.4.24;

interface TokenRecipientInterface
{
        function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external;
}


/// @title Auction Market for Blockchain Cuties.
/// @author https://BlockChainArchitect.io
contract Market is MarketInterface, Pausable, TokenRecipientInterface
{
    // Shows the auction on an Cutie Token
    struct Auction {
        // Price (in wei or tokens) at the beginning of auction
        uint128 startPrice;
        // Price (in wei or tokens) at the end of auction
        uint128 endPrice;
        // Current owner of Token
        address seller;
        // Auction duration in seconds
        uint40 duration;
        // Time when auction started
        // NOTE: 0 if this auction has been concluded
        uint40 startedAt;
        // Featuring fee (in wei, optional)
        uint128 featuringFee;
        // is it allowed to bid with erc20 tokens
        bool tokensAllowed;
    }

    // Reference to contract that tracks ownership
    CutieCoreInterface public coreContract;

    // Cut owner takes on each auction, in basis points - 1/100 of a per cent.
    // Values 0-10,000 map to 0%-100%
    uint16 public ownerFee;

    // Map from token ID to their corresponding auction.
    mapping (uint40 => Auction) public cutieIdToAuction;
    mapping (address => PriceOracleInterface) public priceOracle;


    address operatorAddress;

    event AuctionCreated(uint40 indexed cutieId, uint128 startPrice, uint128 endPrice, uint40 duration, uint128 fee, bool tokensAllowed);
    event AuctionSuccessful(uint40 indexed cutieId, uint128 totalPriceWei, address indexed winner);
    event AuctionSuccessfulForToken(uint40 indexed cutieId, uint128 totalPriceWei, address indexed winner, uint128 priceInTokens, address indexed token);
    event AuctionCancelled(uint40 indexed cutieId);

    modifier onlyOperator() {
        require(msg.sender == operatorAddress || msg.sender == owner);
        _;
    }

    function setOperator(address _newOperator) public onlyOwner {
        require(_newOperator != address(0));

        operatorAddress = _newOperator;
    }

    /// @dev disables sending fund to this contract
    function() external {}

    modifier canBeStoredIn128Bits(uint256 _value) 
    {
        require(_value <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
        _;
    }

    // @dev Adds to the list of open auctions and fires the
    //  AuctionCreated event.
    // @param _cutieId The token ID is to be put on auction.
    // @param _auction To add an auction.
    // @param _fee Amount of money to feature auction
    function _addAuction(uint40 _cutieId, Auction _auction) internal
    {
        // Require that all auctions have a duration of
        // at least one minute. (Keeps our math from getting hairy!)
        require(_auction.duration >= 1 minutes);

        cutieIdToAuction[_cutieId] = _auction;
        
        emit AuctionCreated(
            _cutieId,
            _auction.startPrice,
            _auction.endPrice,
            _auction.duration,
            _auction.featuringFee,
            _auction.tokensAllowed
        );
    }

    // @dev Returns true if the token is claimed by the claimant.
    // @param _claimant - Address claiming to own the token.
    function _isOwner(address _claimant, uint256 _cutieId) internal view returns (bool)
    {
        return (coreContract.ownerOf(_cutieId) == _claimant);
    }

    // @dev Transfers the token owned by this contract to another address.
    // Returns true when the transfer succeeds.
    // @param _receiver - Address to transfer token to.
    // @param _cutieId - Token ID to transfer.
    function _transfer(address _receiver, uint40 _cutieId) internal
    {
        // it will throw if transfer fails
        coreContract.transfer(_receiver, _cutieId);
    }

    // @dev Escrows the token and assigns ownership to this contract.
    // Throws if the escrow fails.
    // @param _owner - Current owner address of token to escrow.
    // @param _cutieId - Token ID the approval of which is to be verified.
    function _escrow(address _owner, uint40 _cutieId) internal
    {
        // it will throw if transfer fails
        coreContract.transferFrom(_owner, this, _cutieId);
    }

    // @dev just cancel auction.
    function _cancelActiveAuction(uint40 _cutieId, address _seller) internal
    {
        _removeAuction(_cutieId);
        _transfer(_seller, _cutieId);
        emit AuctionCancelled(_cutieId);
    }

    // @dev Calculates the price and transfers winnings.
    // Does not transfer token ownership.
    function _bid(uint40 _cutieId, uint128 _bidAmount)
        internal
        returns (uint128)
    {
        // Get a reference to the auction struct
        Auction storage auction = cutieIdToAuction[_cutieId];

        require(_isOnAuction(auction));

        // Check that bid > current price
        uint128 price = _currentPrice(auction);
        require(_bidAmount >= price);

        // Provide a reference to the seller before the auction struct is deleted.
        address seller = auction.seller;

        _removeAuction(_cutieId);

        // Transfer proceeds to seller (if there are any!)
        if (price > 0 && seller != address(coreContract)) {
            uint128 fee = _computeFee(price);
            uint128 sellerValue = price - fee;

            seller.transfer(sellerValue);
        }

        emit AuctionSuccessful(_cutieId, price, msg.sender);

        return price;
    }

    // @dev Removes from the list of open auctions.
    // @param _cutieId - ID of token on auction.
    function _removeAuction(uint40 _cutieId) internal
    {
        delete cutieIdToAuction[_cutieId];
    }

    // @dev Returns true if the token is on auction.
    // @param _auction - Auction to check.
    function _isOnAuction(Auction storage _auction) internal view returns (bool)
    {
        return (_auction.startedAt > 0);
    }

    // @dev calculate current price of auction. 
    //  When testing, make this function public and turn on
    //  `Current price calculation` test suite.
    function _computeCurrentPrice(
        uint128 _startPrice,
        uint128 _endPrice,
        uint40 _duration,
        uint40 _secondsPassed
    )
        internal
        pure
        returns (uint128)
    {
        if (_secondsPassed >= _duration) {
            return _endPrice;
        } else {
            int256 totalPriceChange = int256(_endPrice) - int256(_startPrice);
            int256 currentPriceChange = totalPriceChange * int256(_secondsPassed) / int256(_duration);
            uint128 currentPrice = _startPrice + uint128(currentPriceChange);
            
            return currentPrice;
        }
    }
    // @dev return current price of token.
    function _currentPrice(Auction storage _auction)
        internal
        view
        returns (uint128)
    {
        uint40 secondsPassed = 0;

        uint40 timeNow = uint40(now);
        if (timeNow > _auction.startedAt) {
            secondsPassed = timeNow - _auction.startedAt;
        }

        return _computeCurrentPrice(
            _auction.startPrice,
            _auction.endPrice,
            _auction.duration,
            secondsPassed
        );
    }

    // @dev Calculates owner's cut of a sale.
    // @param _price - Sale price of cutie.
    function _computeFee(uint128 _price) internal view returns (uint128)
    {
        return _price * ownerFee / 10000;
    }

    // @dev Remove all Ether from the contract with the owner's cuts. Also, remove any Ether sent directly to the contract address.
    //  Transfers to the token contract, but can be called by
    //  the owner or the token contract.
    function withdrawEthFromBalance() external
    {
        address coreAddress = address(coreContract);

        require(
            msg.sender == owner ||
            msg.sender == coreAddress
        );
        coreAddress.transfer(address(this).balance);
    }

    // @dev create and begin new auction.
    function createAuction(uint40 _cutieId, uint128 _startPrice, uint128 _endPrice, uint40 _duration, address _seller)
        public whenNotPaused payable
    {
        require(_isOwner(msg.sender, _cutieId));
        _escrow(msg.sender, _cutieId);

        bool allowTokens = _duration < 0x8000000000; // first bit of duration is boolean flag (1 to disable tokens)
        _duration = _duration % 0x8000000000; // clear flag from duration

        Auction memory auction = Auction(
            _startPrice,
            _endPrice,
            _seller,
            _duration,
            uint40(now),
            uint128(msg.value),
            allowTokens
        );
        _addAuction(_cutieId, auction);
    }

    // @dev Set the reference to cutie ownership contract. Verify the owner's fee.
    //  @param fee should be between 0-10,000.
    function setup(address _coreContractAddress, uint16 _fee) public onlyOwner
    {
        require(_fee <= 10000);

        ownerFee = _fee;
        
        CutieCoreInterface candidateContract = CutieCoreInterface(_coreContractAddress);
        require(candidateContract.isCutieCore());
        coreContract = candidateContract;
    }

    // @dev Set the owner's fee.
    //  @param fee should be between 0-10,000.
    function setFee(uint16 _fee) public onlyOwner
    {
        require(_fee <= 10000);

        ownerFee = _fee;
    }

    // @dev bid on auction. Complete it and transfer ownership of cutie if enough ether was given.
    function bid(uint40 _cutieId) public payable whenNotPaused canBeStoredIn128Bits(msg.value)
    {
        // _bid throws if something failed.
        _bid(_cutieId, uint128(msg.value));
        _transfer(msg.sender, _cutieId);
    }

    function getPriceInToken(ERC20 _tokenContract, uint128 priceWei)
        public
        view
        returns (uint128)
    {
        PriceOracleInterface oracle = priceOracle[address(_tokenContract)];
        require(address(oracle) != address(0));

        uint256 ethPerToken = oracle.ETHPrice();
        int256 power = 36 - _tokenContract.decimals();
        require(power > 0);
        return uint128(uint256(priceWei) * ethPerToken / (10 ** uint256(power)));
    }

    function getCutieId(bytes _extraData) pure internal returns (uint40)
    {
        return
            uint40(_extraData[0]) +
            uint40(_extraData[1]) * 0x100 +
            uint40(_extraData[2]) * 0x10000 +
            uint40(_extraData[3]) * 0x100000 +
            uint40(_extraData[4]) * 0x10000000;
    }

    // https://github.com/BitGuildPlatform/Documentation/blob/master/README.md#2-required-game-smart-contract-changes
    // Function that is called when trying to use PLAT for payments from approveAndCall
    function receiveApproval(address _sender, uint256 _value, address _tokenContract, bytes _extraData)
        external
        canBeStoredIn128Bits(_value)
        whenNotPaused
    {
        ERC20 tokenContract = ERC20(_tokenContract);

        require(_extraData.length == 5); // 40 bits
        uint40 cutieId = getCutieId(_extraData);

        // Get a reference to the auction struct
        Auction storage auction = cutieIdToAuction[cutieId];
        require(auction.tokensAllowed); // buy for token is allowed

        require(_isOnAuction(auction));

        uint128 priceWei = _currentPrice(auction);

        uint128 priceInTokens = getPriceInToken(tokenContract, priceWei);

        // Check that bid > current price
        //require(_value >= priceInTokens);

        // Provide a reference to the seller before the auction struct is deleted.
        address seller = auction.seller;

        _removeAuction(cutieId);

        require(tokenContract.transferFrom(_sender, address(this), priceInTokens));

        if (seller != address(coreContract))
        {
            uint128 fee = _computeFee(priceInTokens);
            uint128 sellerValue = priceInTokens - fee;

            tokenContract.transfer(seller, sellerValue);
        }

        emit AuctionSuccessfulForToken(cutieId, priceWei, _sender, priceInTokens, _tokenContract);
        _transfer(_sender, cutieId);
    }

    // @dev Returns auction info for a token on auction.
    // @param _cutieId - ID of token on auction.
    function getAuctionInfo(uint40 _cutieId)
        public
        view
        returns
    (
        address seller,
        uint128 startPrice,
        uint128 endPrice,
        uint40 duration,
        uint40 startedAt,
        uint128 featuringFee,
        bool tokensAllowed
    ) {
        Auction storage auction = cutieIdToAuction[_cutieId];
        require(_isOnAuction(auction));
        return (
            auction.seller,
            auction.startPrice,
            auction.endPrice,
            auction.duration,
            auction.startedAt,
            auction.featuringFee,
            auction.tokensAllowed
        );
    }

    // @dev Returns auction info for a token on auction.
    // @param _cutieId - ID of token on auction.
    function isOnAuction(uint40 _cutieId)
        public
        view
        returns (bool) 
    {
        return cutieIdToAuction[_cutieId].startedAt > 0;
    }

/*
    /// @dev Import cuties from previous version of Core contract.
    /// @param _oldAddress Old core contract address
    /// @param _fromIndex (inclusive)
    /// @param _toIndex (inclusive)
    function migrate(address _oldAddress, uint40 _fromIndex, uint40 _toIndex) public onlyOwner whenPaused
    {
        Market old = Market(_oldAddress);

        for (uint40 i = _fromIndex; i <= _toIndex; i++)
        {
            if (coreContract.ownerOf(i) == _oldAddress)
            {
                address seller;
                uint128 startPrice;
                uint128 endPrice;
                uint40 duration;
                uint40 startedAt;
                uint128 featuringFee;   
                (seller, startPrice, endPrice, duration, startedAt, featuringFee) = old.getAuctionInfo(i);

                Auction memory auction = Auction({
                    seller: seller, 
                    startPrice: startPrice, 
                    endPrice: endPrice, 
                    duration: duration, 
                    startedAt: startedAt, 
                    featuringFee: featuringFee
                });
                _addAuction(i, auction);
            }
        }
    }*/

    // @dev Returns the current price of an auction.
    function getCurrentPrice(uint40 _cutieId)
        public
        view
        returns (uint128)
    {
        Auction storage auction = cutieIdToAuction[_cutieId];
        require(_isOnAuction(auction));
        return _currentPrice(auction);
    }

    // @dev Cancels unfinished auction and returns token to owner. 
    // Can be called when contract is paused.
    function cancelActiveAuction(uint40 _cutieId) public
    {
        Auction storage auction = cutieIdToAuction[_cutieId];
        require(_isOnAuction(auction));
        address seller = auction.seller;
        require(msg.sender == seller);
        _cancelActiveAuction(_cutieId, seller);
    }

    // @dev Cancels auction when contract is on pause. Option is available only to owners in urgent situations. Tokens returned to seller.
    //  Used on Core contract upgrade.
    function cancelActiveAuctionWhenPaused(uint40 _cutieId) whenPaused onlyOwner public
    {
        Auction storage auction = cutieIdToAuction[_cutieId];
        require(_isOnAuction(auction));
        _cancelActiveAuction(_cutieId, auction.seller);
    }

        // @dev Cancels unfinished auction and returns token to owner. 
    // Can be called when contract is paused.
    function cancelCreatorAuction(uint40 _cutieId) public onlyOperator
    {
        Auction storage auction = cutieIdToAuction[_cutieId];
        require(_isOnAuction(auction));
        address seller = auction.seller;
        require(seller == address(coreContract));
        _cancelActiveAuction(_cutieId, msg.sender);
    }

    // @dev Transfers to _withdrawToAddress all tokens controlled by
    // contract _tokenContract.
    function withdrawTokenFromBalance(ERC20 _tokenContract, address _withdrawToAddress) external
    {
        address coreAddress = address(coreContract);

        require(
            msg.sender == owner ||
            msg.sender == operatorAddress ||
            msg.sender == coreAddress
        );
        uint256 balance = _tokenContract.balanceOf(address(this));
        _tokenContract.transfer(_withdrawToAddress, balance);
    }

    /// @dev Allow buy cuties for token
    function addToken(ERC20 _tokenContract, PriceOracleInterface _priceOracle) external onlyOwner
    {
        priceOracle[address(_tokenContract)] = _priceOracle;
    }

    /// @dev Disallow buy cuties for token
    function removeToken(ERC20 _tokenContract) external onlyOwner
    {
        delete priceOracle[address(_tokenContract)];
    }

    function isPluginInterface() public pure returns (bool)
    {
        return true;
    }

    function onRemove() public pure {}

    function run(
        uint40 /*_cutieId*/,
        uint256 /*_parameter*/,
        address /*_seller*/
    )
    public
    payable
    {
        revert();
    }

    function runSigned(
        uint40 /*_cutieId*/,
        uint256 /*_parameter*/,
        address /*_owner*/
    )
    external
    payable
    {
        revert();
    }

    function withdraw() public
    {
        require(
            msg.sender == owner ||
            msg.sender == address(coreContract)
        );
        if (address(this).balance > 0)
        {
            address(coreContract).transfer(address(this).balance);
        }
    }
}


/// @title Auction market for cuties sale 
/// @author https://BlockChainArchitect.io
contract SaleMarket is Market
{
    // @dev Sanity check reveals that the
    //  auction in our setSaleAuctionAddress() call is right.
    bool public isSaleMarket = true;
    

    // @dev create and start a new auction
    // @param _cutieId - ID of cutie to auction, sender must be owner.
    // @param _startPrice - Price of item (in wei) at the beginning of auction.
    // @param _endPrice - Price of item (in wei) at the end of auction.
    // @param _duration - Length of auction (in seconds).
    // @param _seller - Seller
    function createAuction(
        uint40 _cutieId,
        uint128 _startPrice,
        uint128 _endPrice,
        uint40 _duration,
        address _seller
    )
        public
        payable
    {
        require(msg.sender == address(coreContract));
        _escrow(_seller, _cutieId);

        bool allowTokens = _duration < 0x8000000000; // first bit of duration is boolean flag (1 to disable tokens)
        _duration = _duration % 0x8000000000; // clear flag from duration

        Auction memory auction = Auction(
            _startPrice,
            _endPrice,
            _seller,
            _duration,
            uint40(now),
            uint128(msg.value),
            allowTokens
        );
        _addAuction(_cutieId, auction);
    }

    // @dev LastSalePrice is updated if seller is the token contract.
    // Otherwise, default bid method is used.
    function bid(uint40 _cutieId)
        public
        payable
        canBeStoredIn128Bits(msg.value)
    {
        // _bid verifies token ID size
        _bid(_cutieId, uint128(msg.value));
        _transfer(msg.sender, _cutieId);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"onRemove","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_cutieId","type":"uint40"}],"name":"isOnAuction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"priceOracle","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cutieId","type":"uint40"}],"name":"cancelCreatorAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"},{"name":"_priceOracle","type":"address"}],"name":"addToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"removeToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isSaleMarket","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEthFromBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cutieId","type":"uint40"}],"name":"getCurrentPrice","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint40"}],"name":"cutieIdToAuction","outputs":[{"name":"startPrice","type":"uint128"},{"name":"endPrice","type":"uint128"},{"name":"seller","type":"address"},{"name":"duration","type":"uint40"},{"name":"startedAt","type":"uint40"},{"name":"featuringFee","type":"uint128"},{"name":"tokensAllowed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint16"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_tokenContract","type":"address"},{"name":"_extraData","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isPluginInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"","type":"uint40"},{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"runSigned","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_cutieId","type":"uint40"}],"name":"cancelActiveAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cutieId","type":"uint40"}],"name":"getAuctionInfo","outputs":[{"name":"seller","type":"address"},{"name":"startPrice","type":"uint128"},{"name":"endPrice","type":"uint128"},{"name":"duration","type":"uint40"},{"name":"startedAt","type":"uint40"},{"name":"featuringFee","type":"uint128"},{"name":"tokensAllowed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenContract","type":"address"},{"name":"priceWei","type":"uint128"}],"name":"getPriceInToken","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"uint40"},{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"run","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_cutieId","type":"uint40"}],"name":"cancelActiveAuctionWhenPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOperator","type":"address"}],"name":"setOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cutieId","type":"uint40"}],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_cutieId","type":"uint40"},{"name":"_startPrice","type":"uint128"},{"name":"_endPrice","type":"uint128"},{"name":"_duration","type":"uint40"},{"name":"_seller","type":"address"}],"name":"createAuction","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"},{"name":"_withdrawToAddress","type":"address"}],"name":"withdrawTokenFromBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ownerFee","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coreContractAddress","type":"address"},{"name":"_fee","type":"uint16"}],"name":"setup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"coreContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"cutieId","type":"uint40"},{"indexed":false,"name":"startPrice","type":"uint128"},{"indexed":false,"name":"endPrice","type":"uint128"},{"indexed":false,"name":"duration","type":"uint40"},{"indexed":false,"name":"fee","type":"uint128"},{"indexed":false,"name":"tokensAllowed","type":"bool"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"cutieId","type":"uint40"},{"indexed":false,"name":"totalPriceWei","type":"uint128"},{"indexed":true,"name":"winner","type":"address"}],"name":"AuctionSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"cutieId","type":"uint40"},{"indexed":false,"name":"totalPriceWei","type":"uint128"},{"indexed":true,"name":"winner","type":"address"},{"indexed":false,"name":"priceInTokens","type":"uint128"},{"indexed":true,"name":"token","type":"address"}],"name":"AuctionSuccessfulForToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"cutieId","type":"uint40"}],"name":"AuctionCancelled","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052600080546004805460a060020a60ff02191674010000000000000000000000000000000000000000179055600160a860020a03191633179055611c748061004c6000396000f30060806040526004361061017c5763ffffffff60e060020a60003504166311952369811461018b5780632177885d146101a25780632951f1b2146101d557806330d9161d146102125780633ccfd60b146102315780633f4ba83a146102465780635476bd721461025b5780635c975abb146102825780635fa7b584146102975780636066b066146102b8578063776247c4146102cd5780637ea310d4146102e257806381baab241461031d5780638456cb59146103965780638da5cb5b146103ab5780638e005553146103c05780638f4ffcb1146103dc57806394a89233146104145780639652713e1461042957806398c9faac1461044a5780639ccaec9814610469578063a01da7b2146104e1578063a055d45514610429578063b2fb3b901461050e578063b3ab15fb1461052d578063c170fd541461054e578063c1d1faf314610560578063cda8c71514610599578063d5b2a01a146105c0578063e410a0c6146105ec578063e80db5db14610614578063f2fde38b14610629575b34801561018857600080fd5b50005b34801561019757600080fd5b506101a061064a565b005b3480156101ae57600080fd5b506101c164ffffffffff6004351661064c565b604080519115158252519081900360200190f35b3480156101e157600080fd5b506101f6600160a060020a0360043516610675565b60408051600160a060020a039092168252519081900360200190f35b34801561021e57600080fd5b506101a064ffffffffff60043516610690565b34801561023d57600080fd5b506101a061071f565b34801561025257600080fd5b506101a0610794565b34801561026757600080fd5b506101a0600160a060020a036004358116906024351661080a565b34801561028e57600080fd5b506101c161085c565b3480156102a357600080fd5b506101a0600160a060020a036004351661086c565b3480156102c457600080fd5b506101c16108b7565b3480156102d957600080fd5b506101a06108c7565b3480156102ee57600080fd5b5061030164ffffffffff60043516610934565b604080516001608060020a039092168252519081900360200190f35b34801561032957600080fd5b5061033c64ffffffffff6004351661096e565b604080516001608060020a0398891681529688166020880152600160a060020a039095168686015264ffffffffff9384166060870152919092166080850152931660a083015291151560c082015290519081900360e00190f35b3480156103a257600080fd5b506101a06109e1565b3480156103b757600080fd5b506101f6610a5c565b3480156103cc57600080fd5b506101a061ffff60043516610a6b565b3480156103e857600080fd5b506101a060048035600160a060020a039081169160248035926044351691606435918201910135610ac8565b34801561042057600080fd5b506101c1610dcf565b6101a064ffffffffff60043516602435600160a060020a0360443516610dd4565b34801561045657600080fd5b506101a064ffffffffff60043516610dd9565b34801561047557600080fd5b5061048864ffffffffff60043516610e29565b60408051600160a060020a0390981688526001608060020a0396871660208901529486168786015264ffffffffff9384166060880152919092166080860152921660a084015290151560c0830152519081900360e00190f35b3480156104ed57600080fd5b50610301600160a060020a03600435166001608060020a0360243516610ed0565b34801561051a57600080fd5b506101a064ffffffffff60043516611029565b34801561053957600080fd5b506101a0600160a060020a036004351661109d565b6101a064ffffffffff600435166110f8565b6101a064ffffffffff6004358116906001608060020a036024358116916044359091169060643516600160a060020a0360843516611122565b3480156105a557600080fd5b506101a0600160a060020a03600435811690602435166111e0565b3480156105cc57600080fd5b506105d5611342565b6040805161ffff9092168252519081900360200190f35b3480156105f857600080fd5b506101a0600160a060020a036004351661ffff60243516611353565b34801561062057600080fd5b506101f6611444565b34801561063557600080fd5b506101a0600160a060020a0360043516611453565b565b64ffffffffff90811660009081526002602052604081206001015460c860020a90049091161190565b600360205260009081526040902054600160a060020a031681565b6004546000908190600160a060020a03163314806106b85750600054600160a060020a031633145b15156106c357600080fd5b64ffffffffff8316600090815260026020526040902091506106e4826114e7565b15156106ef57600080fd5b506001808201549054600160a060020a039182169116811461071057600080fd5b61071a8333611500565b505050565b600054600160a060020a03163314806107425750600154600160a060020a031633145b151561074d57600080fd5b60003031111561064a57600154604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610791573d6000803e3d6000fd5b50565b600054600160a060020a031633146107ab57600080fd5b60005460a060020a900460ff1615156107c357600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b600054600160a060020a0316331461082157600080fd5b600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60005460a060020a900460ff1681565b600054600160a060020a0316331461088357600080fd5b600160a060020a03166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b60045460a060020a900460ff1681565b600154600054600160a060020a0391821691163314806108ef575033600160a060020a038216145b15156108fa57600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610930573d6000803e3d6000fd5b5050565b64ffffffffff81166000908152600260205260408120610953816114e7565b151561095e57600080fd5b61096781611549565b9392505050565b60026020819052600091825260409091208054600182015491909201546001608060020a038084169370010000000000000000000000000000000090819004821693600160a060020a0381169364ffffffffff60a060020a830481169460c860020a90930416929181169160ff91041687565b600054600160a060020a031633146109f857600080fd5b60005460a060020a900460ff1615610a0f57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600054600160a060020a031681565b600054600160a060020a03163314610a8257600080fd5b61271061ffff82161115610a9557600080fd5b6001805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b6000808080808080808b6001608060020a03811115610ae657600080fd5b60005460a060020a900460ff1615610afd57600080fd5b8b985060058a14610b0d57600080fd5b610b468b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437506115d0945050505050565b64ffffffffff81166000908152600260208190526040909120908101549199509750700100000000000000000000000000000000900460ff161515610b8a57600080fd5b610b93876114e7565b1515610b9e57600080fd5b610ba787611549565b9550610bb38987610ed0565b6001880154909550600160a060020a03169350610bcf886116b5565b88600160a060020a03166323b872dd8f30886040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a03168152602001826001608060020a031681526020019350505050602060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b505050506040513d6020811015610c7f57600080fd5b50511515610c8c57600080fd5b600154600160a060020a03858116911614610d3657610caa85611714565b9250828503915088600160a060020a031663a9059cbb85846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001826001608060020a0316815260200192505050600060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b505050505b8b600160a060020a03168e600160a060020a03168964ffffffffff167ff65c85ee1272f6f51bd40bae1565e2868b8e887082e6f94b4924d29d21f842d7898960405180836001608060020a03166001608060020a03168152602001826001608060020a03166001608060020a031681526020019250505060405180910390a4610dbf8e8961173b565b5050505050505050505050505050565b600190565b600080fd5b64ffffffffff8116600090815260026020526040812090610df9826114e7565b1515610e0457600080fd5b506001810154600160a060020a0316338114610e1f57600080fd5b61071a8382611500565b64ffffffffff81166000908152600260205260408120819081908190819081908190610e54816114e7565b1515610e5f57600080fd5b60018101548154600290920154600160a060020a0382169b6001608060020a038085169c507001000000000000000000000000000000009485900481169b5060a060020a840464ffffffffff9081169b5060c860020a909404909316985091811696509190910460ff169350915050565b600160a060020a038083166000908152600360205260408120549091168180821515610efb57600080fd5b82600160a060020a0316633732e1536040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f3957600080fd5b505af1158015610f4d573d6000803e3d6000fd5b505050506040513d6020811015610f6357600080fd5b5051604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051919350600160a060020a0388169163313ce567916004808201926020929091908290030181600087803b158015610fc457600080fd5b505af1158015610fd8573d6000803e3d6000fd5b505050506040513d6020811015610fee57600080fd5b505160240360ff1690506000811361100557600080fd5b80600a0a82866001608060020a03160281151561101e57fe5b049695505050505050565b6000805460a060020a900460ff16151561104257600080fd5b600054600160a060020a0316331461105957600080fd5b5064ffffffffff81166000908152600260205260409020611079816114e7565b151561108457600080fd5b6001810154610930908390600160a060020a0316611500565b600054600160a060020a031633146110b457600080fd5b600160a060020a03811615156110c957600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b346001608060020a0381111561110d57600080fd5b61111782346117cb565b50610930338361173b565b600061112c611c0c565b600154600160a060020a0316331461114357600080fd5b61114d8388611906565b64800000000064ffffffffff8516818110935006935060e060405190810160405280876001608060020a03168152602001866001608060020a0316815260200184600160a060020a031681526020018564ffffffffff1681526020014264ffffffffff168152602001346001608060020a0316815260200183151581525090506111d78782611980565b50505050505050565b60015460008054600160a060020a03928316921633148061120b5750600454600160a060020a031633145b8061121e575033600160a060020a038316145b151561122957600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b15801561128a57600080fd5b505af115801561129e573d6000803e3d6000fd5b505050506040513d60208110156112b457600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509086169163a9059cbb9160448082019260009290919082900301818387803b15801561132457600080fd5b505af1158015611338573d6000803e3d6000fd5b5050505050505050565b60015460a060020a900461ffff1681565b60008054600160a060020a0316331461136b57600080fd5b61271061ffff8316111561137e57600080fd5b81600160146101000a81548161ffff021916908361ffff16021790555082905080600160a060020a0316634d6a813a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051151561141357600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600154600160a060020a031681565b600054600160a060020a0316331461146a57600080fd5b600160a060020a038116151561147f57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60010154600060c860020a90910464ffffffffff161190565b611509826116b5565b611513818361173b565b60405164ffffffffff8316907ff6680ade663631ec4dd74f7eaa1f75125361380cd50a22f969e9acfa5f53670490600090a25050565b60018101546000908190429064ffffffffff60c860020a9091048116908216111561158657600184015460c860020a900464ffffffffff16810391505b835460018501546115c8916001608060020a0380821692700100000000000000000000000000000000909204169060a060020a900464ffffffffff1685611ba5565b949350505050565b60008160048151811015156115e157fe5b90602001015160f860020a900460f860020a0260f860020a900463100000000282600381518110151561161057fe5b90602001015160f860020a900460f860020a0260f860020a9004621000000283600281518110151561163e57fe5b90602001015160f860020a900460f860020a0260f860020a9004620100000284600181518110151561166c57fe5b90602001015160f860020a900460f860020a0260f860020a90046101000285600081518110151561169957fe5b016020015160f860020a90819004810204010101019050919050565b64ffffffffff16600090815260026020819052604082209182556001820180547fffff00000000000000000000000000000000000000000000000000000000000016905501805470ffffffffffffffffffffffffffffffffff19169055565b6001546000906127109060a060020a900461ffff1683026001608060020a03160492915050565b600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015264ffffffffff851660248301529151919092169163a9059cbb91604480830192600092919082900301818387803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b505050505050565b64ffffffffff82166000908152600260205260408120818080806117ee856114e7565b15156117f957600080fd5b61180285611549565b93506001608060020a03808516908816101561181d57600080fd5b6001850154600160a060020a03169250611836886116b5565b6000846001608060020a031611801561185d5750600154600160a060020a03848116911614155b156118b35761186b84611714565b6040519092508285039150600160a060020a038416906001608060020a03831680156108fc02916000818181858888f193505050501580156118b1573d6000803e3d6000fd5b505b604080516001608060020a03861681529051339164ffffffffff8b16917f8500e47909916e51e97e4880e742d8b9af1afaeb9ea54166947cf42e6616b1179181900360200190a350919695505050505050565b600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015264ffffffffff85166044830152915191909216916323b872dd91606480830192600092919082900301818387803b1580156117af57600080fd5b603c816060015164ffffffffff161015151561199b57600080fd5b80600260008464ffffffffff1664ffffffffff16815260200190815260200160002060008201518160000160006101000a8154816001608060020a0302191690836001608060020a0316021790555060208201518160000160106101000a8154816001608060020a0302191690836001608060020a0316021790555060408201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060608201518160010160146101000a81548164ffffffffff021916908364ffffffffff16021790555060808201518160010160196101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160020160006101000a8154816001608060020a0302191690836001608060020a0316021790555060c08201518160020160106101000a81548160ff0219169083151502179055509050508164ffffffffff167fb5cfc381f79e09b5e427756c6c36086288faf8a39c226abab7c517219fb6c8018260000151836020015184606001518560a001518660c0015160405180866001608060020a03166001608060020a03168152602001856001608060020a03166001608060020a031681526020018464ffffffffff1664ffffffffff168152602001836001608060020a03166001608060020a03168152602001821515151581526020019550505050505060405180910390a25050565b600080808064ffffffffff80871690861610611bc357869350611c01565b876001608060020a0316876001608060020a03160392508564ffffffffff168564ffffffffff168402811515611bf557fe5b05915081880190508093505b505050949350505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152905600a165627a7a72305820d6ca3accccb0d911b758a8b6d002ec3e0e1fade56e4af10bbac51d07a953630e0029

Swarm Source

bzzr://d6ca3accccb0d911b758a8b6d002ec3e0e1fade56e4af10bbac51d07a953630e
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.