HYPE Price: $23.24 (+0.17%)
 

Overview

HYPE Balance

HyperEVM LogoHyperEVM LogoHyperEVM Logo0 HYPE

HYPE Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
List NFT254360022026-01-24 16:42:367 hrs ago1769272956IN
0x79dc34c7...62EE76e98
0 HYPE0.000077410.4
Remove Listing245409812026-01-14 12:07:1610 days ago1768392436IN
0x79dc34c7...62EE76e98
0 HYPE0.000005460.1009
List NFT245407942026-01-14 12:04:1210 days ago1768392252IN
0x79dc34c7...62EE76e98
0 HYPE0.000022550.106815
Buy NFT231426062025-12-29 14:01:4526 days ago1767016905IN
0x79dc34c7...62EE76e98
0 HYPE0.000089250.33
Buy NFT231424062025-12-29 13:58:2826 days ago1767016708IN
0x79dc34c7...62EE76e98
0 HYPE0.000322480.8469
Buy NFT231422822025-12-29 13:56:2626 days ago1767016586IN
0x79dc34c7...62EE76e98
0 HYPE0.00029341.369
List NFT231419992025-12-29 13:51:4826 days ago1767016308IN
0x79dc34c7...62EE76e98
0 HYPE0.000135240.6179
List NFT231419262025-12-29 13:50:3626 days ago1767016236IN
0x79dc34c7...62EE76e98
0 HYPE0.000586092.646
List NFT231418852025-12-29 13:49:5626 days ago1767016196IN
0x79dc34c7...62EE76e98
0 HYPE0.000240111.0997
List NFT230872852025-12-28 22:54:5127 days ago1766962491IN
0x79dc34c7...62EE76e98
0 HYPE0.000063110.33
List NFT230872622025-12-28 22:54:2827 days ago1766962468IN
0x79dc34c7...62EE76e98
0 HYPE0.000080960.3708
Buy NFT230871172025-12-28 22:52:0527 days ago1766962325IN
0x79dc34c7...62EE76e98
0 HYPE0.000316661.11491152
List NFT230866692025-12-28 22:44:4527 days ago1766961885IN
0x79dc34c7...62EE76e98
0 HYPE0.000320931.42
Buy NFT230853462025-12-28 22:23:0327 days ago1766960583IN
0x79dc34c7...62EE76e98
0 HYPE0.000221340.5293
List NFT230847872025-12-28 22:13:5427 days ago1766960034IN
0x79dc34c7...62EE76e98
0 HYPE0.00022031.009
List NFT230833842025-12-28 21:50:5427 days ago1766958654IN
0x79dc34c7...62EE76e98
0 HYPE0.000082460.3777
Buy NFT230825452025-12-28 21:37:0827 days ago1766957828IN
0x79dc34c7...62EE76e98
0 HYPE0.000230381.0624
List NFT230814882025-12-28 21:19:4927 days ago1766956789IN
0x79dc34c7...62EE76e98
0 HYPE0.000312171.395
List NFT230793052025-12-28 20:44:0127 days ago1766954641IN
0x79dc34c7...62EE76e98
0 HYPE0.000134260.6
List NFT228958862025-12-26 18:37:0829 days ago1766774228IN
0x79dc34c7...62EE76e98
0 HYPE0.000294931.318
List NFT228949892025-12-26 18:22:2629 days ago1766773346IN
0x79dc34c7...62EE76e98
0 HYPE0.000309391.417
List NFT228629102025-12-26 9:36:3329 days ago1766741793IN
0x79dc34c7...62EE76e98
0 HYPE0.000161840.72325781
List NFT228626362025-12-26 9:32:0329 days ago1766741523IN
0x79dc34c7...62EE76e98
0 HYPE0.000111480.6
Remove Listing228625832025-12-26 9:31:1129 days ago1766741471IN
0x79dc34c7...62EE76e98
0 HYPE0.00003020.5582
Remove Listing228625752025-12-26 9:31:0329 days ago1766741463IN
0x79dc34c7...62EE76e98
0 HYPE0.00003020.5582
View all transactions

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
226333502025-12-23 18:53:1632 days ago1766515996
0x79dc34c7...62EE76e98
0.0300038 HYPE
226333502025-12-23 18:53:1632 days ago1766515996
0x79dc34c7...62EE76e98
0.00045691 HYPE
221482932025-12-18 6:20:0537 days ago1766038805
0x79dc34c7...62EE76e98
0.03387957 HYPE
221482932025-12-18 6:20:0537 days ago1766038805
0x79dc34c7...62EE76e98
0.00051593 HYPE
221482062025-12-18 6:18:4037 days ago1766038720
0x79dc34c7...62EE76e98
0.05277891 HYPE
221482062025-12-18 6:18:4037 days ago1766038720
0x79dc34c7...62EE76e98
0.00080373 HYPE
220554192025-12-17 4:57:3438 days ago1765947454
0x79dc34c7...62EE76e98
0.04555991 HYPE
220554192025-12-17 4:57:3438 days ago1765947454
0x79dc34c7...62EE76e98
0.0006938 HYPE
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VeMarket

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import { INftMarket } from "./interfaces/INftMarket.sol";
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { ReentrancyGuard } from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";

contract VeMarket is INftMarket, ReentrancyGuard, Ownable {
    /// @notice Current version of the contract
    string public constant VERSION = "1.1";

    /// @notice Precision for fee calculations (1 ether = 100%)
    uint256 public constant BASIS_PRECISION = 1 ether;

    /// @notice Address that receives marketplace fees
    address public feeRecipient;

    /// @notice Default fee percentage applied to all NFT sales unless overridden
    uint256 public defaultFee;

    /// @notice Custom fee percentages for specific NFT contracts
    mapping(address => uint256) public nftFees;

    /// @notice Array of all NFT listings
    INftMarket.NftListing[] private _listings;

    /// @notice Whitelist addresses for each listing
    mapping(uint256 => address[]) public whitelists;

    /// @notice Initialize the marketplace with default fee and fee recipient
    /// @param _defaultFee The default fee percentage (in BASIS_PRECISION)
    /// @param _feeRecipient The address to receive marketplace fees
    constructor(uint256 _defaultFee, address _feeRecipient) Ownable() {
        require(_defaultFee <= BASIS_PRECISION, "Fee too high");
        require(_feeRecipient != address(0), "Zero address");
        defaultFee = _defaultFee;
        feeRecipient = _feeRecipient;
    }

    /*//////////////////////////////////////////////////////////////
                            VIEW FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    /// @notice Returns the total number of NFT listings in the marketplace
    /// @return The number of listings
    function getListingLength() external view returns (uint256) {
        return _listings.length;
    }

    /// @notice Retrieves detailed information about a listing by its index
    /// @param _index The index of the listing to query
    /// @return nft The NFT contract address
    /// @return seller The address of the seller
    /// @return buyer The address of the buyer (0x0 if not sold)
    /// @return tokenId The token ID of the NFT
    /// @return fundingToken The token used for payment (0x0 for ETH)
    /// @return price The price of the NFT
    /// @return fee The fee percentage stored at listing time
    /// @return startDate The start date of the listing
    /// @return endDate The end date of the listing
    /// @return saleDate The date when the NFT was sold
    function getListingByIndex(uint256 _index)
        external
        view
        returns (address, address, address, uint256, address, uint256, uint256, uint256, uint256, uint256)
    {
        INftMarket.NftListing memory L = _listings[_index];
        return (L.nft, L.seller, L.buyer, L.tokenId, L.fundingToken, L.price, L.fee, L.startDate, L.endDate, L.saleDate);
    }

    /*//////////////////////////////////////////////////////////////
                        MARKET FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    /// @notice Creates a new NFT listing in the marketplace
    /// @param _nft The address of the NFT contract
    /// @param _tokenId The token ID of the NFT to list
    /// @param _fundingToken The token to accept as payment (0x0 for ETH)
    /// @param _price The price of the NFT
    /// @param _whitelist Array of addresses allowed to buy (empty for public sale)
    /// @param _startDate The timestamp when the listing becomes active (0 for immediate)
    /// @param _endDate The timestamp when the listing expires (0 for no expiry)
    function listNFT(
        address _nft,
        uint256 _tokenId,
        address _fundingToken,
        uint256 _price,
        address[] calldata _whitelist,
        uint256 _startDate,
        uint256 _endDate
    ) external {
        require(_price > 0, "PRICE");
        require(IERC721(_nft).ownerOf(_tokenId) == msg.sender, "OWNER");
        require(
            IERC721(_nft).getApproved(_tokenId) == address(this)
                || IERC721(_nft).isApprovedForAll(msg.sender, address(this)),
            "APPROVAL"
        );

        // Validate funding token if not native ETH
        if (_fundingToken != address(0)) {
            try IERC20(_fundingToken).totalSupply() returns (uint256) {
                // Valid ERC20 interface
            } catch {
                revert("Invalid ERC20");
            }
        }

        // Validate and adjust dates for usability
        uint256 adjustedStartDate = _startDate;
        if (_startDate < block.timestamp) {
            adjustedStartDate = block.timestamp;
        }
        if (_endDate != 0) {
            require(_endDate > block.timestamp, "End date must be in future");
            require(_endDate > adjustedStartDate, "End date must be after start date");
        }

        // Get the fee rate for this NFT (custom fee or default)
        uint256 currentFee = nftFees[_nft] > 0 ? nftFees[_nft] : defaultFee;

        INftMarket.NftListing memory L = INftMarket.NftListing({
            nft: _nft,
            seller: msg.sender,
            buyer: address(0),
            tokenId: _tokenId,
            fundingToken: _fundingToken,
            price: _price,
            fee: currentFee,
            startDate: adjustedStartDate,
            endDate: _endDate,
            saleDate: 0
        });

        _listings.push(L);
        uint256 id = _listings.length - 1;
        if (_whitelist.length > 0) whitelists[id] = _whitelist;

        emit NftListed(msg.sender, _nft, _tokenId, _fundingToken, _price, _whitelist, _startDate, _endDate, id);
    }

    /// @notice Purchase an NFT listing
    /// @param _index The index of the listing to purchase
    /// @dev For ETH purchases, msg.value must match the listing price
    function buyNFT(uint256 _index) external payable nonReentrant {
        INftMarket.NftListing memory L = _listings[_index];
        require(L.seller != address(0), "NO_LISTING");
        require(L.buyer == address(0), "SOLD");
        if (L.startDate != 0) require(block.timestamp >= L.startDate, "NOT_STARTED");
        if (L.endDate != 0) require(block.timestamp <= L.endDate, "EXPIRED");

        if (whitelists[_index].length > 0) {
            bool ok;
            for (uint256 i; i < whitelists[_index].length; i++) {
                if (whitelists[_index][i] == msg.sender) {
                    ok = true;
                    break;
                }
            }
            require(ok, "NOT_WHITELISTED");
        }

        _listings[_index].buyer = msg.sender;
        _listings[_index].saleDate = block.timestamp;

        uint256 feeAmount = (L.price * L.fee) / BASIS_PRECISION;
        uint256 sellerAmt = L.price - feeAmount;

        if (L.fundingToken == address(0)) {
            require(msg.value == L.price, "BAD_VALUE");
            (bool ok1,) = payable(feeRecipient).call{ value: feeAmount }("");
            require(ok1, "FEE");
            (bool ok2,) = payable(L.seller).call{ value: sellerAmt }("");
            require(ok2, "PAY");
        } else {
            IERC20 t = IERC20(L.fundingToken);
            require(t.transferFrom(msg.sender, feeRecipient, feeAmount), "FEE_ERC20");
            require(t.transferFrom(msg.sender, L.seller, sellerAmt), "PAY_ERC20");
        }

        IERC721(L.nft).safeTransferFrom(L.seller, msg.sender, L.tokenId);
        emit NftSold(_index);
    }

    /// @notice Remove a listing from the marketplace
    /// @param _id The index of the listing to remove
    /// @dev Only the seller can remove their listing, and only if it hasn't been sold
    function removeListing(uint256 _id) external {
        INftMarket.NftListing memory L = _listings[_id];
        require(L.seller == msg.sender, "OWNER");
        require(L.buyer == address(0), "ALREADY_SOLD");
        delete _listings[_id];
        emit NftListingRemoved(_id);
    }

    /*//////////////////////////////////////////////////////////////
                        OWNER FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    /// @notice Set the default fee for all NFTs (in BASIS_PRECISION)
    function setDefaultFee(uint256 _fee) external onlyOwner {
        require(_fee <= BASIS_PRECISION, "Fee too high");
        emit DefaultFeeUpdated(defaultFee, _fee);
        defaultFee = _fee;
    }

    /// @notice Set a custom fee for a specific NFT contract (in BASIS_PRECISION)
    function setNFTFee(address _nft, uint256 _fee) external onlyOwner {
        require(_fee <= BASIS_PRECISION, "Fee too high");
        emit NFTFeeUpdated(_nft, nftFees[_nft], _fee);
        nftFees[_nft] = _fee;
    }

    /// @notice Set the fee recipient address
    function setFeeRecipient(address _newRecipient) external onlyOwner {
        require(_newRecipient != address(0), "Zero address");
        emit FeeRecipientUpdated(feeRecipient, _newRecipient);
        feeRecipient = _newRecipient;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (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 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 {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @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 {
        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.9.0) (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() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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: MIT
// OpenZeppelin Contracts (last updated v4.9.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 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 ERC721
     * 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 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 (last updated v4.9.4) (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;
    }

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

// 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);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface INftMarket {
    struct NftListing {
        address nft;
        address seller;
        address buyer;
        uint256 tokenId;
        address fundingToken; // address(0) = native
        uint256 price;
        uint256 fee;
        uint256 startDate;
        uint256 endDate;
        uint256 saleDate;
    }

    event DefaultFeeUpdated(uint256 oldFee, uint256 newFee);
    event NFTFeeUpdated(address indexed nft, uint256 oldFee, uint256 newFee);
    event FeeRecipientUpdated(address indexed oldRecipient, address indexed newRecipient);
    event NftListed(
        address indexed seller,
        address indexed nft,
        uint256 tokenId,
        address fundingToken,
        uint256 price,
        address[] whitelist,
        uint256 startDate,
        uint256 endDate,
        uint256 listingID
    );
    event NftSold(uint256 listingID);
    event NftListingRemoved(uint256 indexed listingID);

    function listNFT(
        address _nft,
        uint256 _tokenId,
        address _fundingToken,
        uint256 _price,
        address[] calldata _whitelist,
        uint256 _startDate,
        uint256 _endDate
    ) external;

    function buyNFT(uint256 _listingID) external payable;

    function removeListing(uint256 _listingID) external;

    function getListingLength() external view returns (uint256);

    function getListingByIndex(uint256 _index)
        external
        view
        returns (
            address nft,
            address seller,
            address buyer,
            uint256 tokenId,
            address fundingToken,
            uint256 price,
            uint256 fee,
            uint256 startDate,
            uint256 endDate,
            uint256 saleDate
        );
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"_defaultFee","type":"uint256"},{"internalType":"address","name":"_feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"DefaultFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRecipient","type":"address"},{"indexed":true,"internalType":"address","name":"newRecipient","type":"address"}],"name":"FeeRecipientUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nft","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"NFTFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"nft","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"fundingToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"whitelist","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"startDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"listingID","type":"uint256"}],"name":"NftListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"listingID","type":"uint256"}],"name":"NftListingRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"listingID","type":"uint256"}],"name":"NftSold","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"},{"inputs":[],"name":"BASIS_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"buyNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"defaultFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getListingByIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getListingLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_fundingToken","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"},{"internalType":"uint256","name":"_startDate","type":"uint256"},{"internalType":"uint256","name":"_endDate","type":"uint256"}],"name":"listNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nftFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"removeListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setDefaultFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setNFTFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelists","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162001f6838038062001f68833981016040819052620000349162000155565b6001600055620000443362000103565b670de0b6b3a7640000821115620000915760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064015b60405180910390fd5b6001600160a01b038116620000d85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640162000088565b600391909155600280546001600160a01b0319166001600160a01b0390921691909117905562000194565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080604083850312156200016957600080fd5b825160208401519092506001600160a01b03811681146200018957600080fd5b809150509250929050565b611dc480620001a46000396000f3fe60806040526004361061010e5760003560e01c8063715018a6116100a5578063c93a6c8411610074578063e74b981b11610059578063e74b981b14610337578063f2fde38b14610357578063ffa1ad741461037757600080fd5b8063c93a6c84146102f7578063dc707bf11461031757600080fd5b8063715018a6146102165780638da5cb5b1461022b578063b82eb9f814610249578063c2ca7175146102ca57600080fd5b806349edd0c7116100e157806349edd0c7146101b157806351ed8288146101cd5780635a6c72d0146101e057806362819a5f146101f657600080fd5b8063394e197c146101135780633d1ea47f14610137578063469048401461016f578063479ad4c31461018f575b600080fd5b34801561011f57600080fd5b506005545b6040519081526020015b60405180910390f35b34801561014357600080fd5b50610157610152366004611a6f565b6103cd565b6040516001600160a01b03909116815260200161012e565b34801561017b57600080fd5b50600254610157906001600160a01b031681565b34801561019b57600080fd5b506101af6101aa366004611a91565b610405565b005b3480156101bd57600080fd5b50610124670de0b6b3a764000081565b6101af6101db366004611a91565b6105ea565b3480156101ec57600080fd5b5061012460035481565b34801561020257600080fd5b506101af610211366004611abf565b610db2565b34801561022257600080fd5b506101af610e70565b34801561023757600080fd5b506001546001600160a01b0316610157565b34801561025557600080fd5b50610269610264366004611a91565b610e84565b604080516001600160a01b039b8c168152998b1660208b0152978a1697890197909752606088019590955296909216608086015260a085015260c084015260e08301939093526101008201929092526101208101919091526101400161012e565b3480156102d657600080fd5b506101246102e5366004611aeb565b60046020526000908152604090205481565b34801561030357600080fd5b506101af610312366004611a91565b611012565b34801561032357600080fd5b506101af610332366004611b0f565b6110a2565b34801561034357600080fd5b506101af610352366004611aeb565b6117ab565b34801561036357600080fd5b506101af610372366004611aeb565b611865565b34801561038357600080fd5b506103c06040518060400160405280600381526020017f312e31000000000000000000000000000000000000000000000000000000000081525081565b60405161012e9190611bce565b600660205281600052604060002081815481106103e957600080fd5b6000918252602090912001546001600160a01b03169150829050565b60006005828154811061041a5761041a611c1c565b60009182526020918290206040805161014081018252600a90930290910180546001600160a01b0390811684526001820154811694840185905260028201548116928401929092526003810154606084015260048101549091166080830152600581015460a0830152600681015460c0830152600781015460e0830152600881015461010083015260090154610120820152915033146104e95760405162461bcd60e51b815260206004820152600560248201526427aba722a960d91b60448201526064015b60405180910390fd5b60408101516001600160a01b0316156105445760405162461bcd60e51b815260206004820152600c60248201527f414c52454144595f534f4c44000000000000000000000000000000000000000060448201526064016104e0565b6005828154811061055757610557611c1c565b600091825260208220600a9091020180546001600160a01b0319908116825560018201805482169055600282018054821690556003820183905560048201805490911690556005810182905560068101829055600781018290556008810182905560090181905560405183917ffcba8a55f3e7a5d5b3c54a2e8632a02fa5f0e04404f69d3cc14d9577b01a532e91a25050565b6105f26118f2565b60006005828154811061060757610607611c1c565b60009182526020918290206040805161014081018252600a90930290910180546001600160a01b0390811684526001820154811694840185905260028201548116928401929092526003810154606084015260048101549091166080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009015461012082015291506106e75760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f4c495354494e470000000000000000000000000000000000000000000060448201526064016104e0565b60408101516001600160a01b0316156107445760405162461bcd60e51b81526004016104e09060208082526004908201527f534f4c4400000000000000000000000000000000000000000000000000000000604082015260600190565b60e0810151156107a2578060e001514210156107a25760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f5354415254454400000000000000000000000000000000000000000060448201526064016104e0565b61010081015115610802578061010001514211156108025760405162461bcd60e51b815260206004820152600760248201527f455850495245440000000000000000000000000000000000000000000000000060448201526064016104e0565b600082815260066020526040902054156108d8576000805b60008481526006602052604090205481101561088857600084815260066020526040902080543391908390811061085357610853611c1c565b6000918252602090912001546001600160a01b0316036108765760019150610888565b8061088081611c48565b91505061081a565b50806108d65760405162461bcd60e51b815260206004820152600f60248201527f4e4f545f57484954454c4953544544000000000000000000000000000000000060448201526064016104e0565b505b33600583815481106108ec576108ec611c1c565b90600052602060002090600a020160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550426005838154811061093557610935611c1c565b90600052602060002090600a0201600901819055506000670de0b6b3a76400008260c001518360a001516109699190611c61565b6109739190611c7e565b90506000818360a001516109879190611ca0565b60808401519091506001600160a01b0316610b40578260a0015134146109ef5760405162461bcd60e51b815260206004820152600960248201527f4241445f56414c5545000000000000000000000000000000000000000000000060448201526064016104e0565b6002546040516000916001600160a01b03169084908381818185875af1925050503d8060008114610a3c576040519150601f19603f3d011682016040523d82523d6000602084013e610a41565b606091505b5050905080610a925760405162461bcd60e51b815260206004820152600360248201527f464545000000000000000000000000000000000000000000000000000000000060448201526064016104e0565b600084602001516001600160a01b03168360405160006040518083038185875af1925050503d8060008114610ae3576040519150601f19603f3d011682016040523d82523d6000602084013e610ae8565b606091505b5050905080610b395760405162461bcd60e51b815260206004820152600360248201527f504159000000000000000000000000000000000000000000000000000000000060448201526064016104e0565b5050610cdb565b60808301516002546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101859052908216906323b872dd906064016020604051808303816000875af1158015610b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc29190611cb3565b610c0e5760405162461bcd60e51b815260206004820152600960248201527f4645455f4552433230000000000000000000000000000000000000000000000060448201526064016104e0565b60208401516040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101849052908216906323b872dd906064016020604051808303816000875af1158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190611cb3565b610cd95760405162461bcd60e51b815260206004820152600960248201527f5041595f4552433230000000000000000000000000000000000000000000000060448201526064016104e0565b505b8251602084015160608501516040517f42842e0e0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015233602482015260448101919091529116906342842e0e90606401600060405180830381600087803b158015610d5157600080fd5b505af1158015610d65573d6000803e3d6000fd5b505050507f7de4fc5f40665d07bb617583443d17e37be07c379b26aaeef4e6dd18ab4da05a84604051610d9a91815260200190565b60405180910390a1505050610daf6001600055565b50565b610dba61194b565b670de0b6b3a7640000811115610e015760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064016104e0565b6001600160a01b0382166000818152600460209081526040918290205482519081529081018490527f7131684b13f4d0a7e839a858772b68c695510d58798266c4e5129fc218f5d33e910160405180910390a26001600160a01b03909116600090815260046020526040902055565b610e7861194b565b610e8260006119a5565b565b600080600080600080600080600080600060058c81548110610ea857610ea8611c1c565b90600052602060002090600a0201604051806101400160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600382015481526020016004820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820154815250509050806000015181602001518260400151836060015184608001518560a001518660c001518760e001518861010001518961012001519a509a509a509a509a509a509a509a509a509a50509193959799509193959799565b61101a61194b565b670de0b6b3a76400008111156110615760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064016104e0565b60035460408051918252602082018390527fac1f58cd233fc224bd53b979e04547b08f9e5da37a3fa94f2afa216dfba59230910160405180910390a1600355565b600085116110f25760405162461bcd60e51b815260206004820152600560248201527f505249434500000000000000000000000000000000000000000000000000000060448201526064016104e0565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810188905233906001600160a01b038a1690636352211e90602401602060405180830381865afa158015611152573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111769190611cd5565b6001600160a01b0316146111b45760405162461bcd60e51b815260206004820152600560248201526427aba722a960d91b60448201526064016104e0565b6040517f081812fc0000000000000000000000000000000000000000000000000000000081526004810188905230906001600160a01b038a169063081812fc90602401602060405180830381865afa158015611214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190611cd5565b6001600160a01b031614806112cf57506040517fe985e9c50000000000000000000000000000000000000000000000000000000081523360048201523060248201526001600160a01b0389169063e985e9c590604401602060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf9190611cb3565b61131b5760405162461bcd60e51b815260206004820152600860248201527f415050524f56414c00000000000000000000000000000000000000000000000060448201526064016104e0565b6001600160a01b038616156113d257856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611384575060408051601f3d908101601f1916820190925261138191810190611cf2565b60015b6113d05760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642045524332300000000000000000000000000000000000000060448201526064016104e0565b505b81428110156113de5750425b81156114a8574282116114335760405162461bcd60e51b815260206004820152601a60248201527f456e642064617465206d75737420626520696e2066757475726500000000000060448201526064016104e0565b8082116114a85760405162461bcd60e51b815260206004820152602160248201527f456e642064617465206d7573742062652061667465722073746172742064617460448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104e0565b6001600160a01b0389166000908152600460205260408120546114cd576003546114e7565b6001600160a01b038a166000908152600460205260409020545b60408051610140810182526001600160a01b03808e16825233602083019081526000938301848152606084018f81528e84166080860190815260a086018f815260c0870189815260e088018c815261010089018e81526101208a018b81526005805460018181018355828f528d51600a9092027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018054938f166001600160a01b03199485161790559b517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db18d018054918f1691841691909117905599517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db28c018054918e1691831691909117905597517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db38b015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db48a01805491909b1697169690961790985591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db5870155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db6860155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db785015593517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db8840155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db990920191909155905493945090926117219190611ca0565b905086156117445760008181526006602052604090206117429089896119f7565b505b8b6001600160a01b0316336001600160a01b03167fb64565723ead64908bf659fd7f5c4940852a086c6376f2697244e815b2046d7c8d8d8d8d8d8d8d8a604051611795989796959493929190611d0b565b60405180910390a3505050505050505050505050565b6117b361194b565b6001600160a01b0381166118095760405162461bcd60e51b815260206004820152600c60248201527f5a65726f2061646472657373000000000000000000000000000000000000000060448201526064016104e0565b6002546040516001600160a01b038084169216907faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d390600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b61186d61194b565b6001600160a01b0381166118e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104e0565b610daf816119a5565b6002600054036119445760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104e0565b6002600055565b6001546001600160a01b03163314610e825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e0565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054828255906000526020600020908101928215611a4a579160200282015b82811115611a4a5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611a17565b50611a56929150611a5a565b5090565b5b80821115611a565760008155600101611a5b565b60008060408385031215611a8257600080fd5b50508035926020909101359150565b600060208284031215611aa357600080fd5b5035919050565b6001600160a01b0381168114610daf57600080fd5b60008060408385031215611ad257600080fd5b8235611add81611aaa565b946020939093013593505050565b600060208284031215611afd57600080fd5b8135611b0881611aaa565b9392505050565b60008060008060008060008060e0898b031215611b2b57600080fd5b8835611b3681611aaa565b9750602089013596506040890135611b4d81611aaa565b955060608901359450608089013567ffffffffffffffff80821115611b7157600080fd5b818b0191508b601f830112611b8557600080fd5b813581811115611b9457600080fd5b8c60208260051b8501011115611ba957600080fd5b999c989b50969995986020919091019790965060a08601359560c00135945092505050565b600060208083528351808285015260005b81811015611bfb57858101830151858201604001528201611bdf565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611c5a57611c5a611c32565b5060010190565b8082028115828204841417611c7857611c78611c32565b92915050565b600082611c9b57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115611c7857611c78611c32565b600060208284031215611cc557600080fd5b81518015158114611b0857600080fd5b600060208284031215611ce757600080fd5b8151611b0881611aaa565b600060208284031215611d0457600080fd5b5051919050565b600060e082018a835260206001600160a01b03808c16828601528a604086015260e0606086015282898452610100860190508a935060005b8a811015611d6a578435611d5681611aaa565b831682529383019390830190600101611d43565b5060808601989098525050505060a081019290925260c0909101529594505050505056fea2646970667358221220346064321778a784b6f89d32a97d8e4d9514acfb231f22d74759035b7e6f86ae64736f6c634300081300330000000000000000000000000000000000000000000000000058d15e17628000000000000000000000000000bae7c88f01eaa273e8834af38cacab2910ed9b93

Deployed Bytecode

0x60806040526004361061010e5760003560e01c8063715018a6116100a5578063c93a6c8411610074578063e74b981b11610059578063e74b981b14610337578063f2fde38b14610357578063ffa1ad741461037757600080fd5b8063c93a6c84146102f7578063dc707bf11461031757600080fd5b8063715018a6146102165780638da5cb5b1461022b578063b82eb9f814610249578063c2ca7175146102ca57600080fd5b806349edd0c7116100e157806349edd0c7146101b157806351ed8288146101cd5780635a6c72d0146101e057806362819a5f146101f657600080fd5b8063394e197c146101135780633d1ea47f14610137578063469048401461016f578063479ad4c31461018f575b600080fd5b34801561011f57600080fd5b506005545b6040519081526020015b60405180910390f35b34801561014357600080fd5b50610157610152366004611a6f565b6103cd565b6040516001600160a01b03909116815260200161012e565b34801561017b57600080fd5b50600254610157906001600160a01b031681565b34801561019b57600080fd5b506101af6101aa366004611a91565b610405565b005b3480156101bd57600080fd5b50610124670de0b6b3a764000081565b6101af6101db366004611a91565b6105ea565b3480156101ec57600080fd5b5061012460035481565b34801561020257600080fd5b506101af610211366004611abf565b610db2565b34801561022257600080fd5b506101af610e70565b34801561023757600080fd5b506001546001600160a01b0316610157565b34801561025557600080fd5b50610269610264366004611a91565b610e84565b604080516001600160a01b039b8c168152998b1660208b0152978a1697890197909752606088019590955296909216608086015260a085015260c084015260e08301939093526101008201929092526101208101919091526101400161012e565b3480156102d657600080fd5b506101246102e5366004611aeb565b60046020526000908152604090205481565b34801561030357600080fd5b506101af610312366004611a91565b611012565b34801561032357600080fd5b506101af610332366004611b0f565b6110a2565b34801561034357600080fd5b506101af610352366004611aeb565b6117ab565b34801561036357600080fd5b506101af610372366004611aeb565b611865565b34801561038357600080fd5b506103c06040518060400160405280600381526020017f312e31000000000000000000000000000000000000000000000000000000000081525081565b60405161012e9190611bce565b600660205281600052604060002081815481106103e957600080fd5b6000918252602090912001546001600160a01b03169150829050565b60006005828154811061041a5761041a611c1c565b60009182526020918290206040805161014081018252600a90930290910180546001600160a01b0390811684526001820154811694840185905260028201548116928401929092526003810154606084015260048101549091166080830152600581015460a0830152600681015460c0830152600781015460e0830152600881015461010083015260090154610120820152915033146104e95760405162461bcd60e51b815260206004820152600560248201526427aba722a960d91b60448201526064015b60405180910390fd5b60408101516001600160a01b0316156105445760405162461bcd60e51b815260206004820152600c60248201527f414c52454144595f534f4c44000000000000000000000000000000000000000060448201526064016104e0565b6005828154811061055757610557611c1c565b600091825260208220600a9091020180546001600160a01b0319908116825560018201805482169055600282018054821690556003820183905560048201805490911690556005810182905560068101829055600781018290556008810182905560090181905560405183917ffcba8a55f3e7a5d5b3c54a2e8632a02fa5f0e04404f69d3cc14d9577b01a532e91a25050565b6105f26118f2565b60006005828154811061060757610607611c1c565b60009182526020918290206040805161014081018252600a90930290910180546001600160a01b0390811684526001820154811694840185905260028201548116928401929092526003810154606084015260048101549091166080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009015461012082015291506106e75760405162461bcd60e51b815260206004820152600a60248201527f4e4f5f4c495354494e470000000000000000000000000000000000000000000060448201526064016104e0565b60408101516001600160a01b0316156107445760405162461bcd60e51b81526004016104e09060208082526004908201527f534f4c4400000000000000000000000000000000000000000000000000000000604082015260600190565b60e0810151156107a2578060e001514210156107a25760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f5354415254454400000000000000000000000000000000000000000060448201526064016104e0565b61010081015115610802578061010001514211156108025760405162461bcd60e51b815260206004820152600760248201527f455850495245440000000000000000000000000000000000000000000000000060448201526064016104e0565b600082815260066020526040902054156108d8576000805b60008481526006602052604090205481101561088857600084815260066020526040902080543391908390811061085357610853611c1c565b6000918252602090912001546001600160a01b0316036108765760019150610888565b8061088081611c48565b91505061081a565b50806108d65760405162461bcd60e51b815260206004820152600f60248201527f4e4f545f57484954454c4953544544000000000000000000000000000000000060448201526064016104e0565b505b33600583815481106108ec576108ec611c1c565b90600052602060002090600a020160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550426005838154811061093557610935611c1c565b90600052602060002090600a0201600901819055506000670de0b6b3a76400008260c001518360a001516109699190611c61565b6109739190611c7e565b90506000818360a001516109879190611ca0565b60808401519091506001600160a01b0316610b40578260a0015134146109ef5760405162461bcd60e51b815260206004820152600960248201527f4241445f56414c5545000000000000000000000000000000000000000000000060448201526064016104e0565b6002546040516000916001600160a01b03169084908381818185875af1925050503d8060008114610a3c576040519150601f19603f3d011682016040523d82523d6000602084013e610a41565b606091505b5050905080610a925760405162461bcd60e51b815260206004820152600360248201527f464545000000000000000000000000000000000000000000000000000000000060448201526064016104e0565b600084602001516001600160a01b03168360405160006040518083038185875af1925050503d8060008114610ae3576040519150601f19603f3d011682016040523d82523d6000602084013e610ae8565b606091505b5050905080610b395760405162461bcd60e51b815260206004820152600360248201527f504159000000000000000000000000000000000000000000000000000000000060448201526064016104e0565b5050610cdb565b60808301516002546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101859052908216906323b872dd906064016020604051808303816000875af1158015610b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc29190611cb3565b610c0e5760405162461bcd60e51b815260206004820152600960248201527f4645455f4552433230000000000000000000000000000000000000000000000060448201526064016104e0565b60208401516040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101849052908216906323b872dd906064016020604051808303816000875af1158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190611cb3565b610cd95760405162461bcd60e51b815260206004820152600960248201527f5041595f4552433230000000000000000000000000000000000000000000000060448201526064016104e0565b505b8251602084015160608501516040517f42842e0e0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015233602482015260448101919091529116906342842e0e90606401600060405180830381600087803b158015610d5157600080fd5b505af1158015610d65573d6000803e3d6000fd5b505050507f7de4fc5f40665d07bb617583443d17e37be07c379b26aaeef4e6dd18ab4da05a84604051610d9a91815260200190565b60405180910390a1505050610daf6001600055565b50565b610dba61194b565b670de0b6b3a7640000811115610e015760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064016104e0565b6001600160a01b0382166000818152600460209081526040918290205482519081529081018490527f7131684b13f4d0a7e839a858772b68c695510d58798266c4e5129fc218f5d33e910160405180910390a26001600160a01b03909116600090815260046020526040902055565b610e7861194b565b610e8260006119a5565b565b600080600080600080600080600080600060058c81548110610ea857610ea8611c1c565b90600052602060002090600a0201604051806101400160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600382015481526020016004820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820154815250509050806000015181602001518260400151836060015184608001518560a001518660c001518760e001518861010001518961012001519a509a509a509a509a509a509a509a509a509a50509193959799509193959799565b61101a61194b565b670de0b6b3a76400008111156110615760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064016104e0565b60035460408051918252602082018390527fac1f58cd233fc224bd53b979e04547b08f9e5da37a3fa94f2afa216dfba59230910160405180910390a1600355565b600085116110f25760405162461bcd60e51b815260206004820152600560248201527f505249434500000000000000000000000000000000000000000000000000000060448201526064016104e0565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810188905233906001600160a01b038a1690636352211e90602401602060405180830381865afa158015611152573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111769190611cd5565b6001600160a01b0316146111b45760405162461bcd60e51b815260206004820152600560248201526427aba722a960d91b60448201526064016104e0565b6040517f081812fc0000000000000000000000000000000000000000000000000000000081526004810188905230906001600160a01b038a169063081812fc90602401602060405180830381865afa158015611214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190611cd5565b6001600160a01b031614806112cf57506040517fe985e9c50000000000000000000000000000000000000000000000000000000081523360048201523060248201526001600160a01b0389169063e985e9c590604401602060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf9190611cb3565b61131b5760405162461bcd60e51b815260206004820152600860248201527f415050524f56414c00000000000000000000000000000000000000000000000060448201526064016104e0565b6001600160a01b038616156113d257856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611384575060408051601f3d908101601f1916820190925261138191810190611cf2565b60015b6113d05760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642045524332300000000000000000000000000000000000000060448201526064016104e0565b505b81428110156113de5750425b81156114a8574282116114335760405162461bcd60e51b815260206004820152601a60248201527f456e642064617465206d75737420626520696e2066757475726500000000000060448201526064016104e0565b8082116114a85760405162461bcd60e51b815260206004820152602160248201527f456e642064617465206d7573742062652061667465722073746172742064617460448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104e0565b6001600160a01b0389166000908152600460205260408120546114cd576003546114e7565b6001600160a01b038a166000908152600460205260409020545b60408051610140810182526001600160a01b03808e16825233602083019081526000938301848152606084018f81528e84166080860190815260a086018f815260c0870189815260e088018c815261010089018e81526101208a018b81526005805460018181018355828f528d51600a9092027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db081018054938f166001600160a01b03199485161790559b517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db18d018054918f1691841691909117905599517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db28c018054918e1691831691909117905597517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db38b015595517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db48a01805491909b1697169690961790985591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db5870155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db6860155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db785015593517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db8840155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db990920191909155905493945090926117219190611ca0565b905086156117445760008181526006602052604090206117429089896119f7565b505b8b6001600160a01b0316336001600160a01b03167fb64565723ead64908bf659fd7f5c4940852a086c6376f2697244e815b2046d7c8d8d8d8d8d8d8d8a604051611795989796959493929190611d0b565b60405180910390a3505050505050505050505050565b6117b361194b565b6001600160a01b0381166118095760405162461bcd60e51b815260206004820152600c60248201527f5a65726f2061646472657373000000000000000000000000000000000000000060448201526064016104e0565b6002546040516001600160a01b038084169216907faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d390600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b61186d61194b565b6001600160a01b0381166118e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104e0565b610daf816119a5565b6002600054036119445760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104e0565b6002600055565b6001546001600160a01b03163314610e825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104e0565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054828255906000526020600020908101928215611a4a579160200282015b82811115611a4a5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611a17565b50611a56929150611a5a565b5090565b5b80821115611a565760008155600101611a5b565b60008060408385031215611a8257600080fd5b50508035926020909101359150565b600060208284031215611aa357600080fd5b5035919050565b6001600160a01b0381168114610daf57600080fd5b60008060408385031215611ad257600080fd5b8235611add81611aaa565b946020939093013593505050565b600060208284031215611afd57600080fd5b8135611b0881611aaa565b9392505050565b60008060008060008060008060e0898b031215611b2b57600080fd5b8835611b3681611aaa565b9750602089013596506040890135611b4d81611aaa565b955060608901359450608089013567ffffffffffffffff80821115611b7157600080fd5b818b0191508b601f830112611b8557600080fd5b813581811115611b9457600080fd5b8c60208260051b8501011115611ba957600080fd5b999c989b50969995986020919091019790965060a08601359560c00135945092505050565b600060208083528351808285015260005b81811015611bfb57858101830151858201604001528201611bdf565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611c5a57611c5a611c32565b5060010190565b8082028115828204841417611c7857611c78611c32565b92915050565b600082611c9b57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115611c7857611c78611c32565b600060208284031215611cc557600080fd5b81518015158114611b0857600080fd5b600060208284031215611ce757600080fd5b8151611b0881611aaa565b600060208284031215611d0457600080fd5b5051919050565b600060e082018a835260206001600160a01b03808c16828601528a604086015260e0606086015282898452610100860190508a935060005b8a811015611d6a578435611d5681611aaa565b831682529383019390830190600101611d43565b5060808601989098525050505060a081019290925260c0909101529594505050505056fea2646970667358221220346064321778a784b6f89d32a97d8e4d9514acfb231f22d74759035b7e6f86ae64736f6c63430008130033

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

0000000000000000000000000000000000000000000000000058d15e17628000000000000000000000000000bae7c88f01eaa273e8834af38cacab2910ed9b93

-----Decoded View---------------
Arg [0] : _defaultFee (uint256): 25000000000000000
Arg [1] : _feeRecipient (address): 0xbAE7c88F01eAa273e8834Af38Cacab2910ed9B93

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000058d15e17628000
Arg [1] : 000000000000000000000000bae7c88f01eaa273e8834af38cacab2910ed9b93


Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.