Contract 0x9Fa668F5E5572Ea04dB6EFF1A62Eb39ff7fb809e

 

Contract Overview

BC: Sale Market 2
Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0xa9c05f5cf98ff3ed2c309dfcd28bb018d3adc46eb5ef3c0d170533856a1891c3Setup112833552020-11-18 17:47:32216 days 18 hrs agoBC: Deployer IN  BC: Sale Market 20 Ether0.0016737550
0x85af9bd1ccdbe09880e9ae7a6d40c8554188c01aaf574973fa7c5be41183ed29Withdraw Eth Fro...112833342020-11-18 17:41:30216 days 18 hrs agoBC: Deployer IN  BC: Sale Market 20 Ether0.00207721866
0x5585b7a5880a0ebb7398dd02a4a0bff72455d1541af08eb72c9112a673700491Setup112833242020-11-18 17:39:39216 days 18 hrs agoBC: Deployer IN  BC: Sale Market 20 Ether0.00234023171
0xc1e9540cb568279bed8f9009387da3dd89ecd1e8e4237846c07b3eab31199880Withdraw Eth Fro...67647282018-11-24 15:38:37941 days 20 hrs ago0x5d5e5c869dbd4018a8748b4ae0fbf487e1d0f69e IN  BC: Sale Market 20 Ether0.0001335426
0x8f6bad0e17d199a4bb43af189ff68b69c4f408ab8e806c6f89394dc55338fd06Cutie Id To Auct...67633772018-11-24 10:25:42942 days 1 hr ago0x7070a70e3660a7f95c45a26f0ebb120634ac3b33 IN  BC: Sale Market 20 Ether0.000115685
0x536e774ff936c220899b5459122824e80b4d8e2ad7d7131ebef0f890e5e4f563Withdraw Eth Fro...67630662018-11-24 9:13:32942 days 2 hrs ago0x7070a70e3660a7f95c45a26f0ebb120634ac3b33 IN  BC: Sale Market 20 Ether0.0001335426
0x7b28d0ad589908bf65b7cfec3d75a674b7e8271df0a771099380df1ba38798efCutie Id To Auct...67630572018-11-24 9:12:10942 days 2 hrs ago0x7070a70e3660a7f95c45a26f0ebb120634ac3b33 IN  BC: Sale Market 20 Ether0.0001388166
0xaaaa78476eb68800d15c65b90c9597c78b6cd534210c9495d01da0010da4ebf1Cancel Active Au...63112702018-09-11 9:17:061016 days 2 hrs ago0xaa3d6d6f25dc557372898415ab71f2433c12a9ea IN  BC: Sale Market 20 Ether0.0001450084
0x2a9fdf452e38fb9e3975ba35c809052b0715b1b6cf2e5769ce6e716422b81648Bid62941872018-09-08 12:34:441018 days 23 hrs ago0x69cb3709a75d39389be967710ca354e40cd5de84 IN  BC: Sale Market 26.655000001000002 Ether0.0011569661730.61
0xdd10c93f84a3d9d269b9c10131f76fa08b762ee43f0e6b6016d1518e0b1e5905Bid62917712018-09-08 2:49:571019 days 9 hrs ago0x69cb3709a75d39389be967710ca354e40cd5de84 IN  BC: Sale Market 22.923075651000001 Ether0.00012095043.2
0x9bbf8b7b71d74dd4365665b02f7f62a158af394580bb02f1c3e5e1476d95cbedCancel Active Au...62651052018-09-03 15:33:101023 days 20 hrs ago0x80e7e06f096380dd0d3f9cec4fdece370db4cdbd IN  BC: Sale Market 20 Ether0.000106262.5
0xa37aadfac51d93b1ed1bf14d0789d8d2dec080be2f0af001749497dbb5eae20aBid62488942018-08-31 22:00:161026 days 13 hrs ago0x778f7434956b899303708fa3c5fad85bf9d93e06 IN  BC: Sale Market 21.071794406 Ether0.00010583162.8
0xa0b224b6ce8fc8cfdc10460b8921f0d62e6defd2aadd921385dbb51ecc62999fCancel Active Au...62130812018-08-25 20:53:561032 days 15 hrs ago0x88efdba2d8c02afca0e42756a17d051b7b40d9bd IN  BC: Sale Market 20 Ether0.0000850082
0x75691437fa32b9b089f2f841512a48ee96ae605d08cffa913aeecd58b0e17b04Cancel Active Au...62130622018-08-25 20:48:001032 days 15 hrs ago0x88efdba2d8c02afca0e42756a17d051b7b40d9bd IN  BC: Sale Market 20 Ether0.0000850082
0x75cf8f8a8f871bbeaa8114e428fbf2620cf5115e382d6e6514998897d90d561fCancel Active Au...62130592018-08-25 20:47:321032 days 15 hrs ago0x88efdba2d8c02afca0e42756a17d051b7b40d9bd IN  BC: Sale Market 20 Ether0.0000850082
0xbdc87a67e9a398feb205861751df183da114e05a8f00eebb0711a9ef865e8515Cancel Active Au...61991842018-08-23 12:33:311034 days 23 hrs ago0xaa3d6d6f25dc557372898415ab71f2433c12a9ea IN  BC: Sale Market 20 Ether0.00007975442.2
0xb318979404f1986de6cac0a551af4c8e5b21ec06018f2d8204a125e75a1585e1Bid61825082018-08-20 17:06:111037 days 18 hrs ago0xd311e934d9a1d9f71004976cd0268fd25f9cb77f IN  BC: Sale Market 20.007000001 Ether0.00011271542.1
0xd00be21acd0e57ee181e75d0f47c81c1af9ef745ba2e4f171049d5d1a5820abeBid61329992018-08-12 8:00:131046 days 3 hrs ago0x39c4e59bea399f09818c817a7ad96ed4891396ef IN  BC: Sale Market 20.006409183098765 Ether0.00085878416
0x5d75e4d3b4c456cb6754b17faef0241696449958f61a0dbc393f75446d214333Bid61329972018-08-12 7:59:051046 days 3 hrs ago0x39c4e59bea399f09818c817a7ad96ed4891396ef IN  BC: Sale Market 20.008000001 Ether0.00155654629
0x7df3ebbf3008c3d5406a1e16a825f3248ea9e9d923a658f98d7ff13a12936ec3Bid61329952018-08-12 7:58:191046 days 3 hrs ago0x39c4e59bea399f09818c817a7ad96ed4891396ef IN  BC: Sale Market 20.006000001 Ether0.00225430842
0x9f24935059210448aaf56f4bca7ab7c729e81c62f681a1e9406a661683949768Bid61259022018-08-11 2:58:501047 days 8 hrs ago0xf281e85a0b992efa5fda4f52b35685dc5ee67bea IN  BC: Sale Market 20.137915780320987 Ether0.0002198014.1
0x129af05e34a5a87f1a8703f664510c5ba9a4033cf591466204f19dcb69b475a2Bid61106452018-08-08 13:14:111049 days 22 hrs agoENS Name tarumikei.eth IN  BC: Sale Market 20.003000001 Ether0.00418911461
0xd068977d258ae785fd0afdc24f5fa73068f8ede8c799ae76e4e38a3f363e5fdcCancel Active Au...61035422018-08-07 8:24:371051 days 3 hrs ago0xa25be26746bfb8e05a00251ae602790a14f80100 IN  BC: Sale Market 20 Ether0.00011476082.7
0x65819762a35b7bb6d48a50246ea02ac0c047c5e6ea9bcab9f5d0432764799f7cCancel Active Au...61033632018-08-07 7:42:061051 days 4 hrs ago0x0b62f049b0e44bc2c629416bc3160d1494c22fd3 IN  BC: Sale Market 20 Ether0.00009775922.3
0xf5545d7ee8b2028c7860b344a017bb8f7fd67464a2388bf09e646c299c85f57dCancel Active Au...61033522018-08-07 7:40:161051 days 4 hrs ago0x0b62f049b0e44bc2c629416bc3160d1494c22fd3 IN  BC: Sale Market 20 Ether0.00010838522.55
[ Download CSV Export 
Latest 15 internal transactions
Parent Txn Hash Block From To Value
0x85af9bd1ccdbe09880e9ae7a6d40c8554188c01aaf574973fa7c5be41183ed29112833342020-11-18 17:41:30216 days 18 hrs ago BC: Sale Market 2 0xf64899806138ba624a8647b1a88fe2cb1f2ac56b11.209945241499124163 Ether
0xb318979404f1986de6cac0a551af4c8e5b21ec06018f2d8204a125e75a1585e161825082018-08-20 17:06:111037 days 18 hrs ago BC: Sale Market 20xaa3d6d6f25dc557372898415ab71f2433c12a9ea0.00672 Ether
0xd00be21acd0e57ee181e75d0f47c81c1af9ef745ba2e4f171049d5d1a5820abe61329992018-08-12 8:00:131046 days 3 hrs ago BC: Sale Market 20xaa3d6d6f25dc557372898415ab71f2433c12a9ea0.006152569629629631 Ether
0x5d75e4d3b4c456cb6754b17faef0241696449958f61a0dbc393f75446d21433361329972018-08-12 7:59:051046 days 3 hrs ago BC: Sale Market 20xaa3d6d6f25dc557372898415ab71f2433c12a9ea0.00768 Ether
0x7df3ebbf3008c3d5406a1e16a825f3248ea9e9d923a658f98d7ff13a12936ec361329952018-08-12 7:58:191046 days 3 hrs ago BC: Sale Market 20xaa3d6d6f25dc557372898415ab71f2433c12a9ea0.00576 Ether
0x9f24935059210448aaf56f4bca7ab7c729e81c62f681a1e9406a66168394976861259022018-08-11 2:58:501047 days 8 hrs ago BC: Sale Market 20x88efdba2d8c02afca0e42756a17d051b7b40d9bd0.132393370370370371 Ether
0x129af05e34a5a87f1a8703f664510c5ba9a4033cf591466204f19dcb69b475a261106452018-08-08 13:14:111049 days 22 hrs ago BC: Sale Market 20xeb5e2b1b21ffaed1ae4a288e55cca207112119720.00288 Ether
0xafd4d51f9bae82a75aba2db9fe58d0ceed713eb9c79d51666f66124fe97a074f60999672018-08-06 17:55:051051 days 18 hrs ago BC: Sale Market 20x908fd4558d7ef6b31d68ba50c70a85723ef4aad90.002536433333333334 Ether
0x8468941b68b6e89b5918f358a9a2fd0fea465b05beb5875ad9e42184e6ff3dfe60915312018-08-05 7:52:121053 days 4 hrs ago BC: Sale Market 20x1d9dd228fd039de2de7fe2bc684a6cceb34dba530.002172953333333334 Ether
0xf86ed9325b8495cda78f4c4affcf4b9bbffa64ee1f9c962d34f531a8a2c4fec860913432018-08-05 7:03:541053 days 4 hrs ago BC: Sale Market 20x908fd4558d7ef6b31d68ba50c70a85723ef4aad90.003032813333333334 Ether
0xa418f5546435d40ea7357545e42f3f033459f95eb7e2fe45756279c72f18c40c60885482018-08-04 19:46:221053 days 16 hrs ago BC: Sale Market 20x9ef7bcd0e8cc5701d20d2c25c6b3a94acffea59c0.001868725925925926 Ether
0x211b46dbdd26598a84f9af3ea4604ce3dba7dbd9c99447726a935135823e9e7c60876562018-08-04 15:57:031053 days 19 hrs ago BC: Sale Market 20xbe38d786dccefb5a909967c65ebe6a4e385d9fb30.007902227160493829 Ether
0x3c86132fe0033c24014b54fe839ef409fdeed9a5248149a172f038ea977bc8a960875852018-08-04 15:40:331053 days 20 hrs ago BC: Sale Market 20xe657ce4ac591af5f5e7bbe671c61dfe1c73252cc0.0048 Ether
0x595c1c0a1731056a43b36ca9557c50cbc6fff09f79161ff5651152575085372e60827122018-08-03 20:33:181054 days 15 hrs ago BC: Sale Market 20x88efdba2d8c02afca0e42756a17d051b7b40d9bd0.047969207407407408 Ether
0x920a93c7c04d56e19e4fd1d40b40755c4326cab23c7138543f3ccb9cb0ade6e960827072018-08-03 20:31:491054 days 15 hrs ago BC: Sale Market 20x88efdba2d8c02afca0e42756a17d051b7b40d9bd0.0671938888888889 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-08-03
*/

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

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 && 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();
        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 Security Audit

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"}]

6080604052600080546004805460a060020a60ff02191674010000000000000000000000000000000000000000179055600160a860020a03191633179055611abc8061004c6000396000f3006080604052600436106101455763ffffffff60e060020a6000350416632177885d81146101545780632951f1b21461018757806330d9161d146101c45780633f4ba83a146101e55780635476bd72146101fa5780635c975abb146102215780635fa7b584146102365780636066b06614610257578063776247c41461026c5780637ea310d41461028157806381baab24146102bc5780638456cb59146103355780638da5cb5b1461034a5780638e0055531461035f5780638f4ffcb11461037b57806398c9faac146103b35780639ccaec98146103d2578063a01da7b21461044a578063b2fb3b9014610477578063b3ab15fb14610496578063c170fd54146104b7578063c1d1faf3146104c9578063cda8c71514610502578063d5b2a01a14610529578063e410a0c614610555578063e80db5db1461057d578063f2fde38b14610592575b34801561015157600080fd5b50005b34801561016057600080fd5b5061017364ffffffffff600435166105b3565b604080519115158252519081900360200190f35b34801561019357600080fd5b506101a8600160a060020a03600435166105dc565b60408051600160a060020a039092168252519081900360200190f35b3480156101d057600080fd5b506101e364ffffffffff600435166105f7565b005b3480156101f157600080fd5b506101e3610686565b34801561020657600080fd5b506101e3600160a060020a03600435811690602435166106fc565b34801561022d57600080fd5b5061017361074e565b34801561024257600080fd5b506101e3600160a060020a036004351661075e565b34801561026357600080fd5b506101736107a9565b34801561027857600080fd5b506101e36107b9565b34801561028d57600080fd5b506102a064ffffffffff60043516610826565b604080516001608060020a039092168252519081900360200190f35b3480156102c857600080fd5b506102db64ffffffffff60043516610860565b604080516001608060020a0398891681529688166020880152600160a060020a039095168686015264ffffffffff9384166060870152919092166080850152931660a083015291151560c082015290519081900360e00190f35b34801561034157600080fd5b506101e36108d3565b34801561035657600080fd5b506101a861094e565b34801561036b57600080fd5b506101e361ffff6004351661095d565b34801561038757600080fd5b506101e360048035600160a060020a0390811691602480359260443516916064359182019101356109ba565b3480156103bf57600080fd5b506101e364ffffffffff60043516610cc5565b3480156103de57600080fd5b506103f164ffffffffff60043516610d15565b60408051600160a060020a0390981688526001608060020a0396871660208901529486168786015264ffffffffff9384166060880152919092166080860152921660a084015290151560c0830152519081900360e00190f35b34801561045657600080fd5b506102a0600160a060020a03600435166001608060020a0360243516610dbc565b34801561048357600080fd5b506101e364ffffffffff60043516610e71565b3480156104a257600080fd5b506101e3600160a060020a0360043516610ee5565b6101e364ffffffffff60043516610f40565b6101e364ffffffffff6004358116906001608060020a036024358116916044359091169060643516600160a060020a0360843516610f6a565b34801561050e57600080fd5b506101e3600160a060020a0360043581169060243516611028565b34801561053557600080fd5b5061053e61118a565b6040805161ffff9092168252519081900360200190f35b34801561056157600080fd5b506101e3600160a060020a036004351661ffff6024351661119b565b34801561058957600080fd5b506101a861128c565b34801561059e57600080fd5b506101e3600160a060020a036004351661129b565b64ffffffffff90811660009081526002602052604081206001015460c860020a90049091161190565b600360205260009081526040902054600160a060020a031681565b6004546000908190600160a060020a031633148061061f5750600054600160a060020a031633145b151561062a57600080fd5b64ffffffffff83166000908152600260205260409020915061064b8261132f565b151561065657600080fd5b506001808201549054600160a060020a039182169116811461067757600080fd5b6106818333611348565b505050565b600054600160a060020a0316331461069d57600080fd5b60005460a060020a900460ff1615156106b557600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b600054600160a060020a0316331461071357600080fd5b600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60005460a060020a900460ff1681565b600054600160a060020a0316331461077557600080fd5b600160a060020a03166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b60045460a060020a900460ff1681565b600154600054600160a060020a0391821691163314806107e1575033600160a060020a038216145b15156107ec57600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610822573d6000803e3d6000fd5b5050565b64ffffffffff811660009081526002602052604081206108458161132f565b151561085057600080fd5b61085981611391565b9392505050565b60026020819052600091825260409091208054600182015491909201546001608060020a038084169370010000000000000000000000000000000090819004821693600160a060020a0381169364ffffffffff60a060020a830481169460c860020a90930416929181169160ff91041687565b600054600160a060020a031633146108ea57600080fd5b60005460a060020a900460ff161561090157600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600054600160a060020a031681565b600054600160a060020a0316331461097457600080fd5b61271061ffff8216111561098757600080fd5b6001805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b6000808080808080808b6001608060020a038111156109d857600080fd5b60005460a060020a900460ff16156109ef57600080fd5b8b985060058a146109ff57600080fd5b610a388b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843750611418945050505050565b64ffffffffff81166000908152600260208190526040909120908101549199509750700100000000000000000000000000000000900460ff161515610a7c57600080fd5b610a858761132f565b1515610a9057600080fd5b610a9987611391565b9550610aa58987610dbc565b6001880154909550600160a060020a03169350610ac1886114fd565b6000856001608060020a03161115610c2c57610adc8561155c565b9250828503915088600160a060020a03166323b872dd8f30886040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a03168152602001826001608060020a031681526020019350505050602060405180830381600087803b158015610b6957600080fd5b505af1158015610b7d573d6000803e3d6000fd5b505050506040513d6020811015610b9357600080fd5b50511515610ba057600080fd5b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526001608060020a03851660248301529151918b169163a9059cbb9160448082019260009290919082900301818387803b158015610c1357600080fd5b505af1158015610c27573d6000803e3d6000fd5b505050505b8b600160a060020a03168e600160a060020a03168964ffffffffff167ff65c85ee1272f6f51bd40bae1565e2868b8e887082e6f94b4924d29d21f842d7898960405180836001608060020a03166001608060020a03168152602001826001608060020a03166001608060020a031681526020019250505060405180910390a4610cb58e89611583565b5050505050505050505050505050565b64ffffffffff8116600090815260026020526040812090610ce58261132f565b1515610cf057600080fd5b506001810154600160a060020a0316338114610d0b57600080fd5b6106818382611348565b64ffffffffff81166000908152600260205260408120819081908190819081908190610d408161132f565b1515610d4b57600080fd5b60018101548154600290920154600160a060020a0382169b6001608060020a038085169c507001000000000000000000000000000000009485900481169b5060a060020a840464ffffffffff9081169b5060c860020a909404909316985091811696509190910460ff169350915050565b600160a060020a0380831660009081526003602052604081205490911681811515610de657600080fd5b81600160a060020a0316633732e1536040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b505050506040513d6020811015610e4e57600080fd5b50519050670de0b6b3a76400006001608060020a03851682020495945050505050565b6000805460a060020a900460ff161515610e8a57600080fd5b600054600160a060020a03163314610ea157600080fd5b5064ffffffffff81166000908152600260205260409020610ec18161132f565b1515610ecc57600080fd5b6001810154610822908390600160a060020a0316611348565b600054600160a060020a03163314610efc57600080fd5b600160a060020a0381161515610f1157600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b346001608060020a03811115610f5557600080fd5b610f5f8234611613565b506108223383611583565b6000610f74611a54565b600154600160a060020a03163314610f8b57600080fd5b610f95838861174e565b64800000000064ffffffffff8516818110935006935060e060405190810160405280876001608060020a03168152602001866001608060020a0316815260200184600160a060020a031681526020018564ffffffffff1681526020014264ffffffffff168152602001346001608060020a03168152602001831515815250905061101f87826117c8565b50505050505050565b60015460008054600160a060020a0392831692163314806110535750600454600160a060020a031633145b80611066575033600160a060020a038316145b151561107157600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b1580156110d257600080fd5b505af11580156110e6573d6000803e3d6000fd5b505050506040513d60208110156110fc57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509086169163a9059cbb9160448082019260009290919082900301818387803b15801561116c57600080fd5b505af1158015611180573d6000803e3d6000fd5b5050505050505050565b60015460a060020a900461ffff1681565b60008054600160a060020a031633146111b357600080fd5b61271061ffff831611156111c657600080fd5b81600160146101000a81548161ffff021916908361ffff16021790555082905080600160a060020a0316634d6a813a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561122457600080fd5b505af1158015611238573d6000803e3d6000fd5b505050506040513d602081101561124e57600080fd5b5051151561125b57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600154600160a060020a031681565b600054600160a060020a031633146112b257600080fd5b600160a060020a03811615156112c757600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60010154600060c860020a90910464ffffffffff161190565b611351826114fd565b61135b8183611583565b60405164ffffffffff8316907ff6680ade663631ec4dd74f7eaa1f75125361380cd50a22f969e9acfa5f53670490600090a25050565b60018101546000908190429064ffffffffff60c860020a909104811690821611156113ce57600184015460c860020a900464ffffffffff16810391505b83546001850154611410916001608060020a0380821692700100000000000000000000000000000000909204169060a060020a900464ffffffffff16856119ed565b949350505050565b600081600481518110151561142957fe5b90602001015160f860020a900460f860020a0260f860020a900463100000000282600381518110151561145857fe5b90602001015160f860020a900460f860020a0260f860020a9004621000000283600281518110151561148657fe5b90602001015160f860020a900460f860020a0260f860020a900462010000028460018151811015156114b457fe5b90602001015160f860020a900460f860020a0260f860020a9004610100028560008151811015156114e157fe5b016020015160f860020a90819004810204010101019050919050565b64ffffffffff16600090815260026020819052604082209182556001820180547fffff00000000000000000000000000000000000000000000000000000000000016905501805470ffffffffffffffffffffffffffffffffff19169055565b6001546000906127109060a060020a900461ffff1683026001608060020a03160492915050565b600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015264ffffffffff851660248301529151919092169163a9059cbb91604480830192600092919082900301818387803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b505050505050565b64ffffffffff82166000908152600260205260408120818080806116368561132f565b151561164157600080fd5b61164a85611391565b93506001608060020a03808516908816101561166557600080fd5b6001850154600160a060020a0316925061167e886114fd565b6000846001608060020a03161180156116a55750600154600160a060020a03848116911614155b156116fb576116b38461155c565b6040519092508285039150600160a060020a038416906001608060020a03831680156108fc02916000818181858888f193505050501580156116f9573d6000803e3d6000fd5b505b604080516001608060020a03861681529051339164ffffffffff8b16917f8500e47909916e51e97e4880e742d8b9af1afaeb9ea54166947cf42e6616b1179181900360200190a350919695505050505050565b600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015264ffffffffff85166044830152915191909216916323b872dd91606480830192600092919082900301818387803b1580156115f757600080fd5b603c816060015164ffffffffff16101515156117e357600080fd5b80600260008464ffffffffff1664ffffffffff16815260200190815260200160002060008201518160000160006101000a8154816001608060020a0302191690836001608060020a0316021790555060208201518160000160106101000a8154816001608060020a0302191690836001608060020a0316021790555060408201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060608201518160010160146101000a81548164ffffffffff021916908364ffffffffff16021790555060808201518160010160196101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160020160006101000a8154816001608060020a0302191690836001608060020a0316021790555060c08201518160020160106101000a81548160ff0219169083151502179055509050508164ffffffffff167fb5cfc381f79e09b5e427756c6c36086288faf8a39c226abab7c517219fb6c8018260000151836020015184606001518560a001518660c0015160405180866001608060020a03166001608060020a03168152602001856001608060020a03166001608060020a031681526020018464ffffffffff1664ffffffffff168152602001836001608060020a03166001608060020a03168152602001821515151581526020019550505050505060405180910390a25050565b600080808064ffffffffff80871690861610611a0b57869350611a49565b876001608060020a0316876001608060020a03160392508564ffffffffff168564ffffffffff168402811515611a3d57fe5b05915081880190508093505b505050949350505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152905600a165627a7a72305820ac2fec71521e845cf303e1bcb3587d7d286c18823b7b0678f42dfcc6e9f1e6400029

Swarm Source

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