ETH Price: $2,706.49 (+1.97%)

Contract

0xCa891ae246e7177aad7b50dFB1b5E9993A63EaFe
 

Overview

ETH Balance

0.046235841074569111 ETH

Eth Value

$125.14 (@ $2,706.49/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Bid123135952021-04-26 3:49:451387 days ago1619408985IN
BC: Sale Market 5
0.09 ETH0.0023368343
Bid120854512021-03-22 0:42:101422 days ago1616373730IN
BC: Sale Market 5
0.089 ETH0.01029897155
Cancel Active Au...119643792021-03-03 9:07:491441 days ago1614762469IN
BC: Sale Market 5
0 ETH0.003134885
Bid118319712021-02-11 0:11:081461 days ago1613002268IN
BC: Sale Market 5
0.006 ETH0.00595239139
Bid116583352021-01-15 7:29:341488 days ago1610695774IN
BC: Sale Market 5
0.01 ETH0.0021606942
Bid116581472021-01-15 6:51:211488 days ago1610693481IN
BC: Sale Market 5
0.01 ETH0.0021606942
Bid116490642021-01-13 21:04:061489 days ago1610571846IN
BC: Sale Market 5
0.025 ETH0.0020063539
Bid116442662021-01-13 3:37:541490 days ago1610509074IN
BC: Sale Market 5
0.015 ETH0.0046300590
Bid116190832021-01-09 6:49:351494 days ago1610174975IN
BC: Sale Market 5
0.008 ETH0.0028294755
Bid110634802020-10-15 23:42:131579 days ago1602805333IN
BC: Sale Market 5
0.005 ETH0.0016976833
Bid110495132020-10-13 20:36:561581 days ago1602621416IN
BC: Sale Market 5
0.004 ETH0.0035215853
Bid109752692020-10-02 7:24:251593 days ago1601623465IN
BC: Sale Market 5
0.003 ETH0.0047840472
Bid109448832020-09-27 13:22:151597 days ago1601212935IN
BC: Sale Market 5
0.0085 ETH0.0026236951
Cancel Active Au...98408752020-04-09 23:04:581768 days ago1586473498IN
BC: Sale Market 5
0 ETH0.000036881
Cancel Active Au...98408752020-04-09 23:04:581768 days ago1586473498IN
BC: Sale Market 5
0 ETH0.000051881
Cancel Active Au...98112612020-04-05 9:31:241773 days ago1586079084IN
BC: Sale Market 5
0 ETH0.000103262.8
Cancel Active Au...98069872020-04-04 17:52:001773 days ago1586022720IN
BC: Sale Market 5
0 ETH0.000036881
Cancel Active Au...98069872020-04-04 17:52:001773 days ago1586022720IN
BC: Sale Market 5
0 ETH0.000036881
Bid97802032020-03-31 15:02:271777 days ago1585666947IN
BC: Sale Market 5
0.002 ETH0.000257225
Bid95950502020-03-03 0:53:131806 days ago1583196793IN
BC: Sale Market 5
0.01 ETH0.000051441
Cancel Active Au...94516122020-02-09 23:41:521828 days ago1581291712IN
BC: Sale Market 5
0 ETH0.000035541
Cancel Active Au...94516122020-02-09 23:41:521828 days ago1581291712IN
BC: Sale Market 5
0 ETH0.000036881
Cancel Active Au...94516022020-02-09 23:39:381828 days ago1581291578IN
BC: Sale Market 5
0 ETH0.000036881
Cancel Active Au...94516002020-02-09 23:38:551828 days ago1581291535IN
BC: Sale Market 5
0 ETH0.000035541
Cancel Active Au...94516002020-02-09 23:38:551828 days ago1581291535IN
BC: Sale Market 5
0 ETH0.000036881
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
170110442023-04-09 13:29:47673 days ago1681046987
0xCa891ae2...93A63EaFe
0 ETH
170110442023-04-09 13:29:47673 days ago1681046987
0xCa891ae2...93A63EaFe
0 ETH
160768302022-11-29 16:26:35804 days ago1669739195
0xCa891ae2...93A63EaFe
0 ETH
160768002022-11-29 16:20:35804 days ago1669738835
0xCa891ae2...93A63EaFe
0 ETH
129957302021-08-10 6:18:571281 days ago1628576337
0xCa891ae2...93A63EaFe
0 ETH
129957302021-08-10 6:18:571281 days ago1628576337
0xCa891ae2...93A63EaFe
0 ETH
129875352021-08-08 23:51:521282 days ago1628466712
0xCa891ae2...93A63EaFe
0 ETH
129875352021-08-08 23:51:521282 days ago1628466712
0xCa891ae2...93A63EaFe
0 ETH
129245872021-07-30 3:15:151292 days ago1627614915
0xCa891ae2...93A63EaFe
0 ETH
129245872021-07-30 3:15:151292 days ago1627614915
0xCa891ae2...93A63EaFe
0 ETH
127513632021-07-03 0:14:351319 days ago1625271275
0xCa891ae2...93A63EaFe
0 ETH
127513632021-07-03 0:14:351319 days ago1625271275
0xCa891ae2...93A63EaFe
0 ETH
126701802021-06-20 8:31:181332 days ago1624177878
0xCa891ae2...93A63EaFe
0 ETH
126701802021-06-20 8:31:181332 days ago1624177878
0xCa891ae2...93A63EaFe
0 ETH
123135952021-04-26 3:49:451387 days ago1619408985
0xCa891ae2...93A63EaFe
0 ETH
123135952021-04-26 3:49:451387 days ago1619408985
0xCa891ae2...93A63EaFe
0.0864 ETH
120854512021-03-22 0:42:101422 days ago1616373730
0xCa891ae2...93A63EaFe
0 ETH
120854512021-03-22 0:42:101422 days ago1616373730
0xCa891ae2...93A63EaFe
0.08544 ETH
119643792021-03-03 9:07:491441 days ago1614762469
0xCa891ae2...93A63EaFe
0 ETH
118319712021-02-11 0:11:081461 days ago1613002268
0xCa891ae2...93A63EaFe
0 ETH
118319712021-02-11 0:11:081461 days ago1613002268
0xCa891ae2...93A63EaFe
0.00576 ETH
116583352021-01-15 7:29:341488 days ago1610695774
0xCa891ae2...93A63EaFe
0 ETH
116583352021-01-15 7:29:341488 days ago1610695774
0xCa891ae2...93A63EaFe
0.0096 ETH
116581472021-01-15 6:51:211488 days ago1610693481
0xCa891ae2...93A63EaFe
0 ETH
116581472021-01-15 6:51:211488 days ago1610693481
0xCa891ae2...93A63EaFe
0.0096 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SaleMarket

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.24;


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

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

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

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

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


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

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


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

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


    function changeGenes(
        uint40 _cutieId,
        uint256 _genes)
        public;

    function changeCooldownEndTime(
        uint40 _cutieId,
        uint40 _cooldownEndTime)
        public;

    function changeCooldownIndex(
        uint40 _cutieId,
        uint16 _cooldownIndex)
        public;

    function changeOptional(
        uint40 _cutieId,
        uint64 _optional)
        public;

    function changeGeneration(
        uint40 _cutieId,
        uint16 _generation)
        public;

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

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


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


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


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

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

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

}



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

  bool public paused = false;


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

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

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

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

pragma solidity ^0.4.24;

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

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

    function bid(uint40 _cutieId) public payable;

    function cancelActiveAuctionWhenPaused(uint40 _cutieId) public;

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

pragma solidity ^0.4.24;

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

	string public name;

	string public symbol;

	uint8 public decimals;

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

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

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

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

pragma solidity ^0.4.24;

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

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

pragma solidity ^0.4.24;

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


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

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

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

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


    address operatorAddress;

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

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

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

        operatorAddress = _newOperator;
    }

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

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

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

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

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

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

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

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

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

        require(_isOnAuction(auction));

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

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

        _removeAuction(_cutieId);

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

            seller.transfer(sellerValue);
        }

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

        return price;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        ownerFee = _fee;
    }

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

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

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

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

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

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

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

        require(_isOnAuction(auction));

        uint128 priceWei = _currentPrice(auction);

        uint128 priceInTokens = getPriceInToken(tokenContract, priceWei);

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

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

        _removeAuction(cutieId);

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

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

            tokenContract.transfer(seller, sellerValue);
        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function onRemove() public pure {}

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

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

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


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

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

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

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

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

Contract Security Audit

Contract ABI

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

6080604052600080546004805460a060020a60ff02191674010000000000000000000000000000000000000000179055600160a860020a03191633179055611c748061004c6000396000f30060806040526004361061017c5763ffffffff60e060020a60003504166311952369811461018b5780632177885d146101a25780632951f1b2146101d557806330d9161d146102125780633ccfd60b146102315780633f4ba83a146102465780635476bd721461025b5780635c975abb146102825780635fa7b584146102975780636066b066146102b8578063776247c4146102cd5780637ea310d4146102e257806381baab241461031d5780638456cb59146103965780638da5cb5b146103ab5780638e005553146103c05780638f4ffcb1146103dc57806394a89233146104145780639652713e1461042957806398c9faac1461044a5780639ccaec9814610469578063a01da7b2146104e1578063a055d45514610429578063b2fb3b901461050e578063b3ab15fb1461052d578063c170fd541461054e578063c1d1faf314610560578063cda8c71514610599578063d5b2a01a146105c0578063e410a0c6146105ec578063e80db5db14610614578063f2fde38b14610629575b34801561018857600080fd5b50005b34801561019757600080fd5b506101a061064a565b005b3480156101ae57600080fd5b506101c164ffffffffff6004351661064c565b604080519115158252519081900360200190f35b3480156101e157600080fd5b506101f6600160a060020a0360043516610675565b60408051600160a060020a039092168252519081900360200190f35b34801561021e57600080fd5b506101a064ffffffffff60043516610690565b34801561023d57600080fd5b506101a061071f565b34801561025257600080fd5b506101a0610794565b34801561026757600080fd5b506101a0600160a060020a036004358116906024351661080a565b34801561028e57600080fd5b506101c161085c565b3480156102a357600080fd5b506101a0600160a060020a036004351661086c565b3480156102c457600080fd5b506101c16108b7565b3480156102d957600080fd5b506101a06108c7565b3480156102ee57600080fd5b5061030164ffffffffff60043516610934565b604080516001608060020a039092168252519081900360200190f35b34801561032957600080fd5b5061033c64ffffffffff6004351661096e565b604080516001608060020a0398891681529688166020880152600160a060020a039095168686015264ffffffffff9384166060870152919092166080850152931660a083015291151560c082015290519081900360e00190f35b3480156103a257600080fd5b506101a06109e1565b3480156103b757600080fd5b506101f6610a5c565b3480156103cc57600080fd5b506101a061ffff60043516610a6b565b3480156103e857600080fd5b506101a060048035600160a060020a039081169160248035926044351691606435918201910135610ac8565b34801561042057600080fd5b506101c1610dcf565b6101a064ffffffffff60043516602435600160a060020a0360443516610dd4565b34801561045657600080fd5b506101a064ffffffffff60043516610dd9565b34801561047557600080fd5b5061048864ffffffffff60043516610e29565b60408051600160a060020a0390981688526001608060020a0396871660208901529486168786015264ffffffffff9384166060880152919092166080860152921660a084015290151560c0830152519081900360e00190f35b3480156104ed57600080fd5b50610301600160a060020a03600435166001608060020a0360243516610ed0565b34801561051a57600080fd5b506101a064ffffffffff60043516611029565b34801561053957600080fd5b506101a0600160a060020a036004351661109d565b6101a064ffffffffff600435166110f8565b6101a064ffffffffff6004358116906001608060020a036024358116916044359091169060643516600160a060020a0360843516611122565b3480156105a557600080fd5b506101a0600160a060020a03600435811690602435166111e0565b3480156105cc57600080fd5b506105d5611342565b6040805161ffff9092168252519081900360200190f35b3480156105f857600080fd5b506101a0600160a060020a036004351661ffff60243516611353565b34801561062057600080fd5b506101f6611444565b34801561063557600080fd5b506101a0600160a060020a0360043516611453565b565b64ffffffffff90811660009081526002602052604081206001015460c860020a90049091161190565b600360205260009081526040902054600160a060020a031681565b6004546000908190600160a060020a03163314806106b85750600054600160a060020a031633145b15156106c357600080fd5b64ffffffffff8316600090815260026020526040902091506106e4826114e7565b15156106ef57600080fd5b506001808201549054600160a060020a039182169116811461071057600080fd5b61071a8333611500565b505050565b600054600160a060020a03163314806107425750600154600160a060020a031633145b151561074d57600080fd5b60003031111561064a57600154604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610791573d6000803e3d6000fd5b50565b600054600160a060020a031633146107ab57600080fd5b60005460a060020a900460ff1615156107c357600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b600054600160a060020a0316331461082157600080fd5b600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60005460a060020a900460ff1681565b600054600160a060020a0316331461088357600080fd5b600160a060020a03166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b60045460a060020a900460ff1681565b600154600054600160a060020a0391821691163314806108ef575033600160a060020a038216145b15156108fa57600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610930573d6000803e3d6000fd5b5050565b64ffffffffff81166000908152600260205260408120610953816114e7565b151561095e57600080fd5b61096781611549565b9392505050565b60026020819052600091825260409091208054600182015491909201546001608060020a038084169370010000000000000000000000000000000090819004821693600160a060020a0381169364ffffffffff60a060020a830481169460c860020a90930416929181169160ff91041687565b600054600160a060020a031633146109f857600080fd5b60005460a060020a900460ff1615610a0f57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600054600160a060020a031681565b600054600160a060020a03163314610a8257600080fd5b61271061ffff82161115610a9557600080fd5b6001805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b6000808080808080808b6001608060020a03811115610ae657600080fd5b60005460a060020a900460ff1615610afd57600080fd5b8b985060058a14610b0d57600080fd5b610b468b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437506115d0945050505050565b64ffffffffff81166000908152600260208190526040909120908101549199509750700100000000000000000000000000000000900460ff161515610b8a57600080fd5b610b93876114e7565b1515610b9e57600080fd5b610ba787611549565b9550610bb38987610ed0565b6001880154909550600160a060020a03169350610bcf886116b5565b88600160a060020a03166323b872dd8f30886040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a03168152602001826001608060020a031681526020019350505050602060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b505050506040513d6020811015610c7f57600080fd5b50511515610c8c57600080fd5b600154600160a060020a03858116911614610d3657610caa85611714565b9250828503915088600160a060020a031663a9059cbb85846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001826001608060020a0316815260200192505050600060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b505050505b8b600160a060020a03168e600160a060020a03168964ffffffffff167ff65c85ee1272f6f51bd40bae1565e2868b8e887082e6f94b4924d29d21f842d7898960405180836001608060020a03166001608060020a03168152602001826001608060020a03166001608060020a031681526020019250505060405180910390a4610dbf8e8961173b565b5050505050505050505050505050565b600190565b600080fd5b64ffffffffff8116600090815260026020526040812090610df9826114e7565b1515610e0457600080fd5b506001810154600160a060020a0316338114610e1f57600080fd5b61071a8382611500565b64ffffffffff81166000908152600260205260408120819081908190819081908190610e54816114e7565b1515610e5f57600080fd5b60018101548154600290920154600160a060020a0382169b6001608060020a038085169c507001000000000000000000000000000000009485900481169b5060a060020a840464ffffffffff9081169b5060c860020a909404909316985091811696509190910460ff169350915050565b600160a060020a038083166000908152600360205260408120549091168180821515610efb57600080fd5b82600160a060020a0316633732e1536040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f3957600080fd5b505af1158015610f4d573d6000803e3d6000fd5b505050506040513d6020811015610f6357600080fd5b5051604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051919350600160a060020a0388169163313ce567916004808201926020929091908290030181600087803b158015610fc457600080fd5b505af1158015610fd8573d6000803e3d6000fd5b505050506040513d6020811015610fee57600080fd5b505160240360ff1690506000811361100557600080fd5b80600a0a82866001608060020a03160281151561101e57fe5b049695505050505050565b6000805460a060020a900460ff16151561104257600080fd5b600054600160a060020a0316331461105957600080fd5b5064ffffffffff81166000908152600260205260409020611079816114e7565b151561108457600080fd5b6001810154610930908390600160a060020a0316611500565b600054600160a060020a031633146110b457600080fd5b600160a060020a03811615156110c957600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b346001608060020a0381111561110d57600080fd5b61111782346117cb565b50610930338361173b565b600061112c611c0c565b600154600160a060020a0316331461114357600080fd5b61114d8388611906565b64800000000064ffffffffff8516818110935006935060e060405190810160405280876001608060020a03168152602001866001608060020a0316815260200184600160a060020a031681526020018564ffffffffff1681526020014264ffffffffff168152602001346001608060020a0316815260200183151581525090506111d78782611980565b50505050505050565b60015460008054600160a060020a03928316921633148061120b5750600454600160a060020a031633145b8061121e575033600160a060020a038316145b151561122957600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b15801561128a57600080fd5b505af115801561129e573d6000803e3d6000fd5b505050506040513d60208110156112b457600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509086169163a9059cbb9160448082019260009290919082900301818387803b15801561132457600080fd5b505af1158015611338573d6000803e3d6000fd5b5050505050505050565b60015460a060020a900461ffff1681565b60008054600160a060020a0316331461136b57600080fd5b61271061ffff8316111561137e57600080fd5b81600160146101000a81548161ffff021916908361ffff16021790555082905080600160a060020a0316634d6a813a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051151561141357600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600154600160a060020a031681565b600054600160a060020a0316331461146a57600080fd5b600160a060020a038116151561147f57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60010154600060c860020a90910464ffffffffff161190565b611509826116b5565b611513818361173b565b60405164ffffffffff8316907ff6680ade663631ec4dd74f7eaa1f75125361380cd50a22f969e9acfa5f53670490600090a25050565b60018101546000908190429064ffffffffff60c860020a9091048116908216111561158657600184015460c860020a900464ffffffffff16810391505b835460018501546115c8916001608060020a0380821692700100000000000000000000000000000000909204169060a060020a900464ffffffffff1685611ba5565b949350505050565b60008160048151811015156115e157fe5b90602001015160f860020a900460f860020a0260f860020a900463100000000282600381518110151561161057fe5b90602001015160f860020a900460f860020a0260f860020a9004621000000283600281518110151561163e57fe5b90602001015160f860020a900460f860020a0260f860020a9004620100000284600181518110151561166c57fe5b90602001015160f860020a900460f860020a0260f860020a90046101000285600081518110151561169957fe5b016020015160f860020a90819004810204010101019050919050565b64ffffffffff16600090815260026020819052604082209182556001820180547fffff00000000000000000000000000000000000000000000000000000000000016905501805470ffffffffffffffffffffffffffffffffff19169055565b6001546000906127109060a060020a900461ffff1683026001608060020a03160492915050565b600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015264ffffffffff851660248301529151919092169163a9059cbb91604480830192600092919082900301818387803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b505050505050565b64ffffffffff82166000908152600260205260408120818080806117ee856114e7565b15156117f957600080fd5b61180285611549565b93506001608060020a03808516908816101561181d57600080fd5b6001850154600160a060020a03169250611836886116b5565b6000846001608060020a031611801561185d5750600154600160a060020a03848116911614155b156118b35761186b84611714565b6040519092508285039150600160a060020a038416906001608060020a03831680156108fc02916000818181858888f193505050501580156118b1573d6000803e3d6000fd5b505b604080516001608060020a03861681529051339164ffffffffff8b16917f8500e47909916e51e97e4880e742d8b9af1afaeb9ea54166947cf42e6616b1179181900360200190a350919695505050505050565b600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015264ffffffffff85166044830152915191909216916323b872dd91606480830192600092919082900301818387803b1580156117af57600080fd5b603c816060015164ffffffffff161015151561199b57600080fd5b80600260008464ffffffffff1664ffffffffff16815260200190815260200160002060008201518160000160006101000a8154816001608060020a0302191690836001608060020a0316021790555060208201518160000160106101000a8154816001608060020a0302191690836001608060020a0316021790555060408201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060608201518160010160146101000a81548164ffffffffff021916908364ffffffffff16021790555060808201518160010160196101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160020160006101000a8154816001608060020a0302191690836001608060020a0316021790555060c08201518160020160106101000a81548160ff0219169083151502179055509050508164ffffffffff167fb5cfc381f79e09b5e427756c6c36086288faf8a39c226abab7c517219fb6c8018260000151836020015184606001518560a001518660c0015160405180866001608060020a03166001608060020a03168152602001856001608060020a03166001608060020a031681526020018464ffffffffff1664ffffffffff168152602001836001608060020a03166001608060020a03168152602001821515151581526020019550505050505060405180910390a25050565b600080808064ffffffffff80871690861610611bc357869350611c01565b876001608060020a0316876001608060020a03160392508564ffffffffff168564ffffffffff168402811515611bf557fe5b05915081880190508093505b505050949350505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152905600a165627a7a72305820d6ca3accccb0d911b758a8b6d002ec3e0e1fade56e4af10bbac51d07a953630e0029

Deployed Bytecode

0x60806040526004361061017c5763ffffffff60e060020a60003504166311952369811461018b5780632177885d146101a25780632951f1b2146101d557806330d9161d146102125780633ccfd60b146102315780633f4ba83a146102465780635476bd721461025b5780635c975abb146102825780635fa7b584146102975780636066b066146102b8578063776247c4146102cd5780637ea310d4146102e257806381baab241461031d5780638456cb59146103965780638da5cb5b146103ab5780638e005553146103c05780638f4ffcb1146103dc57806394a89233146104145780639652713e1461042957806398c9faac1461044a5780639ccaec9814610469578063a01da7b2146104e1578063a055d45514610429578063b2fb3b901461050e578063b3ab15fb1461052d578063c170fd541461054e578063c1d1faf314610560578063cda8c71514610599578063d5b2a01a146105c0578063e410a0c6146105ec578063e80db5db14610614578063f2fde38b14610629575b34801561018857600080fd5b50005b34801561019757600080fd5b506101a061064a565b005b3480156101ae57600080fd5b506101c164ffffffffff6004351661064c565b604080519115158252519081900360200190f35b3480156101e157600080fd5b506101f6600160a060020a0360043516610675565b60408051600160a060020a039092168252519081900360200190f35b34801561021e57600080fd5b506101a064ffffffffff60043516610690565b34801561023d57600080fd5b506101a061071f565b34801561025257600080fd5b506101a0610794565b34801561026757600080fd5b506101a0600160a060020a036004358116906024351661080a565b34801561028e57600080fd5b506101c161085c565b3480156102a357600080fd5b506101a0600160a060020a036004351661086c565b3480156102c457600080fd5b506101c16108b7565b3480156102d957600080fd5b506101a06108c7565b3480156102ee57600080fd5b5061030164ffffffffff60043516610934565b604080516001608060020a039092168252519081900360200190f35b34801561032957600080fd5b5061033c64ffffffffff6004351661096e565b604080516001608060020a0398891681529688166020880152600160a060020a039095168686015264ffffffffff9384166060870152919092166080850152931660a083015291151560c082015290519081900360e00190f35b3480156103a257600080fd5b506101a06109e1565b3480156103b757600080fd5b506101f6610a5c565b3480156103cc57600080fd5b506101a061ffff60043516610a6b565b3480156103e857600080fd5b506101a060048035600160a060020a039081169160248035926044351691606435918201910135610ac8565b34801561042057600080fd5b506101c1610dcf565b6101a064ffffffffff60043516602435600160a060020a0360443516610dd4565b34801561045657600080fd5b506101a064ffffffffff60043516610dd9565b34801561047557600080fd5b5061048864ffffffffff60043516610e29565b60408051600160a060020a0390981688526001608060020a0396871660208901529486168786015264ffffffffff9384166060880152919092166080860152921660a084015290151560c0830152519081900360e00190f35b3480156104ed57600080fd5b50610301600160a060020a03600435166001608060020a0360243516610ed0565b34801561051a57600080fd5b506101a064ffffffffff60043516611029565b34801561053957600080fd5b506101a0600160a060020a036004351661109d565b6101a064ffffffffff600435166110f8565b6101a064ffffffffff6004358116906001608060020a036024358116916044359091169060643516600160a060020a0360843516611122565b3480156105a557600080fd5b506101a0600160a060020a03600435811690602435166111e0565b3480156105cc57600080fd5b506105d5611342565b6040805161ffff9092168252519081900360200190f35b3480156105f857600080fd5b506101a0600160a060020a036004351661ffff60243516611353565b34801561062057600080fd5b506101f6611444565b34801561063557600080fd5b506101a0600160a060020a0360043516611453565b565b64ffffffffff90811660009081526002602052604081206001015460c860020a90049091161190565b600360205260009081526040902054600160a060020a031681565b6004546000908190600160a060020a03163314806106b85750600054600160a060020a031633145b15156106c357600080fd5b64ffffffffff8316600090815260026020526040902091506106e4826114e7565b15156106ef57600080fd5b506001808201549054600160a060020a039182169116811461071057600080fd5b61071a8333611500565b505050565b600054600160a060020a03163314806107425750600154600160a060020a031633145b151561074d57600080fd5b60003031111561064a57600154604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610791573d6000803e3d6000fd5b50565b600054600160a060020a031633146107ab57600080fd5b60005460a060020a900460ff1615156107c357600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b600054600160a060020a0316331461082157600080fd5b600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60005460a060020a900460ff1681565b600054600160a060020a0316331461088357600080fd5b600160a060020a03166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b60045460a060020a900460ff1681565b600154600054600160a060020a0391821691163314806108ef575033600160a060020a038216145b15156108fa57600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610930573d6000803e3d6000fd5b5050565b64ffffffffff81166000908152600260205260408120610953816114e7565b151561095e57600080fd5b61096781611549565b9392505050565b60026020819052600091825260409091208054600182015491909201546001608060020a038084169370010000000000000000000000000000000090819004821693600160a060020a0381169364ffffffffff60a060020a830481169460c860020a90930416929181169160ff91041687565b600054600160a060020a031633146109f857600080fd5b60005460a060020a900460ff1615610a0f57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600054600160a060020a031681565b600054600160a060020a03163314610a8257600080fd5b61271061ffff82161115610a9557600080fd5b6001805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b6000808080808080808b6001608060020a03811115610ae657600080fd5b60005460a060020a900460ff1615610afd57600080fd5b8b985060058a14610b0d57600080fd5b610b468b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437506115d0945050505050565b64ffffffffff81166000908152600260208190526040909120908101549199509750700100000000000000000000000000000000900460ff161515610b8a57600080fd5b610b93876114e7565b1515610b9e57600080fd5b610ba787611549565b9550610bb38987610ed0565b6001880154909550600160a060020a03169350610bcf886116b5565b88600160a060020a03166323b872dd8f30886040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a03168152602001826001608060020a031681526020019350505050602060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b505050506040513d6020811015610c7f57600080fd5b50511515610c8c57600080fd5b600154600160a060020a03858116911614610d3657610caa85611714565b9250828503915088600160a060020a031663a9059cbb85846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001826001608060020a0316815260200192505050600060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b505050505b8b600160a060020a03168e600160a060020a03168964ffffffffff167ff65c85ee1272f6f51bd40bae1565e2868b8e887082e6f94b4924d29d21f842d7898960405180836001608060020a03166001608060020a03168152602001826001608060020a03166001608060020a031681526020019250505060405180910390a4610dbf8e8961173b565b5050505050505050505050505050565b600190565b600080fd5b64ffffffffff8116600090815260026020526040812090610df9826114e7565b1515610e0457600080fd5b506001810154600160a060020a0316338114610e1f57600080fd5b61071a8382611500565b64ffffffffff81166000908152600260205260408120819081908190819081908190610e54816114e7565b1515610e5f57600080fd5b60018101548154600290920154600160a060020a0382169b6001608060020a038085169c507001000000000000000000000000000000009485900481169b5060a060020a840464ffffffffff9081169b5060c860020a909404909316985091811696509190910460ff169350915050565b600160a060020a038083166000908152600360205260408120549091168180821515610efb57600080fd5b82600160a060020a0316633732e1536040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f3957600080fd5b505af1158015610f4d573d6000803e3d6000fd5b505050506040513d6020811015610f6357600080fd5b5051604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051919350600160a060020a0388169163313ce567916004808201926020929091908290030181600087803b158015610fc457600080fd5b505af1158015610fd8573d6000803e3d6000fd5b505050506040513d6020811015610fee57600080fd5b505160240360ff1690506000811361100557600080fd5b80600a0a82866001608060020a03160281151561101e57fe5b049695505050505050565b6000805460a060020a900460ff16151561104257600080fd5b600054600160a060020a0316331461105957600080fd5b5064ffffffffff81166000908152600260205260409020611079816114e7565b151561108457600080fd5b6001810154610930908390600160a060020a0316611500565b600054600160a060020a031633146110b457600080fd5b600160a060020a03811615156110c957600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b346001608060020a0381111561110d57600080fd5b61111782346117cb565b50610930338361173b565b600061112c611c0c565b600154600160a060020a0316331461114357600080fd5b61114d8388611906565b64800000000064ffffffffff8516818110935006935060e060405190810160405280876001608060020a03168152602001866001608060020a0316815260200184600160a060020a031681526020018564ffffffffff1681526020014264ffffffffff168152602001346001608060020a0316815260200183151581525090506111d78782611980565b50505050505050565b60015460008054600160a060020a03928316921633148061120b5750600454600160a060020a031633145b8061121e575033600160a060020a038316145b151561122957600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b15801561128a57600080fd5b505af115801561129e573d6000803e3d6000fd5b505050506040513d60208110156112b457600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519293509086169163a9059cbb9160448082019260009290919082900301818387803b15801561132457600080fd5b505af1158015611338573d6000803e3d6000fd5b5050505050505050565b60015460a060020a900461ffff1681565b60008054600160a060020a0316331461136b57600080fd5b61271061ffff8316111561137e57600080fd5b81600160146101000a81548161ffff021916908361ffff16021790555082905080600160a060020a0316634d6a813a6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051151561141357600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600154600160a060020a031681565b600054600160a060020a0316331461146a57600080fd5b600160a060020a038116151561147f57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60010154600060c860020a90910464ffffffffff161190565b611509826116b5565b611513818361173b565b60405164ffffffffff8316907ff6680ade663631ec4dd74f7eaa1f75125361380cd50a22f969e9acfa5f53670490600090a25050565b60018101546000908190429064ffffffffff60c860020a9091048116908216111561158657600184015460c860020a900464ffffffffff16810391505b835460018501546115c8916001608060020a0380821692700100000000000000000000000000000000909204169060a060020a900464ffffffffff1685611ba5565b949350505050565b60008160048151811015156115e157fe5b90602001015160f860020a900460f860020a0260f860020a900463100000000282600381518110151561161057fe5b90602001015160f860020a900460f860020a0260f860020a9004621000000283600281518110151561163e57fe5b90602001015160f860020a900460f860020a0260f860020a9004620100000284600181518110151561166c57fe5b90602001015160f860020a900460f860020a0260f860020a90046101000285600081518110151561169957fe5b016020015160f860020a90819004810204010101019050919050565b64ffffffffff16600090815260026020819052604082209182556001820180547fffff00000000000000000000000000000000000000000000000000000000000016905501805470ffffffffffffffffffffffffffffffffff19169055565b6001546000906127109060a060020a900461ffff1683026001608060020a03160492915050565b600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015264ffffffffff851660248301529151919092169163a9059cbb91604480830192600092919082900301818387803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b505050505050565b64ffffffffff82166000908152600260205260408120818080806117ee856114e7565b15156117f957600080fd5b61180285611549565b93506001608060020a03808516908816101561181d57600080fd5b6001850154600160a060020a03169250611836886116b5565b6000846001608060020a031611801561185d5750600154600160a060020a03848116911614155b156118b35761186b84611714565b6040519092508285039150600160a060020a038416906001608060020a03831680156108fc02916000818181858888f193505050501580156118b1573d6000803e3d6000fd5b505b604080516001608060020a03861681529051339164ffffffffff8b16917f8500e47909916e51e97e4880e742d8b9af1afaeb9ea54166947cf42e6616b1179181900360200190a350919695505050505050565b600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015264ffffffffff85166044830152915191909216916323b872dd91606480830192600092919082900301818387803b1580156117af57600080fd5b603c816060015164ffffffffff161015151561199b57600080fd5b80600260008464ffffffffff1664ffffffffff16815260200190815260200160002060008201518160000160006101000a8154816001608060020a0302191690836001608060020a0316021790555060208201518160000160106101000a8154816001608060020a0302191690836001608060020a0316021790555060408201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060608201518160010160146101000a81548164ffffffffff021916908364ffffffffff16021790555060808201518160010160196101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160020160006101000a8154816001608060020a0302191690836001608060020a0316021790555060c08201518160020160106101000a81548160ff0219169083151502179055509050508164ffffffffff167fb5cfc381f79e09b5e427756c6c36086288faf8a39c226abab7c517219fb6c8018260000151836020015184606001518560a001518660c0015160405180866001608060020a03166001608060020a03168152602001856001608060020a03166001608060020a031681526020018464ffffffffff1664ffffffffff168152602001836001608060020a03166001608060020a03168152602001821515151581526020019550505050505060405180910390a25050565b600080808064ffffffffff80871690861610611bc357869350611c01565b876001608060020a0316876001608060020a03160392508564ffffffffff168564ffffffffff168402811515611bf557fe5b05915081880190508093505b505050949350505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152905600a165627a7a72305820d6ca3accccb0d911b758a8b6d002ec3e0e1fade56e4af10bbac51d07a953630e0029

Swarm Source

bzzr://d6ca3accccb0d911b758a8b6d002ec3e0e1fade56e4af10bbac51d07a953630e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.