ETH Price: $3,281.87 (+0.17%)

Contract

0xE0A16FF9B44B1f5FAf8fF78684372B7FC1d6863E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Buy NFT159835022022-11-16 15:33:23788 days ago1668612803IN
0xE0A16FF9...FC1d6863E
0.000001 ETH0.0029810120.87928647
Buy NFT159834482022-11-16 15:22:35788 days ago1668612155IN
0xE0A16FF9...FC1d6863E
0.000001 ETH0.0031182121.83719077
Buy NFT159191012022-11-07 15:39:59797 days ago1667835599IN
0xE0A16FF9...FC1d6863E
0.000001 ETH0.0038050326.6507339
Buy NFT159190712022-11-07 15:33:59797 days ago1667835239IN
0xE0A16FF9...FC1d6863E
0.000001 ETH0.0028963626.43509948
Buy NFT155163812022-09-11 18:44:48854 days ago1662921888IN
0xE0A16FF9...FC1d6863E
0.001 ETH0.0019378715.41741278
Buy NFT154921862022-09-07 19:36:34857 days ago1662579394IN
0xE0A16FF9...FC1d6863E
0.001 ETH0.0049694334.80924138
Buy NFT154920382022-09-07 19:00:37857 days ago1662577237IN
0xE0A16FF9...FC1d6863E
0.001 ETH0.00314328.68411587
Buy NFT154920022022-09-07 18:51:11857 days ago1662576671IN
0xE0A16FF9...FC1d6863E
0.001 ETH0.0021001319.16653968
Buy NFT154919092022-09-07 18:29:25858 days ago1662575365IN
0xE0A16FF9...FC1d6863E
0.001 ETH0.002482822.65893075
Buy NFT154918962022-09-07 18:27:11858 days ago1662575231IN
0xE0A16FF9...FC1d6863E
0.001 ETH0.0036133332.97648689
Buy NFT154918912022-09-07 18:25:21858 days ago1662575121IN
0xE0A16FF9...FC1d6863E
0.001 ETH0.0011746632.02199113
Buy NFT154912972022-09-07 16:16:01858 days ago1662567361IN
0xE0A16FF9...FC1d6863E
0.6 ETH0.0013653737.24112268
Buy NFT154912442022-09-07 16:01:17858 days ago1662566477IN
0xE0A16FF9...FC1d6863E
0.6 ETH0.0012898435.18110367
Buy NFT154911862022-09-07 15:50:19858 days ago1662565819IN
0xE0A16FF9...FC1d6863E
0.6 ETH0.0014629539.90266944
Buy NFT154909542022-09-07 15:00:38858 days ago1662562838IN
0xE0A16FF9...FC1d6863E
0.6 ETH0.0019700253.72167787
Buy NFT154909302022-09-07 14:53:47858 days ago1662562427IN
0xE0A16FF9...FC1d6863E
0.6 ETH0.0016786545.78610482
Buy NFT154904732022-09-07 13:11:07858 days ago1662556267IN
0xE0A16FF9...FC1d6863E
1.25 ETH0.0008679323.67335894
Transfer Ownersh...154904592022-09-07 13:08:51858 days ago1662556131IN
0xE0A16FF9...FC1d6863E
0 ETH0.0009210735.1743336
Buy NFT154903682022-09-07 12:45:13858 days ago1662554713IN
0xE0A16FF9...FC1d6863E
1.25 ETH0.0005836715.92010402
Buy NFT154903542022-09-07 12:42:02858 days ago1662554522IN
0xE0A16FF9...FC1d6863E
1.25 ETH0.0006376117.39135864
Buy NFT154902262022-09-07 12:11:49858 days ago1662552709IN
0xE0A16FF9...FC1d6863E
1.25 ETH0.0005639915.38310071
Buy NFT154900732022-09-07 11:35:53858 days ago1662550553IN
0xE0A16FF9...FC1d6863E
1.25 ETH0.000276237.53439339
Buy NFT154899472022-09-07 11:08:31858 days ago1662548911IN
0xE0A16FF9...FC1d6863E
1.25 ETH0.000260077.09374192
Buy NFT150913322022-07-06 21:13:37920 days ago1657142017IN
0xE0A16FF9...FC1d6863E
0.6 ETH0.0059576334.52463018
Buy NFT150912702022-07-06 21:00:01920 days ago1657141201IN
0xE0A16FF9...FC1d6863E
0.6 ETH0.0043806132.55676599
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
159835022022-11-16 15:33:23788 days ago1668612803
0xE0A16FF9...FC1d6863E
0.00000034 ETH
159835022022-11-16 15:33:23788 days ago1668612803
0xE0A16FF9...FC1d6863E
0.00000011 ETH
159835022022-11-16 15:33:23788 days ago1668612803
0xE0A16FF9...FC1d6863E
0.00000053 ETH
159834482022-11-16 15:22:35788 days ago1668612155
0xE0A16FF9...FC1d6863E
0.00000034 ETH
159834482022-11-16 15:22:35788 days ago1668612155
0xE0A16FF9...FC1d6863E
0.00000011 ETH
159834482022-11-16 15:22:35788 days ago1668612155
0xE0A16FF9...FC1d6863E
0.00000053 ETH
159191012022-11-07 15:39:59797 days ago1667835599
0xE0A16FF9...FC1d6863E
0.00000034 ETH
159191012022-11-07 15:39:59797 days ago1667835599
0xE0A16FF9...FC1d6863E
0.00000011 ETH
159191012022-11-07 15:39:59797 days ago1667835599
0xE0A16FF9...FC1d6863E
0.00000053 ETH
159190712022-11-07 15:33:59797 days ago1667835239
0xE0A16FF9...FC1d6863E
0.00000034 ETH
159190712022-11-07 15:33:59797 days ago1667835239
0xE0A16FF9...FC1d6863E
0.00000011 ETH
159190712022-11-07 15:33:59797 days ago1667835239
0xE0A16FF9...FC1d6863E
0.00000053 ETH
155163812022-09-11 18:44:48854 days ago1662921888
0xE0A16FF9...FC1d6863E
0.00034781 ETH
155163812022-09-11 18:44:48854 days ago1662921888
0xE0A16FF9...FC1d6863E
0.00011593 ETH
155163812022-09-11 18:44:48854 days ago1662921888
0xE0A16FF9...FC1d6863E
0.00053625 ETH
154921862022-09-07 19:36:34857 days ago1662579394
0xE0A16FF9...FC1d6863E
0.00070978 ETH
154921862022-09-07 19:36:34857 days ago1662579394
0xE0A16FF9...FC1d6863E
0.00023659 ETH
154921862022-09-07 19:36:34857 days ago1662579394
0xE0A16FF9...FC1d6863E
0.00005362 ETH
154920382022-09-07 19:00:37857 days ago1662577237
0xE0A16FF9...FC1d6863E
0.00070978 ETH
154920382022-09-07 19:00:37857 days ago1662577237
0xE0A16FF9...FC1d6863E
0.00023659 ETH
154920382022-09-07 19:00:37857 days ago1662577237
0xE0A16FF9...FC1d6863E
0.00005362 ETH
154920022022-09-07 18:51:11857 days ago1662576671
0xE0A16FF9...FC1d6863E
0.00070978 ETH
154920022022-09-07 18:51:11857 days ago1662576671
0xE0A16FF9...FC1d6863E
0.00023659 ETH
154920022022-09-07 18:51:11857 days ago1662576671
0xE0A16FF9...FC1d6863E
0.00005362 ETH
154919092022-09-07 18:29:25858 days ago1662575365
0xE0A16FF9...FC1d6863E
0.00070978 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MonaGallery

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : MonaArtClubGallery.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.4;

import "../ECDSA.sol";
import "../Ownable.sol";
import "../IERC721.sol";
import "../IERC20.sol";

contract MonaGallery is Ownable {

    mapping(bytes => bool) usedSigs; //addresses
    using ECDSA for bytes32;

    event NftSold(address to, address tokenContract, uint tokenId, uint price);

    function buyNFT(
        address tokenContract,
        address artistAddr,
        uint tokenId,
        uint percentage,
        uint expirationTimestamp,
        bytes memory signature
    ) external payable {
        require(!usedSigs[signature], "Listing was completed or canceled!");
        address contractOwner = owner();
        bytes32 messsageHash = keccak256(abi.encode(tokenContract, artistAddr, tokenId, msg.value, percentage, expirationTimestamp));
        address recoveredAddress = messsageHash.toEthSignedMessageHash().recover(signature);
        require(recoveredAddress == contractOwner, "Invalid address intercations");
        require(expirationTimestamp >= block.timestamp, "Listing expired!");
        usedSigs[signature] = true;
        uint eth = msg.value - (msg.value / 40); // 2.5%
        uint artistAmount = (eth * percentage) / 10_000;
        bool success;

        (success, ) = payable(artistAddr).call{value: artistAmount, gas: 3000}(""); // artist
        require(success, "Failed To Send Ether to artist! User has reverted!");

        eth = (msg.value - artistAmount);
        uint f5 = eth / 4;
        (success, ) = payable(0xAF2992d490E78B94113D44d63E10D1E668b69984).call{value: f5, gas: 2300}(""); // F5
        require(success, "Failed To Send Ether to F5! User has reverted!");
        (success, ) = payable(0x077b813889659Ad54E1538A380584E7a9399ff8F).call{value: eth - f5, gas: 2300}(""); // Mona
        require(success, "Failed To Send Ether to Mona! User has reverted!");

        // send NFT
        IERC721(tokenContract).safeTransferFrom(contractOwner, msg.sender, tokenId);

        emit NftSold(msg.sender, tokenContract, tokenId, msg.value);
    }

    // TODO: Test this function
    function cancelListing(bytes memory listingSig) external onlyOwner {
        usedSigs[listingSig] = true;
    }

    /**
     * @dev to be used to save nfts that were sent to this address
     */
    function transferNFT(address tokenContract, uint id, address to) external onlyOwner {
        IERC721(tokenContract).safeTransferFrom(address(this), to, id);
    }

    /**
     * @dev to be used to save erc20 tokens that were sent to this address
     */
    function transferERC20(IERC20 tokenContract) external onlyOwner {
        require(tokenContract.transfer(msg.sender, tokenContract.balanceOf(msg.sender)), "Transfer Failed!");
    }

    /**
     * @dev in case eth gets locked in the contract
     */
    function withdraw() external onlyOwner {
        uint bal = address(this).balance;
        (bool success, ) = payable(msg.sender).call{value: bal, gas: 3000}("");
        require(success, "Failed To Send Ether! User has reverted!");
    }
}

File 2 of 6 : ECDSA.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol)

pragma solidity 0.8.4;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

}

File 3 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity 0.8.4;

/**
 * @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 {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(msg.sender);
    }

    /**
     * @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() == msg.sender, "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() external 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) external 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);
    }
}

File 4 of 6 : IERC721.sol
// https://eips.ethereum.org/EIPS/eip-721, http://erc721.org/ 
// SPDX-License-Identifier: MIT
pragma solidity 0.8.4;

import "./IERC165.sol";

/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x80ac58cd.
interface IERC721 is IERC165 {
    /// @dev This emits when ownership of any NFT changes by any mechanism.
    ///  This event emits when NFTs are created (`from` == 0) and destroyed
    ///  (`to` == 0). Exception: during contract creation, any number of NFTs
    ///  may be created and assigned without emitting Transfer. At the time of
    ///  any transfer, the approved address for that NFT (if any) is reset to none.
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);

    /// @dev This emits when the approved address for an NFT is changed or
    ///  reaffirmed. The zero address indicates there is no approved address.
    ///  When a Transfer event emits, this also indicates that the approved
    ///  address for that NFT (if any) is reset to none.
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);

    /// @dev This emits when an operator is enabled or disabled for an owner.
    ///  The operator can manage all NFTs of the owner.
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    /// @notice Count all NFTs assigned to an owner
    /// @dev NFTs assigned to the zero address are considered invalid, and this
    ///  function throws for queries about the zero address.
    /// @param _owner An address for whom to query the balance
    /// @return The number of NFTs owned by `_owner`, possibly zero
    function balanceOf(address _owner) external view returns (uint256);

    /// @notice Find the owner of an NFT
    /// @dev NFTs assigned to zero address are considered invalid, and queries
    ///  about them do throw.
    /// @param _tokenId The identifier for an NFT
    /// @return The address of the owner of the NFT
    function ownerOf(uint256 _tokenId) external view returns (address);

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT. When transfer is complete, this function
    ///  checks if `_to` is a smart contract (code size > 0). If so, it calls
    ///  `onERC721Received` on `_to` and throws if the return value is not
    ///  `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    /// @param data Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external;

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev This works identically to the other function with an extra data parameter,
    ///  except this function just sets data to "".
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external;

    /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
    ///  TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
    ///  THEY MAY BE PERMANENTLY LOST
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    /// @notice Change or reaffirm the approved address for an NFT
    /// @dev The zero address indicates there is no approved address.
    ///  Throws unless `msg.sender` is the current NFT owner, or an authorized
    ///  operator of the current owner.
    /// @param _approved The new approved NFT controller
    /// @param _tokenId The NFT to approve
    function approve(address _approved, uint256 _tokenId) external;

    /// @notice Enable or disable approval for a third party ("operator") to manage
    ///  all of `msg.sender`'s assets
    /// @dev Emits the ApprovalForAll event. The contract MUST allow
    ///  multiple operators per owner.
    /// @param _operator Address to add to the set of authorized operators
    /// @param _approved True if the operator is approved, false to revoke approval
    function setApprovalForAll(address _operator, bool _approved) external;

    /// @notice Get the approved address for a single NFT
    /// @dev Throws if `_tokenId` is not a valid NFT.
    /// @param _tokenId The NFT to find the approved address for
    /// @return The approved address for this NFT, or the zero address if there is none
    function getApproved(uint256 _tokenId) external view returns (address);

    /// @notice Query if an address is an authorized operator for another address
    /// @param _owner The address that owns the NFTs
    /// @param _operator The address that acts on behalf of the owner
    /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

File 5 of 6 : IERC20.sol
// https://eips.ethereum.org/EIPS/eip-20
// SPDX-License-Identifier: MIT
pragma solidity 0.8.4;

interface IERC20 {

    /// @param _owner The address from which the balance will be retrieved
    /// @return balance the balance
    function balanceOf(address _owner) external view returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return success Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) external returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return success Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);

    /// @notice `msg.sender` approves `_addr` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of wei to be approved for transfer
    /// @return success Whether the approval was successful or not
    function approve(address _spender, uint256 _value) external returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return remaining Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) external view returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

File 6 of 6 : IERC165.sol
// https://eips.ethereum.org/EIPS/eip-165 
// SPDX-License-Identifier: MIT

pragma solidity 0.8.4;


interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceID The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

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

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","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":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"address","name":"artistAddr","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"percentage","type":"uint256"},{"internalType":"uint256","name":"expirationTimestamp","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buyNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"listingSig","type":"bytes"}],"name":"cancelListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenContract","type":"address"}],"name":"transferERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"transferNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506100203361002560201b60201c565b6100e9565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122ef806100f86000396000f3fe60806040526004361061007b5760003560e01c80638da5cb5b1161004e5780638da5cb5b146100f3578063d1d6b7391461011e578063d2f0922a14610147578063f2fde38b146101705761007b565b80633ccfd60b146100805780636d11bb6014610097578063715018a6146100c05780638682f249146100d7575b600080fd5b34801561008c57600080fd5b50610095610199565b005b3480156100a357600080fd5b506100be60048036038101906100b99190611531565b6102c8565b005b3480156100cc57600080fd5b506100d5610376565b005b6100f160048036038101906100ec9190611418565b6103f7565b005b3480156100ff57600080fd5b50610108610905565b60405161011591906118ca565b60405180910390f35b34801561012a57600080fd5b5061014560048036038101906101409190611572565b61092e565b005b34801561015357600080fd5b5061016e600480360381019061016991906114b9565b610afa565b005b34801561017c57600080fd5b50610197600480360381019061019291906113ef565b610be3565b005b3373ffffffffffffffffffffffffffffffffffffffff166101b8610905565b73ffffffffffffffffffffffffffffffffffffffff161461020e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020590611b70565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682610bb89060405161023d906118b5565b600060405180830381858888f193505050503d806000811461027b576040519150601f19603f3d011682016040523d82523d6000602084013e610280565b606091505b50509050806102c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bb90611b30565b60405180910390fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff166102e7610905565b73ffffffffffffffffffffffffffffffffffffffff161461033d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033490611b70565b60405180910390fd5b6001808260405161034e9190611878565b908152602001604051809103902060006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16610395610905565b73ffffffffffffffffffffffffffffffffffffffff16146103eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e290611b70565b60405180910390fd5b6103f56000610cd4565b565b6001816040516104079190611878565b908152602001604051809103902060009054906101000a900460ff1615610463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045a90611ad0565b60405180910390fd5b600061046d610905565b9050600087878734888860405160200161048c96959493929190611961565b60405160208183030381529060405280519060200120905060006104c1846104b384610d98565b610dc890919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052890611bb0565b60405180910390fd5b42851015610574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056b90611bd0565b60405180910390fd5b600180856040516105859190611878565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060006028346105b99190611c78565b346105c49190611d03565b9050600061271088836105d79190611ca9565b6105e19190611c78565b905060008a73ffffffffffffffffffffffffffffffffffffffff1682610bb89060405161060d906118b5565b600060405180830381858888f193505050503d806000811461064b576040519150601f19603f3d011682016040523d82523d6000602084013e610650565b606091505b50508091505080610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90611af0565b60405180910390fd5b81346106a29190611d03565b925060006004846106b39190611c78565b905073af2992d490e78b94113d44d63e10d1e668b6998473ffffffffffffffffffffffffffffffffffffffff16816108fc906040516106f1906118b5565b600060405180830381858888f193505050503d806000811461072f576040519150601f19603f3d011682016040523d82523d6000602084013e610734565b606091505b5050809250508161077a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077190611ab0565b60405180910390fd5b73077b813889659ad54e1538a380584e7a9399ff8f73ffffffffffffffffffffffffffffffffffffffff1681856107b19190611d03565b6108fc906040516107c1906118b5565b600060405180830381858888f193505050503d80600081146107ff576040519150601f19603f3d011682016040523d82523d6000602084013e610804565b606091505b5050809250508161084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190611a90565b60405180910390fd5b8c73ffffffffffffffffffffffffffffffffffffffff166342842e0e88338e6040518463ffffffff1660e01b8152600401610887939291906118e5565b600060405180830381600087803b1580156108a157600080fd5b505af11580156108b5573d6000803e3d6000fd5b505050507f6de5f61b24e998dfaddeff37d69f266a8355555154081b554c36b2799f0618c8338e8d346040516108ee949392919061191c565b60405180910390a150505050505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff1661094d610905565b73ffffffffffffffffffffffffffffffffffffffff16146109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90611b70565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016109f991906118ca565b60206040518083038186803b158015610a1157600080fd5b505afa158015610a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a49919061159b565b6040518363ffffffff1660e01b8152600401610a669291906119c2565b602060405180830381600087803b158015610a8057600080fd5b505af1158015610a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab89190611508565b610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90611b90565b60405180910390fd5b50565b3373ffffffffffffffffffffffffffffffffffffffff16610b19610905565b73ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6690611b70565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401610bac939291906118e5565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610c02610905565b73ffffffffffffffffffffffffffffffffffffffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90611b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90611a70565b60405180910390fd5b610cd181610cd4565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001610dab919061188f565b604051602081830303815290604052805190602001209050919050565b6000806000610dd78585610def565b91509150610de481610e72565b819250505092915050565b600080604183511415610e315760008060006020860151925060408601519150606086015160001a9050610e25878285856111c3565b94509450505050610e6b565b604083511415610e62576000806020850151915060408501519050610e578683836112d0565b935093505050610e6b565b60006002915091505b9250929050565b60006004811115610eac577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115610ee5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610ef0576111c0565b60016004811115610f2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115610f63577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90611a30565b60405180910390fd5b60026004811115610fde577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611017577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90611a50565b60405180910390fd5b60036004811115611092577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156110cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390611b10565b60405180910390fd5b600480811115611145577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561117e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690611b50565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156111fe5760006003915091506112c7565b601b8560ff16141580156112165750601c8560ff1614155b156112285760006004915091506112c7565b60006001878787876040516000815260200160405260405161124d94939291906119eb565b6020604051602081039080840390855afa15801561126f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112be576000600192509250506112c7565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050611310878288856111c3565b935093505050935093915050565b600061133161132c84611c15565b611bf0565b90508281526020810184848401111561134957600080fd5b611354848285611da8565b509392505050565b60008135905061136b8161225d565b92915050565b60008151905061138081612274565b92915050565b600082601f83011261139757600080fd5b81356113a784826020860161131e565b91505092915050565b6000813590506113bf8161228b565b92915050565b6000813590506113d4816122a2565b92915050565b6000815190506113e9816122a2565b92915050565b60006020828403121561140157600080fd5b600061140f8482850161135c565b91505092915050565b60008060008060008060c0878903121561143157600080fd5b600061143f89828a0161135c565b965050602061145089828a0161135c565b955050604061146189828a016113c5565b945050606061147289828a016113c5565b935050608061148389828a016113c5565b92505060a087013567ffffffffffffffff8111156114a057600080fd5b6114ac89828a01611386565b9150509295509295509295565b6000806000606084860312156114ce57600080fd5b60006114dc8682870161135c565b93505060206114ed868287016113c5565b92505060406114fe8682870161135c565b9150509250925092565b60006020828403121561151a57600080fd5b600061152884828501611371565b91505092915050565b60006020828403121561154357600080fd5b600082013567ffffffffffffffff81111561155d57600080fd5b61156984828501611386565b91505092915050565b60006020828403121561158457600080fd5b6000611592848285016113b0565b91505092915050565b6000602082840312156115ad57600080fd5b60006115bb848285016113da565b91505092915050565b6115cd81611d37565b82525050565b6115dc81611d55565b82525050565b6115f36115ee82611d55565b611e1b565b82525050565b600061160482611c46565b61160e8185611c51565b935061161e818560208601611db7565b80840191505092915050565b6000611637601883611c5c565b915061164282611ec3565b602082019050919050565b600061165a601f83611c5c565b915061166582611eec565b602082019050919050565b600061167d601c83611c6d565b915061168882611f15565b601c82019050919050565b60006116a0602683611c5c565b91506116ab82611f3e565b604082019050919050565b60006116c3603083611c5c565b91506116ce82611f8d565b604082019050919050565b60006116e6602e83611c5c565b91506116f182611fdc565b604082019050919050565b6000611709602283611c5c565b91506117148261202b565b604082019050919050565b600061172c603283611c5c565b91506117378261207a565b604082019050919050565b600061174f602283611c5c565b915061175a826120c9565b604082019050919050565b6000611772602883611c5c565b915061177d82612118565b604082019050919050565b6000611795602283611c5c565b91506117a082612167565b604082019050919050565b60006117b8602083611c5c565b91506117c3826121b6565b602082019050919050565b60006117db601083611c5c565b91506117e6826121df565b602082019050919050565b60006117fe601c83611c5c565b915061180982612208565b602082019050919050565b6000611821600083611c51565b915061182c82612231565b600082019050919050565b6000611844601083611c5c565b915061184f82612234565b602082019050919050565b61186381611d91565b82525050565b61187281611d9b565b82525050565b600061188482846115f9565b915081905092915050565b600061189a82611670565b91506118a682846115e2565b60208201915081905092915050565b60006118c082611814565b9150819050919050565b60006020820190506118df60008301846115c4565b92915050565b60006060820190506118fa60008301866115c4565b61190760208301856115c4565b611914604083018461185a565b949350505050565b600060808201905061193160008301876115c4565b61193e60208301866115c4565b61194b604083018561185a565b611958606083018461185a565b95945050505050565b600060c08201905061197660008301896115c4565b61198360208301886115c4565b611990604083018761185a565b61199d606083018661185a565b6119aa608083018561185a565b6119b760a083018461185a565b979650505050505050565b60006040820190506119d760008301856115c4565b6119e4602083018461185a565b9392505050565b6000608082019050611a0060008301876115d3565b611a0d6020830186611869565b611a1a60408301856115d3565b611a2760608301846115d3565b95945050505050565b60006020820190508181036000830152611a498161162a565b9050919050565b60006020820190508181036000830152611a698161164d565b9050919050565b60006020820190508181036000830152611a8981611693565b9050919050565b60006020820190508181036000830152611aa9816116b6565b9050919050565b60006020820190508181036000830152611ac9816116d9565b9050919050565b60006020820190508181036000830152611ae9816116fc565b9050919050565b60006020820190508181036000830152611b098161171f565b9050919050565b60006020820190508181036000830152611b2981611742565b9050919050565b60006020820190508181036000830152611b4981611765565b9050919050565b60006020820190508181036000830152611b6981611788565b9050919050565b60006020820190508181036000830152611b89816117ab565b9050919050565b60006020820190508181036000830152611ba9816117ce565b9050919050565b60006020820190508181036000830152611bc9816117f1565b9050919050565b60006020820190508181036000830152611be981611837565b9050919050565b6000611bfa611c0b565b9050611c068282611dea565b919050565b6000604051905090565b600067ffffffffffffffff821115611c3057611c2f611e83565b5b611c3982611eb2565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000611c8382611d91565b9150611c8e83611d91565b925082611c9e57611c9d611e54565b5b828204905092915050565b6000611cb482611d91565b9150611cbf83611d91565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611cf857611cf7611e25565b5b828202905092915050565b6000611d0e82611d91565b9150611d1983611d91565b925082821015611d2c57611d2b611e25565b5b828203905092915050565b6000611d4282611d71565b9050919050565b60008115159050919050565b6000819050919050565b6000611d6a82611d37565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015611dd5578082015181840152602081019050611dba565b83811115611de4576000848401525b50505050565b611df382611eb2565b810181811067ffffffffffffffff82111715611e1257611e11611e83565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420546f2053656e6420457468657220746f204d6f6e612120557360008201527f6572206861732072657665727465642100000000000000000000000000000000602082015250565b7f4661696c656420546f2053656e6420457468657220746f20463521205573657260008201527f2068617320726576657274656421000000000000000000000000000000000000602082015250565b7f4c697374696e672077617320636f6d706c65746564206f722063616e63656c6560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420546f2053656e6420457468657220746f20617274697374212060008201527f5573657220686173207265766572746564210000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420546f2053656e6420457468657221205573657220686173207260008201527f6576657274656421000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e73666572204661696c65642100000000000000000000000000000000600082015250565b7f496e76616c6964206164647265737320696e746572636174696f6e7300000000600082015250565b50565b7f4c697374696e6720657870697265642100000000000000000000000000000000600082015250565b61226681611d37565b811461227157600080fd5b50565b61227d81611d49565b811461228857600080fd5b50565b61229481611d5f565b811461229f57600080fd5b50565b6122ab81611d91565b81146122b657600080fd5b5056fea264697066735822122026654396f16ed4eb1455289d1343b1f1adc45d577b681a66f8bcf764b8c803f864736f6c63430008040033

Deployed Bytecode

0x60806040526004361061007b5760003560e01c80638da5cb5b1161004e5780638da5cb5b146100f3578063d1d6b7391461011e578063d2f0922a14610147578063f2fde38b146101705761007b565b80633ccfd60b146100805780636d11bb6014610097578063715018a6146100c05780638682f249146100d7575b600080fd5b34801561008c57600080fd5b50610095610199565b005b3480156100a357600080fd5b506100be60048036038101906100b99190611531565b6102c8565b005b3480156100cc57600080fd5b506100d5610376565b005b6100f160048036038101906100ec9190611418565b6103f7565b005b3480156100ff57600080fd5b50610108610905565b60405161011591906118ca565b60405180910390f35b34801561012a57600080fd5b5061014560048036038101906101409190611572565b61092e565b005b34801561015357600080fd5b5061016e600480360381019061016991906114b9565b610afa565b005b34801561017c57600080fd5b50610197600480360381019061019291906113ef565b610be3565b005b3373ffffffffffffffffffffffffffffffffffffffff166101b8610905565b73ffffffffffffffffffffffffffffffffffffffff161461020e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020590611b70565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682610bb89060405161023d906118b5565b600060405180830381858888f193505050503d806000811461027b576040519150601f19603f3d011682016040523d82523d6000602084013e610280565b606091505b50509050806102c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bb90611b30565b60405180910390fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff166102e7610905565b73ffffffffffffffffffffffffffffffffffffffff161461033d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033490611b70565b60405180910390fd5b6001808260405161034e9190611878565b908152602001604051809103902060006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16610395610905565b73ffffffffffffffffffffffffffffffffffffffff16146103eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e290611b70565b60405180910390fd5b6103f56000610cd4565b565b6001816040516104079190611878565b908152602001604051809103902060009054906101000a900460ff1615610463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045a90611ad0565b60405180910390fd5b600061046d610905565b9050600087878734888860405160200161048c96959493929190611961565b60405160208183030381529060405280519060200120905060006104c1846104b384610d98565b610dc890919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052890611bb0565b60405180910390fd5b42851015610574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056b90611bd0565b60405180910390fd5b600180856040516105859190611878565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060006028346105b99190611c78565b346105c49190611d03565b9050600061271088836105d79190611ca9565b6105e19190611c78565b905060008a73ffffffffffffffffffffffffffffffffffffffff1682610bb89060405161060d906118b5565b600060405180830381858888f193505050503d806000811461064b576040519150601f19603f3d011682016040523d82523d6000602084013e610650565b606091505b50508091505080610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90611af0565b60405180910390fd5b81346106a29190611d03565b925060006004846106b39190611c78565b905073af2992d490e78b94113d44d63e10d1e668b6998473ffffffffffffffffffffffffffffffffffffffff16816108fc906040516106f1906118b5565b600060405180830381858888f193505050503d806000811461072f576040519150601f19603f3d011682016040523d82523d6000602084013e610734565b606091505b5050809250508161077a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077190611ab0565b60405180910390fd5b73077b813889659ad54e1538a380584e7a9399ff8f73ffffffffffffffffffffffffffffffffffffffff1681856107b19190611d03565b6108fc906040516107c1906118b5565b600060405180830381858888f193505050503d80600081146107ff576040519150601f19603f3d011682016040523d82523d6000602084013e610804565b606091505b5050809250508161084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190611a90565b60405180910390fd5b8c73ffffffffffffffffffffffffffffffffffffffff166342842e0e88338e6040518463ffffffff1660e01b8152600401610887939291906118e5565b600060405180830381600087803b1580156108a157600080fd5b505af11580156108b5573d6000803e3d6000fd5b505050507f6de5f61b24e998dfaddeff37d69f266a8355555154081b554c36b2799f0618c8338e8d346040516108ee949392919061191c565b60405180910390a150505050505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff1661094d610905565b73ffffffffffffffffffffffffffffffffffffffff16146109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90611b70565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016109f991906118ca565b60206040518083038186803b158015610a1157600080fd5b505afa158015610a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a49919061159b565b6040518363ffffffff1660e01b8152600401610a669291906119c2565b602060405180830381600087803b158015610a8057600080fd5b505af1158015610a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab89190611508565b610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90611b90565b60405180910390fd5b50565b3373ffffffffffffffffffffffffffffffffffffffff16610b19610905565b73ffffffffffffffffffffffffffffffffffffffff1614610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6690611b70565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401610bac939291906118e5565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610c02610905565b73ffffffffffffffffffffffffffffffffffffffff1614610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90611b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90611a70565b60405180910390fd5b610cd181610cd4565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001610dab919061188f565b604051602081830303815290604052805190602001209050919050565b6000806000610dd78585610def565b91509150610de481610e72565b819250505092915050565b600080604183511415610e315760008060006020860151925060408601519150606086015160001a9050610e25878285856111c3565b94509450505050610e6b565b604083511415610e62576000806020850151915060408501519050610e578683836112d0565b935093505050610e6b565b60006002915091505b9250929050565b60006004811115610eac577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115610ee5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610ef0576111c0565b60016004811115610f2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115610f63577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90611a30565b60405180910390fd5b60026004811115610fde577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611017577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90611a50565b60405180910390fd5b60036004811115611092577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156110cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390611b10565b60405180910390fd5b600480811115611145577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561117e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690611b50565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156111fe5760006003915091506112c7565b601b8560ff16141580156112165750601c8560ff1614155b156112285760006004915091506112c7565b60006001878787876040516000815260200160405260405161124d94939291906119eb565b6020604051602081039080840390855afa15801561126f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112be576000600192509250506112c7565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050611310878288856111c3565b935093505050935093915050565b600061133161132c84611c15565b611bf0565b90508281526020810184848401111561134957600080fd5b611354848285611da8565b509392505050565b60008135905061136b8161225d565b92915050565b60008151905061138081612274565b92915050565b600082601f83011261139757600080fd5b81356113a784826020860161131e565b91505092915050565b6000813590506113bf8161228b565b92915050565b6000813590506113d4816122a2565b92915050565b6000815190506113e9816122a2565b92915050565b60006020828403121561140157600080fd5b600061140f8482850161135c565b91505092915050565b60008060008060008060c0878903121561143157600080fd5b600061143f89828a0161135c565b965050602061145089828a0161135c565b955050604061146189828a016113c5565b945050606061147289828a016113c5565b935050608061148389828a016113c5565b92505060a087013567ffffffffffffffff8111156114a057600080fd5b6114ac89828a01611386565b9150509295509295509295565b6000806000606084860312156114ce57600080fd5b60006114dc8682870161135c565b93505060206114ed868287016113c5565b92505060406114fe8682870161135c565b9150509250925092565b60006020828403121561151a57600080fd5b600061152884828501611371565b91505092915050565b60006020828403121561154357600080fd5b600082013567ffffffffffffffff81111561155d57600080fd5b61156984828501611386565b91505092915050565b60006020828403121561158457600080fd5b6000611592848285016113b0565b91505092915050565b6000602082840312156115ad57600080fd5b60006115bb848285016113da565b91505092915050565b6115cd81611d37565b82525050565b6115dc81611d55565b82525050565b6115f36115ee82611d55565b611e1b565b82525050565b600061160482611c46565b61160e8185611c51565b935061161e818560208601611db7565b80840191505092915050565b6000611637601883611c5c565b915061164282611ec3565b602082019050919050565b600061165a601f83611c5c565b915061166582611eec565b602082019050919050565b600061167d601c83611c6d565b915061168882611f15565b601c82019050919050565b60006116a0602683611c5c565b91506116ab82611f3e565b604082019050919050565b60006116c3603083611c5c565b91506116ce82611f8d565b604082019050919050565b60006116e6602e83611c5c565b91506116f182611fdc565b604082019050919050565b6000611709602283611c5c565b91506117148261202b565b604082019050919050565b600061172c603283611c5c565b91506117378261207a565b604082019050919050565b600061174f602283611c5c565b915061175a826120c9565b604082019050919050565b6000611772602883611c5c565b915061177d82612118565b604082019050919050565b6000611795602283611c5c565b91506117a082612167565b604082019050919050565b60006117b8602083611c5c565b91506117c3826121b6565b602082019050919050565b60006117db601083611c5c565b91506117e6826121df565b602082019050919050565b60006117fe601c83611c5c565b915061180982612208565b602082019050919050565b6000611821600083611c51565b915061182c82612231565b600082019050919050565b6000611844601083611c5c565b915061184f82612234565b602082019050919050565b61186381611d91565b82525050565b61187281611d9b565b82525050565b600061188482846115f9565b915081905092915050565b600061189a82611670565b91506118a682846115e2565b60208201915081905092915050565b60006118c082611814565b9150819050919050565b60006020820190506118df60008301846115c4565b92915050565b60006060820190506118fa60008301866115c4565b61190760208301856115c4565b611914604083018461185a565b949350505050565b600060808201905061193160008301876115c4565b61193e60208301866115c4565b61194b604083018561185a565b611958606083018461185a565b95945050505050565b600060c08201905061197660008301896115c4565b61198360208301886115c4565b611990604083018761185a565b61199d606083018661185a565b6119aa608083018561185a565b6119b760a083018461185a565b979650505050505050565b60006040820190506119d760008301856115c4565b6119e4602083018461185a565b9392505050565b6000608082019050611a0060008301876115d3565b611a0d6020830186611869565b611a1a60408301856115d3565b611a2760608301846115d3565b95945050505050565b60006020820190508181036000830152611a498161162a565b9050919050565b60006020820190508181036000830152611a698161164d565b9050919050565b60006020820190508181036000830152611a8981611693565b9050919050565b60006020820190508181036000830152611aa9816116b6565b9050919050565b60006020820190508181036000830152611ac9816116d9565b9050919050565b60006020820190508181036000830152611ae9816116fc565b9050919050565b60006020820190508181036000830152611b098161171f565b9050919050565b60006020820190508181036000830152611b2981611742565b9050919050565b60006020820190508181036000830152611b4981611765565b9050919050565b60006020820190508181036000830152611b6981611788565b9050919050565b60006020820190508181036000830152611b89816117ab565b9050919050565b60006020820190508181036000830152611ba9816117ce565b9050919050565b60006020820190508181036000830152611bc9816117f1565b9050919050565b60006020820190508181036000830152611be981611837565b9050919050565b6000611bfa611c0b565b9050611c068282611dea565b919050565b6000604051905090565b600067ffffffffffffffff821115611c3057611c2f611e83565b5b611c3982611eb2565b9050602081019050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000611c8382611d91565b9150611c8e83611d91565b925082611c9e57611c9d611e54565b5b828204905092915050565b6000611cb482611d91565b9150611cbf83611d91565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611cf857611cf7611e25565b5b828202905092915050565b6000611d0e82611d91565b9150611d1983611d91565b925082821015611d2c57611d2b611e25565b5b828203905092915050565b6000611d4282611d71565b9050919050565b60008115159050919050565b6000819050919050565b6000611d6a82611d37565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015611dd5578082015181840152602081019050611dba565b83811115611de4576000848401525b50505050565b611df382611eb2565b810181811067ffffffffffffffff82111715611e1257611e11611e83565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420546f2053656e6420457468657220746f204d6f6e612120557360008201527f6572206861732072657665727465642100000000000000000000000000000000602082015250565b7f4661696c656420546f2053656e6420457468657220746f20463521205573657260008201527f2068617320726576657274656421000000000000000000000000000000000000602082015250565b7f4c697374696e672077617320636f6d706c65746564206f722063616e63656c6560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420546f2053656e6420457468657220746f20617274697374212060008201527f5573657220686173207265766572746564210000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420546f2053656e6420457468657221205573657220686173207260008201527f6576657274656421000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e73666572204661696c65642100000000000000000000000000000000600082015250565b7f496e76616c6964206164647265737320696e746572636174696f6e7300000000600082015250565b50565b7f4c697374696e6720657870697265642100000000000000000000000000000000600082015250565b61226681611d37565b811461227157600080fd5b50565b61227d81611d49565b811461228857600080fd5b50565b61229481611d5f565b811461229f57600080fd5b50565b6122ab81611d91565b81146122b657600080fd5b5056fea264697066735822122026654396f16ed4eb1455289d1343b1f1adc45d577b681a66f8bcf764b8c803f864736f6c63430008040033

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.