Contract 0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e35436

Contract Overview

Balance:
0.801724532194903076 Ether

Token:
TxHash Block Age From To Value [TxFee]
0x7195e5f35eee42600cf82bdec9e4e6ead2e693b85035a5809cb752447188cb6f351134898 days 16 hrs ago0xf05de581ac356bbf352cfb119b90a20efb89b355 IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.001000001 Ether0.0001646999
0x33be16e2285cf0e3ec95e33fda9b1072ef0e35b17ba4ed01253b200b785e2ac73009779185 days 19 hrs ago0x04a1290cfbd5a125cc13ce5cbbac0b7170438bbd IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354362.923075651000001 Ether0.000222831
0x7af818012900f7239b189cdd9ae0e5a8e6ddb9c09c905c9bae60cac8d65778882974889191 days 20 hrs ago0x04a1290cfbd5a125cc13ce5cbbac0b7170438bbd IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354362.923075651000001 Ether0.0002277828
0xafd5b130eaf826b8e70e4330a7955671f8884fcef1678633fd5ecbd8ea8747ff2933429199 days 17 hrs ago0x74ed2c071cbdc9627ea3c0f3dfa02ae3fd1fd6af IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354362.923075651000001 Ether0.0001436022
0x9d1f9bee40c3419461d8b3b9fb29188d42379860933fc247a85025ea6754b7c12767273228 days 13 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.100524694198278 Ether0.0001386504
0xf3259f43e434408fcf7de811bab0c78cc494561848974ce5b83e0b109494461a2767129228 days 14 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.100341095771241 Ether0.00010423539
0x825e7aa4f45a50a21423d90949ff459fb0aaae6363a091c0fd6ade975e0696b82767037228 days 14 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.101284042394335 Ether0.000198072
0x35278bd03acf4834716ede0dc8283f90864ddd4be81d2f3109ec4504758278572766830228 days 15 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.103403459605664 Ether0.0002178792
0xb3b26fc42bf076896257bd4b3881ffd60bcf13bd32e007e205f57eaf3afae3032766750228 days 15 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.104212963962962 Ether0.0002822526
0x0d4a1cfe03033e7cbef3b27ebffdd5daed9a46577ffa5ff15d552a6e6403d0552766243228 days 17 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.103496052198257 Ether0.000099036
0x691e8f19e8898ac00de26bb48e1f1f096a457370eb5e230f118212260b0daf372766142228 days 18 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.104537038037037 Ether0.0000866565
0x8f02b556f281ddd4cd46ee61a794580d98254c258050a829f9aff020f308d63a2766081228 days 18 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.105150463962962 Ether0.0000866565
0x7de6e700017b1651fe0bcf9ddcba2b70289a7865b27c5fba4fd001a551adf9052766061228 days 18 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.105355393156862 Ether0.0000866565
0x8479d0c0b4f648ef3ab55119c613e495a38d26138fc49d80ef9b576862a9cac52766018228 days 18 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.105807462873638 Ether0.0000693252
0x4e4e0550790fc8b896212063903d6cb1321869cf93e353c33129aec3b96370682765997228 days 18 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.100119826708061 Ether0.0000693252
0x61d07b5e53f5ed4441e4da8b56b63d3c8c8f77558651d42040bf83fc4abc679c2765977228 days 18 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.100324075074074 Ether0.0000693252
0xb8018bf215563d433219aec6d254abad9363493c47b6fca1a500b19b490419cc2765957228 days 18 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.100528323440087 Ether0.0000693252
0x6d797fd41902d872dbf87c579a99c39ef2aaf4b1b4f3bcc405f73b51608bd90d2765750228 days 19 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.102638209061002 Ether0.0000940842
0xba18fddc2fee0d7125e36143865588628026106a422f7fe4722c6c803617ed872765710228 days 19 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.103052152416122 Ether0.000074277
0x04012d6a391b80fe8ee97e1889c6aecb5df2dd8c089c8efcfc3c337f51e3a7bd2765591228 days 20 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.104279004267973 Ether0.000074277
0x92a2f1b7fee84fd123e466041b4fc4a0fb8776d01e91448f9edb739a54bc3a3e2765570228 days 20 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.104483252633986 Ether0.000074277
0xca2017572e3f3dd83a3bd93b19d7263503ced33bd18df516638a362016dc28c22765530228 days 20 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.104891749366013 Ether0.000074277
0x157404bb3ff30c41b98a27204dbfced15ecbf43ddb4ed17b0c7745ba990d697c2765344228 days 21 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.100876907318082 Ether0.000099036
0xbee9353ff1a0c51f564282876b09a2fb54cc87a4ab215f66c9d0147994f026132765244228 days 21 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.101898829976034 Ether0.0001039878
0x1a4137a8d97c1adf5b982dd520c7fab816cd4840929a7b1e21a4b7dd9b669e492765104228 days 22 hrs ago0x6aa7fbe31c046e905ca48f64afd4e08782bed99c IN  0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360.103329930193899 Ether0.0001039878
[ Download CSV Export 

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

Parent TxHash Block Age From To Value
0x7195e5f35eee42600cf82bdec9e4e6ead2e693b85035a5809cb752447188cb6f351134898 days 16 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0 Ether
0x7195e5f35eee42600cf82bdec9e4e6ead2e693b85035a5809cb752447188cb6f351134898 days 16 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360x9ef7bcd0e8cc5701d20d2c25c6b3a94acffea59c0.00096 Ether
0x33be16e2285cf0e3ec95e33fda9b1072ef0e35b17ba4ed01253b200b785e2ac73009779185 days 19 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa2.80615262400000144 Ether
0x7af818012900f7239b189cdd9ae0e5a8e6ddb9c09c905c9bae60cac8d65778882974889191 days 20 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa2.80615262400000144 Ether
0xafd5b130eaf826b8e70e4330a7955671f8884fcef1678633fd5ecbd8ea8747ff2933429199 days 17 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa2.80615262400000144 Ether
0x9d1f9bee40c3419461d8b3b9fb29188d42379860933fc247a85025ea6754b7c12767273228 days 13 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.096483503379290753 Ether
0xf3259f43e434408fcf7de811bab0c78cc494561848974ce5b83e0b109494461a2767129228 days 14 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.096313071895424837 Ether
0x825e7aa4f45a50a21423d90949ff459fb0aaae6363a091c0fd6ade975e0696b82767037228 days 14 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.097215032679738563 Ether
0x35278bd03acf4834716ede0dc8283f90864ddd4be81d2f3109ec4504758278572766830228 days 15 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.099245098039215687 Ether
0xb3b26fc42bf076896257bd4b3881ffd60bcf13bd32e007e205f57eaf3afae3032766750228 days 15 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.100029411764705883 Ether
0x0d4a1cfe03033e7cbef3b27ebffdd5daed9a46577ffa5ff15d552a6e6403d0552766243228 days 17 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.099343137254901961 Ether
0x691e8f19e8898ac00de26bb48e1f1f096a457370eb5e230f118212260b0daf372766142228 days 18 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.100333333333333334 Ether
0x8f02b556f281ddd4cd46ee61a794580d98254c258050a829f9aff020f308d63a2766081228 days 18 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.100931372549019609 Ether
0x7de6e700017b1651fe0bcf9ddcba2b70289a7865b27c5fba4fd001a551adf9052766061228 days 18 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.101127450980392158 Ether
0x8479d0c0b4f648ef3ab55119c613e495a38d26138fc49d80ef9b576862a9cac52766018228 days 18 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.101549019607843138 Ether
0x4e4e0550790fc8b896212063903d6cb1321869cf93e353c33129aec3b96370682765997228 days 18 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.096098039215686275 Ether
0x61d07b5e53f5ed4441e4da8b56b63d3c8c8f77558651d42040bf83fc4abc679c2765977228 days 18 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.096294117647058824 Ether
0xb8018bf215563d433219aec6d254abad9363493c47b6fca1a500b19b490419cc2765957228 days 18 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.096490196078431373 Ether
0x6d797fd41902d872dbf87c579a99c39ef2aaf4b1b4f3bcc405f73b51608bd90d2765750228 days 19 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.098519607843137256 Ether
0xba18fddc2fee0d7125e36143865588628026106a422f7fe4722c6c803617ed872765710228 days 19 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.098911764705882354 Ether
0x04012d6a391b80fe8ee97e1889c6aecb5df2dd8c089c8efcfc3c337f51e3a7bd2765591228 days 20 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.100078431372549021 Ether
0x92a2f1b7fee84fd123e466041b4fc4a0fb8776d01e91448f9edb739a54bc3a3e2765570228 days 20 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.100284313725490197 Ether
0xca2017572e3f3dd83a3bd93b19d7263503ced33bd18df516638a362016dc28c22765530228 days 20 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.100676470588235295 Ether
0x157404bb3ff30c41b98a27204dbfced15ecbf43ddb4ed17b0c7745ba990d697c2765344228 days 21 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.096823529411764706 Ether
0xbee9353ff1a0c51f564282876b09a2fb54cc87a4ab215f66c9d0147994f026132765244228 days 21 hrs ago0xfaf6c96245fdae0e86b7a2ef6fd4df2c98e354360xc2ce03cb39bc3828f17e81894212ce941db821aa0.097803921568627452 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0x02913cd03c269dc2d96858faa3f18d98f6104009

Contract Name:
SaleMarket

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.24;

pragma solidity ^0.4.24;

pragma solidity ^0.4.20;

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

pragma solidity ^0.4.20;


pragma solidity ^0.4.24;


/**
 * @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
interface ERC20 {
	
	 /**
     * 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) {
            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();
        return uint128(uint256(priceWei) * ethPerToken / 1 ether);
    }

    function getCutieId(bytes _extraData) 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);

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

            require(tokenContract.transferFrom(_sender, address(this), priceInTokens));
            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)];
    }
}


/// @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 ABI

[{"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":"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":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":"_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"}]

Contract Creation Code

6080604052600080546004805460a060020a60ff02191674010000000000000000000000000000000000000000179055600160a860020a03191633179055611aa28061004c6000396000f3006080604052600436106101455763ffffffff60e060020a6000350416632177885d81146101545780632951f1b21461018757806330d9161d146101c45780633f4ba83a146101e55780635476bd72146101fa5780635c975abb146102215780635fa7b584146102365780636066b06614610257578063776247c41461026c5780637ea310d41461028157806381baab24146102bc5780638456cb59146103355780638da5cb5b1461034a5780638e0055531461035f5780638f4ffcb11461037b57806398c9faac146103b35780639ccaec98146103d2578063a01da7b21461044a578063b2fb3b9014610477578063b3ab15fb14610496578063c170fd54146104b7578063c1d1faf3146104c9578063cda8c71514610502578063d5b2a01a14610529578063e410a0c614610555578063e80db5db1461057d578063f2fde38b14610592575b34801561015157600080fd5b50005b34801561016057600080fd5b5061017364ffffffffff600435166105b3565b604080519115158252519081900360200190f35b34801561019357600080fd5b506101a8600160a060020a03600435166105dc565b60408051600160a060020a039092168252519081900360200190f35b3480156101d057600080fd5b506101e364ffffffffff600435166105f7565b005b3480156101f157600080fd5b506101e3610686565b34801561020657600080fd5b506101e3600160a060020a03600435811690602435166106fc565b34801561022d57600080fd5b5061017361074e565b34801561024257600080fd5b506101e3600160a060020a036004351661075e565b34801561026357600080fd5b506101736107a9565b34801561027857600080fd5b506101e36107b9565b34801561028d57600080fd5b506102a064ffffffffff60043516610826565b604080516001608060020a039092168252519081900360200190f35b3480156102c857600080fd5b506102db64ffffffffff60043516610860565b604080516001608060020a0398891681529688166020880152600160a060020a039095168686015264ffffffffff9384166060870152919092166080850152931660a083015291151560c082015290519081900360e00190f35b34801561034157600080fd5b506101e36108d3565b34801561035657600080fd5b506101a861094e565b34801561036b57600080fd5b506101e361ffff6004351661095d565b34801561038757600080fd5b506101e360048035600160a060020a0390811691602480359260443516916064359182019101356109ba565b3480156103bf57600080fd5b506101e364ffffffffff60043516610cc5565b3480156103de57600080fd5b506103f164ffffffffff60043516610d15565b60408051600160a060020a0390981688526001608060020a0396871660208901529486168786015264ffffffffff9384166060880152919092166080860152921660a084015290151560c0830152519081900360e00190f35b34801561045657600080fd5b506102a0600160a060020a03600435166001608060020a0360243516610dbc565b34801561048357600080fd5b506101e364ffffffffff60043516610e71565b3480156104a257600080fd5b506101e3600160a060020a0360043516610ee5565b6101e364ffffffffff60043516610f40565b6101e364ffffffffff6004358116906001608060020a036024358116916044359091169060643516600160a060020a0360843516610f6a565b34801561050e57600080fd5b506101e3600160a060020a0360043581169060243516611028565b34801561053557600080fd5b5061053e61118a565b6040805161ffff9092168252519081900360200190f35b34801561056157600080fd5b506101e3600160a060020a036004351661ffff6024351661119b565b34801561058957600080fd5b506101a861128c565b34801561059e57600080fd5b506101e3600160a060020a036004351661129b565b64ffffffffff90811660009081526002602052604081206001015460c860020a90049091161190565b600360205260009081526040902054600160a060020a031681565b6004546000908190600160a060020a031633148061061f5750600054600160a060020a031633145b151561062a57600080fd5b64ffffffffff83166000908152600260205260409020915061064b8261132f565b151561065657600080fd5b506001808201549054600160a060020a039182169116811461067757600080fd5b6106818333611348565b505050565b600054600160a060020a0316331461069d57600080fd5b60005460a060020a900460ff1615156106b557600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b600054600160a060020a0316331461071357600080fd5b600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60005460a060020a900460ff1681565b600054600160a060020a0316331461077557600080fd5b600160a060020a03166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b60045460a060020a900460ff1681565b600154600054600160a060020a0391821691163314806107e1575033600160a060020a038216145b15156107ec57600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610822573d6000803e3d6000fd5b5050565b64ffffffffff811660009081526002602052604081206108458161132f565b151561085057600080fd5b61085981611391565b9392505050565b60026020819052600091825260409091208054600182015491909201546001608060020a038084169370010000000000000000000000000000000090819004821693600160a060020a0381169364ffffffffff60a060020a830481169460c860020a90930416929181169160ff91041687565b600054600160a060020a031633146108ea57600080fd5b60005460a060020a900460ff161561090157600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600054600160a060020a031681565b600054600160a060020a0316331461097457600080fd5b61271061ffff8216111561098757600080fd5b6001805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b6000808080808080808b6001608060020a038111156109d857600080fd5b60005460a060020a900460ff16156109ef57600080fd5b8b985060058a146109ff57600080fd5b610a388b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843750611418945050505050565b64ffffffffff81166000908152600260208190526040909120908101549199509750700100000000000000000000000000000000900460ff161515610a7c57600080fd5b610a858761132f565b1515610a9057600080fd5b610a9987611391565b9550610aa58987610dbc565b6001880154909550600160a060020a03169350610ac1886114fd565b6000856001608060020a03161115610c2c57610adc8561155c565b9250828503915088600160a060020a03166323b872dd8f30886040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a03168152602001826001608060020a031681526020019350505050602060405180830381600087803b158015610b6957600080fd5b505af1158015610b7d573d6000803e3d6000fd5b505050506040513d6020811015610b9357600080fd5b50511515610ba057600080fd5b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526001608060020a03851660248301529151918b169163a9059cbb9160448082019260009290919082900301818387803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050505b8b600160a060020a03168e600160a060020a03168964ffffffffff167ff65c85ee1272f6f51bd40bae1565e2868b8e887082e6f94b4924d29d21f842d7898960405180836001608060020a03166001608060020a03168152602001826001608060020a03166001608060020a031681526020019250505060405180910390a4610cb58e89611583565b5050505050505050505050505050565b64ffffffffff8116600090815260026020526040812090610ce58261132f565b1515610cf057600080fd5b506001810154600160a060020a0316338114610d0b57600080fd5b6106818382611348565b64ffffffffff81166000908152600260205260408120819081908190819081908190610d408161132f565b1515610d4b57600080fd5b60018101548154600290920154600160a060020a0382169b6001608060020a038085169c507001000000000000000000000000000000009485900481169b5060a060020a840464ffffffffff9081169b5060c860020a909404909316985091811696509190910460ff169350915050565b600160a060020a0380831660009081526003602052604081205490911681811515610de657600080fd5b81600160a060020a0316633732e1536040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b505050506040513d6020811015610e4e57600080fd5b50519050670de0b6b3a76400006001608060020a03851682020495945050505050565b6000805460a060020a900460ff161515610e8a57600080fd5b600054600160a060020a03163314610ea157600080fd5b5064ffffffffff81166000908152600260205260409020610ec18161132f565b1515610ecc57600080fd5b6001810154610822908390600160a060020a0316611348565b600054600160a060020a03163314610efc57600080fd5b600160a060020a0381161515610f1157600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b346001608060020a03811115610f5557600080fd5b610f5f8234611613565b506108223383611583565b6000610f74611a3a565b600154600160a060020a03163314610f8b57600080fd5b610f958388611734565b64800000000064ffffffffff8516818110935006935060e060405190810160405280876001608060020a03168152602001866001608060020a0316815260200184600160a060020a031681526020018564ffffffffff1681526020014264ffffffffff168152602001346001608060020a03168152602001831515815250905061101f87826117ae565b50505050505050565b60015460008054600160a060020a0392831692163314806110535750600454600160a060020a031633145b80611066575033600160a060020a038316145b151561107157600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b1580156110d257600080fd5b505af11580156110e6573d6000803e3d6000fd5b505050506040513d60208110156110fc57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509086169163a9059cbb9160448082019260009290919082900301818387803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b5050505050505050565b60015460a060020a900461ffff1681565b60008054600160a060020a031633146111b357600080fd5b61271061ffff831611156111c657600080fd5b81600160146101000a81548161ffff021916908361ffff16021790555082905080600160a060020a0316634d6a813a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561122457600080fd5b505af1158015611238573d6000803e3d6000fd5b505050506040513d602081101561124e57600080fd5b5051151561125b57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600154600160a060020a031681565b600054600160a060020a031633146112b257600080fd5b600160a060020a03811615156112c757600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60010154600060c860020a90910464ffffffffff161190565b611351826114fd565b61135b8183611583565b60405164ffffffffff8316907ff6680ade663631ec4dd74f7eaa1f75125361380cd50a22f969e9acfa5f53670490600090a25050565b60018101546000908190429064ffffffffff60c860020a909104811690821611156113ce57600184015460c860020a900464ffffffffff16810391505b83546001850154611410916001608060020a0380821692700100000000000000000000000000000000909204169060a060020a900464ffffffffff16856119d3565b949350505050565b600081600481518110151561142957fe5b90602001015160f860020a900460f860020a0260f860020a900463100000000282600381518110151561145857fe5b90602001015160f860020a900460f860020a0260f860020a9004621000000283600281518110151561148657fe5b90602001015160f860020a900460f860020a0260f860020a900462010000028460018151811015156114b457fe5b90602001015160f860020a900460f860020a0260f860020a9004610100028560008151811015156114e157fe5b016020015160f860020a90819004810204010101019050919050565b64ffffffffff16600090815260026020819052604082209182556001820180547fffff00000000000000000000000000000000000000000000000000000000000016905501805470ffffffffffffffffffffffffffffffffff19169055565b6001546000906127109060a060020a900461ffff1683026001608060020a03160492915050565b600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015264ffffffffff851660248301529151919092169163a9059cbb91604480830192600092919082900301818387803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b505050505050565b64ffffffffff82166000908152600260205260408120818080806116368561132f565b151561164157600080fd5b61164a85611391565b93506001608060020a03808516908816101561166557600080fd5b6001850154600160a060020a0316925061167e886114fd565b6000846001608060020a031611156116e1576116998461155c565b6040519092508285039150600160a060020a038416906001608060020a03831680156108fc02916000818181858888f193505050501580156116df573d6000803e3d6000fd5b505b604080516001608060020a03861681529051339164ffffffffff8b16917f8500e47909916e51e97e4880e742d8b9af1afaeb9ea54166947cf42e6616b1179181900360200190a350919695505050505050565b600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015264ffffffffff85166044830152915191909216916323b872dd91606480830192600092919082900301818387803b1580156115f757600080fd5b603c816060015164ffffffffff16101515156117c957600080fd5b80600260008464ffffffffff1664ffffffffff16815260200190815260200160002060008201518160000160006101000a8154816001608060020a0302191690836001608060020a0316021790555060208201518160000160106101000a8154816001608060020a0302191690836001608060020a0316021790555060408201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060608201518160010160146101000a81548164ffffffffff021916908364ffffffffff16021790555060808201518160010160196101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160020160006101000a8154816001608060020a0302191690836001608060020a0316021790555060c08201518160020160106101000a81548160ff0219169083151502179055509050508164ffffffffff167fb5cfc381f79e09b5e427756c6c36086288faf8a39c226abab7c517219fb6c8018260000151836020015184606001518560a001518660c0015160405180866001608060020a03166001608060020a03168152602001856001608060020a03166001608060020a031681526020018464ffffffffff1664ffffffffff168152602001836001608060020a03166001608060020a03168152602001821515151581526020019550505050505060405180910390a25050565b600080808064ffffffffff808716908616106119f157869350611a2f565b876001608060020a0316876001608060020a03160392508564ffffffffff168564ffffffffff168402811515611a2357fe5b05915081880190508093505b505050949350505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152905600a165627a7a723058204211a90dc4024a6b277e1d4f63211ba2db537c565eaf554d6d10e6489112a4300029

Swarm Source

bzzr://4211a90dc4024a6b277e1d4f63211ba2db537c565eaf554d6d10e6489112a430
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward