ETH Price: $1,979.75 (-5.00%)

Contract

0x9bEE1E2A82eAeFa9C03F89e5c0F26662505086f7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

ContractCreator

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Settle239639692025-12-07 22:35:4789 days ago1765146947IN
0x9bEE1E2A...2505086f7
0 ETH0.000002230.09550013
Settle239639682025-12-07 22:35:3589 days ago1765146935IN
0x9bEE1E2A...2505086f7
0 ETH0.000149272.09244396
Bid239636602025-12-07 21:33:1189 days ago1765143191IN
0x9bEE1E2A...2505086f7
0 ETH0.000127852.55690309
Bid239635812025-12-07 21:16:5989 days ago1765142219IN
0x9bEE1E2A...2505086f7
27.81272064 ETH0.000100352.47262509
Bid239635192025-12-07 21:04:2389 days ago1765141463IN
0x9bEE1E2A...2505086f7
0 ETH0.000119972.39940534
Bid239633672025-12-07 20:33:4789 days ago1765139627IN
0x9bEE1E2A...2505086f7
22.98571954 ETH0.000099362.44822309
Bid239632762025-12-07 20:15:2389 days ago1765138523IN
0x9bEE1E2A...2505086f7
0 ETH0.000122362.44706301
Bid239631002025-12-07 19:39:4789 days ago1765136387IN
0x9bEE1E2A...2505086f7
18.99646243 ETH0.000101352.49732502
Bid239630072025-12-07 19:20:4789 days ago1765135247IN
0x9bEE1E2A...2505086f7
0 ETH0.000117112.34225621
Bid239628342025-12-07 18:46:1189 days ago1765133171IN
0x9bEE1E2A...2505086f7
15.69955572 ETH0.000095022.34123515
Bid239628132025-12-07 18:41:5989 days ago1765132919IN
0x9bEE1E2A...2505086f7
0 ETH0.000118412.36822446
Bid239625652025-12-07 17:51:4789 days ago1765129907IN
0x9bEE1E2A...2505086f7
12.97483944 ETH0.000097852.41109247
Bid239625552025-12-07 17:49:4789 days ago1765129787IN
0x9bEE1E2A...2505086f7
0 ETH0.000084032.40292828
Bid239625552025-12-07 17:49:4789 days ago1765129787IN
0x9bEE1E2A...2505086f7
0 ETH0.000120152.40292828
Bid239623242025-12-07 17:03:1189 days ago1765126991IN
0x9bEE1E2A...2505086f7
9.74818891 ETH0.00012072.41338387
Bid239622782025-12-07 16:53:5989 days ago1765126439IN
0x9bEE1E2A...2505086f7
8.86198992 ETH0.000120372.40663032
Bid239621422025-12-07 16:26:3589 days ago1765124795IN
0x9bEE1E2A...2505086f7
8.05635447 ETH0.000097592.40457106
Bid239621222025-12-07 16:22:3589 days ago1765124555IN
0x9bEE1E2A...2505086f7
0 ETH0.000122612.45206064
Bid239620882025-12-07 16:15:4789 days ago1765124147IN
0x9bEE1E2A...2505086f7
6.65814419 ETH0.000096892.38745248
Bid239620782025-12-07 16:13:4789 days ago1765124027IN
0x9bEE1E2A...2505086f7
0 ETH0.00012082.4160232
Bid239620572025-12-07 16:09:3589 days ago1765123775IN
0x9bEE1E2A...2505086f7
5.5025985 ETH0.00012142.42740398
Bid239616282025-12-07 14:43:3589 days ago1765118615IN
0x9bEE1E2A...2505086f7
5.00236227 ETH0.000024030.45091337
Bid239578952025-12-07 2:10:3590 days ago1765073435IN
0x9bEE1E2A...2505086f7
4.54760207 ETH0.000228985
Bid239575992025-12-07 1:10:2390 days ago1765069823IN
0x9bEE1E2A...2505086f7
4.1341837 ETH0.000097872.13730172
Bid239575942025-12-07 1:09:2390 days ago1765069763IN
0x9bEE1E2A...2505086f7
3.75834881 ETH0.000097792.13544905
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer239636602025-12-07 21:33:1189 days ago1765143191
0x9bEE1E2A...2505086f7
27.81272064 ETH
Transfer239635192025-12-07 21:04:2389 days ago1765141463
0x9bEE1E2A...2505086f7
22.98571954 ETH
Transfer239632762025-12-07 20:15:2389 days ago1765138523
0x9bEE1E2A...2505086f7
18.99646243 ETH
Transfer239630072025-12-07 19:20:4789 days ago1765135247
0x9bEE1E2A...2505086f7
15.69955572 ETH
Transfer239628132025-12-07 18:41:5989 days ago1765132919
0x9bEE1E2A...2505086f7
12.97483944 ETH
Transfer239625552025-12-07 17:49:4789 days ago1765129787
0x9bEE1E2A...2505086f7
9.74818891 ETH
Transfer239623242025-12-07 17:03:1189 days ago1765126991
0x9bEE1E2A...2505086f7
8.86198992 ETH
Transfer239622782025-12-07 16:53:5989 days ago1765126439
0x9bEE1E2A...2505086f7
8.05635447 ETH
Transfer239621222025-12-07 16:22:3589 days ago1765124555
0x9bEE1E2A...2505086f7
6.65814419 ETH
Transfer239620782025-12-07 16:13:4789 days ago1765124027
0x9bEE1E2A...2505086f7
5.5025985 ETH
Transfer239620572025-12-07 16:09:3589 days ago1765123775
0x9bEE1E2A...2505086f7
5.00236227 ETH
Transfer239616282025-12-07 14:43:3589 days ago1765118615
0x9bEE1E2A...2505086f7
4.54760207 ETH
Transfer239578952025-12-07 2:10:3590 days ago1765073435
0x9bEE1E2A...2505086f7
4.1341837 ETH
Transfer239575992025-12-07 1:10:2390 days ago1765069823
0x9bEE1E2A...2505086f7
3.75834881 ETH
Transfer239575942025-12-07 1:09:2390 days ago1765069763
0x9bEE1E2A...2505086f7
3.41668074 ETH
Transfer239572202025-12-06 23:53:5990 days ago1765065239
0x9bEE1E2A...2505086f7
3.1060734 ETH
Transfer239571772025-12-06 23:45:2390 days ago1765064723
0x9bEE1E2A...2505086f7
2.82370309 ETH
Transfer239571352025-12-06 23:36:2390 days ago1765064183
0x9bEE1E2A...2505086f7
2.56700281 ETH
Transfer239569112025-12-06 22:51:1190 days ago1765061471
0x9bEE1E2A...2505086f7
2.33363892 ETH
Transfer239566502025-12-06 21:58:4790 days ago1765058327
0x9bEE1E2A...2505086f7
2.12148992 ETH
Transfer239565352025-12-06 21:35:4790 days ago1765056947
0x9bEE1E2A...2505086f7
1.9286272 ETH
Transfer239564402025-12-06 21:16:2390 days ago1765055783
0x9bEE1E2A...2505086f7
1.75329746 ETH
Transfer239564272025-12-06 21:13:3590 days ago1765055615
0x9bEE1E2A...2505086f7
1.59390678 ETH
Transfer239564132025-12-06 21:10:3590 days ago1765055435
0x9bEE1E2A...2505086f7
1.44900616 ETH
Transfer239564112025-12-06 21:10:1190 days ago1765055411
0x9bEE1E2A...2505086f7
1.31727833 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Auction

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 95000 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";

/// @title Auction
/// @author VisualizeValue
/// @notice Single ERC721 auction with concierge bidding, exact 10% bid increments, and configurable time extension.
/// @dev NFT must be transferred to this contract separately after deployment.
contract Auction is Ownable, ERC721Holder {
    // ============ Errors ============

    error AuctionNotStarted();
    error AuctionEnded();
    error AuctionNotEnded();
    error AuctionAlreadySettled();
    error InvalidBidAmount(uint256 required, uint256 provided);
    error InvalidAddress();
    error NoBalanceToWithdraw();
    error WithdrawalFailed();
    error NoProceedsToWithdraw();
    error ProceedsAlreadyWithdrawn();
    error InvalidConfiguration();
    error AuctionAlreadyStarted();
    error NFTNotEscrowed();

    // ============ Events ============

    /// @dev Emitted when a bid is placed (either ETH or concierge).
    /// @param bidder The address credited as the bidder.
    /// @param amount The bid amount.
    /// @param isConcierge True if this was a concierge bid (no ETH transferred).
    event Bid(address indexed bidder, uint256 amount, bool isConcierge);

    /// @dev Emitted when auction end time is extended.
    event AuctionExtended(uint40 newEndTimestamp);

    /// @dev Emitted when auction is settled and NFT transferred.
    event AuctionSettled(address indexed winner, uint256 winningBid);

    /// @dev Emitted when a bidder withdraws their failed refund balance.
    event Withdrawal(address indexed account, uint256 amount);

    /// @dev Emitted when owner withdraws auction proceeds.
    event ProceedsWithdrawn(address indexed recipient, uint256 amount);

    /// @dev Emitted when auction is started by owner.
    event AuctionStarted(uint40 endTimestamp);

    // ============ Immutable Configuration ============

    /// @notice The ERC721 contract address.
    IERC721 public immutable nftContract;

    /// @notice The token ID being auctioned.
    uint256 public immutable tokenId;

    /// @notice Initial end timestamp (before any extensions).
    uint40 public immutable initialEndTimestamp;

    /// @notice Starting bid amount (first bid must be exactly this).
    uint128 public immutable startingBid;

    /// @notice Time extension when bid arrives within this period before end.
    uint40 public immutable bidExtensionDelay;

    /// @notice Address that can bid without sending ETH (for off-chain payments).
    address public immutable concierge;

    // ============ Mutable State ============

    /// @notice Whether the auction has been started.
    bool public started;

    /// @notice Current end timestamp (may be extended by late bids).
    uint40 public endTimestamp;

    /// @notice Current highest bid amount.
    uint128 public highestBid;

    /// @notice Current highest bidder address.
    address public highestBidder;

    /// @notice Whether the current highest bid was placed by concierge (no ETH).
    bool public highestBidIsConcierge;

    /// @notice Whether the auction has been settled.
    bool public settled;

    /// @notice Whether the proceeds have been withdrawn.
    bool public proceedsWithdrawn;

    /// @notice Fallback balances for failed refunds (DOS protection).
    mapping(address => uint256) public balances;

    // ============ Constructor ============

    /// @param _owner Contract owner (receives proceeds).
    /// @param _concierge Concierge address for off-chain payment bids.
    /// @param _nftContract ERC721 contract address.
    /// @param _tokenId Token ID to auction.
    /// @param _endTimestamp Initial auction end time (once started).
    /// @param _startingBid First bid must equal this amount.
    /// @param _bidExtensionDelay Extension period (e.g., 1 hour = 3600).
    constructor(
        address _owner,
        address _concierge,
        address _nftContract,
        uint256 _tokenId,
        uint40 _endTimestamp,
        uint128 _startingBid,
        uint40 _bidExtensionDelay
    ) Ownable(_owner) {
        if (_nftContract == address(0)) revert InvalidAddress();
        if (_concierge == address(0)) revert InvalidAddress();
        if (_endTimestamp == 0) revert InvalidConfiguration();
        if (_startingBid == 0) revert InvalidConfiguration();
        if (_bidExtensionDelay == 0) revert InvalidConfiguration();

        nftContract = IERC721(_nftContract);
        tokenId = _tokenId;
        initialEndTimestamp = _endTimestamp;
        endTimestamp = _endTimestamp;
        startingBid = _startingBid;
        bidExtensionDelay = _bidExtensionDelay;
        concierge = _concierge;
    }

    // ============ Start Function ============

    /// @notice Starts the auction. Only callable by owner.
    function start() external onlyOwner {
        if (started) revert AuctionAlreadyStarted();
        if (nftContract.ownerOf(tokenId) != address(this)) revert NFTNotEscrowed();

        started = true;

        emit AuctionStarted(endTimestamp);
    }

    // ============ Bidding Functions ============

    /// @notice Place a bid. Regular bidders must send exact ETH amount.
    ///         Concierge can bid without ETH (for off-chain payments).
    /// @dev Refunds previous bidder with 60k gas limit for DOS protection.
    function bid() external payable {
        if (!started) revert AuctionNotStarted();
        if (block.timestamp >= endTimestamp) revert AuctionEnded();
        if (settled) revert AuctionAlreadySettled();

        uint256 required = nextValidBid();
        bool isConcierge = msg.sender == concierge;

        if (!isConcierge && msg.value != required) {
            revert InvalidBidAmount(required, msg.value);
        }

        address previousBidder = highestBidder;
        uint256 previousBid = highestBid;
        bool previousWasConcierge = highestBidIsConcierge;

        // Update state BEFORE external calls (CEI pattern)
        highestBidder = msg.sender;
        highestBid = uint128(required);
        highestBidIsConcierge = isConcierge;

        // Extend auction if within extension period
        _maybeExtendAuction();

        // Refund previous bidder (only if they paid ETH)
        if (previousBidder != address(0) && !previousWasConcierge) {
            (bool success,) = payable(previousBidder).call{value: previousBid, gas: 60_000}("");
            if (!success) {
                balances[previousBidder] += previousBid;
            }
        }

        emit Bid(msg.sender, required, isConcierge);
    }

    // ============ View Functions ============

    /// @notice Returns the exact amount required for the next valid bid.
    /// @return The next valid bid amount in wei.
    function nextValidBid() public view returns (uint256) {
        if (highestBid == 0) {
            return startingBid;
        }
        // Exactly 10% increase
        return (uint256(highestBid) * 110) / 100;
    }

    /// @notice Returns current auction status.
    function auctionStatus()
        external
        view
        returns (
            bool isActive,
            bool hasStarted,
            bool hasEnded,
            uint256 currentBid,
            address currentBidder,
            uint256 nextBid,
            uint40 timeRemaining
        )
    {
        hasStarted = started;
        hasEnded = (started && block.timestamp >= endTimestamp) || settled;
        isActive = hasStarted && !hasEnded;
        currentBid = highestBid;
        currentBidder = highestBidder;
        nextBid = nextValidBid();
        timeRemaining = (started && block.timestamp < endTimestamp) ? endTimestamp - uint40(block.timestamp) : 0;
    }

    // ============ Settlement ============

    /// @notice Settles the auction after it ends. Transfers NFT to winner.
    /// @dev Anyone can call this after auction ends.
    function settle() external {
        if (settled) revert AuctionAlreadySettled();
        if (!started || block.timestamp < endTimestamp) revert AuctionNotEnded();

        settled = true;

        address winner;
        if (highestBidder != address(0)) {
            winner = highestBidder;
        } else {
            // No bids - return NFT to owner
            winner = owner();
        }

        // Transfer NFT to winner
        nftContract.safeTransferFrom(address(this), winner, tokenId);

        emit AuctionSettled(winner, highestBid);
    }

    // ============ Withdrawal Functions ============

    /// @notice Withdraw failed refund balance (pull pattern for DOS protection).
    function withdraw() external {
        uint256 amount = balances[msg.sender];
        if (amount == 0) revert NoBalanceToWithdraw();

        // Set balance to zero before external call (reentrancy guard)
        balances[msg.sender] = 0;

        (bool success,) = payable(msg.sender).call{value: amount}("");
        if (!success) revert WithdrawalFailed();

        emit Withdrawal(msg.sender, amount);
    }

    /// @notice Owner withdraws auction proceeds after settlement.
    /// @dev Only callable after settlement. Only withdraws the winning bid amount.
    function withdrawProceeds() external onlyOwner {
        if (!settled) revert AuctionNotEnded();
        if (proceedsWithdrawn) revert ProceedsAlreadyWithdrawn();

        // Only withdraw the winning bid amount (not failed refund balances)
        // Concierge bids don't have ETH to withdraw
        uint256 amount = highestBidIsConcierge ? 0 : uint256(highestBid);
        if (amount == 0) revert NoProceedsToWithdraw();

        proceedsWithdrawn = true;

        (bool success,) = payable(owner()).call{value: amount}("");
        if (!success) revert WithdrawalFailed();

        emit ProceedsWithdrawn(owner(), amount);
    }

    // ============ Internal Functions ============

    /// @dev Extends auction end time if current bid is within extension window.
    function _maybeExtendAuction() private {
        if (block.timestamp >= endTimestamp - bidExtensionDelay) {
            endTimestamp = uint40(block.timestamp) + bidExtensionDelay;
            emit AuctionExtended(endTimestamp);
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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 v5.4.0) (token/ERC721/IERC721.sol)

pragma solidity >=0.6.2;

import {IERC165} from "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC-721 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 ERC-721 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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * 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 address zero.
     *
     * 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 (last updated v5.4.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity >=0.5.0;

/**
 * @title ERC-721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC-721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be
     * reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 5 of 7 : ERC721Holder.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol)

pragma solidity ^0.8.20;

import {IERC721Receiver} from "../IERC721Receiver.sol";

/**
 * @dev Implementation of the {IERC721Receiver} interface.
 *
 * Accepts all token transfers.
 * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or
 * {IERC721-setApprovalForAll}.
 */
abstract contract ERC721Holder is IERC721Receiver {
    /**
     * @dev See {IERC721Receiver-onERC721Received}.
     *
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(address, address, uint256, bytes memory) public virtual returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)

pragma solidity >=0.4.16;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * 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[ERC 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);
}

Settings
{
  "evmVersion": "cancun",
  "optimizer": {
    "enabled": true,
    "runs": 95000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": [
    "project/:@openzeppelin/contracts/=npm/@openzeppelin/[email protected]/",
    "project/:@openzeppelin/contracts/=npm/@openzeppelin/[email protected]/",
    "project/:@openzeppelin/contracts/=npm/@openzeppelin/[email protected]/"
  ]
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_concierge","type":"address"},{"internalType":"address","name":"_nftContract","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint40","name":"_endTimestamp","type":"uint40"},{"internalType":"uint128","name":"_startingBid","type":"uint128"},{"internalType":"uint40","name":"_bidExtensionDelay","type":"uint40"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AuctionAlreadySettled","type":"error"},{"inputs":[],"name":"AuctionAlreadyStarted","type":"error"},{"inputs":[],"name":"AuctionEnded","type":"error"},{"inputs":[],"name":"AuctionNotEnded","type":"error"},{"inputs":[],"name":"AuctionNotStarted","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[{"internalType":"uint256","name":"required","type":"uint256"},{"internalType":"uint256","name":"provided","type":"uint256"}],"name":"InvalidBidAmount","type":"error"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[],"name":"NFTNotEscrowed","type":"error"},{"inputs":[],"name":"NoBalanceToWithdraw","type":"error"},{"inputs":[],"name":"NoProceedsToWithdraw","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ProceedsAlreadyWithdrawn","type":"error"},{"inputs":[],"name":"WithdrawalFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"newEndTimestamp","type":"uint40"}],"name":"AuctionExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"winningBid","type":"uint256"}],"name":"AuctionSettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"endTimestamp","type":"uint40"}],"name":"AuctionStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isConcierge","type":"bool"}],"name":"Bid","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":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProceedsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"auctionStatus","outputs":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"hasStarted","type":"bool"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"currentBid","type":"uint256"},{"internalType":"address","name":"currentBidder","type":"address"},{"internalType":"uint256","name":"nextBid","type":"uint256"},{"internalType":"uint40","name":"timeRemaining","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"bidExtensionDelay","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"concierge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTimestamp","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highestBid","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highestBidIsConcierge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highestBidder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialEndTimestamp","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextValidBid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proceedsWithdrawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingBid","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenId","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawProceeds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

610140604052348015610010575f5ffd5b50604051611bf2380380611bf283398101604081905261002f91610204565b866001600160a01b03811661005d57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006681610186565b506001600160a01b03851661008e5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166100b55760405163e6c4247b60e01b815260040160405180910390fd5b8264ffffffffff165f036100dc5760405163c52a9bd360e01b815260040160405180910390fd5b816001600160801b03165f036101055760405163c52a9bd360e01b815260040160405180910390fd5b8064ffffffffff165f0361012c5760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b0394851660805260a09390935264ffffffffff91821660c08190525f805464ffffffffff60a81b1916600160a81b9092029190911790556001600160801b031660e052166101005216610120525061028c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146101eb575f5ffd5b919050565b805164ffffffffff811681146101eb575f5ffd5b5f5f5f5f5f5f5f60e0888a03121561021a575f5ffd5b610223886101d5565b9650610231602089016101d5565b955061023f604089016101d5565b945060608801519350610254608089016101f0565b60a08901519093506001600160801b0381168114610270575f5ffd5b915061027e60c089016101f0565b905092959891949750929550565b60805160a05160c05160e05161010051610120516118e761030b5f395f81816102730152610a2901525f81816103de0152818161147401526114cb01525f81816105980152610dc101525f61056501525f81816102cb01528181610822015261127e01525f81816106000152818161084801526112bb01526118e75ff3fe60806040526004361061018e575f3560e01c806386fa771b116100dc578063a85adeab11610087578063be9a655511610062578063be9a6555146105db578063d56d229d146105ef578063d57bde7914610622578063f2fde38b1461064a575f5ffd5b8063a85adeab1461051f578063b8622a3e14610554578063b9fdd56914610587575f5ffd5b80639038e693116100b75780639038e6931461047157806391f90157146104855780639d6a0f28146104b1575f5ffd5b806386fa771b146103cd5780638da5cb5b146104165780638f7758391461043f575f5ffd5b80631f2698ab1161013c57806365ffc9551161011757806365ffc95514610372578063715018a61461038657806386a317571461039a575f5ffd5b80631f2698ab1461030357806327e235e3146103335780633ccfd60b1461035e575f5ffd5b806316b1e8431161016c57806316b1e8431461026257806317d70f7c146102ba5780631998aeef146102fb575f5ffd5b80630182c1711461019257806311da60b4146101d8578063150b7a02146101ee575b5f5ffd5b34801561019d575f5ffd5b506002546101c39074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156101e3575f5ffd5b506101ec610669565b005b3480156101f9575f5ffd5b50610231610208366004611687565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101cf565b34801561026d575f5ffd5b506102957f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cf565b3480156102c5575f5ffd5b506102ed7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101cf565b6101ec610903565b34801561030e575f5ffd5b505f546101c39074010000000000000000000000000000000000000000900460ff1681565b34801561033e575f5ffd5b506102ed61034d3660046117a5565b60036020525f908152604090205481565b348015610369575f5ffd5b506101ec610c7f565b34801561037d575f5ffd5b506102ed610d90565b348015610391575f5ffd5b506101ec610e16565b3480156103a5575f5ffd5b506002546101c390760100000000000000000000000000000000000000000000900460ff1681565b3480156103d8575f5ffd5b506104007f000000000000000000000000000000000000000000000000000000000000000081565b60405164ffffffffff90911681526020016101cf565b348015610421575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610295565b34801561044a575f5ffd5b506002546101c3907501000000000000000000000000000000000000000000900460ff1681565b34801561047c575f5ffd5b506101ec610e29565b348015610490575f5ffd5b506002546102959073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104bc575f5ffd5b506104c56110ab565b604080519715158852951515602088015293151594860194909452606085019190915273ffffffffffffffffffffffffffffffffffffffff16608084015260a083019190915264ffffffffff1660c082015260e0016101cf565b34801561052a575f5ffd5b505f54610400907501000000000000000000000000000000000000000000900464ffffffffff1681565b34801561055f575f5ffd5b506104007f000000000000000000000000000000000000000000000000000000000000000081565b348015610592575f5ffd5b506105ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101cf565b3480156105e6575f5ffd5b506101ec6111fa565b3480156105fa575f5ffd5b506102957f000000000000000000000000000000000000000000000000000000000000000081565b34801561062d575f5ffd5b506001546105ba906fffffffffffffffffffffffffffffffff1681565b348015610655575f5ffd5b506101ec6106643660046117a5565b611409565b6002547501000000000000000000000000000000000000000000900460ff16156106bf576040517f4f4fee1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5474010000000000000000000000000000000000000000900460ff16158061070857505f547501000000000000000000000000000000000000000000900464ffffffffff1642105b1561073f576040517f6463738900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff81167501000000000000000000000000000000000000000000179091555f9073ffffffffffffffffffffffffffffffffffffffff16156107bd575060025473ffffffffffffffffffffffffffffffffffffffff166107d7565b505f5473ffffffffffffffffffffffffffffffffffffffff165b6040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff82811660248301527f000000000000000000000000000000000000000000000000000000000000000060448301527f000000000000000000000000000000000000000000000000000000000000000016906342842e0e906064015f604051808303815f87803b158015610889575f5ffd5b505af115801561089b573d5f5f3e3d5ffd5b50506001546040516fffffffffffffffffffffffffffffffff909116815273ffffffffffffffffffffffffffffffffffffffff841692507f15bff754355d68fa38fb3ca8459829a807947cbf186c0f47d283d8dbbfcad568915060200160405180910390a250565b5f5474010000000000000000000000000000000000000000900460ff16610956576040517feffaea8000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f547501000000000000000000000000000000000000000000900464ffffffffff1642106109b0576040517fa0e9298400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002547501000000000000000000000000000000000000000000900460ff1615610a06576040517f4f4fee1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610a0f610d90565b90503373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801581610a575750813414155b15610a9c576040517fec7ed57e000000000000000000000000000000000000000000000000000000008152600481018390523460248201526044015b60405180910390fd5b60028054600180546fffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffffffffffff00000000000000000000000000000000831617909255841515740100000000000000000000000000000000000000009081027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff33167fffffffffffffffffffffff0000000000000000000000000000000000000000008616171790945573ffffffffffffffffffffffffffffffffffffffff83169391169160ff91900416610b6f61146c565b73ffffffffffffffffffffffffffffffffffffffff831615801590610b92575080155b15610c3c575f8373ffffffffffffffffffffffffffffffffffffffff168361ea60906040515f60405180830381858888f193505050503d805f8114610bf2576040519150601f19603f3d011682016040523d82523d5f602084013e610bf7565b606091505b5050905080610c3a5773ffffffffffffffffffffffffffffffffffffffff84165f9081526003602052604081208054859290610c349084906117f4565b90915550505b505b60408051868152851515602082015233917fd5d1df7481b12aa66df1a85d5073710a23203850d6080356b160f1343de9e09b910160405180910390a25050505050565b335f9081526003602052604081205490819003610cc8576040517fbbd8170800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f818152600360205260408082208290555190919083908381818185875af1925050503d805f8114610d16576040519150601f19603f3d011682016040523d82523d5f602084013e610d1b565b606091505b5050905080610d56576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405182815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65906020015b60405180910390a25050565b6001545f906fffffffffffffffffffffffffffffffff168103610de457506fffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690565b600154606490610e07906fffffffffffffffffffffffffffffffff16606e61180d565b610e119190611824565b905090565b610e1e611573565b610e275f6115c5565b565b610e31611573565b6002547501000000000000000000000000000000000000000000900460ff16610e86576040517f6463738900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254760100000000000000000000000000000000000000000000900460ff1615610edd576040517fed56d45700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002545f9074010000000000000000000000000000000000000000900460ff16610f1b576001546fffffffffffffffffffffffffffffffff16610f1d565b5f5b9050805f03610f58576040517fba414ce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000001790555f610fb85f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f811461100c576040519150601f19603f3d011682016040523d82523d5f602084013e611011565b606091505b505090508061104c576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0f2fb75cc1977a496e94837f859e957f68e26e70dc1b75d9945ee92ae57969ba83604051610d8491815260200190565b5f805474010000000000000000000000000000000000000000900460ff1681808080808580156110fc57505f547501000000000000000000000000000000000000000000900464ffffffffff164210155b8061112257506002547501000000000000000000000000000000000000000000900460ff165b945085801561112f575084155b6001546002549198506fffffffffffffffffffffffffffffffff16945073ffffffffffffffffffffffffffffffffffffffff16925061116c610d90565b5f5490925074010000000000000000000000000000000000000000900460ff1680156111b857505f547501000000000000000000000000000000000000000000900464ffffffffff1642105b6111c2575f6111ef565b5f546111ef9042907501000000000000000000000000000000000000000000900464ffffffffff1661185c565b905090919293949596565b611202611573565b5f5474010000000000000000000000000000000000000000900460ff1615611256576040517f628e388300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6352211e0000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152309073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611300573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113249190611879565b73ffffffffffffffffffffffffffffffffffffffff1614611371576040517f03a273fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790819055604051750100000000000000000000000000000000000000000090910464ffffffffff1681527fcd040613cf8ef0cfcaa3af0d711783e827a275fc647c116b74595bf17cb9364f906020015b60405180910390a1565b611411611573565b73ffffffffffffffffffffffffffffffffffffffff8116611460576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610a93565b611469816115c5565b50565b5f546114b9907f0000000000000000000000000000000000000000000000000000000000000000907501000000000000000000000000000000000000000000900464ffffffffff1661185c565b64ffffffffff164210610e27576114f07f000000000000000000000000000000000000000000000000000000000000000042611894565b5f80547fffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000064ffffffffff93841681029190911791829055604051910490911681527fccfbb5a2a7c2859068af0a6fb0e90181c4d4f1d9b122630e9abf0ba3a3e7facd906020016113ff565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e27576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610a93565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114611469575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f5f5f6080858703121561169a575f5ffd5b84356116a581611639565b935060208501356116b581611639565b925060408501359150606085013567ffffffffffffffff8111156116d7575f5ffd5b8501601f810187136116e7575f5ffd5b803567ffffffffffffffff8111156117015761170161165a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561176d5761176d61165a565b604052818152828201602001891015611784575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b5f602082840312156117b5575f5ffd5b81356117c081611639565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611807576118076117c7565b92915050565b8082028115828204841417611807576118076117c7565b5f82611857577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b64ffffffffff8281168282160390811115611807576118076117c7565b5f60208284031215611889575f5ffd5b81516117c081611639565b64ffffffffff8181168382160190811115611807576118076117c756fea26469706673582212202d924b5719b998fe7eec4e29124c671ecd937bf92fa0857b3cb3a4449f0ec88f64736f6c634300081c0033000000000000000000000000c9979381750d5325378cbe36177e7ab037d87ce1000000000000000000000000c9979381750d5325378cbe36177e7ab037d87ce1000000000000000000000000346f28614274cb868b48986454d2eb738c13dcea0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006935b290000000000000000000000000000000000000000000000000000110d9316ec0000000000000000000000000000000000000000000000000000000000000000e10

Deployed Bytecode

0x60806040526004361061018e575f3560e01c806386fa771b116100dc578063a85adeab11610087578063be9a655511610062578063be9a6555146105db578063d56d229d146105ef578063d57bde7914610622578063f2fde38b1461064a575f5ffd5b8063a85adeab1461051f578063b8622a3e14610554578063b9fdd56914610587575f5ffd5b80639038e693116100b75780639038e6931461047157806391f90157146104855780639d6a0f28146104b1575f5ffd5b806386fa771b146103cd5780638da5cb5b146104165780638f7758391461043f575f5ffd5b80631f2698ab1161013c57806365ffc9551161011757806365ffc95514610372578063715018a61461038657806386a317571461039a575f5ffd5b80631f2698ab1461030357806327e235e3146103335780633ccfd60b1461035e575f5ffd5b806316b1e8431161016c57806316b1e8431461026257806317d70f7c146102ba5780631998aeef146102fb575f5ffd5b80630182c1711461019257806311da60b4146101d8578063150b7a02146101ee575b5f5ffd5b34801561019d575f5ffd5b506002546101c39074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156101e3575f5ffd5b506101ec610669565b005b3480156101f9575f5ffd5b50610231610208366004611687565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101cf565b34801561026d575f5ffd5b506102957f000000000000000000000000c9979381750d5325378cbe36177e7ab037d87ce181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cf565b3480156102c5575f5ffd5b506102ed7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101cf565b6101ec610903565b34801561030e575f5ffd5b505f546101c39074010000000000000000000000000000000000000000900460ff1681565b34801561033e575f5ffd5b506102ed61034d3660046117a5565b60036020525f908152604090205481565b348015610369575f5ffd5b506101ec610c7f565b34801561037d575f5ffd5b506102ed610d90565b348015610391575f5ffd5b506101ec610e16565b3480156103a5575f5ffd5b506002546101c390760100000000000000000000000000000000000000000000900460ff1681565b3480156103d8575f5ffd5b506104007f0000000000000000000000000000000000000000000000000000000000000e1081565b60405164ffffffffff90911681526020016101cf565b348015610421575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610295565b34801561044a575f5ffd5b506002546101c3907501000000000000000000000000000000000000000000900460ff1681565b34801561047c575f5ffd5b506101ec610e29565b348015610490575f5ffd5b506002546102959073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104bc575f5ffd5b506104c56110ab565b604080519715158852951515602088015293151594860194909452606085019190915273ffffffffffffffffffffffffffffffffffffffff16608084015260a083019190915264ffffffffff1660c082015260e0016101cf565b34801561052a575f5ffd5b505f54610400907501000000000000000000000000000000000000000000900464ffffffffff1681565b34801561055f575f5ffd5b506104007f000000000000000000000000000000000000000000000000000000006935b29081565b348015610592575f5ffd5b506105ba7f000000000000000000000000000000000000000000000000000110d9316ec00081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101cf565b3480156105e6575f5ffd5b506101ec6111fa565b3480156105fa575f5ffd5b506102957f000000000000000000000000346f28614274cb868b48986454d2eb738c13dcea81565b34801561062d575f5ffd5b506001546105ba906fffffffffffffffffffffffffffffffff1681565b348015610655575f5ffd5b506101ec6106643660046117a5565b611409565b6002547501000000000000000000000000000000000000000000900460ff16156106bf576040517f4f4fee1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5474010000000000000000000000000000000000000000900460ff16158061070857505f547501000000000000000000000000000000000000000000900464ffffffffff1642105b1561073f576040517f6463738900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff81167501000000000000000000000000000000000000000000179091555f9073ffffffffffffffffffffffffffffffffffffffff16156107bd575060025473ffffffffffffffffffffffffffffffffffffffff166107d7565b505f5473ffffffffffffffffffffffffffffffffffffffff165b6040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff82811660248301527f000000000000000000000000000000000000000000000000000000000000000060448301527f000000000000000000000000346f28614274cb868b48986454d2eb738c13dcea16906342842e0e906064015f604051808303815f87803b158015610889575f5ffd5b505af115801561089b573d5f5f3e3d5ffd5b50506001546040516fffffffffffffffffffffffffffffffff909116815273ffffffffffffffffffffffffffffffffffffffff841692507f15bff754355d68fa38fb3ca8459829a807947cbf186c0f47d283d8dbbfcad568915060200160405180910390a250565b5f5474010000000000000000000000000000000000000000900460ff16610956576040517feffaea8000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f547501000000000000000000000000000000000000000000900464ffffffffff1642106109b0576040517fa0e9298400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002547501000000000000000000000000000000000000000000900460ff1615610a06576040517f4f4fee1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610a0f610d90565b90503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c9979381750d5325378cbe36177e7ab037d87ce11614801581610a575750813414155b15610a9c576040517fec7ed57e000000000000000000000000000000000000000000000000000000008152600481018390523460248201526044015b60405180910390fd5b60028054600180546fffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffffffffffff00000000000000000000000000000000831617909255841515740100000000000000000000000000000000000000009081027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff33167fffffffffffffffffffffff0000000000000000000000000000000000000000008616171790945573ffffffffffffffffffffffffffffffffffffffff83169391169160ff91900416610b6f61146c565b73ffffffffffffffffffffffffffffffffffffffff831615801590610b92575080155b15610c3c575f8373ffffffffffffffffffffffffffffffffffffffff168361ea60906040515f60405180830381858888f193505050503d805f8114610bf2576040519150601f19603f3d011682016040523d82523d5f602084013e610bf7565b606091505b5050905080610c3a5773ffffffffffffffffffffffffffffffffffffffff84165f9081526003602052604081208054859290610c349084906117f4565b90915550505b505b60408051868152851515602082015233917fd5d1df7481b12aa66df1a85d5073710a23203850d6080356b160f1343de9e09b910160405180910390a25050505050565b335f9081526003602052604081205490819003610cc8576040517fbbd8170800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f818152600360205260408082208290555190919083908381818185875af1925050503d805f8114610d16576040519150601f19603f3d011682016040523d82523d5f602084013e610d1b565b606091505b5050905080610d56576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405182815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65906020015b60405180910390a25050565b6001545f906fffffffffffffffffffffffffffffffff168103610de457506fffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000110d9316ec0001690565b600154606490610e07906fffffffffffffffffffffffffffffffff16606e61180d565b610e119190611824565b905090565b610e1e611573565b610e275f6115c5565b565b610e31611573565b6002547501000000000000000000000000000000000000000000900460ff16610e86576040517f6463738900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254760100000000000000000000000000000000000000000000900460ff1615610edd576040517fed56d45700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002545f9074010000000000000000000000000000000000000000900460ff16610f1b576001546fffffffffffffffffffffffffffffffff16610f1d565b5f5b9050805f03610f58576040517fba414ce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000001790555f610fb85f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f811461100c576040519150601f19603f3d011682016040523d82523d5f602084013e611011565b606091505b505090508061104c576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0f2fb75cc1977a496e94837f859e957f68e26e70dc1b75d9945ee92ae57969ba83604051610d8491815260200190565b5f805474010000000000000000000000000000000000000000900460ff1681808080808580156110fc57505f547501000000000000000000000000000000000000000000900464ffffffffff164210155b8061112257506002547501000000000000000000000000000000000000000000900460ff165b945085801561112f575084155b6001546002549198506fffffffffffffffffffffffffffffffff16945073ffffffffffffffffffffffffffffffffffffffff16925061116c610d90565b5f5490925074010000000000000000000000000000000000000000900460ff1680156111b857505f547501000000000000000000000000000000000000000000900464ffffffffff1642105b6111c2575f6111ef565b5f546111ef9042907501000000000000000000000000000000000000000000900464ffffffffff1661185c565b905090919293949596565b611202611573565b5f5474010000000000000000000000000000000000000000900460ff1615611256576040517f628e388300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6352211e0000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152309073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000346f28614274cb868b48986454d2eb738c13dcea1690636352211e90602401602060405180830381865afa158015611300573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113249190611879565b73ffffffffffffffffffffffffffffffffffffffff1614611371576040517f03a273fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790819055604051750100000000000000000000000000000000000000000090910464ffffffffff1681527fcd040613cf8ef0cfcaa3af0d711783e827a275fc647c116b74595bf17cb9364f906020015b60405180910390a1565b611411611573565b73ffffffffffffffffffffffffffffffffffffffff8116611460576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610a93565b611469816115c5565b50565b5f546114b9907f0000000000000000000000000000000000000000000000000000000000000e10907501000000000000000000000000000000000000000000900464ffffffffff1661185c565b64ffffffffff164210610e27576114f07f0000000000000000000000000000000000000000000000000000000000000e1042611894565b5f80547fffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000064ffffffffff93841681029190911791829055604051910490911681527fccfbb5a2a7c2859068af0a6fb0e90181c4d4f1d9b122630e9abf0ba3a3e7facd906020016113ff565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e27576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610a93565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114611469575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f5f5f6080858703121561169a575f5ffd5b84356116a581611639565b935060208501356116b581611639565b925060408501359150606085013567ffffffffffffffff8111156116d7575f5ffd5b8501601f810187136116e7575f5ffd5b803567ffffffffffffffff8111156117015761170161165a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561176d5761176d61165a565b604052818152828201602001891015611784575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b5f602082840312156117b5575f5ffd5b81356117c081611639565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611807576118076117c7565b92915050565b8082028115828204841417611807576118076117c7565b5f82611857577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b64ffffffffff8281168282160390811115611807576118076117c7565b5f60208284031215611889575f5ffd5b81516117c081611639565b64ffffffffff8181168382160190811115611807576118076117c756fea26469706673582212202d924b5719b998fe7eec4e29124c671ecd937bf92fa0857b3cb3a4449f0ec88f64736f6c634300081c0033

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

000000000000000000000000c9979381750d5325378cbe36177e7ab037d87ce1000000000000000000000000c9979381750d5325378cbe36177e7ab037d87ce1000000000000000000000000346f28614274cb868b48986454d2eb738c13dcea0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006935b290000000000000000000000000000000000000000000000000000110d9316ec0000000000000000000000000000000000000000000000000000000000000000e10

-----Decoded View---------------
Arg [0] : _owner (address): 0xC9979381750d5325378CBE36177E7aB037D87CE1
Arg [1] : _concierge (address): 0xC9979381750d5325378CBE36177E7aB037D87CE1
Arg [2] : _nftContract (address): 0x346f28614274Cb868B48986454D2EB738c13dCEa
Arg [3] : _tokenId (uint256): 0
Arg [4] : _endTimestamp (uint40): 1765126800
Arg [5] : _startingBid (uint128): 300000000000000
Arg [6] : _bidExtensionDelay (uint40): 3600

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000c9979381750d5325378cbe36177e7ab037d87ce1
Arg [1] : 000000000000000000000000c9979381750d5325378cbe36177e7ab037d87ce1
Arg [2] : 000000000000000000000000346f28614274cb868b48986454d2eb738c13dcea
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000000000000000000000000000000000006935b290
Arg [5] : 000000000000000000000000000000000000000000000000000110d9316ec000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000e10


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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.