Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 5,384 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Cancel Auction | 9211725 | 2234 days ago | IN | 0 ETH | 0.0001028 | ||||
| Cancel Auction | 9211725 | 2234 days ago | IN | 0 ETH | 0.0001028 | ||||
| Cancel Auction | 9204832 | 2235 days ago | IN | 0 ETH | 0.00007351 | ||||
| Cancel Auction | 9204823 | 2235 days ago | IN | 0 ETH | 0.0000735 | ||||
| Cancel Auction | 9204815 | 2235 days ago | IN | 0 ETH | 0.00007351 | ||||
| Cancel Auction | 9186230 | 2238 days ago | IN | 0 ETH | 0.00007351 | ||||
| Cancel Auction | 9173556 | 2241 days ago | IN | 0 ETH | 0.00008086 | ||||
| Cancel Auction | 9142208 | 2247 days ago | IN | 0 ETH | 0.00008085 | ||||
| Cancel Auction | 9142009 | 2247 days ago | IN | 0 ETH | 0.00008086 | ||||
| Cancel Auction | 9141584 | 2247 days ago | IN | 0 ETH | 0.00008085 | ||||
| Cancel Auction | 9141564 | 2247 days ago | IN | 0 ETH | 0.00008085 | ||||
| Cancel Auction | 9137115 | 2248 days ago | IN | 0 ETH | 0.00014703 | ||||
| Cancel Auction | 9137093 | 2248 days ago | IN | 0 ETH | 0.00014701 | ||||
| Cancel Auction | 9137068 | 2248 days ago | IN | 0 ETH | 0.00014701 | ||||
| Cancel Auction | 9130679 | 2249 days ago | IN | 0 ETH | 0.00037494 | ||||
| Bid On Siring | 9127694 | 2250 days ago | IN | 0.01202314 ETH | 0.00002499 | ||||
| Pause | 9125650 | 2250 days ago | IN | 0 ETH | 0.00024249 | ||||
| Bid On Siring | 9124836 | 2251 days ago | IN | 0.00383928 ETH | 0.00431324 | ||||
| Bid On Siring | 9123375 | 2251 days ago | IN | 0.00500694 ETH | 0.00118995 | ||||
| Bid On Siring | 9121933 | 2251 days ago | IN | 0.01202314 ETH | 0.00111808 | ||||
| Bid On Siring | 9115385 | 2252 days ago | IN | 0.00501388 ETH | 0.00218293 | ||||
| Bid On Siring | 9113726 | 2253 days ago | IN | 0.007 ETH | 0.00221133 | ||||
| Create Auction | 9110461 | 2253 days ago | IN | 0 ETH | 0.00018437 | ||||
| Create Auction | 9110454 | 2253 days ago | IN | 0 ETH | 0.00018439 | ||||
| Bid On Siring | 9110377 | 2253 days ago | IN | 0.00380138 ETH | 0.00208699 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 9124836 | 2251 days ago | 0.002 ETH | ||||
| - | 9124836 | 2251 days ago | 0.00000016 ETH | ||||
| - | 9124836 | 2251 days ago | 0.00176095 ETH | ||||
| - | 9123375 | 2251 days ago | 0.002 ETH | ||||
| - | 9123375 | 2251 days ago | 0.00000694 ETH | ||||
| - | 9123375 | 2251 days ago | 0.0028725 ETH | ||||
| - | 9121933 | 2251 days ago | 0.002 ETH | ||||
| - | 9121933 | 2251 days ago | 0.00002314 ETH | ||||
| - | 9121933 | 2251 days ago | 0.009575 ETH | ||||
| - | 9115385 | 2252 days ago | 0.002 ETH | ||||
| - | 9115385 | 2252 days ago | 0.00001388 ETH | ||||
| - | 9115385 | 2252 days ago | 0.0028725 ETH | ||||
| - | 9113726 | 2253 days ago | 0.002 ETH | ||||
| - | 9113726 | 2253 days ago | 0.0047875 ETH | ||||
| - | 9110377 | 2253 days ago | 0.002 ETH | ||||
| - | 9110377 | 2253 days ago | 0.00000138 ETH | ||||
| - | 9110377 | 2253 days ago | 0.0017235 ETH | ||||
| - | 9093538 | 2257 days ago | 0.002 ETH | ||||
| - | 9093538 | 2257 days ago | 0.00000231 ETH | ||||
| - | 9093538 | 2257 days ago | 0.00383 ETH | ||||
| - | 9093538 | 2257 days ago | 0.002 ETH | ||||
| - | 9093538 | 2257 days ago | 0.00000277 ETH | ||||
| - | 9093538 | 2257 days ago | 0.0028725 ETH | ||||
| - | 9087332 | 2258 days ago | 0.002 ETH | ||||
| - | 9087332 | 2258 days ago | 0.00383 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
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
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Net Worth in USD
$4,639.06
Net Worth in ETH
2.249475
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,062.29 | 2.2495 | $4,639.06 |
Loading...
Loading
Loading...
Loading
Loading...
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.