ETH Price: $3,110.11 (+0.16%)

Contract

0xE04b882684CECe7511b9cb1f88Ac07aCdfc0FAEB
 

Overview

ETH Balance

0.041 ETH

Eth Value

$127.51 (@ $3,110.11/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw149652682022-06-15 3:05:08887 days ago1655262308IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0008584928.8222608
Bid147487062022-05-10 12:58:38922 days ago1652187518IN
0xE04b8826...Cdfc0FAEB
0.001 ETH0.0026319835.35048449
Withdraw144273632022-03-21 3:41:24973 days ago1647834084IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0011236237.72332953
Withdraw137517802021-12-06 10:33:361078 days ago1638786816IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0024111380.94873989
Revoke Bid137517682021-12-06 10:32:021078 days ago1638786722IN
0xE04b8826...Cdfc0FAEB
0 ETH0.003625975.51617011
Bid136845412021-11-25 16:28:191088 days ago1637857699IN
0xE04b8826...Cdfc0FAEB
0.1 ETH0.008933119.98014984
Withdraw135950662021-11-11 13:06:051102 days ago1636635965IN
0xE04b8826...Cdfc0FAEB
0 ETH0.00354157141.17717835
Withdraw135950662021-11-11 13:06:051102 days ago1636635965IN
0xE04b8826...Cdfc0FAEB
0 ETH0.00419021140.67717835
Revoke Bid135760152021-11-08 13:20:561105 days ago1636377656IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0042926789.40272712
Withdraw135161122021-10-30 3:23:301115 days ago1635564210IN
0xE04b8826...Cdfc0FAEB
0 ETH0.00513221172.30304814
Bid134742592021-10-23 14:16:431121 days ago1634998603IN
0xE04b8826...Cdfc0FAEB
0.02 ETH0.0042548957.14795122
Offer134719292021-10-23 5:27:061122 days ago1634966826IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0062456777.26353642
Withdraw134661592021-10-22 7:40:581123 days ago1634888458IN
0xE04b8826...Cdfc0FAEB
0 ETH0.002017267.72332995
Revoke Bid134661312021-10-22 7:36:111123 days ago1634888171IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0032849368.41471276
Withdraw134621242021-10-21 16:36:251123 days ago1634834185IN
0xE04b8826...Cdfc0FAEB
0 ETH0.009009302.45771154
Revoke Bid134613852021-10-21 13:52:351123 days ago1634824355IN
0xE04b8826...Cdfc0FAEB
0 ETH0.00521182108.5458562
Offer134610172021-10-21 12:28:491123 days ago1634819329IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0080895969.35344987
Bid134569132021-10-20 21:17:451124 days ago1634764665IN
0xE04b8826...Cdfc0FAEB
0.2 ETH0.0059301679.64868682
Revoke Bid134568992021-10-20 21:14:391124 days ago1634764479IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0036099175.18315824
Offer134534572021-10-20 8:08:471125 days ago1634717327IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0039525948.88916327
Bid134490702021-10-19 15:42:371125 days ago1634658157IN
0xE04b8826...Cdfc0FAEB
0.02 ETH0.0045962661.73297082
Bid134475402021-10-19 9:57:201126 days ago1634637440IN
0xE04b8826...Cdfc0FAEB
0.02 ETH0.0031310642.05370647
Bid134385912021-10-18 0:14:511127 days ago1634516091IN
0xE04b8826...Cdfc0FAEB
0.05 ETH0.0054164172.74840847
Offer134303392021-10-16 17:17:531128 days ago1634404673IN
0xE04b8826...Cdfc0FAEB
0 ETH0.0090838112.37331845
Bid134297962021-10-16 15:23:251128 days ago1634397805IN
0xE04b8826...Cdfc0FAEB
0.22 ETH0.0110895148.94444776
View all transactions

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
149652682022-06-15 3:05:08887 days ago1655262308
0xE04b8826...Cdfc0FAEB
0.01 ETH
144273632022-03-21 3:41:24973 days ago1647834084
0xE04b8826...Cdfc0FAEB
0.05 ETH
137517802021-12-06 10:33:361078 days ago1638786816
0xE04b8826...Cdfc0FAEB
0.1 ETH
135950662021-11-11 13:06:051102 days ago1636635965
0xE04b8826...Cdfc0FAEB
0.22 ETH
135161122021-10-30 3:23:301115 days ago1635564210
0xE04b8826...Cdfc0FAEB
0.3 ETH
134661592021-10-22 7:40:581123 days ago1634888458
0xE04b8826...Cdfc0FAEB
0.02 ETH
134621242021-10-21 16:36:251123 days ago1634834185
0xE04b8826...Cdfc0FAEB
0.19 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NFTMarketplace

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : NFTMarketplace.sol
// SPDX-License-Identifier: Apache-2.0

pragma solidity 0.8.9; // code below expects that integer overflows will revert

import "./Vendor/openzeppelin-contracts-3dadd40034961d5ca75fa209a4188b01d7129501/token/ERC721/IERC721.sol";
import "./Vendor/openzeppelin-contracts-3dadd40034961d5ca75fa209a4188b01d7129501/access/Ownable.sol";
import "./Utilities/Withdrawable.sol";

/// @title  Area marketplace contract, 🌐 the earth on the blockchain, 📌 geolocation NFTs
/// @notice This decentralized marketplace matches bids and offers for one underlying ERC-721 contract. With much
///         respect to CryptoPunks. Your offers & bids on this marketplace will close only if matched on this
///         marketplace. If you trade anywhere else, consider to revoke your offers & bids here.
/// @author William Entriken
contract NFTMarketplace is Ownable, Withdrawable {
    struct TokenMarket {
        address offeror;       // The token owner that is selling
        uint256 minimumOffer;  // The amount (in Wei) that is the minimum to accept; or zero to indicate no offer
        address invitedBidder; // The exclusive invited buyer for this offer; or the zero address if not exclusive

        address bidder;        // The party that committed Ether to bid
        uint256 lockedBid;     // The amount (in Wei) that the bidder has committed
    }

    /// @notice The underlying asset contract
    IERC721 immutable public tokenContract;

    /// @notice The transaction fee (in basis points) as a portion of the sale price
    uint256 public feePortion;

    /// @notice The best bids and offers for any token
    mapping(uint256 => TokenMarket) public tokenMarkets;

    /// @notice A token is offered for sale by owner; or such an offer is revoked
    /// @param  tokenId       which token
    /// @param  offeror       the token owner that is selling
    /// @param  minimumOffer  the amount (in Wei) that is the minimum to accept; or zero to indicate no offer
    /// @param  invitedBidder the exclusive invited buyer for this offer; or the zero address if not exclusive
    event OfferUpdated(uint256 indexed tokenId, address offeror, uint256 minimumOffer, address invitedBidder);

    /// @notice A new highest bid is committed for a token; or such a bid is revoked
    /// @param  tokenId   which token
    /// @param  bidder    the party that committed Ether to bid
    /// @param  lockedBid the amount (in Wei) that the bidder has committed
    event BidUpdated(uint256 indexed tokenId, address bidder, uint256 lockedBid);

    /// @notice A token is traded on the marketplace (this implies any offer for the token is revoked)
    /// @param  tokenId which token
    /// @param  value   the sale price
    /// @param  offeror the party that previously owned the token
    /// @param  bidder  the party that now owns the token
    event Traded(uint256 indexed tokenId, uint256 value, address indexed offeror, address indexed bidder);

    /// @param initialFeePortion         the transaction fee (in basis points) as a portion of the sale price
    /// @param immutableNftTokenContract the underlying NFT asset
    constructor(uint256 initialFeePortion, IERC721 immutableNftTokenContract) {
        feePortion = initialFeePortion;
        tokenContract = immutableNftTokenContract;
    }

    /// @notice An offeror may revoke their offer
    /// @dev    It is possible that a token will change owners without this contract being notified (e.g. an ERC-721
    ///         "gift" transaction). In this case the old owner who made an offer needs, and gets, a way to revoke that.
    ///         There is no reason why the new owner of a token would need to revoke the prior owner's ineffectual
    ///         offer. But we provide this option anyway because we recognize the token market to be the prerogative of
    ///         that token's owner.
    /// @param  tokenId which token
    function revokeOffer(uint256 tokenId) external {
        require(
            (msg.sender == tokenMarkets[tokenId].offeror) ||
            (msg.sender == tokenContract.ownerOf(tokenId)),
            "Only the offeror or token owner may revoke an offer"
        );
        _setOffer(tokenId, address(0), 0, address(0));
    }

    /// @notice Any token owner may offer it for sale
    /// @dev    If a bid comes which is higher than the offer then the sale price will be this higher amount.
    /// @param  tokenId       which token
    /// @param  minimumOffer  the amount (in Wei) that is the minimum to accept
    /// @param  invitedBidder the exclusive invited buyer for this offer; or the zero address if not exclusive
    function offer(uint256 tokenId, uint256 minimumOffer, address invitedBidder) external {
        require(msg.sender == tokenContract.ownerOf(tokenId), "Only the token owner can offer");
        require(minimumOffer > 0, "Ask for more");
        address bidder = tokenMarkets[tokenId].bidder;
        uint256 lockedBid = tokenMarkets[tokenId].lockedBid;
        bool isInvited = invitedBidder == address(0) || invitedBidder == bidder;

        // Can we match this offer to an existing bid?
        if (lockedBid >= minimumOffer && isInvited) {
            _doTrade(tokenId, lockedBid, msg.sender, bidder);
            _setBid(tokenId, address(0), 0);
        } else {
            _setOffer(tokenId, msg.sender, minimumOffer, invitedBidder);
        }
    }

    /// @notice An bidder may revoke their bid
    /// @param  tokenId which token
    function revokeBid(uint256 tokenId) external {
        require(msg.sender == tokenMarkets[tokenId].bidder, "Only the bidder may revoke their bid");
        _increasePendingWithdrawal(msg.sender, tokenMarkets[tokenId].lockedBid);
        _setBid(tokenId, address(0), 0);
    }

    /// @notice Anyone may commit more than the existing bid for a token.
    /// @dev    When reading the below, note there are three important contexts to consider:
    ///          1. There is no existing bidder
    ///          2. The message caller is the highest bidder
    ///          3. Somebody else is the highest bidder
    ///         when you submit this transaction and when it settles.
    /// @param  tokenId which token
    function bid(uint256 tokenId) external payable {
        uint256 existingLockedBid = tokenMarkets[tokenId].lockedBid;
        require(msg.value > existingLockedBid, "Bid too low");
        address existingBidder = tokenMarkets[tokenId].bidder;
        uint256 minimumOffer = tokenMarkets[tokenId].minimumOffer;
        address invitedBidder = tokenMarkets[tokenId].invitedBidder;
        address offeror = tokenMarkets[tokenId].offeror;
        bool isInvited = invitedBidder == address(0) || invitedBidder == msg.sender;

        // Can we match this bid to an existing offer?
        if (minimumOffer > 0 &&
            msg.value >= minimumOffer &&
            isInvited &&
            offeror == tokenContract.ownerOf(tokenId)) {
            _doTrade(tokenId, msg.value, offeror, msg.sender);
            if (existingBidder == msg.sender) {
                // This is context 2
                _increasePendingWithdrawal(msg.sender, existingLockedBid);
                _setBid(tokenId, address(0), 0);
            }
        } else {
            // Wind up old bid, if any
            if (existingLockedBid > 0) {
                // This is context 2 or 3
                _increasePendingWithdrawal(existingBidder, existingLockedBid);
            }
            // Enter new bid
            _setBid(tokenId, msg.sender, msg.value);
        }
    }

    /// @notice Anyone may add more value to their existing bid
    /// @param  tokenId which token
    function bidIncrease(uint256 tokenId) external payable {
        require(msg.value > 0, "Must send value to increase bid");
        require(msg.sender == tokenMarkets[tokenId].bidder, "You are not current bidder");
        uint256 newBidAmount = tokenMarkets[tokenId].lockedBid + msg.value;
        uint256 minimumOffer = tokenMarkets[tokenId].minimumOffer;
        address invitedBidder = tokenMarkets[tokenId].invitedBidder;
        address offeror = tokenMarkets[tokenId].offeror;
        bool isInvited = invitedBidder == address(0) || invitedBidder == msg.sender;

        // Can we match this bid to an existing offer?
        if (minimumOffer > 0 &&
            newBidAmount >= minimumOffer &&
            isInvited &&
            offeror == tokenContract.ownerOf(tokenId)) {
            _doTrade(tokenId, newBidAmount, offeror, msg.sender);
            _setBid(tokenId, address(0), 0);
        } else {
            tokenMarkets[tokenId].lockedBid = newBidAmount;
            _setBid(tokenId, msg.sender, newBidAmount);
        }
    }

    /// @notice The owner can set the fee portion
    /// @param  newFeePortion the transaction fee (in basis points) as a portion of the sale price
    function setFeePortion(uint256 newFeePortion) external onlyOwner {
        require(newFeePortion <= 1000, "Exceeded maximum fee portion of 10%");
        feePortion = newFeePortion;
    }

    /// @dev Collect fee for owner & offeror and transfer underlying asset. The Traded event emits before the
    ///      ERC721.Transfer event so that somebody observing the events and seeing the latter will recognize the
    ///      context of the former. The bid is NOT cleaned up generally in this function because a circumstance exists
    ///      where an existing bid persists after a trade. See "context 3" above.
    function _doTrade(uint256 tokenId, uint256 value, address offeror, address bidder) private {
        // Divvy up proceeds
        uint256 feeAmount = value * feePortion / 10000; // reverts on overflow
        _increasePendingWithdrawal(Ownable.owner(), feeAmount);
        _increasePendingWithdrawal(offeror, value - feeAmount);

        emit Traded(tokenId, value, offeror, bidder);
        tokenMarkets[tokenId].offeror = address(0);
        tokenMarkets[tokenId].minimumOffer = 0;
        tokenMarkets[tokenId].invitedBidder = address(0);
        tokenContract.transferFrom(offeror, bidder, tokenId);
    }

    /// @dev Set and emit new offer
    function _setOffer(uint256 tokenId, address offeror, uint256 minimumOffer, address invitedBidder) private {
        tokenMarkets[tokenId].offeror = offeror;
        tokenMarkets[tokenId].minimumOffer = minimumOffer;
        tokenMarkets[tokenId].invitedBidder = invitedBidder;
        emit OfferUpdated(tokenId, offeror, minimumOffer, invitedBidder);
    }

    /// @dev Set and emit new bid
    function _setBid(uint256 tokenId, address bidder, uint256 lockedBid) private {
        tokenMarkets[tokenId].bidder = bidder;
        tokenMarkets[tokenId].lockedBid = lockedBid;
        emit BidUpdated(tokenId, bidder, lockedBid);
    }
}

File 2 of 6 : Withdrawable.sol
// SPDX-License-Identifier: Apache-2.0

pragma solidity 0.8.9; // code below expects that integer overflows will revert

/// @title  Part of Area, 🌐 the earth on the blockchain, 📌 geolocation NFTs
/// @notice This Ether accounting system stores value inside this contract and makes it available for beneficiaries to
///         withdraw.
/// @author William Entriken
contract Withdrawable {
    /// @notice Ether waiting for beneficiaries to withdraw
    mapping(address => uint256) private _pendingWithdrawals;

    /// @notice Amount of Ether waiting for beneficiaries to withdraw is updated
    /// @param  beneficiary which beneficiary can withdraw
    /// @param  amount      amount (in Wei) that is pending withdrawal
    event PendingWithdrawal(address beneficiary, uint256 amount);

    /// @notice Beneficiaries can withdraw any Ether held for them
    function withdraw() external {
        uint256 amountToWithdraw = _pendingWithdrawals[msg.sender];
        // Remember to zero the pending refund before sending to prevent re-entrancy attacks
        delete _pendingWithdrawals[msg.sender];
        payable(msg.sender).transfer(amountToWithdraw);
        emit PendingWithdrawal(msg.sender, 0);
    }

    /// @notice Gets amount of Ether waiting for beneficiary to withdraw
    /// @param  beneficiary which beneficiary is queried
    /// @return amount      how much the beneficiary can withdraw
    function pendingWithdrawal(address beneficiary) public view returns (uint256 amount) {
        return _pendingWithdrawals[beneficiary];
    }

    /// @notice Amount of Ether waiting for beneficiaries to withdraw is increased
    /// @param  beneficiary which beneficiary can withdraw
    /// @param  amount      amount (in Wei) that is pending withdrawal
    function _increasePendingWithdrawal(address beneficiary, uint256 amount) internal {
        _pendingWithdrawals[beneficiary] += amount;
        emit PendingWithdrawal(beneficiary, _pendingWithdrawals[beneficiary]);
    }
}

File 3 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT

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() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 6 : IERC721.sol
// SPDX-License-Identifier: MIT

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`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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

File 5 of 6 : IERC165.sol
// SPDX-License-Identifier: MIT

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

File 6 of 6 : Context.sol
// SPDX-License-Identifier: MIT

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"initialFeePortion","type":"uint256"},{"internalType":"contract IERC721","name":"immutableNftTokenContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"lockedBid","type":"uint256"}],"name":"BidUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"offeror","type":"address"},{"indexed":false,"internalType":"uint256","name":"minimumOffer","type":"uint256"},{"indexed":false,"internalType":"address","name":"invitedBidder","type":"address"}],"name":"OfferUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PendingWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"offeror","type":"address"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"}],"name":"Traded","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"bid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"bidIncrease","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feePortion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"minimumOffer","type":"uint256"},{"internalType":"address","name":"invitedBidder","type":"address"}],"name":"offer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"pendingWithdrawal","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"revokeBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"revokeOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeePortion","type":"uint256"}],"name":"setFeePortion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenMarkets","outputs":[{"internalType":"address","name":"offeror","type":"address"},{"internalType":"uint256","name":"minimumOffer","type":"uint256"},{"internalType":"address","name":"invitedBidder","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"lockedBid","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"}]

60a060405234801561001057600080fd5b5060405161127738038061127783398101604081905261002f9161009f565b6100383361004f565b6002919091556001600160a01b03166080526100dc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100b257600080fd5b825160208401519092506001600160a01b03811681146100d157600080fd5b809150509250929050565b60805161115d61011a6000396000818161019a015281816103690152818161064d015281816107fc01528181610b040152610e1a015261115d6000f3fe6080604052600436106100dd5760003560e01c8063609e5e481161007f57806398798aa91161005957806398798aa91461023d578063d1a1f09a146102d3578063f2fde38b146102f3578063f6a4932f1461031357600080fd5b8063609e5e48146101f4578063715018a61461020a5780638da5cb5b1461021f57600080fd5b806342d75060116100bb57806342d7506014610162578063454a2ab31461017557806355a373d6146101885780635f7b29fc146101d457600080fd5b80630964c95b146100e25780633a6a65ce1461012b5780633ccfd60b1461014d575b600080fd5b3480156100ee57600080fd5b506101186100fd366004610fd9565b6001600160a01b031660009081526001602052604090205490565b6040519081526020015b60405180910390f35b34801561013757600080fd5b5061014b610146366004610ffd565b610333565b005b34801561015957600080fd5b5061014b61047e565b61014b610170366004610ffd565b6104fc565b61014b610183366004610ffd565b61072d565b34801561019457600080fd5b506101bc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610122565b3480156101e057600080fd5b5061014b6101ef366004610ffd565b6108f4565b34801561020057600080fd5b5061011860025481565b34801561021657600080fd5b5061014b610981565b34801561022b57600080fd5b506000546001600160a01b03166101bc565b34801561024957600080fd5b50610298610258366004610ffd565b6003602081905260009182526040909120805460018201546002830154938301546004909301546001600160a01b03928316949193918316929091169085565b604080516001600160a01b0396871681526020810195909552928516928401929092529092166060820152608081019190915260a001610122565b3480156102df57600080fd5b5061014b6102ee366004610ffd565b6109b7565b3480156102ff57600080fd5b5061014b61030e366004610fd9565b610a56565b34801561031f57600080fd5b5061014b61032e366004611016565b610aee565b6000818152600360205260409020546001600160a01b031633148061040057506040516331a9108f60e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156103b357600080fd5b505afa1580156103c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103eb919061104f565b6001600160a01b0316336001600160a01b0316145b61046d5760405162461bcd60e51b815260206004820152603360248201527f4f6e6c7920746865206f666665726f72206f7220746f6b656e206f776e65722060448201527236b0bc903932bb37b5b29030b71037b33332b960691b60648201526084015b60405180910390fd5b61047b816000806000610c94565b50565b33600081815260016020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156104bf573d6000803e3d6000fd5b5060408051338152600060208201527f39d9cf4ffb93650d8ce789639cb8cf3c8d7b039e1f9795c038af55b4ae643fca910160405180910390a150565b6000341161054c5760405162461bcd60e51b815260206004820152601f60248201527f4d7573742073656e642076616c756520746f20696e63726561736520626964006044820152606401610464565b600081815260036020819052604090912001546001600160a01b031633146105b65760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206e6f742063757272656e74206269646465720000000000006044820152606401610464565b6000818152600360205260408120600401546105d3903490611082565b6000838152600360205260408120600181015460028201549154939450926001600160a01b039182169291169082158061061557506001600160a01b03831633145b90506000841180156106275750838510155b80156106305750805b80156106e457506040516331a9108f60e11b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b15801561069757600080fd5b505afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf919061104f565b6001600160a01b0316826001600160a01b0316145b15610706576106f586868433610d21565b61070186600080610e7d565b610725565b6000868152600360205260409020600401859055610725863387610e7d565b505050505050565b60008181526003602052604090206004015434811061077c5760405162461bcd60e51b815260206004820152600b60248201526a42696420746f6f206c6f7760a81b6044820152606401610464565b60008281526003602081905260408220908101546001820154600283015492546001600160a01b0392831694919383169216908215806107c457506001600160a01b03831633145b90506000841180156107d65750833410155b80156107df5750805b801561089357506040516331a9108f60e11b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b15801561084657600080fd5b505afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061104f565b6001600160a01b0316826001600160a01b0316145b156108d0576108a487348433610d21565b6001600160a01b0385163314156108cb576108bf3387610ef2565b6108cb87600080610e7d565b6108eb565b85156108e0576108e08587610ef2565b6108eb873334610e7d565b50505050505050565b6000546001600160a01b0316331461091e5760405162461bcd60e51b81526004016104649061109a565b6103e881111561097c5760405162461bcd60e51b815260206004820152602360248201527f4578636565646564206d6178696d756d2066656520706f7274696f6e206f662060448201526231302560e81b6064820152608401610464565b600255565b6000546001600160a01b031633146109ab5760405162461bcd60e51b81526004016104649061109a565b6109b56000610f74565b565b600081815260036020819052604090912001546001600160a01b03163314610a2d5760405162461bcd60e51b8152602060048201526024808201527f4f6e6c792074686520626964646572206d6179207265766f6b6520746865697260448201526308189a5960e21b6064820152608401610464565b600081815260036020526040902060040154610a4a903390610ef2565b61047b81600080610e7d565b6000546001600160a01b03163314610a805760405162461bcd60e51b81526004016104649061109a565b6001600160a01b038116610ae55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610464565b61047b81610f74565b6040516331a9108f60e11b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b158015610b4e57600080fd5b505afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061104f565b6001600160a01b0316336001600160a01b031614610be65760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792074686520746f6b656e206f776e65722063616e206f6666657200006044820152606401610464565b60008211610c255760405162461bcd60e51b815260206004820152600c60248201526b41736b20666f72206d6f726560a01b6044820152606401610464565b60008381526003602081905260408220908101546004909101546001600160a01b0391821692909184161580610c6c5750826001600160a01b0316846001600160a01b0316145b9050848210158015610c7b5750805b15610c8c576106f586833386610d21565b610725863387875b60008481526003602090815260409182902080546001600160a01b038781166001600160a01b031992831681178455600184018890556002909301805491871691909216811790915583519182529181018590529182015284907f70f5b868b782ca0dcbdb70c100c995f9af3612db7c3329985621a22d087262d29060600160405180910390a250505050565b600061271060025485610d3491906110cf565b610d3e91906110ee565b9050610d5b610d556000546001600160a01b031690565b82610ef2565b610d6e83610d698387611110565b610ef2565b816001600160a01b0316836001600160a01b0316867f33d96411289395f0842596054abe6cf2802911ed295366531e4bd7b1a78b52e987604051610db491815260200190565b60405180910390a460008581526003602052604080822080546001600160a01b0319908116825560018201939093556002018054909216909155516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018790527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b158015610e5e57600080fd5b505af1158015610e72573d6000803e3d6000fd5b505050505050505050565b60008381526003602081815260409283902091820180546001600160a01b0319166001600160a01b03871690811790915560049092018490558251918252810183905284917f67084cbee80e339a509d7ab5561456aebf1df51370948a18a4449a1978d368ee910160405180910390a2505050565b6001600160a01b03821660009081526001602052604081208054839290610f1a908490611082565b90915550506001600160a01b038216600081815260016020908152604091829020548251938452908301527f39d9cf4ffb93650d8ce789639cb8cf3c8d7b039e1f9795c038af55b4ae643fca910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461047b57600080fd5b600060208284031215610feb57600080fd5b8135610ff681610fc4565b9392505050565b60006020828403121561100f57600080fd5b5035919050565b60008060006060848603121561102b57600080fd5b8335925060208401359150604084013561104481610fc4565b809150509250925092565b60006020828403121561106157600080fd5b8151610ff681610fc4565b634e487b7160e01b600052601160045260246000fd5b600082198211156110955761109561106c565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008160001904831182151516156110e9576110e961106c565b500290565b60008261110b57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156111225761112261106c565b50039056fea2646970667358221220e782c9799adff0062a959bdeb63911a03b240e3193b2814e07526e4db88c6fab64736f6c6343000809003300000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d539690

Deployed Bytecode

0x6080604052600436106100dd5760003560e01c8063609e5e481161007f57806398798aa91161005957806398798aa91461023d578063d1a1f09a146102d3578063f2fde38b146102f3578063f6a4932f1461031357600080fd5b8063609e5e48146101f4578063715018a61461020a5780638da5cb5b1461021f57600080fd5b806342d75060116100bb57806342d7506014610162578063454a2ab31461017557806355a373d6146101885780635f7b29fc146101d457600080fd5b80630964c95b146100e25780633a6a65ce1461012b5780633ccfd60b1461014d575b600080fd5b3480156100ee57600080fd5b506101186100fd366004610fd9565b6001600160a01b031660009081526001602052604090205490565b6040519081526020015b60405180910390f35b34801561013757600080fd5b5061014b610146366004610ffd565b610333565b005b34801561015957600080fd5b5061014b61047e565b61014b610170366004610ffd565b6104fc565b61014b610183366004610ffd565b61072d565b34801561019457600080fd5b506101bc7f000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d53969081565b6040516001600160a01b039091168152602001610122565b3480156101e057600080fd5b5061014b6101ef366004610ffd565b6108f4565b34801561020057600080fd5b5061011860025481565b34801561021657600080fd5b5061014b610981565b34801561022b57600080fd5b506000546001600160a01b03166101bc565b34801561024957600080fd5b50610298610258366004610ffd565b6003602081905260009182526040909120805460018201546002830154938301546004909301546001600160a01b03928316949193918316929091169085565b604080516001600160a01b0396871681526020810195909552928516928401929092529092166060820152608081019190915260a001610122565b3480156102df57600080fd5b5061014b6102ee366004610ffd565b6109b7565b3480156102ff57600080fd5b5061014b61030e366004610fd9565b610a56565b34801561031f57600080fd5b5061014b61032e366004611016565b610aee565b6000818152600360205260409020546001600160a01b031633148061040057506040516331a9108f60e11b8152600481018290527f000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d5396906001600160a01b031690636352211e9060240160206040518083038186803b1580156103b357600080fd5b505afa1580156103c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103eb919061104f565b6001600160a01b0316336001600160a01b0316145b61046d5760405162461bcd60e51b815260206004820152603360248201527f4f6e6c7920746865206f666665726f72206f7220746f6b656e206f776e65722060448201527236b0bc903932bb37b5b29030b71037b33332b960691b60648201526084015b60405180910390fd5b61047b816000806000610c94565b50565b33600081815260016020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156104bf573d6000803e3d6000fd5b5060408051338152600060208201527f39d9cf4ffb93650d8ce789639cb8cf3c8d7b039e1f9795c038af55b4ae643fca910160405180910390a150565b6000341161054c5760405162461bcd60e51b815260206004820152601f60248201527f4d7573742073656e642076616c756520746f20696e63726561736520626964006044820152606401610464565b600081815260036020819052604090912001546001600160a01b031633146105b65760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206e6f742063757272656e74206269646465720000000000006044820152606401610464565b6000818152600360205260408120600401546105d3903490611082565b6000838152600360205260408120600181015460028201549154939450926001600160a01b039182169291169082158061061557506001600160a01b03831633145b90506000841180156106275750838510155b80156106305750805b80156106e457506040516331a9108f60e11b8152600481018790527f000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d5396906001600160a01b031690636352211e9060240160206040518083038186803b15801561069757600080fd5b505afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf919061104f565b6001600160a01b0316826001600160a01b0316145b15610706576106f586868433610d21565b61070186600080610e7d565b610725565b6000868152600360205260409020600401859055610725863387610e7d565b505050505050565b60008181526003602052604090206004015434811061077c5760405162461bcd60e51b815260206004820152600b60248201526a42696420746f6f206c6f7760a81b6044820152606401610464565b60008281526003602081905260408220908101546001820154600283015492546001600160a01b0392831694919383169216908215806107c457506001600160a01b03831633145b90506000841180156107d65750833410155b80156107df5750805b801561089357506040516331a9108f60e11b8152600481018890527f000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d5396906001600160a01b031690636352211e9060240160206040518083038186803b15801561084657600080fd5b505afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061104f565b6001600160a01b0316826001600160a01b0316145b156108d0576108a487348433610d21565b6001600160a01b0385163314156108cb576108bf3387610ef2565b6108cb87600080610e7d565b6108eb565b85156108e0576108e08587610ef2565b6108eb873334610e7d565b50505050505050565b6000546001600160a01b0316331461091e5760405162461bcd60e51b81526004016104649061109a565b6103e881111561097c5760405162461bcd60e51b815260206004820152602360248201527f4578636565646564206d6178696d756d2066656520706f7274696f6e206f662060448201526231302560e81b6064820152608401610464565b600255565b6000546001600160a01b031633146109ab5760405162461bcd60e51b81526004016104649061109a565b6109b56000610f74565b565b600081815260036020819052604090912001546001600160a01b03163314610a2d5760405162461bcd60e51b8152602060048201526024808201527f4f6e6c792074686520626964646572206d6179207265766f6b6520746865697260448201526308189a5960e21b6064820152608401610464565b600081815260036020526040902060040154610a4a903390610ef2565b61047b81600080610e7d565b6000546001600160a01b03163314610a805760405162461bcd60e51b81526004016104649061109a565b6001600160a01b038116610ae55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610464565b61047b81610f74565b6040516331a9108f60e11b8152600481018490527f000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d5396906001600160a01b031690636352211e9060240160206040518083038186803b158015610b4e57600080fd5b505afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061104f565b6001600160a01b0316336001600160a01b031614610be65760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792074686520746f6b656e206f776e65722063616e206f6666657200006044820152606401610464565b60008211610c255760405162461bcd60e51b815260206004820152600c60248201526b41736b20666f72206d6f726560a01b6044820152606401610464565b60008381526003602081905260408220908101546004909101546001600160a01b0391821692909184161580610c6c5750826001600160a01b0316846001600160a01b0316145b9050848210158015610c7b5750805b15610c8c576106f586833386610d21565b610725863387875b60008481526003602090815260409182902080546001600160a01b038781166001600160a01b031992831681178455600184018890556002909301805491871691909216811790915583519182529181018590529182015284907f70f5b868b782ca0dcbdb70c100c995f9af3612db7c3329985621a22d087262d29060600160405180910390a250505050565b600061271060025485610d3491906110cf565b610d3e91906110ee565b9050610d5b610d556000546001600160a01b031690565b82610ef2565b610d6e83610d698387611110565b610ef2565b816001600160a01b0316836001600160a01b0316867f33d96411289395f0842596054abe6cf2802911ed295366531e4bd7b1a78b52e987604051610db491815260200190565b60405180910390a460008581526003602052604080822080546001600160a01b0319908116825560018201939093556002018054909216909155516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018790527f000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d53969016906323b872dd90606401600060405180830381600087803b158015610e5e57600080fd5b505af1158015610e72573d6000803e3d6000fd5b505050505050505050565b60008381526003602081815260409283902091820180546001600160a01b0319166001600160a01b03871690811790915560049092018490558251918252810183905284917f67084cbee80e339a509d7ab5561456aebf1df51370948a18a4449a1978d368ee910160405180910390a2505050565b6001600160a01b03821660009081526001602052604081208054839290610f1a908490611082565b90915550506001600160a01b038216600081815260016020908152604091829020548251938452908301527f39d9cf4ffb93650d8ce789639cb8cf3c8d7b039e1f9795c038af55b4ae643fca910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461047b57600080fd5b600060208284031215610feb57600080fd5b8135610ff681610fc4565b9392505050565b60006020828403121561100f57600080fd5b5035919050565b60008060006060848603121561102b57600080fd5b8335925060208401359150604084013561104481610fc4565b809150509250925092565b60006020828403121561106157600080fd5b8151610ff681610fc4565b634e487b7160e01b600052601160045260246000fd5b600082198211156110955761109561106c565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008160001904831182151516156110e9576110e961106c565b500290565b60008261110b57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156111225761112261106c565b50039056fea2646970667358221220e782c9799adff0062a959bdeb63911a03b240e3193b2814e07526e4db88c6fab64736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d539690

-----Decoded View---------------
Arg [0] : initialFeePortion (uint256): 500
Arg [1] : immutableNftTokenContract (address): 0xf85c6320cc60DEC45Af1f7cE82B13dd24D539690

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [1] : 000000000000000000000000f85c6320cc60dec45af1f7ce82b13dd24d539690


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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