More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,120 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Settle Current A... | 21717967 | 45 hrs ago | IN | 0 ETH | 0.00192242 | ||||
Create Bid | 21714898 | 2 days ago | IN | 0.041 ETH | 0.00058097 | ||||
Create Bid | 21714339 | 2 days ago | IN | 0.039 ETH | 0.00070841 | ||||
Create Bid | 21714041 | 2 days ago | IN | 0.0368 ETH | 0.00046994 | ||||
Create Bid | 21713823 | 2 days ago | IN | 0.035 ETH | 0.00031491 | ||||
Create Bid | 21713179 | 2 days ago | IN | 0.0169 ETH | 0.00037816 | ||||
Create Bid | 21710542 | 2 days ago | IN | 0.001 ETH | 0.00071785 | ||||
Settle Current A... | 21693568 | 5 days ago | IN | 0 ETH | 0.00234047 | ||||
Create Bid | 21690962 | 5 days ago | IN | 0.032 ETH | 0.00046282 | ||||
Create Bid | 21690740 | 5 days ago | IN | 0.002 ETH | 0.0005211 | ||||
Create Bid | 21690155 | 5 days ago | IN | 0.0013 ETH | 0.00075477 | ||||
Create Bid | 21686813 | 6 days ago | IN | 0.00123 ETH | 0.00057169 | ||||
Settle Current A... | 21669978 | 8 days ago | IN | 0 ETH | 0.00169045 | ||||
Create Bid | 21662439 | 9 days ago | IN | 0.23 ETH | 0.00477869 | ||||
Create Bid | 21662399 | 9 days ago | IN | 0.21 ETH | 0.00499571 | ||||
Create Bid | 21662347 | 9 days ago | IN | 0.2 ETH | 0.00501595 | ||||
Create Bid | 21645715 | 11 days ago | IN | 0.069 ETH | 0.00134521 | ||||
Settle Current A... | 21640933 | 12 days ago | IN | 0 ETH | 0.00059379 | ||||
Create Bid | 21640852 | 12 days ago | IN | 0.3 ETH | 0.00027911 | ||||
Create Bid | 21640813 | 12 days ago | IN | 0.2625 ETH | 0.00027278 | ||||
Create Bid | 21640792 | 12 days ago | IN | 0.25 ETH | 0.00027851 | ||||
Create Bid | 21640786 | 12 days ago | IN | 0.16 ETH | 0.0002743 | ||||
Create Bid | 21640779 | 12 days ago | IN | 0.15 ETH | 0.0003203 | ||||
Create Bid | 21640771 | 12 days ago | IN | 0.12 ETH | 0.00031321 | ||||
Create Bid | 21640746 | 12 days ago | IN | 0.11 ETH | 0.00032292 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21717967 | 45 hrs ago | 0.041 ETH | ||||
21714898 | 2 days ago | 0.039 ETH | ||||
21714339 | 2 days ago | 0.0368 ETH | ||||
21714041 | 2 days ago | 0.035 ETH | ||||
21713823 | 2 days ago | 0.0169 ETH | ||||
21713179 | 2 days ago | 0.001 ETH | ||||
21693568 | 5 days ago | 0.032 ETH | ||||
21690962 | 5 days ago | 0.002 ETH | ||||
21690740 | 5 days ago | 0.0013 ETH | ||||
21690155 | 5 days ago | 0.00123 ETH | ||||
21669978 | 8 days ago | 0.23 ETH | ||||
21662439 | 9 days ago | 0.21 ETH | ||||
21662399 | 9 days ago | 0.2 ETH | ||||
21662347 | 9 days ago | 0.069 ETH | ||||
21640933 | 12 days ago | 0.3 ETH | ||||
21640852 | 12 days ago | 0.2625 ETH | ||||
21640813 | 12 days ago | 0.25 ETH | ||||
21640792 | 12 days ago | 0.16 ETH | ||||
21640786 | 12 days ago | 0.15 ETH | ||||
21640779 | 12 days ago | 0.12 ETH | ||||
21640771 | 12 days ago | 0.11 ETH | ||||
21640746 | 12 days ago | 0.06 ETH | ||||
21640673 | 12 days ago | 0.05 ETH | ||||
21619370 | 15 days ago | 0.052 ETH | ||||
21618943 | 15 days ago | 0.04 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PhunksAuctionHouse
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 /******************************** * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░██████████████████████░░░ * * ░░░██░░░░░░██░░░░░░████░░░░░ * * ░░░██░░░░░░██░░░░░░██░░░░░░░ * * ░░░██████████████████░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * ************************♥tt****/ // LICENSE // PhunksAuctionHouse.sol is a modified version of Zora's AuctionHouse.sol: // https://github.com/ourzora/auction-house/blob/54a12ec1a6cf562e49f0a4917990474b11350a2d/contracts/AuctionHouse.sol // AuctionHouse.sol source code Copyright Zora licensed under the GPL-3.0 license. // With modifications by Nounders DAO and ogkenobi.eth // Not affiliated with Not Larva Labs pragma solidity ^0.8.15; import { Pausable } from '@openzeppelin/contracts/security/Pausable.sol'; import { ReentrancyGuard } from '@openzeppelin/contracts/security/ReentrancyGuard.sol'; import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; import { IERC20 } from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; import { IPhunksAuctionHouse } from './interfaces/IPhunksAuctionHouse.sol'; import { IPhunksToken } from './interfaces/IPhunksToken.sol'; import { IWETH } from './interfaces/IWETH.sol'; contract PhunksAuctionHouse is IPhunksAuctionHouse, Pausable, ReentrancyGuard, Ownable { // The Phunks ERC721 token contract IPhunksToken public phunks; // The address of the WETH contract address public weth; // The minimum amount of time left in an auction after a new bid is created uint256 public timeBuffer; // The minimum price accepted in an auction uint256 public reservePrice; // The minimum percentage difference between the last bid amount and the current bid uint8 public minBidIncrementPercentage; // The duration of a single auction uint256 public duration; // The curren auction ID number uint256 public auctionId = 0; // The active auction IPhunksAuctionHouse.Auction public auction; // The Treasury wallet address public treasuryWallet; /** * @notice Initialize the auction house and base contracts, * populate configuration values, and pause the contract. * @dev This function can only be called once. */ function initialize( IPhunksToken _phunks, address _weth, uint256 _timeBuffer, uint256 _reservePrice, uint8 _minBidIncrementPercentage, uint256 _duration, address _treasuryWallet ) public onlyOwner { _pause(); phunks = _phunks; weth = _weth; timeBuffer = _timeBuffer; reservePrice = _reservePrice; minBidIncrementPercentage = _minBidIncrementPercentage; duration = _duration; treasuryWallet = _treasuryWallet; } /** * @notice Settle the current auction, mint a new Phunk, and put it up for auction. */ function settleCurrentAndCreateNewAuction() external override nonReentrant whenNotPaused { _settleAuction(); _createAuction(); } /** * @notice Settle the current auction. * @dev This function can only be called when the contract is paused. */ function settleAuction() external override whenPaused nonReentrant { _settleAuction(); } /** * @notice Create a bid for a Phunk, with a given amount. * @dev This contract only accepts payment in ETH. */ function createBid(uint phunkId) external payable override nonReentrant { IPhunksAuctionHouse.Auction memory _auction = auction; require(_auction.phunkId == phunkId, 'Phunk not up for auction'); require(block.timestamp < _auction.endTime, 'Auction expired'); require(msg.value >= reservePrice, 'Must send at least reservePrice'); require( msg.value >= _auction.amount + ((_auction.amount * minBidIncrementPercentage) / 100), 'Must send more than last bid by minBidIncrementPercentage amount' ); address payable lastBidder = _auction.bidder; // Refund the last bidder, if applicable if (lastBidder != address(0)) { _safeTransferETHWithFallback(lastBidder, _auction.amount); } auction.amount = msg.value; auction.bidder = payable(msg.sender); // Extend the auction if the bid was received within `timeBuffer` of the auction end time bool extended = _auction.endTime - block.timestamp < timeBuffer; if (extended) { auction.endTime = _auction.endTime = block.timestamp + timeBuffer; } emit AuctionBid(_auction.phunkId, auctionId, msg.sender, msg.value, extended); if (extended) { emit AuctionExtended(_auction.phunkId, auctionId, _auction.endTime); } } /** * @notice Pause the Phunks auction house. * @dev This function can only be called by the owner when the * contract is unpaused. While no new auctions can be started when paused, * anyone can settle an ongoing auction. */ function pause() external override onlyOwner { _pause(); } /** * @notice Unpause the Phunks auction house. * @dev This function can only be called by the owner when the * contract is paused. If required, this function will start a new auction. */ function unpause() external override onlyOwner { _unpause(); if (auction.startTime == 0 || auction.settled) { _createAuction(); } } /** * @notice Set the treausury wallet address. * @dev Only callable by the owner. */ function setTreasuryWallet(address _treasuryWallet) public onlyOwner { treasuryWallet = _treasuryWallet; } /** * @notice Set the duration of an auction * @dev Only callable by the owner. */ function setDuration(uint256 _duration) external override onlyOwner { duration = _duration; emit AuctionDurationUpdated(_duration); } /** * @notice Set the auction time buffer. * @dev Only callable by the owner. */ function setTimeBuffer(uint256 _timeBuffer) external override onlyOwner { timeBuffer = _timeBuffer; emit AuctionTimeBufferUpdated(_timeBuffer); } /** * @notice Set the auction reserve price. * @dev Only callable by the owner. */ function setReservePrice(uint256 _reservePrice) external override onlyOwner { reservePrice = _reservePrice; emit AuctionReservePriceUpdated(_reservePrice); } /** * @notice Set the auction minimum bid increment percentage. * @dev Only callable by the owner. */ function setMinBidIncrementPercentage(uint8 _minBidIncrementPercentage) external override onlyOwner { minBidIncrementPercentage = _minBidIncrementPercentage; emit AuctionMinBidIncrementPercentageUpdated(_minBidIncrementPercentage); } /** * @notice Generates a big random number on the cheap. * */ function _getRand() internal view returns(uint256) { uint256 randNum = uint256(keccak256(abi.encodePacked(block.timestamp + block.difficulty + ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) + block.number))); return randNum; } /** * @notice Create an auction. * @dev Store the auction details in the `auction` state variable and emit an AuctionCreated event. * If the mint reverts, the minter was updated without pausing this contract first. To remedy this, * catch the revert and pause this contract. */ function _createAuction() internal { uint treasuryBalance = phunks.balanceOf(treasuryWallet); require(treasuryBalance > 0, "No Phunks available for auction."); uint randomIndex = _getRand() % treasuryBalance; uint phunkId = phunks.tokenOfOwnerByIndex(treasuryWallet, randomIndex); //removes 7-trait phunk from random selection if (phunkId == 8348) { require(treasuryBalance > 1, "No Phunks available for auction."); uint nextIndex = (randomIndex + 1) % treasuryBalance; phunkId = phunks.tokenOfOwnerByIndex(treasuryWallet, nextIndex); } uint256 startTime = block.timestamp; uint256 endTime = startTime + duration; auctionId++; auction = Auction({ phunkId: phunkId, amount: 0, startTime: startTime, endTime: endTime, bidder: payable(0), settled: false, auctionId: auctionId }); emit AuctionCreated(phunkId, auctionId, startTime, endTime); } /** * @notice Create an speacial auction for specific phunkID * @dev Store the auction details in the `auction` state variable and emit an AuctionCreated event. * If the mint reverts, the minter was updated without pausing this contract first. To remedy this, * catch the revert and pause this contract. */ function createSpecialAuction(uint _phunkId, uint256 _endTime) public onlyOwner { require(phunks.balanceOf(treasuryWallet) > 0, "No Phunks available for auction."); require(phunks.ownerOf(_phunkId) == treasuryWallet, "Phunk does not exist in treasury wallet"); uint phunkId = _phunkId; uint256 startTime = block.timestamp; uint256 endTime = _endTime; auctionId++; auction = Auction({ phunkId: phunkId, amount: 0, startTime: startTime, endTime: endTime, bidder: payable(0), settled: false, auctionId: auctionId }); emit AuctionCreated(phunkId, auctionId, startTime, endTime); } /** * @notice Settle an auction, finalizing the bid and paying out to the owner. * @dev If there are no bids, the Phunk is burned. */ function _settleAuction() internal { IPhunksAuctionHouse.Auction memory _auction = auction; require(_auction.startTime != 0, "Auction hasn't begun"); require(!_auction.settled, 'Auction has already been settled'); require(block.timestamp >= _auction.endTime, "Auction hasn't completed"); auction.settled = true; if (_auction.bidder != address(0)) { phunks.transferFrom(address(treasuryWallet), _auction.bidder, _auction.phunkId); } if (_auction.amount > 0) { _safeTransferETHWithFallback(treasuryWallet, _auction.amount); } emit AuctionSettled(_auction.phunkId, auctionId, _auction.bidder, _auction.amount); } /** * @notice Transfer ETH. If the ETH transfer fails, wrap the ETH and try send it as WETH. */ function _safeTransferETHWithFallback(address to, uint256 amount) internal { if (!_safeTransferETH(to, amount)) { IWETH(weth).deposit{ value: amount }(); IERC20(weth).transfer(to, amount); } } /** * @notice Transfer ETH and return the success status. * @dev This function only forwards 30,000 gas to the callee. */ function _safeTransferETH(address to, uint256 value) internal returns (bool) { (bool success, ) = to.call{ value: value, gas: 30_000 }(new bytes(0)); return success; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: GPL-3.0 /******************************** * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░██████████████████████░░░ * * ░░░██░░░░░░██░░░░░░████░░░░░ * * ░░░██░░░░░░██░░░░░░██░░░░░░░ * * ░░░██████████████████░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * ************************♥tt****/ pragma solidity ^0.8.15; interface IPhunksAuctionHouse { struct Auction { // ID for the Phunk (ERC721 token ID) uint phunkId; // The current highest bid amount uint256 amount; // The time that the auction started uint256 startTime; // The time that the auction is scheduled to end uint256 endTime; // The address of the current highest bid address payable bidder; // Whether or not the auction has been settled bool settled; // Auction ID number uint256 auctionId; } event AuctionCreated(uint indexed phunkId, uint256 auctionId, uint256 startTime, uint256 endTime); event AuctionBid(uint indexed phunkId, uint256 auctionId, address sender, uint256 value, bool extended); event AuctionExtended(uint indexed phunkId, uint256 auctionId, uint256 endTime); event AuctionSettled(uint indexed phunkId, uint256 auctionId, address winner, uint256 amount); event AuctionTimeBufferUpdated(uint256 timeBuffer); event AuctionDurationUpdated(uint256 duration); event AuctionReservePriceUpdated(uint256 reservePrice); event AuctionMinBidIncrementPercentageUpdated(uint256 minBidIncrementPercentage); function settleAuction() external; function settleCurrentAndCreateNewAuction() external; function createBid(uint phunkId) external payable; function pause() external; function unpause() external; function setTimeBuffer(uint256 timeBuffer) external; function setDuration(uint256 duration) external; function setReservePrice(uint256 reservePrice) external; function setMinBidIncrementPercentage(uint8 minBidIncrementPercentage) external; }
// SPDX-License-Identifier: GPL-3.0 /******************************** * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░██████████████████████░░░ * * ░░░██░░░░░░██░░░░░░████░░░░░ * * ░░░██░░░░░░██░░░░░░██░░░░░░░ * * ░░░██████████████████░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * ************************♥tt****/ pragma solidity ^0.8.15; import { IERC721 } from '@openzeppelin/contracts/token/ERC721/IERC721.sol'; interface IPhunksToken is IERC721 { function getPhunksBelongingToOwner(address _owner) external view returns (uint256[] memory); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.15; interface IWETH { function deposit() external payable; function withdraw(uint256 wad) external; function transfer(address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"phunkId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bool","name":"extended","type":"bool"}],"name":"AuctionBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"phunkId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"AuctionDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"phunkId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"AuctionExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minBidIncrementPercentage","type":"uint256"}],"name":"AuctionMinBidIncrementPercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reservePrice","type":"uint256"}],"name":"AuctionReservePriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"phunkId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AuctionSettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timeBuffer","type":"uint256"}],"name":"AuctionTimeBufferUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"auction","outputs":[{"internalType":"uint256","name":"phunkId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"bool","name":"settled","type":"bool"},{"internalType":"uint256","name":"auctionId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auctionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"phunkId","type":"uint256"}],"name":"createBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phunkId","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"createSpecialAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPhunksToken","name":"_phunks","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_timeBuffer","type":"uint256"},{"internalType":"uint256","name":"_reservePrice","type":"uint256"},{"internalType":"uint8","name":"_minBidIncrementPercentage","type":"uint8"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minBidIncrementPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phunks","outputs":[{"internalType":"contract IPhunksToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_minBidIncrementPercentage","type":"uint8"}],"name":"setMinBidIncrementPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reservePrice","type":"uint256"}],"name":"setReservePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeBuffer","type":"uint256"}],"name":"setTimeBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settleAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settleCurrentAndCreateNewAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600060095534801561001557600080fd5b506000805460ff191690556001805561002d33610032565b610084565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611a13806100936000396000f3fe6080604052600436106101665760003560e01c80638456cb59116100d1578063c761a5311161008a578063ec91f2a411610064578063ec91f2a41461044f578063f25efffc14610465578063f2fde38b1461047a578063f6be71d11461049a57600080fd5b8063c761a531146103f9578063ce9c7c0d14610419578063db2e1eed1461043957600080fd5b80638456cb59146103455780638da5cb5b1461035a578063a3dc281814610378578063a4d0a17e14610398578063a8602fea146103ad578063b296024d146103cd57600080fd5b80635c975abb116101235780635c975abb14610239578063659dd2b41461025c5780637120334b1461026f578063715018a61461028f5780637bc86bf3146102a45780637d9f6db5146102c457600080fd5b80630fb5a6b41461016b57806310782f8f1461019457806336ebdb38146101aa5780633f4ba83a146101cc5780633fc8cef3146101e15780634626402b14610219575b600080fd5b34801561017757600080fd5b5061018160085481565b6040519081526020015b60405180910390f35b3480156101a057600080fd5b5061018160095481565b3480156101b657600080fd5b506101ca6101c53660046116e6565b6104ba565b005b3480156101d857600080fd5b506101ca610536565b3480156101ed57600080fd5b50600454610201906001600160a01b031681565b6040516001600160a01b03909116815260200161018b565b34801561022557600080fd5b50601054610201906001600160a01b031681565b34801561024557600080fd5b5060005460ff16604051901515815260200161018b565b6101ca61026a366004611708565b61058f565b34801561027b57600080fd5b506101ca61028a366004611708565b6108af565b34801561029b57600080fd5b506101ca61090e565b3480156102b057600080fd5b506101ca6102bf366004611721565b610942565b3480156102d057600080fd5b50600a54600b54600c54600d54600e54600f5461030595949392916001600160a01b03811691600160a01b90910460ff169087565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03166080840152151560a083015260c082015260e00161018b565b34801561035157600080fd5b506101ca610b9e565b34801561036657600080fd5b506002546001600160a01b0316610201565b34801561038457600080fd5b506101ca610393366004611758565b610bd0565b3480156103a457600080fd5b506101ca610c65565b3480156103b957600080fd5b506101ca6103c83660046117d1565b610ce3565b3480156103d957600080fd5b506007546103e79060ff1681565b60405160ff909116815260200161018b565b34801561040557600080fd5b50600354610201906001600160a01b031681565b34801561042557600080fd5b506101ca610434366004611708565b610d2f565b34801561044557600080fd5b5061018160065481565b34801561045b57600080fd5b5061018160055481565b34801561047157600080fd5b506101ca610d8e565b34801561048657600080fd5b506101ca6104953660046117d1565b610e0b565b3480156104a657600080fd5b506101ca6104b5366004611708565b610ea6565b6002546001600160a01b031633146104ed5760405162461bcd60e51b81526004016104e4906117ee565b60405180910390fd5b6007805460ff191660ff83169081179091556040519081527fec5ccd96cc77b6219e9d44143df916af68fc169339ea7de5008ff15eae13450d906020015b60405180910390a150565b6002546001600160a01b031633146105605760405162461bcd60e51b81526004016104e4906117ee565b610568610f05565b600c5415806105805750600e54600160a01b900460ff165b1561058d5761058d610f98565b565b6002600154036105b15760405162461bcd60e51b81526004016104e490611823565b60026001556040805160e081018252600a54808252600b546020830152600c5492820192909252600d546060820152600e546001600160a01b0381166080830152600160a01b900460ff16151560a0820152600f5460c082015290821461065a5760405162461bcd60e51b815260206004820152601860248201527f5068756e6b206e6f7420757020666f722061756374696f6e000000000000000060448201526064016104e4565b8060600151421061069f5760405162461bcd60e51b815260206004820152600f60248201526e105d58dd1a5bdb88195e1c1a5c9959608a1b60448201526064016104e4565b6006543410156106f15760405162461bcd60e51b815260206004820152601f60248201527f4d7573742073656e64206174206c65617374207265736572766550726963650060448201526064016104e4565b600754602082015160649161070b9160ff90911690611870565b61071591906118a5565b816020015161072491906118b9565b34101561079b576040805162461bcd60e51b81526020600482015260248101919091527f4d7573742073656e64206d6f7265207468616e206c617374206269642062792060448201527f6d696e426964496e6372656d656e7450657263656e7461676520616d6f756e7460648201526084016104e4565b60808101516001600160a01b038116156107bd576107bd8183602001516111a5565b34600b55600e80546001600160a01b031916331790556005546060830151600091906107ea9042906118d1565b109050801561080b5760055461080090426118b9565b60608401819052600d555b82516009546040805191825233602083015234828201528315156060830152517f886006522303045b0c17b0633eea996eefd70e9b660ad0dfd4344e1b7f63cac79181900360800190a280156108a557825160095460608501516040517f5aa381c998833b1dd4263e146e2e5e8098b463f9f975bb0f9c6d167c0d44a3239261089c92908252602082015260400190565b60405180910390a25b5050600180555050565b6002546001600160a01b031633146108d95760405162461bcd60e51b81526004016104e4906117ee565b60058190556040518181527f1b55d9f7002bda4490f467e326f22a4a847629c0f2d1ed421607d318d25b410d9060200161052b565b6002546001600160a01b031633146109385760405162461bcd60e51b81526004016104e4906117ee565b61058d6000611291565b6002546001600160a01b0316331461096c5760405162461bcd60e51b81526004016104e4906117ee565b6003546010546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e191906118e8565b116109fe5760405162461bcd60e51b81526004016104e490611901565b6010546003546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a729190611936565b6001600160a01b031614610ad85760405162461bcd60e51b815260206004820152602760248201527f5068756e6b20646f6573206e6f7420657869737420696e207472656173757279604482015266081dd85b1b195d60ca1b60648201526084016104e4565b600980548391429184916000610aed83611953565b90915550506040805160e0810182528481526000602080830182905282840186905260608084018690526080840183905260a0840183905260095460c0909401849052600a889055600b92909255600c869055600d859055600e80546001600160a81b0319169055600f8390558351928352820185905291810183905284917fa9c8dfcda5664a5a124c713e386da27de87432d5b668e79458501eb296389ba7910160405180910390a25050505050565b6002546001600160a01b03163314610bc85760405162461bcd60e51b81526004016104e4906117ee565b61058d6112e3565b6002546001600160a01b03163314610bfa5760405162461bcd60e51b81526004016104e4906117ee565b610c026112e3565b600380546001600160a01b039889166001600160a01b03199182161790915560048054978916978216979097179096556005949094556006929092556007805460ff90921660ff1990921691909117905560085560108054919093169116179055565b60005460ff16610cae5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104e4565b600260015403610cd05760405162461bcd60e51b81526004016104e490611823565b6002600155610cdd61135e565b60018055565b6002546001600160a01b03163314610d0d5760405162461bcd60e51b81526004016104e4906117ee565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610d595760405162461bcd60e51b81526004016104e4906117ee565b60068190556040518181527f6ab2e127d7fdf53b8f304e59d3aab5bfe97979f52a85479691a6fab27a28a6b29060200161052b565b600260015403610db05760405162461bcd60e51b81526004016104e490611823565b600260015560005460ff1615610dfb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104e4565b610e0361135e565b610cdd610f98565b6002546001600160a01b03163314610e355760405162461bcd60e51b81526004016104e4906117ee565b6001600160a01b038116610e9a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e4565b610ea381611291565b50565b6002546001600160a01b03163314610ed05760405162461bcd60e51b81526004016104e4906117ee565b60088190556040518181527faab6389d8f1c16ba1deb6e9831f5c5442cf4fcf99bf5bfa867460be408a911189060200161052b565b60005460ff16610f4e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104e4565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546010546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d91906118e8565b90506000811161102f5760405162461bcd60e51b81526004016104e490611901565b60008161103a6115ba565b611044919061196c565b600354601054604051632f745c5960e01b81526001600160a01b03918216600482015260248101849052929350600092911690632f745c5990604401602060405180830381865afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c191906118e8565b90508061209c0361118157600183116110ec5760405162461bcd60e51b81526004016104e490611901565b6000836110fa8460016118b9565b611104919061196c565b600354601054604051632f745c5960e01b81526001600160a01b039182166004820152602481018490529293501690632f745c5990604401602060405180830381865afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d91906118e8565b9150505b600854429060009061119390836118b9565b600980549192506000610aed83611953565b6111af8282611652565b61128d576004805460408051630d0e30db60e41b815290516001600160a01b039092169263d0e30db0928592808301926000929182900301818588803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b50506004805460405163a9059cbb60e01b81526001600160a01b0388811693820193909352602481018790529116935063a9059cbb925060440190506020604051808303816000875af1158015611267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128b9190611980565b505b5050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005460ff16156113295760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104e4565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f7b3390565b6040805160e081018252600a548152600b546020820152600c54918101829052600d546060820152600e546001600160a01b0381166080830152600160a01b900460ff16151560a0820152600f5460c0820152906000036113f85760405162461bcd60e51b815260206004820152601460248201527320bab1ba34b7b7103430b9b713ba103132b3bab760611b60448201526064016104e4565b8060a001511561144a5760405162461bcd60e51b815260206004820181905260248201527f41756374696f6e2068617320616c7265616479206265656e20736574746c656460448201526064016104e4565b806060015142101561149e5760405162461bcd60e51b815260206004820152601860248201527f41756374696f6e206861736e277420636f6d706c65746564000000000000000060448201526064016104e4565b600e805460ff60a01b1916600160a01b17905560808101516001600160a01b03161561153a57600354601054608083015183516040516323b872dd60e01b81526001600160a01b039384166004820152918316602483015260448201529116906323b872dd90606401600060405180830381600087803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b505050505b60208101511561155f57601054602082015161155f916001600160a01b0316906111a5565b80516009546080830151602080850151604080519485526001600160a01b039093169184019190915282820152517fa3f81c0e157dc1e05cb31e254314bbde8e3878d9ff78b10ef6abfe316492bfbe9181900360600190a250565b6040516bffffffffffffffffffffffff193360601b1660208201526000908190439042906034016040516020818303038152906040528051906020012060001c61160491906118a5565b61160e44426118b9565b61161891906118b9565b61162291906118b9565b60405160200161163491815260200190565b60408051601f19818403018152919052805160209091012092915050565b6040805160008082526020820190925281906001600160a01b0385169061753090859060405161168291906119a2565b600060405180830381858888f193505050503d80600081146116c0576040519150601f19603f3d011682016040523d82523d6000602084013e6116c5565b606091505b509095945050505050565b803560ff811681146116e157600080fd5b919050565b6000602082840312156116f857600080fd5b611701826116d0565b9392505050565b60006020828403121561171a57600080fd5b5035919050565b6000806040838503121561173457600080fd5b50508035926020909101359150565b6001600160a01b0381168114610ea357600080fd5b600080600080600080600060e0888a03121561177357600080fd5b873561177e81611743565b9650602088013561178e81611743565b955060408801359450606088013593506117aa608089016116d0565b925060a0880135915060c08801356117c181611743565b8091505092959891949750929550565b6000602082840312156117e357600080fd5b813561170181611743565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561188a5761188a61185a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826118b4576118b461188f565b500490565b600082198211156118cc576118cc61185a565b500190565b6000828210156118e3576118e361185a565b500390565b6000602082840312156118fa57600080fd5b5051919050565b6020808252818101527f4e6f205068756e6b7320617661696c61626c6520666f722061756374696f6e2e604082015260600190565b60006020828403121561194857600080fd5b815161170181611743565b6000600182016119655761196561185a565b5060010190565b60008261197b5761197b61188f565b500690565b60006020828403121561199257600080fd5b8151801515811461170157600080fd5b6000825160005b818110156119c357602081860181015185830152016119a9565b818111156119d2576000828501525b50919091019291505056fea264697066735822122070b4f16853006e76394a322467c805dfdaa1219d2f701dde1fa0df2df6750eaa64736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106101665760003560e01c80638456cb59116100d1578063c761a5311161008a578063ec91f2a411610064578063ec91f2a41461044f578063f25efffc14610465578063f2fde38b1461047a578063f6be71d11461049a57600080fd5b8063c761a531146103f9578063ce9c7c0d14610419578063db2e1eed1461043957600080fd5b80638456cb59146103455780638da5cb5b1461035a578063a3dc281814610378578063a4d0a17e14610398578063a8602fea146103ad578063b296024d146103cd57600080fd5b80635c975abb116101235780635c975abb14610239578063659dd2b41461025c5780637120334b1461026f578063715018a61461028f5780637bc86bf3146102a45780637d9f6db5146102c457600080fd5b80630fb5a6b41461016b57806310782f8f1461019457806336ebdb38146101aa5780633f4ba83a146101cc5780633fc8cef3146101e15780634626402b14610219575b600080fd5b34801561017757600080fd5b5061018160085481565b6040519081526020015b60405180910390f35b3480156101a057600080fd5b5061018160095481565b3480156101b657600080fd5b506101ca6101c53660046116e6565b6104ba565b005b3480156101d857600080fd5b506101ca610536565b3480156101ed57600080fd5b50600454610201906001600160a01b031681565b6040516001600160a01b03909116815260200161018b565b34801561022557600080fd5b50601054610201906001600160a01b031681565b34801561024557600080fd5b5060005460ff16604051901515815260200161018b565b6101ca61026a366004611708565b61058f565b34801561027b57600080fd5b506101ca61028a366004611708565b6108af565b34801561029b57600080fd5b506101ca61090e565b3480156102b057600080fd5b506101ca6102bf366004611721565b610942565b3480156102d057600080fd5b50600a54600b54600c54600d54600e54600f5461030595949392916001600160a01b03811691600160a01b90910460ff169087565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03166080840152151560a083015260c082015260e00161018b565b34801561035157600080fd5b506101ca610b9e565b34801561036657600080fd5b506002546001600160a01b0316610201565b34801561038457600080fd5b506101ca610393366004611758565b610bd0565b3480156103a457600080fd5b506101ca610c65565b3480156103b957600080fd5b506101ca6103c83660046117d1565b610ce3565b3480156103d957600080fd5b506007546103e79060ff1681565b60405160ff909116815260200161018b565b34801561040557600080fd5b50600354610201906001600160a01b031681565b34801561042557600080fd5b506101ca610434366004611708565b610d2f565b34801561044557600080fd5b5061018160065481565b34801561045b57600080fd5b5061018160055481565b34801561047157600080fd5b506101ca610d8e565b34801561048657600080fd5b506101ca6104953660046117d1565b610e0b565b3480156104a657600080fd5b506101ca6104b5366004611708565b610ea6565b6002546001600160a01b031633146104ed5760405162461bcd60e51b81526004016104e4906117ee565b60405180910390fd5b6007805460ff191660ff83169081179091556040519081527fec5ccd96cc77b6219e9d44143df916af68fc169339ea7de5008ff15eae13450d906020015b60405180910390a150565b6002546001600160a01b031633146105605760405162461bcd60e51b81526004016104e4906117ee565b610568610f05565b600c5415806105805750600e54600160a01b900460ff165b1561058d5761058d610f98565b565b6002600154036105b15760405162461bcd60e51b81526004016104e490611823565b60026001556040805160e081018252600a54808252600b546020830152600c5492820192909252600d546060820152600e546001600160a01b0381166080830152600160a01b900460ff16151560a0820152600f5460c082015290821461065a5760405162461bcd60e51b815260206004820152601860248201527f5068756e6b206e6f7420757020666f722061756374696f6e000000000000000060448201526064016104e4565b8060600151421061069f5760405162461bcd60e51b815260206004820152600f60248201526e105d58dd1a5bdb88195e1c1a5c9959608a1b60448201526064016104e4565b6006543410156106f15760405162461bcd60e51b815260206004820152601f60248201527f4d7573742073656e64206174206c65617374207265736572766550726963650060448201526064016104e4565b600754602082015160649161070b9160ff90911690611870565b61071591906118a5565b816020015161072491906118b9565b34101561079b576040805162461bcd60e51b81526020600482015260248101919091527f4d7573742073656e64206d6f7265207468616e206c617374206269642062792060448201527f6d696e426964496e6372656d656e7450657263656e7461676520616d6f756e7460648201526084016104e4565b60808101516001600160a01b038116156107bd576107bd8183602001516111a5565b34600b55600e80546001600160a01b031916331790556005546060830151600091906107ea9042906118d1565b109050801561080b5760055461080090426118b9565b60608401819052600d555b82516009546040805191825233602083015234828201528315156060830152517f886006522303045b0c17b0633eea996eefd70e9b660ad0dfd4344e1b7f63cac79181900360800190a280156108a557825160095460608501516040517f5aa381c998833b1dd4263e146e2e5e8098b463f9f975bb0f9c6d167c0d44a3239261089c92908252602082015260400190565b60405180910390a25b5050600180555050565b6002546001600160a01b031633146108d95760405162461bcd60e51b81526004016104e4906117ee565b60058190556040518181527f1b55d9f7002bda4490f467e326f22a4a847629c0f2d1ed421607d318d25b410d9060200161052b565b6002546001600160a01b031633146109385760405162461bcd60e51b81526004016104e4906117ee565b61058d6000611291565b6002546001600160a01b0316331461096c5760405162461bcd60e51b81526004016104e4906117ee565b6003546010546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e191906118e8565b116109fe5760405162461bcd60e51b81526004016104e490611901565b6010546003546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a729190611936565b6001600160a01b031614610ad85760405162461bcd60e51b815260206004820152602760248201527f5068756e6b20646f6573206e6f7420657869737420696e207472656173757279604482015266081dd85b1b195d60ca1b60648201526084016104e4565b600980548391429184916000610aed83611953565b90915550506040805160e0810182528481526000602080830182905282840186905260608084018690526080840183905260a0840183905260095460c0909401849052600a889055600b92909255600c869055600d859055600e80546001600160a81b0319169055600f8390558351928352820185905291810183905284917fa9c8dfcda5664a5a124c713e386da27de87432d5b668e79458501eb296389ba7910160405180910390a25050505050565b6002546001600160a01b03163314610bc85760405162461bcd60e51b81526004016104e4906117ee565b61058d6112e3565b6002546001600160a01b03163314610bfa5760405162461bcd60e51b81526004016104e4906117ee565b610c026112e3565b600380546001600160a01b039889166001600160a01b03199182161790915560048054978916978216979097179096556005949094556006929092556007805460ff90921660ff1990921691909117905560085560108054919093169116179055565b60005460ff16610cae5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104e4565b600260015403610cd05760405162461bcd60e51b81526004016104e490611823565b6002600155610cdd61135e565b60018055565b6002546001600160a01b03163314610d0d5760405162461bcd60e51b81526004016104e4906117ee565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610d595760405162461bcd60e51b81526004016104e4906117ee565b60068190556040518181527f6ab2e127d7fdf53b8f304e59d3aab5bfe97979f52a85479691a6fab27a28a6b29060200161052b565b600260015403610db05760405162461bcd60e51b81526004016104e490611823565b600260015560005460ff1615610dfb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104e4565b610e0361135e565b610cdd610f98565b6002546001600160a01b03163314610e355760405162461bcd60e51b81526004016104e4906117ee565b6001600160a01b038116610e9a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e4565b610ea381611291565b50565b6002546001600160a01b03163314610ed05760405162461bcd60e51b81526004016104e4906117ee565b60088190556040518181527faab6389d8f1c16ba1deb6e9831f5c5442cf4fcf99bf5bfa867460be408a911189060200161052b565b60005460ff16610f4e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104e4565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546010546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d91906118e8565b90506000811161102f5760405162461bcd60e51b81526004016104e490611901565b60008161103a6115ba565b611044919061196c565b600354601054604051632f745c5960e01b81526001600160a01b03918216600482015260248101849052929350600092911690632f745c5990604401602060405180830381865afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c191906118e8565b90508061209c0361118157600183116110ec5760405162461bcd60e51b81526004016104e490611901565b6000836110fa8460016118b9565b611104919061196c565b600354601054604051632f745c5960e01b81526001600160a01b039182166004820152602481018490529293501690632f745c5990604401602060405180830381865afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d91906118e8565b9150505b600854429060009061119390836118b9565b600980549192506000610aed83611953565b6111af8282611652565b61128d576004805460408051630d0e30db60e41b815290516001600160a01b039092169263d0e30db0928592808301926000929182900301818588803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b50506004805460405163a9059cbb60e01b81526001600160a01b0388811693820193909352602481018790529116935063a9059cbb925060440190506020604051808303816000875af1158015611267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128b9190611980565b505b5050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005460ff16156113295760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104e4565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f7b3390565b6040805160e081018252600a548152600b546020820152600c54918101829052600d546060820152600e546001600160a01b0381166080830152600160a01b900460ff16151560a0820152600f5460c0820152906000036113f85760405162461bcd60e51b815260206004820152601460248201527320bab1ba34b7b7103430b9b713ba103132b3bab760611b60448201526064016104e4565b8060a001511561144a5760405162461bcd60e51b815260206004820181905260248201527f41756374696f6e2068617320616c7265616479206265656e20736574746c656460448201526064016104e4565b806060015142101561149e5760405162461bcd60e51b815260206004820152601860248201527f41756374696f6e206861736e277420636f6d706c65746564000000000000000060448201526064016104e4565b600e805460ff60a01b1916600160a01b17905560808101516001600160a01b03161561153a57600354601054608083015183516040516323b872dd60e01b81526001600160a01b039384166004820152918316602483015260448201529116906323b872dd90606401600060405180830381600087803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b505050505b60208101511561155f57601054602082015161155f916001600160a01b0316906111a5565b80516009546080830151602080850151604080519485526001600160a01b039093169184019190915282820152517fa3f81c0e157dc1e05cb31e254314bbde8e3878d9ff78b10ef6abfe316492bfbe9181900360600190a250565b6040516bffffffffffffffffffffffff193360601b1660208201526000908190439042906034016040516020818303038152906040528051906020012060001c61160491906118a5565b61160e44426118b9565b61161891906118b9565b61162291906118b9565b60405160200161163491815260200190565b60408051601f19818403018152919052805160209091012092915050565b6040805160008082526020820190925281906001600160a01b0385169061753090859060405161168291906119a2565b600060405180830381858888f193505050503d80600081146116c0576040519150601f19603f3d011682016040523d82523d6000602084013e6116c5565b606091505b509095945050505050565b803560ff811681146116e157600080fd5b919050565b6000602082840312156116f857600080fd5b611701826116d0565b9392505050565b60006020828403121561171a57600080fd5b5035919050565b6000806040838503121561173457600080fd5b50508035926020909101359150565b6001600160a01b0381168114610ea357600080fd5b600080600080600080600060e0888a03121561177357600080fd5b873561177e81611743565b9650602088013561178e81611743565b955060408801359450606088013593506117aa608089016116d0565b925060a0880135915060c08801356117c181611743565b8091505092959891949750929550565b6000602082840312156117e357600080fd5b813561170181611743565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561188a5761188a61185a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826118b4576118b461188f565b500490565b600082198211156118cc576118cc61185a565b500190565b6000828210156118e3576118e361185a565b500390565b6000602082840312156118fa57600080fd5b5051919050565b6020808252818101527f4e6f205068756e6b7320617661696c61626c6520666f722061756374696f6e2e604082015260600190565b60006020828403121561194857600080fd5b815161170181611743565b6000600182016119655761196561185a565b5060010190565b60008261197b5761197b61188f565b500690565b60006020828403121561199257600080fd5b8151801515811461170157600080fd5b6000825160005b818110156119c357602081860181015185830152016119a9565b818111156119d2576000828501525b50919091019291505056fea264697066735822122070b4f16853006e76394a322467c805dfdaa1219d2f701dde1fa0df2df6750eaa64736f6c634300080f0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.