ETH Price: $3,288.48 (-8.57%)
Gas: 24 Gwei

Contract

0x60cE035Dc589C3fd185B224A7Ca03C598948973b
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Cancel Auction92117252020-01-04 4:36:291536 days ago1578112589IN
0x60cE035D...98948973b
0 ETH0.00010281
Cancel Auction92117252020-01-04 4:36:291536 days ago1578112589IN
0x60cE035D...98948973b
0 ETH0.00010281
Cancel Auction92048322020-01-03 3:27:161537 days ago1578022036IN
0x60cE035D...98948973b
0 ETH0.000073511
Cancel Auction92048232020-01-03 3:24:151537 days ago1578021855IN
0x60cE035D...98948973b
0 ETH0.00007351
Cancel Auction92048152020-01-03 3:22:461537 days ago1578021766IN
0x60cE035D...98948973b
0 ETH0.000073511
Cancel Auction91862302019-12-30 14:21:281540 days ago1577715688IN
0x60cE035D...98948973b
0 ETH0.000073511
Cancel Auction91735562019-12-28 1:50:571543 days ago1577497857IN
0x60cE035D...98948973b
0 ETH0.000080861.1
Cancel Auction91422082019-12-21 19:55:361549 days ago1576958136IN
0x60cE035D...98948973b
0 ETH0.000080851.1
Cancel Auction91420092019-12-21 18:56:061549 days ago1576954566IN
0x60cE035D...98948973b
0 ETH0.000080861.1
Cancel Auction91415842019-12-21 16:53:021549 days ago1576947182IN
0x60cE035D...98948973b
0 ETH0.000080851.1
Cancel Auction91415642019-12-21 16:48:051549 days ago1576946885IN
0x60cE035D...98948973b
0 ETH0.000080851.1
Cancel Auction91371152019-12-20 19:46:461550 days ago1576871206IN
0x60cE035D...98948973b
0 ETH0.000147032
Cancel Auction91370932019-12-20 19:39:581550 days ago1576870798IN
0x60cE035D...98948973b
0 ETH0.000147012
Cancel Auction91370682019-12-20 19:29:421550 days ago1576870182IN
0x60cE035D...98948973b
0 ETH0.000147012
Cancel Auction91306792019-12-19 12:47:371551 days ago1576759657IN
0x60cE035D...98948973b
0 ETH0.000374945.1
Bid On Siring91276942019-12-18 22:32:201552 days ago1576708340IN
0x60cE035D...98948973b
0.01202314 ETH0.000024991.1
Pause91256502019-12-18 12:46:461552 days ago1576673206IN
0x60cE035D...98948973b
0 ETH0.000242498.1
Bid On Siring91248362019-12-18 8:57:341552 days ago1576659454IN
0x60cE035D...98948973b
0.00383928 ETH0.004313248.1
Bid On Siring91233752019-12-18 1:53:421553 days ago1576634022IN
0x60cE035D...98948973b
0.00500694 ETH0.001189952.1
Bid On Siring91219332019-12-17 18:48:181553 days ago1576608498IN
0x60cE035D...98948973b
0.01202314 ETH0.001118082.1
Bid On Siring91153852019-12-16 11:39:251554 days ago1576496365IN
0x60cE035D...98948973b
0.00501388 ETH0.002182934.1
Bid On Siring91137262019-12-16 3:59:171555 days ago1576468757IN
0x60cE035D...98948973b
0.007 ETH0.002211334.4
Create Auction91104612019-12-15 12:46:351555 days ago1576413995IN
0x60cE035D...98948973b
0 ETH0.000184371
Create Auction91104542019-12-15 12:45:021555 days ago1576413902IN
0x60cE035D...98948973b
0 ETH0.000184391
Bid On Siring91103772019-12-15 12:23:491555 days ago1576412629IN
0x60cE035D...98948973b
0.00380138 ETH0.002086994.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
91248362019-12-18 8:57:341552 days ago1576659454
0x60cE035D...98948973b
0.002 ETH
91248362019-12-18 8:57:341552 days ago1576659454
0x60cE035D...98948973b
0.00000016 ETH
91248362019-12-18 8:57:341552 days ago1576659454
0x60cE035D...98948973b
0.00176095 ETH
91233752019-12-18 1:53:421553 days ago1576634022
0x60cE035D...98948973b
0.002 ETH
91233752019-12-18 1:53:421553 days ago1576634022
0x60cE035D...98948973b
0.00000694 ETH
91233752019-12-18 1:53:421553 days ago1576634022
0x60cE035D...98948973b
0.0028725 ETH
91219332019-12-17 18:48:181553 days ago1576608498
0x60cE035D...98948973b
0.002 ETH
91219332019-12-17 18:48:181553 days ago1576608498
0x60cE035D...98948973b
0.00002314 ETH
91219332019-12-17 18:48:181553 days ago1576608498
0x60cE035D...98948973b
0.009575 ETH
91153852019-12-16 11:39:251554 days ago1576496365
0x60cE035D...98948973b
0.002 ETH
91153852019-12-16 11:39:251554 days ago1576496365
0x60cE035D...98948973b
0.00001388 ETH
91153852019-12-16 11:39:251554 days ago1576496365
0x60cE035D...98948973b
0.0028725 ETH
91137262019-12-16 3:59:171555 days ago1576468757
0x60cE035D...98948973b
0.002 ETH
91137262019-12-16 3:59:171555 days ago1576468757
0x60cE035D...98948973b
0.0047875 ETH
91103772019-12-15 12:23:491555 days ago1576412629
0x60cE035D...98948973b
0.002 ETH
91103772019-12-15 12:23:491555 days ago1576412629
0x60cE035D...98948973b
0.00000138 ETH
91103772019-12-15 12:23:491555 days ago1576412629
0x60cE035D...98948973b
0.0017235 ETH
90935382019-12-12 8:56:081558 days ago1576140968
0x60cE035D...98948973b
0.002 ETH
90935382019-12-12 8:56:081558 days ago1576140968
0x60cE035D...98948973b
0.00000231 ETH
90935382019-12-12 8:56:081558 days ago1576140968
0x60cE035D...98948973b
0.00383 ETH
90935382019-12-12 8:56:081558 days ago1576140968
0x60cE035D...98948973b
0.002 ETH
90935382019-12-12 8:56:081558 days ago1576140968
0x60cE035D...98948973b
0.00000277 ETH
90935382019-12-12 8:56:081558 days ago1576140968
0x60cE035D...98948973b
0.0028725 ETH
90873322019-12-11 6:23:481560 days ago1576045428
0x60cE035D...98948973b
0.002 ETH
90873322019-12-11 6:23:481560 days ago1576045428
0x60cE035D...98948973b
0.00383 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AxieSiringClockAuction

Compiler Version
v0.4.23+commit.124ca40d

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-06-17
*/

pragma solidity ^0.4.23;

// File: contracts/breeding/AxieIncubatorInterface.sol

interface AxieIncubatorInterface {
  function breedingFee() external view returns (uint256);

  function requireEnoughExpForBreeding(
    uint256 _axieId
  )
    external
    view;

  function breedAxies(
    uint256 _sireId,
    uint256 _matronId,
    uint256 _birthPlace
  )
    external
    payable
    returns (uint256 _axieId);
}

// File: contracts/erc/erc721/IERC721Base.sol

/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
///  Note: the ERC-165 identifier for this interface is 0x6466353c
interface IERC721Base /* is IERC165  */ {
  /// @dev This emits when ownership of any NFT changes by any mechanism.
  ///  This event emits when NFTs are created (`from` == 0) and destroyed
  ///  (`to` == 0). Exception: during contract creation, any number of NFTs
  ///  may be created and assigned without emitting Transfer. At the time of
  ///  any transfer, the approved address for that NFT (if any) is reset to none.
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);

  /// @dev This emits when the approved address for an NFT is changed or
  ///  reaffirmed. The zero address indicates there is no approved address.
  ///  When a Transfer event emits, this also indicates that the approved
  ///  address for that NFT (if any) is reset to none.
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

  /// @dev This emits when an operator is enabled or disabled for an owner.
  ///  The operator can manage all NFTs of the owner.
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  /// @notice Count all NFTs assigned to an owner
  /// @dev NFTs assigned to the zero address are considered invalid, and this
  ///  function throws for queries about the zero address.
  /// @param _owner An address for whom to query the balance
  /// @return The number of NFTs owned by `_owner`, possibly zero
  function balanceOf(address _owner) external view returns (uint256);

  /// @notice Find the owner of an NFT
  /// @param _tokenId The identifier for an NFT
  /// @dev NFTs assigned to zero address are considered invalid, and queries
  ///  about them do throw.
  /// @return The address of the owner of the NFT
  function ownerOf(uint256 _tokenId) external view returns (address);

  /// @notice Transfers the ownership of an NFT from one address to another address
  /// @dev Throws unless `msg.sender` is the current owner, an authorized
  ///  operator, or the approved address for this NFT. Throws if `_from` is
  ///  not the current owner. Throws if `_to` is the zero address. Throws if
  ///  `_tokenId` is not a valid NFT. When transfer is complete, this function
  ///  checks if `_to` is a smart contract (code size > 0). If so, it calls
  ///  `onERC721Received` on `_to` and throws if the return value is not
  ///  `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`.
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  /// @param _data Additional data with no specified format, sent in call to `_to`
  // solium-disable-next-line arg-overflow
  function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external payable;

  /// @notice Transfers the ownership of an NFT from one address to another address
  /// @dev This works identically to the other function with an extra data parameter,
  ///  except this function just sets data to []
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;

  /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
  ///  TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
  ///  THEY MAY BE PERMANENTLY LOST
  /// @dev Throws unless `msg.sender` is the current owner, an authorized
  ///  operator, or the approved address for this NFT. Throws if `_from` is
  ///  not the current owner. Throws if `_to` is the zero address. Throws if
  ///  `_tokenId` is not a valid NFT.
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  function transferFrom(address _from, address _to, uint256 _tokenId) external payable;

  /// @notice Set or reaffirm the approved address for an NFT
  /// @dev The zero address indicates there is no approved address.
  /// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized
  ///  operator of the current owner.
  /// @param _approved The new approved NFT controller
  /// @param _tokenId The NFT to approve
  function approve(address _approved, uint256 _tokenId) external payable;

  /// @notice Enable or disable approval for a third party ("operator") to manage
  ///  all your asset.
  /// @dev Emits the ApprovalForAll event
  /// @param _operator Address to add to the set of authorized operators.
  /// @param _approved True if the operators is approved, false to revoke approval
  function setApprovalForAll(address _operator, bool _approved) external;

  /// @notice Get the approved address for a single NFT
  /// @dev Throws if `_tokenId` is not a valid NFT
  /// @param _tokenId The NFT to find the approved address for
  /// @return The approved address for this NFT, or the zero address if there is none
  function getApproved(uint256 _tokenId) external view returns (address);

  /// @notice Query if an address is an authorized operator for another address
  /// @param _owner The address that owns the NFTs
  /// @param _operator The address that acts on behalf of the owner
  /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
  function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

// File: zeppelin/contracts/ownership/Ownable.sol

/**
 * @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.
   */
  function Ownable() {
    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) onlyOwner public {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

// File: zeppelin/contracts/lifecycle/Pausable.sol

/**
 * @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;
    Pause();
  }

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

// File: zeppelin/contracts/ownership/HasNoContracts.sol

/**
 * @title Contracts that should not own Contracts
 * @author Remco Bloemen <remco@2π.com>
 * @dev Should contracts (anything Ownable) end up being owned by this contract, it allows the owner
 * of this contract to reclaim ownership of the contracts.
 */
contract HasNoContracts is Ownable {

  /**
   * @dev Reclaim ownership of Ownable contracts
   * @param contractAddr The address of the Ownable to be reclaimed.
   */
  function reclaimContract(address contractAddr) external onlyOwner {
    Ownable contractInst = Ownable(contractAddr);
    contractInst.transferOwnership(owner);
  }
}

// File: zeppelin/contracts/token/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public constant returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: zeppelin/contracts/token/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: zeppelin/contracts/token/SafeERC20.sol

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
  function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
    assert(token.transfer(to, value));
  }

  function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal {
    assert(token.transferFrom(from, to, value));
  }

  function safeApprove(ERC20 token, address spender, uint256 value) internal {
    assert(token.approve(spender, value));
  }
}

// File: zeppelin/contracts/ownership/CanReclaimToken.sol

/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
contract CanReclaimToken is Ownable {
  using SafeERC20 for ERC20Basic;

  /**
   * @dev Reclaim all ERC20Basic compatible tokens
   * @param token ERC20Basic The address of the token contract
   */
  function reclaimToken(ERC20Basic token) external onlyOwner {
    uint256 balance = token.balanceOf(this);
    token.safeTransfer(owner, balance);
  }

}

// File: zeppelin/contracts/ownership/HasNoTokens.sol

/**
 * @title Contracts that should not own Tokens
 * @author Remco Bloemen <remco@2π.com>
 * @dev This blocks incoming ERC23 tokens to prevent accidental loss of tokens.
 * Should tokens (any ERC20Basic compatible) end up in the contract, it allows the
 * owner to reclaim the tokens.
 */
contract HasNoTokens is CanReclaimToken {

 /**
  * @dev Reject all ERC23 compatible tokens
  * @param from_ address The address that is transferring the tokens
  * @param value_ uint256 the amount of the specified token
  * @param data_ Bytes The data passed from the caller.
  */
  function tokenFallback(address from_, uint256 value_, bytes data_) external {
    revert();
  }

}

// File: contracts/marketplace/AxieSiringClockAuction.sol

/// @title Clock auction for Axie siring.
contract AxieSiringClockAuction is HasNoContracts, HasNoTokens, Pausable {
  // Represents an auction on an NFT.
  struct Auction {
    // Current owner of NFT.
    address seller;
    // Price (in wei) at beginning of auction.
    uint128 startingPrice;
    // Price (in wei) at end of auction.
    uint128 endingPrice;
    // Duration (in seconds) of auction.
    uint64 duration;
    // Time when auction started.
    // NOTE: 0 if this auction has been concluded.
    uint64 startedAt;
  }

  // Cut owner takes on each auction, measured in basis points (1/100 of a percent).
  // Values 0-10,000 map to 0%-100%.
  uint256 public ownerCut;

  IERC721Base coreContract;
  AxieIncubatorInterface incubatorContract;

  // Map from Axie ID to their corresponding auction.
  mapping (uint256 => Auction) public auctions;

  event AuctionCreated(
    uint256 indexed _axieId,
    uint256 _startingPrice,
    uint256 _endingPrice,
    uint256 _duration,
    address _seller
  );

  event AuctionSuccessful(
    uint256 indexed _sireId,
    uint256 indexed _matronId,
    uint256 _totalPrice,
    address _winner
  );

  event AuctionCancelled(uint256 indexed _axieId);

  /// @dev Constructor creates a reference to the NFT ownership contract
  ///  and verifies the owner cut is in the valid range.
  /// @param _ownerCut - percent cut the owner takes on each auction, must be
  ///  between 0-10,000.
  constructor(uint256 _ownerCut) public {
    require(_ownerCut <= 10000);
    ownerCut = _ownerCut;
  }

  function () external payable onlyOwner {
  }

  // Modifiers to check that inputs can be safely stored with a certain
  // number of bits. We use constants and multiple modifiers to save gas.
  modifier canBeStoredWith64Bits(uint256 _value) {
    require(_value <= 18446744073709551615);
    _;
  }

  modifier canBeStoredWith128Bits(uint256 _value) {
    require(_value < 340282366920938463463374607431768211455);
    _;
  }

  function reclaimEther() external onlyOwner {
    owner.transfer(address(this).balance);
  }

  function setCoreContract(address _coreAddress) external onlyOwner {
    coreContract = IERC721Base(_coreAddress);
  }

  function setIncubatorContract(address _incubatorAddress) external onlyOwner {
    incubatorContract = AxieIncubatorInterface(_incubatorAddress);
  }

  /// @dev Returns auction info for an NFT on auction.
  /// @param _axieId - ID of NFT on auction.
  function getAuction(
    uint256 _axieId
  )
    external
    view
    returns (
      address seller,
      uint256 startingPrice,
      uint256 endingPrice,
      uint256 duration,
      uint256 startedAt
    )
  {
    Auction storage _auction = auctions[_axieId];
    require(_isOnAuction(_auction));
    return (
      _auction.seller,
      _auction.startingPrice,
      _auction.endingPrice,
      _auction.duration,
      _auction.startedAt
    );
  }

  /// @dev Returns the current price of an auction.
  /// @param _axieId - ID of the Axie price we are checking.
  function getCurrentPrice(
    uint256 _axieId
  )
    external
    view
    returns (uint256)
  {
    Auction storage _auction = auctions[_axieId];
    require(_isOnAuction(_auction));
    return _getCurrentPrice(_auction);
  }

  /// @dev Creates and begins a new auction.
  /// @param _axieId - ID of Axie to auction, sender must be owner.
  /// @param _startingPrice - Price of item (in wei) at beginning of auction.
  /// @param _endingPrice - Price of item (in wei) at end of auction.
  /// @param _duration - Length of time to move between starting
  ///  price and ending price (in seconds).
  function createAuction(
    uint256 _axieId,
    uint256 _startingPrice,
    uint256 _endingPrice,
    uint256 _duration
  )
    external
    whenNotPaused
    canBeStoredWith128Bits(_startingPrice)
    canBeStoredWith128Bits(_endingPrice)
    canBeStoredWith64Bits(_duration)
  {
    address _seller = msg.sender;

    require(coreContract.ownerOf(_axieId) == _seller);
    incubatorContract.requireEnoughExpForBreeding(_axieId); // Validate EXP for breeding.

    _escrow(_seller, _axieId);

    Auction memory _auction = Auction(
      _seller,
      uint128(_startingPrice),
      uint128(_endingPrice),
      uint64(_duration),
      uint64(now)
    );

    _addAuction(
      _axieId,
      _auction,
      _seller
    );
  }

  /// @dev Bids on an siring auction and completing it.
  /// @param _sireId - ID of Axie to bid on siring.
  /// @param _matronId - ID of matron Axie.
  function bidOnSiring(
    uint256 _sireId,
    uint256 _matronId,
    uint256 _birthPlace
  )
    external
    payable
    whenNotPaused
    returns (uint256 /* _axieId */)
  {
    Auction storage _auction = auctions[_sireId];
    require(_isOnAuction(_auction));

    require(msg.sender == coreContract.ownerOf(_matronId));

    // Save seller address here since `_bid` will clear it.
    address _seller = _auction.seller;

    // _bid will throw if the bid or funds transfer fails.
    _bid(_sireId, _matronId, msg.value, _auction);

    uint256 _axieId = incubatorContract.breedAxies.value(
      incubatorContract.breedingFee()
    )(
      _sireId,
      _matronId,
      _birthPlace
    );

    _transfer(_seller, _sireId);

    return _axieId;
  }

  /// @dev Cancels an auction that hasn't been won yet.
  ///  Returns the NFT to original owner.
  /// @notice This is a state-modifying function that can
  ///  be called while the contract is paused.
  /// @param _axieId - ID of Axie on auction.
  function cancelAuction(uint256 _axieId) external {
    Auction storage _auction = auctions[_axieId];
    require(_isOnAuction(_auction));
    require(msg.sender == _auction.seller);
    _cancelAuction(_axieId, _auction.seller);
  }

  /// @dev Cancels an auction when the contract is paused.
  ///  Only the owner may do this, and NFTs are returned to
  ///  the seller. This should only be used in emergencies.
  /// @param _axieId - ID of the NFT on auction to cancel.
  function cancelAuctionWhenPaused(
    uint256 _axieId
  )
    external
    whenPaused
    onlyOwner
  {
    Auction storage _auction = auctions[_axieId];
    require(_isOnAuction(_auction));
    _cancelAuction(_axieId, _auction.seller);
  }

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

  /// @dev Returns current price of an NFT on auction. Broken into two
  ///  functions (this one, that computes the duration from the auction
  ///  structure, and the other that does the price computation) so we
  ///  can easily test that the price computation works correctly.
  function _getCurrentPrice(
    Auction storage _auction
  )
    internal
    view
    returns (uint256)
  {
    uint256 _secondsPassed = 0;

    // A bit of insurance against negative values (or wraparound).
    // Probably not necessary (since Ethereum guarantees that the
    // now variable doesn't ever go backwards).
    if (now > _auction.startedAt) {
      _secondsPassed = now - _auction.startedAt;
    }

    return _computeCurrentPrice(
      _auction.startingPrice,
      _auction.endingPrice,
      _auction.duration,
      _secondsPassed
    );
  }

  /// @dev Computes the current price of an auction. Factored out
  ///  from _currentPrice so we can run extensive unit tests.
  ///  When testing, make this function external and turn on
  ///  `Current price computation` test suite.
  function _computeCurrentPrice(
    uint256 _startingPrice,
    uint256 _endingPrice,
    uint256 _duration,
    uint256 _secondsPassed
  )
    internal
    pure
    returns (uint256)
  {
    // NOTE: We don't use SafeMath (or similar) in this function because
    //  all of our external functions carefully cap the maximum values for
    //  time (at 64-bits) and currency (at 128-bits). _duration is
    //  also known to be non-zero (see the require() statement in
    //  _addAuction()).
    if (_secondsPassed >= _duration) {
      // We've reached the end of the dynamic pricing portion
      // of the auction, just return the end price.
      return _endingPrice;
    } else {
      // Starting price can be higher than ending price (and often is!), so
      // this delta can be negative.
      int256 _totalPriceChange = int256(_endingPrice) - int256(_startingPrice);

      // This multiplication can't overflow, _secondsPassed will easily fit within
      // 64-bits, and _totalPriceChange will easily fit within 128-bits, their product
      // will always fit within 256-bits.
      int256 _currentPriceChange = _totalPriceChange * int256(_secondsPassed) / int256(_duration);

      // _currentPriceChange can be negative, but if so, will have a magnitude
      // less that _startingPrice. Thus, this result will always end up positive.
      int256 _currentPrice = int256(_startingPrice) + _currentPriceChange;

      return uint256(_currentPrice);
    }
  }

  /// @dev Adds an auction to the list of open auctions. Also fires the
  ///  AuctionCreated event.
  /// @param _axieId The ID of the Axie to be put on auction.
  /// @param _auction Auction to add.
  function _addAuction(
    uint256 _axieId,
    Auction memory _auction,
    address _seller
  )
    internal
  {
    // Require that all auctions have a duration of
    // at least one minute. (Keeps our math from getting hairy!).
    require(_auction.duration >= 1 minutes);

    auctions[_axieId] = _auction;

    emit AuctionCreated(
      _axieId,
      uint256(_auction.startingPrice),
      uint256(_auction.endingPrice),
      uint256(_auction.duration),
      _seller
    );
  }

  /// @dev Removes an auction from the list of open auctions.
  /// @param _axieId - ID of NFT on auction.
  function _removeAuction(uint256 _axieId) internal {
    delete auctions[_axieId];
  }

  /// @dev Cancels an auction unconditionally.
  function _cancelAuction(uint256 _axieId, address _seller) internal {
    _removeAuction(_axieId);
    _transfer(_seller, _axieId);
    emit AuctionCancelled(_axieId);
  }

  /// @dev Escrows the NFT, assigning ownership to this contract.
  /// Throws if the escrow fails.
  /// @param _owner - Current owner address of Axie to escrow.
  /// @param _axieId - ID of Axie whose approval to verify.
  function _escrow(address _owner, uint256 _axieId) internal {
    // It will throw if transfer fails.
    coreContract.transferFrom(_owner, this, _axieId);
  }

  /// @dev Transfers an NFT owned by this contract to another address.
  /// Returns true if the transfer succeeds.
  /// @param _receiver - Address to transfer NFT to.
  /// @param _axieId - ID of Axie to transfer.
  function _transfer(address _receiver, uint256 _axieId) internal {
    // It will throw if transfer fails
    coreContract.transferFrom(this, _receiver, _axieId);
  }

  /// @dev Computes owner's cut of a sale.
  /// @param _price - Sale price of NFT.
  function _computeCut(uint256 _price) internal view returns (uint256) {
    // NOTE: We don't use SafeMath (or similar) in this function because
    //  all of our entry functions carefully cap the maximum values for
    //  currency (at 128-bits), and ownerCut <= 10000 (see the require()
    //  statement in the ClockAuction constructor). The result of this
    //  function is always guaranteed to be <= _price.
    return _price * ownerCut / 10000;
  }

  /// @dev Computes the price and transfers winnings.
  /// Does NOT transfer ownership of Axie.
  function _bid(
    uint256 _sireId,
    uint256 _matronId,
    uint256 _bidAmount,
    Auction storage _auction
  )
    internal
    returns (uint256)
  {
    // Check that the incoming bid is higher than the current price.
    uint256 _price = _getCurrentPrice(_auction);
    uint256 _priceWithFee = _price + incubatorContract.breedingFee();

    // Technically this shouldn't happen as `_price` fits in 128 bits.
    // However, we could set `breedingFee` to a very large number accidentally.
    assert(_priceWithFee >= _price);

    require(_bidAmount >= _priceWithFee);

    // Grab a reference to the seller before the auction struct
    // gets deleted.
    address _seller = _auction.seller;

    // The bid is good! Remove the auction before sending the fees
    // to the sender so we can't have a reentrancy attack.
    _removeAuction(_sireId);

    // Transfer proceeds to seller (if there are any!)
    if (_price > 0) {
      //  Calculate the auctioneer's cut.
      // (NOTE: _computeCut() is guaranteed to return a
      //  value <= price, so this subtraction can't go negative.)
      uint256 _auctioneerCut = _computeCut(_price);
      uint256 _sellerProceeds = _price - _auctioneerCut;

      // NOTE: Doing a transfer() in the middle of a complex
      // method like this is generally discouraged because of
      // reentrancy attacks and DoS attacks if the seller is
      // a contract with an invalid fallback function. We explicitly
      // guard against reentrancy attacks by removing the auction
      // before calling transfer(), and the only thing the seller
      // can DoS is the sale of their own asset! (And if it's an
      // accident, they can call cancelAuction().)
      _seller.transfer(_sellerProceeds);
    }

    if (_bidAmount > _priceWithFee) {
      // Calculate any excess funds included with the bid. If the excess
      // is anything worth worrying about, transfer it back to bidder.
      // NOTE: We checked above that the bid amount is greater than or
      // equal to the price so this cannot underflow.
      uint256 _bidExcess = _bidAmount - _priceWithFee;

      // Return the funds. Similar to the previous transfer, this is
      // not susceptible to a re-entry attack because the auction is
      // removed before any transfers occur.
      msg.sender.transfer(_bidExcess);
    }

    // Tell the world!
    emit AuctionSuccessful(
      _sireId,
      _matronId,
      _price,
      msg.sender
    );

    return _price;
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_incubatorAddress","type":"address"}],"name":"setIncubatorContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"contractAddr","type":"address"}],"name":"reclaimContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_axieId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"createAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sireId","type":"uint256"},{"name":"_matronId","type":"uint256"},{"name":"_birthPlace","type":"uint256"}],"name":"bidOnSiring","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"auctions","outputs":[{"name":"seller","type":"address"},{"name":"startingPrice","type":"uint128"},{"name":"endingPrice","type":"uint128"},{"name":"duration","type":"uint64"},{"name":"startedAt","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_axieId","type":"uint256"}],"name":"getAuction","outputs":[{"name":"seller","type":"address"},{"name":"startingPrice","type":"uint256"},{"name":"endingPrice","type":"uint256"},{"name":"duration","type":"uint256"},{"name":"startedAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ownerCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_axieId","type":"uint256"}],"name":"cancelAuctionWhenPaused","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":"_axieId","type":"uint256"}],"name":"cancelAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reclaimEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from_","type":"address"},{"name":"value_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_axieId","type":"uint256"}],"name":"getCurrentPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coreAddress","type":"address"}],"name":"setCoreContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_ownerCut","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"},{"indexed":false,"name":"_startingPrice","type":"uint256"},{"indexed":false,"name":"_endingPrice","type":"uint256"},{"indexed":false,"name":"_duration","type":"uint256"},{"indexed":false,"name":"_seller","type":"address"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sireId","type":"uint256"},{"indexed":true,"name":"_matronId","type":"uint256"},{"indexed":false,"name":"_totalPrice","type":"uint256"},{"indexed":false,"name":"_winner","type":"address"}],"name":"AuctionSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"}],"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"}]

60806040526000805460a060020a60ff021916905534801561002057600080fd5b506040516020806114a9833981016040525160008054600160a060020a03191633600160a060020a031617905561271081111561005c57600080fd5b60015561143b8061006e6000396000f3006080604052600436106100ed5763ffffffff60e060020a60003504166317ffc320811461010a5780631e7bef651461012b5780632aed7f3f1461014c5780633f4ba83a1461016d578063431f21da14610182578063522c8401146101a3578063571a26a0146101c65780635c975abb1461022c57806378bd79351461025557806383b5ff8b146102a25780638456cb59146102b7578063878eb368146102cc5780638da5cb5b146102e457806396b5a755146103155780639f727c271461032d578063c0ee0b8a14610342578063c55d0f5614610373578063c62666931461038b578063f2fde38b146103ac575b60005433600160a060020a0390811691161461010857600080fd5b005b34801561011657600080fd5b50610108600160a060020a03600435166103cd565b34801561013757600080fd5b50610108600160a060020a0360043516610497565b34801561015857600080fd5b50610108600160a060020a03600435166104e1565b34801561017957600080fd5b5061010861057f565b34801561018e57600080fd5b506101086004356024356044356064356105f9565b6101b46004356024356044356107f9565b60408051918252519081900360200190f35b3480156101d257600080fd5b506101de600435610a21565b60408051600160a060020a0390961686526001608060020a039485166020870152929093168483015267ffffffffffffffff9081166060850152919091166080830152519081900360a00190f35b34801561023857600080fd5b50610241610a88565b604080519115158252519081900360200190f35b34801561026157600080fd5b5061026d600435610a98565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b3480156102ae57600080fd5b506101b4610b25565b3480156102c357600080fd5b50610108610b2b565b3480156102d857600080fd5b50610108600435610baa565b3480156102f057600080fd5b506102f9610c17565b60408051600160a060020a039092168252519081900360200190f35b34801561032157600080fd5b50610108600435610c26565b34801561033957600080fd5b50610108610c62565b34801561034e57600080fd5b5061010860048035600160a060020a0316906024803591604435918201910135610cbf565b34801561037f57600080fd5b506101b4600435610cc4565b34801561039757600080fd5b50610108600160a060020a0360043516610cf6565b3480156103b857600080fd5b50610108600160a060020a0360043516610d40565b6000805433600160a060020a039081169116146103e957600080fd5b81600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561044457600080fd5b505af1158015610458573d6000803e3d6000fd5b505050506040513d602081101561046e57600080fd5b505160005490915061049390600160a060020a0384811691168363ffffffff610dd816565b5050565b60005433600160a060020a039081169116146104b257600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a039081169116146104fd57600080fd5b5060008054604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152905184939284169263f2fde38b926024808201939182900301818387803b15801561056357600080fd5b505af1158015610577573d6000803e3d6000fd5b505050505050565b60005433600160a060020a0390811691161461059a57600080fd5b60005460a060020a900460ff1615156105b257600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60006106036113e1565b60005460a060020a900460ff161561061a57600080fd5b846001608060020a03811061062e57600080fd5b846001608060020a03811061064257600080fd5b8467ffffffffffffffff81111561065857600080fd5b600254604080517f6352211e000000000000000000000000000000000000000000000000000000008152600481018c90529051339750600160a060020a03808916931691636352211e9160248083019260209291908290030181600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b505050506040513d60208110156106ed57600080fd5b5051600160a060020a03161461070257600080fd5b600354604080517fbcf7bd0b000000000000000000000000000000000000000000000000000000008152600481018c90529051600160a060020a039092169163bcf7bd0b9160248082019260009290919082900301818387803b15801561076857600080fd5b505af115801561077c573d6000803e3d6000fd5b5050505061078a858a610e74565b60a06040519081016040528086600160a060020a03168152602001896001608060020a03168152602001886001608060020a031681526020018767ffffffffffffffff1681526020014267ffffffffffffffff1681525093506107ee898587610eea565b505050505050505050565b6000805481908190819060a060020a900460ff161561081757600080fd5b6000878152600460205260409020925061083083611038565b151561083b57600080fd5b600254604080517f6352211e000000000000000000000000000000000000000000000000000000008152600481018990529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b1580156108a257600080fd5b505af11580156108b6573d6000803e3d6000fd5b505050506040513d60208110156108cc57600080fd5b505133600160a060020a039081169116146108e657600080fd5b8254600160a060020a031691506108ff87873486611059565b50600354604080517fc69cd09d0000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163c2db589091839163c69cd09d916004808201926020929091908290030181600087803b15801561096857600080fd5b505af115801561097c573d6000803e3d6000fd5b505050506040513d602081101561099257600080fd5b50516040805160e060020a63ffffffff8516028152600481018c9052602481018b9052604481018a90529051606480830192602092919082900301818588803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b50505050506040513d6020811015610a0957600080fd5b50519050610a17828861120c565b9695505050505050565b600460205260009081526040902080546001820154600290920154600160a060020a03909116916001608060020a0380821692700100000000000000000000000000000000909204169067ffffffffffffffff808216916801000000000000000090041685565b60005460a060020a900460ff1681565b60008181526004602052604081208190819081908190610ab781611038565b1515610ac257600080fd5b80546001820154600290920154600160a060020a03909116986001608060020a038084169950700100000000000000000000000000000000909304909216965067ffffffffffffffff808216965068010000000000000000909104169350915050565b60015481565b60005433600160a060020a03908116911614610b4657600080fd5b60005460a060020a900460ff1615610b5d57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b6000805460a060020a900460ff161515610bc357600080fd5b60005433600160a060020a03908116911614610bde57600080fd5b506000818152600460205260409020610bf681611038565b1515610c0157600080fd5b8054610493908390600160a060020a0316611282565b600054600160a060020a031681565b6000818152600460205260409020610c3d81611038565b1515610c4857600080fd5b805433600160a060020a03908116911614610c0157600080fd5b60005433600160a060020a03908116911614610c7d57600080fd5b60008054604051600160a060020a0391821692309092163180156108fc0292909190818181858888f19350505050158015610cbc573d6000803e3d6000fd5b50565b600080fd5b6000818152600460205260408120610cdb81611038565b1515610ce657600080fd5b610cef816112c4565b9392505050565b60005433600160a060020a03908116911614610d1157600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610d5b57600080fd5b600160a060020a0381161515610d7057600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050506040513d6020811015610e6557600080fd5b50511515610e6f57fe5b505050565b600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152308116602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b15801561056357600080fd5b603c826060015167ffffffffffffffff1610151515610f0857600080fd5b60008381526004602090815260409182902084518154600160a060020a0391821673ffffffffffffffffffffffffffffffffffffffff1990911617825582860151600183018054868901516001608060020a0390811670010000000000000000000000000000000081029482166fffffffffffffffffffffffffffffffff19909316831790911693909317909155606080890151600290950180546080808c015167ffffffffffffffff90811668010000000000000000026fffffffffffffffff0000000000000000199190991667ffffffffffffffff19909316831716979097179091558751928352958201929092528086019490945290851690830152915185927ffe21114808b55d6a54bec91c46a20e8dfe7f033edf3f058a5012a829d8d0e3ca928290030190a2505050565b6002015460006801000000000000000090910467ffffffffffffffff161190565b600080600080600080600061106d886112c4565b9550600360009054906101000a9004600160a060020a0316600160a060020a031663c69cd09d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110c257600080fd5b505af11580156110d6573d6000803e3d6000fd5b505050506040513d60208110156110ec57600080fd5b505186019450858510156110fc57fe5b8489101561110957600080fd5b8754600160a060020a0316935061111f8b61134b565b60008611156111715761113186611398565b6040519093508387039250600160a060020a0385169083156108fc029084906000818181858888f1935050505015801561116f573d6000803e3d6000fd5b505b848911156111b6575060405184890390600160a060020a0333169082156108fc029083906000818181858888f193505050501580156111b4573d6000803e3d6000fd5b505b60408051878152600160a060020a033316602082015281518c928e927fe40da2ed231723b222a7ba7da994c3afc3f83a51da76262083e38841e2da0982929081900390910190a350939998505050505050505050565b600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152858116602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b15801561056357600080fd5b61128b8261134b565b611295818361120c565b60405182907f2809c7e17bf978fbc7194c0a694b638c4215e9140cacc6c38ca36010b45697df90600090a25050565b6002810154600090819068010000000000000000900467ffffffffffffffff1642111561130a5750600282015468010000000000000000900467ffffffffffffffff1642035b60018301546002840154610cef916001608060020a0380821692700100000000000000000000000000000000909204169067ffffffffffffffff16846113a4565b6000908152600460205260408120805473ffffffffffffffffffffffffffffffffffffffff19168155600181019190915560020180546fffffffffffffffffffffffffffffffff19169055565b60015461271091020490565b60008080808585106113b8578693506113d6565b8787039250858584028115156113ca57fe5b05915081880190508093505b505050949350505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600a165627a7a72305820e56d3153113d562066e0dc44d74e5cf4202ea416ca90384fde9d1d33db512822002900000000000000000000000000000000000000000000000000000000000001a9

Deployed Bytecode

0x6080604052600436106100ed5763ffffffff60e060020a60003504166317ffc320811461010a5780631e7bef651461012b5780632aed7f3f1461014c5780633f4ba83a1461016d578063431f21da14610182578063522c8401146101a3578063571a26a0146101c65780635c975abb1461022c57806378bd79351461025557806383b5ff8b146102a25780638456cb59146102b7578063878eb368146102cc5780638da5cb5b146102e457806396b5a755146103155780639f727c271461032d578063c0ee0b8a14610342578063c55d0f5614610373578063c62666931461038b578063f2fde38b146103ac575b60005433600160a060020a0390811691161461010857600080fd5b005b34801561011657600080fd5b50610108600160a060020a03600435166103cd565b34801561013757600080fd5b50610108600160a060020a0360043516610497565b34801561015857600080fd5b50610108600160a060020a03600435166104e1565b34801561017957600080fd5b5061010861057f565b34801561018e57600080fd5b506101086004356024356044356064356105f9565b6101b46004356024356044356107f9565b60408051918252519081900360200190f35b3480156101d257600080fd5b506101de600435610a21565b60408051600160a060020a0390961686526001608060020a039485166020870152929093168483015267ffffffffffffffff9081166060850152919091166080830152519081900360a00190f35b34801561023857600080fd5b50610241610a88565b604080519115158252519081900360200190f35b34801561026157600080fd5b5061026d600435610a98565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b3480156102ae57600080fd5b506101b4610b25565b3480156102c357600080fd5b50610108610b2b565b3480156102d857600080fd5b50610108600435610baa565b3480156102f057600080fd5b506102f9610c17565b60408051600160a060020a039092168252519081900360200190f35b34801561032157600080fd5b50610108600435610c26565b34801561033957600080fd5b50610108610c62565b34801561034e57600080fd5b5061010860048035600160a060020a0316906024803591604435918201910135610cbf565b34801561037f57600080fd5b506101b4600435610cc4565b34801561039757600080fd5b50610108600160a060020a0360043516610cf6565b3480156103b857600080fd5b50610108600160a060020a0360043516610d40565b6000805433600160a060020a039081169116146103e957600080fd5b81600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561044457600080fd5b505af1158015610458573d6000803e3d6000fd5b505050506040513d602081101561046e57600080fd5b505160005490915061049390600160a060020a0384811691168363ffffffff610dd816565b5050565b60005433600160a060020a039081169116146104b257600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a039081169116146104fd57600080fd5b5060008054604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152905184939284169263f2fde38b926024808201939182900301818387803b15801561056357600080fd5b505af1158015610577573d6000803e3d6000fd5b505050505050565b60005433600160a060020a0390811691161461059a57600080fd5b60005460a060020a900460ff1615156105b257600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60006106036113e1565b60005460a060020a900460ff161561061a57600080fd5b846001608060020a03811061062e57600080fd5b846001608060020a03811061064257600080fd5b8467ffffffffffffffff81111561065857600080fd5b600254604080517f6352211e000000000000000000000000000000000000000000000000000000008152600481018c90529051339750600160a060020a03808916931691636352211e9160248083019260209291908290030181600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b505050506040513d60208110156106ed57600080fd5b5051600160a060020a03161461070257600080fd5b600354604080517fbcf7bd0b000000000000000000000000000000000000000000000000000000008152600481018c90529051600160a060020a039092169163bcf7bd0b9160248082019260009290919082900301818387803b15801561076857600080fd5b505af115801561077c573d6000803e3d6000fd5b5050505061078a858a610e74565b60a06040519081016040528086600160a060020a03168152602001896001608060020a03168152602001886001608060020a031681526020018767ffffffffffffffff1681526020014267ffffffffffffffff1681525093506107ee898587610eea565b505050505050505050565b6000805481908190819060a060020a900460ff161561081757600080fd5b6000878152600460205260409020925061083083611038565b151561083b57600080fd5b600254604080517f6352211e000000000000000000000000000000000000000000000000000000008152600481018990529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b1580156108a257600080fd5b505af11580156108b6573d6000803e3d6000fd5b505050506040513d60208110156108cc57600080fd5b505133600160a060020a039081169116146108e657600080fd5b8254600160a060020a031691506108ff87873486611059565b50600354604080517fc69cd09d0000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163c2db589091839163c69cd09d916004808201926020929091908290030181600087803b15801561096857600080fd5b505af115801561097c573d6000803e3d6000fd5b505050506040513d602081101561099257600080fd5b50516040805160e060020a63ffffffff8516028152600481018c9052602481018b9052604481018a90529051606480830192602092919082900301818588803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b50505050506040513d6020811015610a0957600080fd5b50519050610a17828861120c565b9695505050505050565b600460205260009081526040902080546001820154600290920154600160a060020a03909116916001608060020a0380821692700100000000000000000000000000000000909204169067ffffffffffffffff808216916801000000000000000090041685565b60005460a060020a900460ff1681565b60008181526004602052604081208190819081908190610ab781611038565b1515610ac257600080fd5b80546001820154600290920154600160a060020a03909116986001608060020a038084169950700100000000000000000000000000000000909304909216965067ffffffffffffffff808216965068010000000000000000909104169350915050565b60015481565b60005433600160a060020a03908116911614610b4657600080fd5b60005460a060020a900460ff1615610b5d57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b6000805460a060020a900460ff161515610bc357600080fd5b60005433600160a060020a03908116911614610bde57600080fd5b506000818152600460205260409020610bf681611038565b1515610c0157600080fd5b8054610493908390600160a060020a0316611282565b600054600160a060020a031681565b6000818152600460205260409020610c3d81611038565b1515610c4857600080fd5b805433600160a060020a03908116911614610c0157600080fd5b60005433600160a060020a03908116911614610c7d57600080fd5b60008054604051600160a060020a0391821692309092163180156108fc0292909190818181858888f19350505050158015610cbc573d6000803e3d6000fd5b50565b600080fd5b6000818152600460205260408120610cdb81611038565b1515610ce657600080fd5b610cef816112c4565b9392505050565b60005433600160a060020a03908116911614610d1157600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610d5b57600080fd5b600160a060020a0381161515610d7057600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050506040513d6020811015610e6557600080fd5b50511515610e6f57fe5b505050565b600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152308116602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b15801561056357600080fd5b603c826060015167ffffffffffffffff1610151515610f0857600080fd5b60008381526004602090815260409182902084518154600160a060020a0391821673ffffffffffffffffffffffffffffffffffffffff1990911617825582860151600183018054868901516001608060020a0390811670010000000000000000000000000000000081029482166fffffffffffffffffffffffffffffffff19909316831790911693909317909155606080890151600290950180546080808c015167ffffffffffffffff90811668010000000000000000026fffffffffffffffff0000000000000000199190991667ffffffffffffffff19909316831716979097179091558751928352958201929092528086019490945290851690830152915185927ffe21114808b55d6a54bec91c46a20e8dfe7f033edf3f058a5012a829d8d0e3ca928290030190a2505050565b6002015460006801000000000000000090910467ffffffffffffffff161190565b600080600080600080600061106d886112c4565b9550600360009054906101000a9004600160a060020a0316600160a060020a031663c69cd09d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110c257600080fd5b505af11580156110d6573d6000803e3d6000fd5b505050506040513d60208110156110ec57600080fd5b505186019450858510156110fc57fe5b8489101561110957600080fd5b8754600160a060020a0316935061111f8b61134b565b60008611156111715761113186611398565b6040519093508387039250600160a060020a0385169083156108fc029084906000818181858888f1935050505015801561116f573d6000803e3d6000fd5b505b848911156111b6575060405184890390600160a060020a0333169082156108fc029083906000818181858888f193505050501580156111b4573d6000803e3d6000fd5b505b60408051878152600160a060020a033316602082015281518c928e927fe40da2ed231723b222a7ba7da994c3afc3f83a51da76262083e38841e2da0982929081900390910190a350939998505050505050505050565b600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152858116602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b15801561056357600080fd5b61128b8261134b565b611295818361120c565b60405182907f2809c7e17bf978fbc7194c0a694b638c4215e9140cacc6c38ca36010b45697df90600090a25050565b6002810154600090819068010000000000000000900467ffffffffffffffff1642111561130a5750600282015468010000000000000000900467ffffffffffffffff1642035b60018301546002840154610cef916001608060020a0380821692700100000000000000000000000000000000909204169067ffffffffffffffff16846113a4565b6000908152600460205260408120805473ffffffffffffffffffffffffffffffffffffffff19168155600181019190915560020180546fffffffffffffffffffffffffffffffff19169055565b60015461271091020490565b60008080808585106113b8578693506113d6565b8787039250858584028115156113ca57fe5b05915081880190508093505b505050949350505050565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600a165627a7a72305820e56d3153113d562066e0dc44d74e5cf4202ea416ca90384fde9d1d33db5128220029

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

00000000000000000000000000000000000000000000000000000000000001a9

-----Decoded View---------------
Arg [0] : _ownerCut (uint256): 425

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000001a9


Swarm Source

bzzr://e56d3153113d562066e0dc44d74e5cf4202ea416ca90384fde9d1d33db512822

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

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ 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.