Feature Tip: Add private address tag to any address under My Name Tag !
Contract of Axie Infinity's Axie Clock Auction. Submitted by Kleros Curate.
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 488,037 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Auction | 20452850 | 111 days ago | IN | 0 ETH | 0.00002503 | ||||
Create Auction | 20452847 | 111 days ago | IN | 0 ETH | 0.00002502 | ||||
Bid | 16912916 | 607 days ago | IN | 0.055 ETH | 0.00434052 | ||||
Cancel Auction | 15190541 | 855 days ago | IN | 0 ETH | 0.00058114 | ||||
Create Auction | 15157968 | 860 days ago | IN | 0 ETH | 0.00370473 | ||||
Bid | 14030618 | 1039 days ago | IN | 0.095 ETH | 0.00212203 | ||||
Bid | 14030618 | 1039 days ago | IN | 0.095 ETH | 0.00212203 | ||||
Bid | 14030618 | 1039 days ago | IN | 0.0856526 ETH | 0.00212203 | ||||
Bid | 14030618 | 1039 days ago | IN | 0.0856526 ETH | 0.0020738 | ||||
Cancel Auction | 13701588 | 1090 days ago | IN | 0 ETH | 0.00124787 | ||||
Cancel Auction | 13612910 | 1104 days ago | IN | 0 ETH | 0.00737888 | ||||
Create Auction | 13603416 | 1106 days ago | IN | 0 ETH | 0.00387996 | ||||
Create Auction | 13405220 | 1137 days ago | IN | 0 ETH | 0.002353 | ||||
Create Auction | 13062726 | 1190 days ago | IN | 0 ETH | 0.00132669 | ||||
Create Auction | 13020412 | 1197 days ago | IN | 0 ETH | 0.00175308 | ||||
Cancel Auction | 12950961 | 1208 days ago | IN | 0 ETH | 0.00151667 | ||||
Create Auction | 12942936 | 1209 days ago | IN | 0 ETH | 0.00105134 | ||||
Cancel Auction | 12935783 | 1210 days ago | IN | 0 ETH | 0.00334578 | ||||
Create Auction | 12935779 | 1210 days ago | IN | 0 ETH | 0.00112698 | ||||
Transfer | 12909251 | 1214 days ago | IN | 0.0836043 ETH | 0.000735 | ||||
Bid | 12891856 | 1217 days ago | IN | 0.07304357 ETH | 0.00195323 | ||||
Create Auction | 12889808 | 1217 days ago | IN | 0 ETH | 0.00047583 | ||||
Create Auction | 12887778 | 1218 days ago | IN | 0 ETH | 0.00037566 | ||||
Create Auction | 12820039 | 1228 days ago | IN | 0 ETH | 0.00160204 | ||||
Create Auction | 12820039 | 1228 days ago | IN | 0 ETH | 0.00170217 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13368623 | 1143 days ago | 0.02290252 ETH | ||||
13269494 | 1158 days ago | 0.01991713 ETH | ||||
12950279 | 1208 days ago | 0.008767 ETH | ||||
12379450 | 1297 days ago | 25.20930509 ETH | ||||
12328949 | 1304 days ago | 0.00006944 ETH | ||||
12328949 | 1304 days ago | 0.124475 ETH | ||||
12328932 | 1304 days ago | 0.00013888 ETH | ||||
12328932 | 1304 days ago | 0.0622375 ETH | ||||
12328910 | 1304 days ago | 0.00008472 ETH | ||||
12328910 | 1304 days ago | 0.09499295 ETH | ||||
12328908 | 1304 days ago | 0.00041666 ETH | ||||
12328908 | 1304 days ago | 0.0766 ETH | ||||
12328905 | 1304 days ago | 0.00027777 ETH | ||||
12328905 | 1304 days ago | 0.09575 ETH | ||||
12328903 | 1304 days ago | 0.00004039 ETH | ||||
12328903 | 1304 days ago | 0.07563097 ETH | ||||
12328903 | 1304 days ago | 0.00001506 ETH | ||||
12328903 | 1304 days ago | 0.10620527 ETH | ||||
12328878 | 1304 days ago | 0.086175 ETH | ||||
12328782 | 1304 days ago | 0.00024215 ETH | ||||
12328782 | 1304 days ago | 0.06667025 ETH | ||||
12328781 | 1304 days ago | 0.00017708 ETH | ||||
12328781 | 1304 days ago | 0.0660675 ETH | ||||
12328781 | 1304 days ago | 0.00009548 ETH | ||||
12328781 | 1304 days ago | 0.0622375 ETH |
Loading...
Loading
Contract Name:
AxieClockAuction
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-04-02 */ pragma solidity ^0.4.19; // 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/HasNoEther.sol /** * @title Contracts that should not own Ether * @author Remco Bloemen <remco@2π.com> * @dev This tries to block incoming ether to prevent accidental loss of Ether. Should Ether end up * in the contract, it will allow the owner to reclaim this ether. * @notice Ether can still be send to this contract by: * calling functions labeled `payable` * `selfdestruct(contract_address)` * mining directly to the contract address */ contract HasNoEther is Ownable { /** * @dev Constructor that rejects incoming Ether * @dev The `payable` flag is added so we can access `msg.value` without compiler warning. If we * leave out payable, then Solidity will allow inheriting contracts to implement a payable * constructor. By doing it this way we prevent a payable constructor from working. Alternatively * we could use assembly to access msg.value. */ function HasNoEther() payable { require(msg.value == 0); } /** * @dev Disallows direct send by settings a default function without the `payable` flag. */ function() external { } /** * @dev Transfer all Ether held by the contract to the owner. */ function reclaimEther() external onlyOwner { assert(owner.send(this.balance)); } } // File: contracts/marketplace/AxieClockAuction.sol /// @title Clock auction for non-fungible tokens. contract AxieClockAuction is HasNoEther, 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; // Map from token ID to their corresponding auction. mapping (address => mapping (uint256 => Auction)) public auctions; event AuctionCreated( address indexed _nftAddress, uint256 indexed _tokenId, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration, address _seller ); event AuctionSuccessful( address indexed _nftAddress, uint256 indexed _tokenId, uint256 _totalPrice, address _winner ); event AuctionCancelled( address indexed _nftAddress, uint256 indexed _tokenId ); /// @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. function AxieClockAuction(uint256 _ownerCut) public { require(_ownerCut <= 10000); ownerCut = _ownerCut; } /// @dev DON'T give me your money. function () external {} // 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); _; } /// @dev Returns auction info for an NFT on auction. /// @param _nftAddress - Address of the NFT. /// @param _tokenId - ID of NFT on auction. function getAuction( address _nftAddress, uint256 _tokenId ) external view returns ( address seller, uint256 startingPrice, uint256 endingPrice, uint256 duration, uint256 startedAt ) { Auction storage _auction = auctions[_nftAddress][_tokenId]; require(_isOnAuction(_auction)); return ( _auction.seller, _auction.startingPrice, _auction.endingPrice, _auction.duration, _auction.startedAt ); } /// @dev Returns the current price of an auction. /// @param _nftAddress - Address of the NFT. /// @param _tokenId - ID of the token price we are checking. function getCurrentPrice( address _nftAddress, uint256 _tokenId ) external view returns (uint256) { Auction storage _auction = auctions[_nftAddress][_tokenId]; require(_isOnAuction(_auction)); return _getCurrentPrice(_auction); } /// @dev Creates and begins a new auction. /// @param _nftAddress - address of a deployed contract implementing /// the Nonfungible Interface. /// @param _tokenId - ID of token 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( address _nftAddress, uint256 _tokenId, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration ) external whenNotPaused canBeStoredWith128Bits(_startingPrice) canBeStoredWith128Bits(_endingPrice) canBeStoredWith64Bits(_duration) { address _seller = msg.sender; require(_owns(_nftAddress, _seller, _tokenId)); _escrow(_nftAddress, _seller, _tokenId); Auction memory _auction = Auction( _seller, uint128(_startingPrice), uint128(_endingPrice), uint64(_duration), uint64(now) ); _addAuction(_nftAddress, _tokenId, _auction, _seller); } /// @dev Bids on an open auction, completing the auction and transferring /// ownership of the NFT if enough Ether is supplied. /// @param _nftAddress - address of a deployed contract implementing /// the Nonfungible Interface. /// @param _tokenId - ID of token to bid on. function bid( address _nftAddress, uint256 _tokenId ) external payable whenNotPaused { // _bid will throw if the bid or funds transfer fails _bid(_nftAddress, _tokenId, msg.value); _transfer(_nftAddress, msg.sender, _tokenId); } /// @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 _nftAddress - Address of the NFT. /// @param _tokenId - ID of token on auction function cancelAuction(address _nftAddress, uint256 _tokenId) external { Auction storage _auction = auctions[_nftAddress][_tokenId]; require(_isOnAuction(_auction)); require(msg.sender == _auction.seller); _cancelAuction(_nftAddress, _tokenId, _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 _nftAddress - Address of the NFT. /// @param _tokenId - ID of the NFT on auction to cancel. function cancelAuctionWhenPaused( address _nftAddress, uint256 _tokenId ) external whenPaused onlyOwner { Auction storage _auction = auctions[_nftAddress][_tokenId]; require(_isOnAuction(_auction)); _cancelAuction(_nftAddress, _tokenId, _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 Gets the NFT object from an address, validating that implementsERC721 is true. /// @param _nftAddress - Address of the NFT. function _getNftContract(address _nftAddress) internal pure returns (IERC721Base) { IERC721Base candidateContract = IERC721Base(_nftAddress); // require(candidateContract.implementsERC721()); return candidateContract; } /// @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 Returns true if the claimant owns the token. /// @param _nftAddress - The address of the NFT. /// @param _claimant - Address claiming to own the token. /// @param _tokenId - ID of token whose ownership to verify. function _owns(address _nftAddress, address _claimant, uint256 _tokenId) private view returns (bool) { IERC721Base _nftContract = _getNftContract(_nftAddress); return (_nftContract.ownerOf(_tokenId) == _claimant); } /// @dev Adds an auction to the list of open auctions. Also fires the /// AuctionCreated event. /// @param _tokenId The ID of the token to be put on auction. /// @param _auction Auction to add. function _addAuction( address _nftAddress, uint256 _tokenId, Auction _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[_nftAddress][_tokenId] = _auction; AuctionCreated( _nftAddress, _tokenId, uint256(_auction.startingPrice), uint256(_auction.endingPrice), uint256(_auction.duration), _seller ); } /// @dev Removes an auction from the list of open auctions. /// @param _tokenId - ID of NFT on auction. function _removeAuction(address _nftAddress, uint256 _tokenId) internal { delete auctions[_nftAddress][_tokenId]; } /// @dev Cancels an auction unconditionally. function _cancelAuction(address _nftAddress, uint256 _tokenId, address _seller) internal { _removeAuction(_nftAddress, _tokenId); _transfer(_nftAddress, _seller, _tokenId); AuctionCancelled(_nftAddress, _tokenId); } /// @dev Escrows the NFT, assigning ownership to this contract. /// Throws if the escrow fails. /// @param _nftAddress - The address of the NFT. /// @param _owner - Current owner address of token to escrow. /// @param _tokenId - ID of token whose approval to verify. function _escrow(address _nftAddress, address _owner, uint256 _tokenId) private { IERC721Base _nftContract = _getNftContract(_nftAddress); // It will throw if transfer fails _nftContract.transferFrom(_owner, this, _tokenId); } /// @dev Transfers an NFT owned by this contract to another address. /// Returns true if the transfer succeeds. /// @param _nftAddress - The address of the NFT. /// @param _receiver - Address to transfer NFT to. /// @param _tokenId - ID of token to transfer. function _transfer(address _nftAddress, address _receiver, uint256 _tokenId) internal { IERC721Base _nftContract = _getNftContract(_nftAddress); // It will throw if transfer fails _nftContract.transferFrom(this, _receiver, _tokenId); } /// @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 token. function _bid( address _nftAddress, uint256 _tokenId, uint256 _bidAmount ) internal returns (uint256) { // Get a reference to the auction struct Auction storage _auction = auctions[_nftAddress][_tokenId]; // Explicitly check that this auction is currently live. // (Because of how Ethereum mappings work, we can't just count // on the lookup above failing. An invalid _tokenId will just // return an auction object that is all zeros.) require(_isOnAuction(_auction)); // Check that the incoming bid is higher than the current // price uint256 _price = _getCurrentPrice(_auction); require(_bidAmount >= _price); // 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(_nftAddress, _tokenId); // 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 > _price) { // 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 - _price; // 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! AuctionSuccessful(_nftAddress, _tokenId, _price, msg.sender); return _price; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_nftAddress","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"cancelAuctionWhenPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"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":false,"inputs":[{"name":"_nftAddress","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_nftAddress","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"getCurrentPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_nftAddress","type":"address"},{"name":"_tokenId","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":"_nftAddress","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"cancelAuction","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":"_nftAddress","type":"address"},{"name":"_tokenId","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":"reclaimEther","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":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_nftAddress","type":"address"},{"indexed":true,"name":"_tokenId","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":"_nftAddress","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":false,"name":"_totalPrice","type":"uint256"},{"indexed":false,"name":"_winner","type":"address"}],"name":"AuctionSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_nftAddress","type":"address"},{"indexed":true,"name":"_tokenId","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"}]
Contract Creation Code
60606040526000805460a060020a60ff0219169055341561001f57600080fd5b604051602080610fa48339810160405280805160008054600160a060020a03191633600160a060020a0316179055915050341561005b57600080fd5b61271081111561006a57600080fd5b600155610f288061007c6000396000f3006060604052600436106100b65763ffffffff60e060020a6000350416631ae6b6ee81146100c35780633f4ba83a146100e557806344f91c1e146100f857806359d667a51461016c5780635c975abb146101835780636c54df52146101aa578063762a66a2146101de57806383b5ff8b1461023b5780638456cb591461024e578063859b97fe146102615780638da5cb5b14610283578063961c9ae4146102b25780639f727c27146102dd578063f2fde38b146102f0575b34156100c157600080fd5b005b34156100ce57600080fd5b6100c1600160a060020a036004351660243561030f565b34156100f057600080fd5b6100c1610398565b341561010357600080fd5b61011a600160a060020a0360043516602435610417565b604051600160a060020a0390951685526001608060020a0393841660208601529190921660408085019190915267ffffffffffffffff92831660608501529116608083015260a0909101905180910390f35b6100c1600160a060020a0360043516602435610487565b341561018e57600080fd5b6101966104b9565b604051901515815260200160405180910390f35b34156101b557600080fd5b6101cc600160a060020a03600435166024356104c9565b60405190815260200160405180910390f35b34156101e957600080fd5b610200600160a060020a0360043516602435610511565b604051600160a060020a03909516855260208501939093526040808501929092526060840152608083019190915260a0909101905180910390f35b341561024657600080fd5b6101cc6105b4565b341561025957600080fd5b6100c16105ba565b341561026c57600080fd5b6100c1600160a060020a036004351660243561063e565b341561028e57600080fd5b61029661068f565b604051600160a060020a03909116815260200160405180910390f35b34156102bd57600080fd5b6100c1600160a060020a036004351660243560443560643560843561069e565b34156102e857600080fd5b6100c1610792565b34156102fb57600080fd5b6100c1600160a060020a03600435166107e5565b6000805460a060020a900460ff16151561032857600080fd5b60005433600160a060020a0390811691161461034357600080fd5b50600160a060020a0382166000908152600260209081526040808320848452909152902061037081610880565b151561037b57600080fd5b80546103939084908490600160a060020a03166108a1565b505050565b60005433600160a060020a039081169116146103b357600080fd5b60005460a060020a900460ff1615156103cb57600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60026020818152600093845260408085209091529183529120805460018201549190920154600160a060020a03909216916001608060020a03808316927001000000000000000000000000000000009004169067ffffffffffffffff808216916801000000000000000090041685565b60005460a060020a900460ff161561049e57600080fd5b6104a98282346108f2565b506104b5823383610a40565b5050565b60005460a060020a900460ff1681565b600160a060020a038216600090815260026020908152604080832084845290915281206104f581610880565b151561050057600080fd5b61050981610ac8565b949350505050565b600160a060020a03821660009081526002602090815260408083208484529091528120819081908190819061054581610880565b151561055057600080fd5b80546001820154600290920154600160a060020a03909116996001608060020a038084169a50700100000000000000000000000000000000909304909216975067ffffffffffffffff80821697506801000000000000000090910416945092505050565b60015481565b60005433600160a060020a039081169116146105d557600080fd5b60005460a060020a900460ff16156105ec57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600160a060020a0382166000908152600260209081526040808320848452909152902061066a81610880565b151561067557600080fd5b805433600160a060020a0390811691161461037b57600080fd5b600054600160a060020a031681565b60006106a8610ece565b60005460a060020a900460ff16156106bf57600080fd5b846001608060020a0381106106d357600080fd5b846001608060020a0381106106e757600080fd5b8467ffffffffffffffff8111156106fd57600080fd5b33945061070b8a868b610b56565b151561071657600080fd5b6107218a868b610bec565b60a06040519081016040528086600160a060020a03168152602001896001608060020a03168152602001886001608060020a031681526020018767ffffffffffffffff1681526020014267ffffffffffffffff1681525093506107868a8a8688610c5a565b50505050505050505050565b60005433600160a060020a039081169116146107ad57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156107e357fe5b565b60005433600160a060020a0390811691161461080057600080fd5b600160a060020a038116151561081557600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6002015460006801000000000000000090910467ffffffffffffffff161190565b6108ab8383610e20565b6108b6838284610a40565b8183600160a060020a03167f018b64b6242d32aa550e95d78985b938d71af5b3f10827b0683f55da1639304860405160405180910390a3505050565b600160a060020a03831660009081526002602090815260408083208584529091528120818080808061092386610880565b151561092e57600080fd5b61093786610ac8565b94508488101561094657600080fd5b8554600160a060020a0316935061095d8a8a610e20565b60008511156109a75761096f85610e82565b92508285039150600160a060020a03841682156108fc0283604051600060405180830381858888f1935050505015156109a757600080fd5b848811156109e45750838703600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156109e457600080fd5b888a600160a060020a03167f6c00bb44a64da29b6a73920d50ff280237d277bda3e1f3cdf4e24392e6839efe8733604051918252600160a060020a031660208201526040908101905180910390a3509298975050505050505050565b6000610a4b84610e8e565b905080600160a060020a03166323b872dd30858560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610aae57600080fd5b6102c65a03f11515610abf57600080fd5b50505050505050565b6002810154600090819068010000000000000000900467ffffffffffffffff16421115610b0e5750600282015468010000000000000000900467ffffffffffffffff1642035b60018301546002840154610b4f916001608060020a0380821692700100000000000000000000000000000000909204169067ffffffffffffffff1684610e91565b9392505050565b600080610b6285610e8e565b905083600160a060020a031681600160a060020a0316636352211e8560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bbd57600080fd5b6102c65a03f11515610bce57600080fd5b50505060405180519050600160a060020a0316149150509392505050565b6000610bf784610e8e565b905080600160a060020a03166323b872dd84308560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610aae57600080fd5b603c826060015167ffffffffffffffff161015610c7657600080fd5b600160a060020a0384166000908152600260209081526040808320868452909152902082908151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039190911617815560208201516001820180546fffffffffffffffffffffffffffffffff19166001608060020a039290921691909117905560408201516001820180546001608060020a03928316700100000000000000000000000000000000029216919091179055606082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560808201516002909101805467ffffffffffffffff9290921668010000000000000000026fffffffffffffffff0000000000000000199092169190911790555082600160a060020a0385167febc6e332a2c695c53d77b2922a18bcf3ab024549f5f2bfa67e0875ec29d59d4660208501516001608060020a031685604001516001608060020a0316866060015167ffffffffffffffff16866040519384526020840192909252604080840191909152600160a060020a0390911660608301526080909101905180910390a350505050565b600160a060020a039091166000908152600260208181526040808420948452939052918120805473ffffffffffffffffffffffffffffffffffffffff1916815560018101919091550180546fffffffffffffffffffffffffffffffff19169055565b60015461271091020490565b90565b6000808080858510610ea557869350610ec3565b878703925085858402811515610eb757fe5b05915081880190508093505b505050949350505050565b60a06040519081016040908152600080835260208301819052908201819052606082018190526080820152905600a165627a7a723058202006b21bd123c97e5aa47d69d98a066c6ac130a7125f23df9c9e6a98a3d99de1002900000000000000000000000000000000000000000000000000000000000001a9
Deployed Bytecode
0x6060604052600436106100b65763ffffffff60e060020a6000350416631ae6b6ee81146100c35780633f4ba83a146100e557806344f91c1e146100f857806359d667a51461016c5780635c975abb146101835780636c54df52146101aa578063762a66a2146101de57806383b5ff8b1461023b5780638456cb591461024e578063859b97fe146102615780638da5cb5b14610283578063961c9ae4146102b25780639f727c27146102dd578063f2fde38b146102f0575b34156100c157600080fd5b005b34156100ce57600080fd5b6100c1600160a060020a036004351660243561030f565b34156100f057600080fd5b6100c1610398565b341561010357600080fd5b61011a600160a060020a0360043516602435610417565b604051600160a060020a0390951685526001608060020a0393841660208601529190921660408085019190915267ffffffffffffffff92831660608501529116608083015260a0909101905180910390f35b6100c1600160a060020a0360043516602435610487565b341561018e57600080fd5b6101966104b9565b604051901515815260200160405180910390f35b34156101b557600080fd5b6101cc600160a060020a03600435166024356104c9565b60405190815260200160405180910390f35b34156101e957600080fd5b610200600160a060020a0360043516602435610511565b604051600160a060020a03909516855260208501939093526040808501929092526060840152608083019190915260a0909101905180910390f35b341561024657600080fd5b6101cc6105b4565b341561025957600080fd5b6100c16105ba565b341561026c57600080fd5b6100c1600160a060020a036004351660243561063e565b341561028e57600080fd5b61029661068f565b604051600160a060020a03909116815260200160405180910390f35b34156102bd57600080fd5b6100c1600160a060020a036004351660243560443560643560843561069e565b34156102e857600080fd5b6100c1610792565b34156102fb57600080fd5b6100c1600160a060020a03600435166107e5565b6000805460a060020a900460ff16151561032857600080fd5b60005433600160a060020a0390811691161461034357600080fd5b50600160a060020a0382166000908152600260209081526040808320848452909152902061037081610880565b151561037b57600080fd5b80546103939084908490600160a060020a03166108a1565b505050565b60005433600160a060020a039081169116146103b357600080fd5b60005460a060020a900460ff1615156103cb57600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60026020818152600093845260408085209091529183529120805460018201549190920154600160a060020a03909216916001608060020a03808316927001000000000000000000000000000000009004169067ffffffffffffffff808216916801000000000000000090041685565b60005460a060020a900460ff161561049e57600080fd5b6104a98282346108f2565b506104b5823383610a40565b5050565b60005460a060020a900460ff1681565b600160a060020a038216600090815260026020908152604080832084845290915281206104f581610880565b151561050057600080fd5b61050981610ac8565b949350505050565b600160a060020a03821660009081526002602090815260408083208484529091528120819081908190819061054581610880565b151561055057600080fd5b80546001820154600290920154600160a060020a03909116996001608060020a038084169a50700100000000000000000000000000000000909304909216975067ffffffffffffffff80821697506801000000000000000090910416945092505050565b60015481565b60005433600160a060020a039081169116146105d557600080fd5b60005460a060020a900460ff16156105ec57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600160a060020a0382166000908152600260209081526040808320848452909152902061066a81610880565b151561067557600080fd5b805433600160a060020a0390811691161461037b57600080fd5b600054600160a060020a031681565b60006106a8610ece565b60005460a060020a900460ff16156106bf57600080fd5b846001608060020a0381106106d357600080fd5b846001608060020a0381106106e757600080fd5b8467ffffffffffffffff8111156106fd57600080fd5b33945061070b8a868b610b56565b151561071657600080fd5b6107218a868b610bec565b60a06040519081016040528086600160a060020a03168152602001896001608060020a03168152602001886001608060020a031681526020018767ffffffffffffffff1681526020014267ffffffffffffffff1681525093506107868a8a8688610c5a565b50505050505050505050565b60005433600160a060020a039081169116146107ad57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156107e357fe5b565b60005433600160a060020a0390811691161461080057600080fd5b600160a060020a038116151561081557600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6002015460006801000000000000000090910467ffffffffffffffff161190565b6108ab8383610e20565b6108b6838284610a40565b8183600160a060020a03167f018b64b6242d32aa550e95d78985b938d71af5b3f10827b0683f55da1639304860405160405180910390a3505050565b600160a060020a03831660009081526002602090815260408083208584529091528120818080808061092386610880565b151561092e57600080fd5b61093786610ac8565b94508488101561094657600080fd5b8554600160a060020a0316935061095d8a8a610e20565b60008511156109a75761096f85610e82565b92508285039150600160a060020a03841682156108fc0283604051600060405180830381858888f1935050505015156109a757600080fd5b848811156109e45750838703600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156109e457600080fd5b888a600160a060020a03167f6c00bb44a64da29b6a73920d50ff280237d277bda3e1f3cdf4e24392e6839efe8733604051918252600160a060020a031660208201526040908101905180910390a3509298975050505050505050565b6000610a4b84610e8e565b905080600160a060020a03166323b872dd30858560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610aae57600080fd5b6102c65a03f11515610abf57600080fd5b50505050505050565b6002810154600090819068010000000000000000900467ffffffffffffffff16421115610b0e5750600282015468010000000000000000900467ffffffffffffffff1642035b60018301546002840154610b4f916001608060020a0380821692700100000000000000000000000000000000909204169067ffffffffffffffff1684610e91565b9392505050565b600080610b6285610e8e565b905083600160a060020a031681600160a060020a0316636352211e8560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bbd57600080fd5b6102c65a03f11515610bce57600080fd5b50505060405180519050600160a060020a0316149150509392505050565b6000610bf784610e8e565b905080600160a060020a03166323b872dd84308560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610aae57600080fd5b603c826060015167ffffffffffffffff161015610c7657600080fd5b600160a060020a0384166000908152600260209081526040808320868452909152902082908151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039190911617815560208201516001820180546fffffffffffffffffffffffffffffffff19166001608060020a039290921691909117905560408201516001820180546001608060020a03928316700100000000000000000000000000000000029216919091179055606082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560808201516002909101805467ffffffffffffffff9290921668010000000000000000026fffffffffffffffff0000000000000000199092169190911790555082600160a060020a0385167febc6e332a2c695c53d77b2922a18bcf3ab024549f5f2bfa67e0875ec29d59d4660208501516001608060020a031685604001516001608060020a0316866060015167ffffffffffffffff16866040519384526020840192909252604080840191909152600160a060020a0390911660608301526080909101905180910390a350505050565b600160a060020a039091166000908152600260208181526040808420948452939052918120805473ffffffffffffffffffffffffffffffffffffffff1916815560018101919091550180546fffffffffffffffffffffffffffffffff19169055565b60015461271091020490565b90565b6000808080858510610ea557869350610ec3565b878703925085858402811515610eb757fe5b05915081880190508093505b505050949350505050565b60a06040519081016040908152600080835260208301819052908201819052606082018190526080820152905600a165627a7a723058202006b21bd123c97e5aa47d69d98a066c6ac130a7125f23df9c9e6a98a3d99de10029
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://2006b21bd123c97e5aa47d69d98a066c6ac130a7125f23df9c9e6a98a3d99de1
Loading...
Loading
Loading...
Loading
OVERVIEW
Contract of Axie Infinity's Axie Clock AuctionLoading...
Loading
[ 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.