ETH Price: $3,591.45 (+4.37%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw199107612024-05-20 11:12:47228 days ago1716203567IN
0x432d26c2...4305Cd52A
0 ETH0.000277259
Mint149853552022-06-18 13:59:48930 days ago1655560788IN
0x432d26c2...4305Cd52A
1.14 ETH0.0030752821.90121654
Mint149853542022-06-18 13:59:44930 days ago1655560784IN
0x432d26c2...4305Cd52A
1.9 ETH0.0033260723.03026468
Mint149853392022-06-18 13:55:29930 days ago1655560529IN
0x432d26c2...4305Cd52A
0.38 ETH0.0027684120.29539765
Mint149853382022-06-18 13:55:27930 days ago1655560527IN
0x432d26c2...4305Cd52A
0.76 ETH0.0020029719.22095987
Mint149853262022-06-18 13:53:06930 days ago1655560386IN
0x432d26c2...4305Cd52A
0.38 ETH0.0025513718.69853411
Mint149853152022-06-18 13:50:57930 days ago1655560257IN
0x432d26c2...4305Cd52A
1.14 ETH0.0030031921.3862979
Mint149853112022-06-18 13:50:05930 days ago1655560205IN
0x432d26c2...4305Cd52A
1.9 ETH0.0033601423.26584622
Mint149853042022-06-18 13:48:58930 days ago1655560138IN
0x432d26c2...4305Cd52A
3.04 ETH0.0036664724.38272508
Mint149852822022-06-18 13:43:05930 days ago1655559785IN
0x432d26c2...4305Cd52A
0.38 ETH0.0035366725.91999132
Mint149852782022-06-18 13:41:44930 days ago1655559704IN
0x432d26c2...4305Cd52A
0.38 ETH0.0026918919.7297975
Mint149852372022-06-18 13:32:40930 days ago1655559160IN
0x432d26c2...4305Cd52A
0.38 ETH0.004074129.8608997
Mint149852342022-06-18 13:31:44930 days ago1655559104IN
0x432d26c2...4305Cd52A
1.14 ETH0.0042586530.33403209
Mint149852112022-06-18 13:25:47930 days ago1655558747IN
0x432d26c2...4305Cd52A
3.8 ETH0.0040833626.45145559
Mint149852112022-06-18 13:25:47930 days ago1655558747IN
0x432d26c2...4305Cd52A
3.8 ETH0.0040836826.45145559
Mint149852102022-06-18 13:25:31930 days ago1655558731IN
0x432d26c2...4305Cd52A
3.8 ETH0.0037998824.61351334
Mint149851892022-06-18 13:21:00930 days ago1655558460IN
0x432d26c2...4305Cd52A
3.8 ETH0.0042099727.26982961
Mint149851842022-06-18 13:19:48930 days ago1655558388IN
0x432d26c2...4305Cd52A
3.8 ETH0.0049610832.13931921
Mint149851382022-06-18 13:07:22930 days ago1655557642IN
0x432d26c2...4305Cd52A
1.9 ETH0.0044031230.49886908
Mint149850932022-06-18 12:57:04930 days ago1655557024IN
0x432d26c2...4305Cd52A
2.66 ETH0.0013740912.03340902
Mint149850822022-06-18 12:55:48930 days ago1655556948IN
0x432d26c2...4305Cd52A
3.8 ETH0.0025018516.20456708
Mint149850632022-06-18 12:52:35930 days ago1655556755IN
0x432d26c2...4305Cd52A
2.28 ETH0.0021767914.86904092
Mint149850062022-06-18 12:39:52930 days ago1655555992IN
0x432d26c2...4305Cd52A
1.9 ETH0.002391116.56116698
Mint149850042022-06-18 12:39:19930 days ago1655555959IN
0x432d26c2...4305Cd52A
3.8 ETH0.0026350617.0708864
Mint149849842022-06-18 12:35:17930 days ago1655555717IN
0x432d26c2...4305Cd52A
3.8 ETH0.0028861218.69322602
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
199107612024-05-20 11:12:47228 days ago1716203567
0x432d26c2...4305Cd52A
362.52 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
O2LandSale

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : O2LandSale.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

enum SaleStage {
    None,
    whitelist,
    publicSale
}

interface NFT {
    function mint(address to, uint256 quantity) external;
}

contract O2LandSale is Ownable, ReentrancyGuard {
    using Strings for uint256;
    using MerkleProof for bytes32[];

    uint256 public whitelistSaleStartTime = 1655517600; // 2022年6月18日星期六 10:00:00
    uint256 public whitelistSaleEndTime = 1655560800; // 2022年6月18日星期六 22:00:00
    uint256 public whitelistSaleAllocatedQuantity = 3000;
    uint256 public publicSaleStartTime = 0;
    uint256 public publicSaleEndTime = 0;
    uint256 public publicSaleAllocatedQuantity = 0;
    uint256 public maxTotalSoldQuantity =
        publicSaleAllocatedQuantity + whitelistSaleAllocatedQuantity;
    uint256 public maxMintQuantityPerTx = 10;
    uint256 public maxMintQuantityPerAddress = 10;
    uint256 public mintedQuantity = 0;
    uint256 public whitelistMintPrice = 0.38 ether;
    uint256 public publicSaleMintPrice = 0.38 ether;

    bytes32 private _whitelistMerkleRoot = 0x33374ab6a2507f826129f3ec4081df2ab4b25728c90253cec626177b05e6d8c4;

    address public o2LandAddress;
    mapping(address => uint256) public whitelistPurchased;
    mapping(address => uint256) public publicSalePurchased;

    constructor(address _o2LandAddress) {
        o2LandAddress = _o2LandAddress;
    }

    /* ************** */
    /* USER FUNCTIONS */
    /* ************** */

    function remainingCount() public view returns (uint256) {
        SaleStage currentStage = getCurrentActiveSaleStage();
        if (currentStage == SaleStage.whitelist) {
            return whitelistSaleAllocatedQuantity - mintedQuantity;
        } else if (currentStage == SaleStage.publicSale) {
            return maxTotalSoldQuantity - mintedQuantity;
        } else {
            return 0;
        }
    }

    // @notice This function returns the current active sale stage
    // @notice 0: NONE, 1: First Whitelist Sale, 2: Public Sale
    function getCurrentActiveSaleStage() public view returns (SaleStage) {
        bool whitelistSaleIsActive = (block.timestamp >
            whitelistSaleStartTime) && (block.timestamp < whitelistSaleEndTime);
        if (whitelistSaleIsActive) {
            return SaleStage.whitelist;
        }
        bool publicSaleIsActive = (block.timestamp > publicSaleStartTime) &&
            (block.timestamp < publicSaleEndTime);
        if (publicSaleIsActive) {
            return SaleStage.publicSale;
        }
        return SaleStage.None;
    }

    function mint(
        bytes32[] calldata proof,
        uint256 merkleNumberOfTokens,
        uint256 userSelectedNumberOfTokens
    ) external payable nonReentrant {
        require(tx.origin == msg.sender, "contracts not allowed to mint");
        SaleStage currentActiveSaleStage = getCurrentActiveSaleStage();
        require(
            currentActiveSaleStage != SaleStage.None,
            "no active sale right now"
        );
        require(userSelectedNumberOfTokens > 0, "numberOfTokens cannot be 0");
        if (currentActiveSaleStage == SaleStage.whitelist) {
            _mintwhitelist(
                proof,
                merkleNumberOfTokens,
                userSelectedNumberOfTokens
            );
        } else if (currentActiveSaleStage == SaleStage.publicSale) {
            _mintpublicSale(userSelectedNumberOfTokens);
        }
    }

    function _mintwhitelist(
        bytes32[] calldata proof,
        uint256 merkleNumberOfTokens,
        uint256 userSelectedNumberOfTokens
    ) internal {
        require(
            msg.value == whitelistMintPrice * userSelectedNumberOfTokens,
            "sent ether value incorrect"
        );
        require(
            proof.verify(
                _whitelistMerkleRoot,
                keccak256(abi.encodePacked(msg.sender, merkleNumberOfTokens))
            ),
            "failed to verify merkle root"
        );
        uint256 currentRemainingCount = remainingCount();
        uint256 refundAmount = 0;
        uint256 actualMintedQuantity = userSelectedNumberOfTokens;
        require(currentRemainingCount > 0, "sold out");

        if (currentRemainingCount < userSelectedNumberOfTokens) {
            // partially fill order
            refundAmount =
                (userSelectedNumberOfTokens - currentRemainingCount) *
                whitelistMintPrice;
            actualMintedQuantity = currentRemainingCount;
        }
        require(
            whitelistPurchased[msg.sender] + actualMintedQuantity <=
                merkleNumberOfTokens,
            "whitelisted user can only mint up to their allocated quota"
        );

        whitelistPurchased[msg.sender] += actualMintedQuantity;
        mintedQuantity += actualMintedQuantity;
        NFT(o2LandAddress).mint(msg.sender, actualMintedQuantity);
        if (refundAmount > 0) {
            payable(msg.sender).transfer(refundAmount);
        }
    }

    function _mintpublicSale(uint256 userSelectedNumberOfTokens) internal {
        require(
            msg.value == publicSaleMintPrice * userSelectedNumberOfTokens,
            "sent ether value incorrect"
        );
        uint256 currentRemainingCount = remainingCount();
        uint256 refundAmount = 0;
        uint256 actualMintedQuantity = userSelectedNumberOfTokens;
        require(currentRemainingCount > 0, "sold out");
        if (currentRemainingCount < userSelectedNumberOfTokens) {
            // partially fill order
            refundAmount =
                (userSelectedNumberOfTokens - currentRemainingCount) *
                publicSaleMintPrice;
            actualMintedQuantity = currentRemainingCount;
        }
        require(
            actualMintedQuantity <= maxMintQuantityPerTx,
            "exceeds max mint quantity per tx"
        );
        require(
            publicSalePurchased[msg.sender] + actualMintedQuantity <=
                maxMintQuantityPerAddress,
            "exceeds max mint quantity per addr"
        );
        publicSalePurchased[msg.sender] += actualMintedQuantity;
        mintedQuantity += actualMintedQuantity;
        NFT(o2LandAddress).mint(msg.sender, actualMintedQuantity);
        if (refundAmount > 0) {
            payable(msg.sender).transfer(refundAmount);
        }
    }

    /* *************** */
    /* ADMIN FUNCTIONS */
    /* *************** */

    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        _whitelistMerkleRoot = _merkleRoot;
    }

    function setSaleData(
        uint256 _whitelistSaleStartTime,
        uint256 _whitelistSaleEndTime,
        uint256 _whitelistSaleAllocatedQuantity,
        uint256 _publicSaleStartTime,
        uint256 _publicSaleEndTime,
        uint256 _publicSaleAllocatedQuantity,
        uint256 _maxMintQuantityPerTx,
        uint256 _maxMintQuantityPerAddress,
        uint256 _maxTotalSoldQuantity,
        uint256 _whitelistMintPrice,
        uint256 _publicSaleMintPrice
    ) external onlyOwner {
        whitelistSaleStartTime = _whitelistSaleStartTime;
        whitelistSaleEndTime = _whitelistSaleEndTime;
        whitelistSaleAllocatedQuantity = _whitelistSaleAllocatedQuantity;
        publicSaleStartTime = _publicSaleStartTime;
        publicSaleEndTime = _publicSaleEndTime;
        publicSaleAllocatedQuantity = _publicSaleAllocatedQuantity;
        maxMintQuantityPerTx = _maxMintQuantityPerTx;
        maxMintQuantityPerAddress = _maxMintQuantityPerAddress;
        maxTotalSoldQuantity = _maxTotalSoldQuantity;
        whitelistMintPrice = _whitelistMintPrice;
        publicSaleMintPrice = _publicSaleMintPrice;
    }

    function withdraw(address to) public onlyOwner {
        uint256 balance = address(this).balance;
        payable(to).transfer(balance);
    }
}

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

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 6 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

File 4 of 6 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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

File 5 of 6 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 6 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_o2LandAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"getCurrentActiveSaleStage","outputs":[{"internalType":"enum SaleStage","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintQuantityPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintQuantityPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalSoldQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"merkleNumberOfTokens","type":"uint256"},{"internalType":"uint256","name":"userSelectedNumberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintedQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"o2LandAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleAllocatedQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicSalePurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistSaleStartTime","type":"uint256"},{"internalType":"uint256","name":"_whitelistSaleEndTime","type":"uint256"},{"internalType":"uint256","name":"_whitelistSaleAllocatedQuantity","type":"uint256"},{"internalType":"uint256","name":"_publicSaleStartTime","type":"uint256"},{"internalType":"uint256","name":"_publicSaleEndTime","type":"uint256"},{"internalType":"uint256","name":"_publicSaleAllocatedQuantity","type":"uint256"},{"internalType":"uint256","name":"_maxMintQuantityPerTx","type":"uint256"},{"internalType":"uint256","name":"_maxMintQuantityPerAddress","type":"uint256"},{"internalType":"uint256","name":"_maxTotalSoldQuantity","type":"uint256"},{"internalType":"uint256","name":"_whitelistMintPrice","type":"uint256"},{"internalType":"uint256","name":"_publicSaleMintPrice","type":"uint256"}],"name":"setSaleData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSaleAllocatedQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSaleEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526362ad31a06002556362adda60600355610bb86004556000600555600060065560006007556004546007546100399190610136565b600855600a600955600a80556000600b5567054607fc96a60000600c5567054607fc96a60000600d557f33374ab6a2507f826129f3ec4081df2ab4b25728c90253cec626177b05e6d8c460001b600e5534801561009557600080fd5b506040516112ab3803806112ab8339810160408190526100b49161015c565b6100bd336100e6565b60018055600f80546001600160a01b0319166001600160a01b039290921691909117905561018c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000821982111561015757634e487b7160e01b600052601160045260246000fd5b500190565b60006020828403121561016e57600080fd5b81516001600160a01b038116811461018557600080fd5b9392505050565b6111108061019b6000396000f3fe60806040526004361061014b5760003560e01c80636bb7b1d9116100b6578063cd727c0e1161006f578063cd727c0e1461034e578063d8753aa514610364578063e3d74c8014610379578063f2fde38b1461038f578063f6580792146103af578063fc01fea5146103cf57600080fd5b80636bb7b1d9146102b9578063715018a6146102cf5780637cb64759146102e4578063866e0124146103045780638da5cb5b1461031a5780639224d54c1461033857600080fd5b806342ccc06c1161010857806342ccc06c146101e657806351cff8d9146102085780635b2818cd146102285780635fec39011461023e57806360bbbcee1461025457806367d949a61461028c57600080fd5b806314bf9af6146101505780631a387bc3146101655780631e4d185f1461018e578063230b43f4146101a45780632f7b390e146101ba57806335c6aaf8146101d0575b600080fd5b61016361015e366004610e95565b6103fc565b005b34801561017157600080fd5b5061017b600d5481565b6040519081526020015b60405180910390f35b34801561019a57600080fd5b5061017b60065481565b3480156101b057600080fd5b5061017b60025481565b3480156101c657600080fd5b5061017b600b5481565b3480156101dc57600080fd5b5061017b600c5481565b3480156101f257600080fd5b506101fb6105bf565b6040516101859190610f2d565b34801561021457600080fd5b50610163610223366004610f55565b610612565b34801561023457600080fd5b5061017b60095481565b34801561024a57600080fd5b5061017b60075481565b34801561026057600080fd5b50600f54610274906001600160a01b031681565b6040516001600160a01b039091168152602001610185565b34801561029857600080fd5b5061017b6102a7366004610f55565b60106020526000908152604090205481565b3480156102c557600080fd5b5061017b60055481565b3480156102db57600080fd5b50610163610679565b3480156102f057600080fd5b506101636102ff366004610f85565b6106af565b34801561031057600080fd5b5061017b60035481565b34801561032657600080fd5b506000546001600160a01b0316610274565b34801561034457600080fd5b5061017b60085481565b34801561035a57600080fd5b5061017b60045481565b34801561037057600080fd5b5061017b6106de565b34801561038557600080fd5b5061017b600a5481565b34801561039b57600080fd5b506101636103aa366004610f55565b61074d565b3480156103bb57600080fd5b506101636103ca366004610f9e565b6107e8565b3480156103db57600080fd5b5061017b6103ea366004610f55565b60116020526000908152604090205481565b600260015414156104545760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026001553233146104a85760405162461bcd60e51b815260206004820152601d60248201527f636f6e747261637473206e6f7420616c6c6f77656420746f206d696e74000000604482015260640161044b565b60006104b26105bf565b905060008160028111156104c8576104c8610f17565b14156105165760405162461bcd60e51b815260206004820152601860248201527f6e6f206163746976652073616c65207269676874206e6f770000000000000000604482015260640161044b565b600082116105665760405162461bcd60e51b815260206004820152601a60248201527f6e756d6265724f66546f6b656e732063616e6e6f742062652030000000000000604482015260640161044b565b600181600281111561057a5761057a610f17565b14156105915761058c85858585610844565b6105b4565b60028160028111156105a5576105a5610f17565b14156105b4576105b482610b4b565b505060018055505050565b600080600254421180156105d4575060035442105b905080156105e457600191505090565b6000600554421180156105f8575060065442105b905080156106095760029250505090565b60009250505090565b6000546001600160a01b0316331461063c5760405162461bcd60e51b815260040161044b90611010565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610674573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146106a35760405162461bcd60e51b815260040161044b90611010565b6106ad6000610dbb565b565b6000546001600160a01b031633146106d95760405162461bcd60e51b815260040161044b90611010565b600e55565b6000806106e96105bf565b905060018160028111156106ff576106ff610f17565b141561071b57600b54600454610715919061105b565b91505090565b600281600281111561072f5761072f610f17565b141561074557600b54600854610715919061105b565b600091505090565b6000546001600160a01b031633146107775760405162461bcd60e51b815260040161044b90611010565b6001600160a01b0381166107dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161044b565b6107e581610dbb565b50565b6000546001600160a01b031633146108125760405162461bcd60e51b815260040161044b90611010565b60029a909a55600398909855600496909655600594909455600692909255600755600955600a55600855600c55600d55565b80600c546108529190611072565b34146108a05760405162461bcd60e51b815260206004820152601a60248201527f73656e742065746865722076616c756520696e636f7272656374000000000000604482015260640161044b565b600e546040516bffffffffffffffffffffffff193360601b16602082015260348101849052610920919060540160405160208183030381529060405280519060200120868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929493925050610e0b9050565b61096c5760405162461bcd60e51b815260206004820152601c60248201527f6661696c656420746f20766572696679206d65726b6c6520726f6f7400000000604482015260640161044b565b60006109766106de565b9050600082826109b35760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b604482015260640161044b565b838310156109d857600c546109c8848661105b565b6109d29190611072565b91508290505b3360009081526010602052604090205485906109f5908390611091565b1115610a695760405162461bcd60e51b815260206004820152603a60248201527f77686974656c697374656420757365722063616e206f6e6c79206d696e74207560448201527f7020746f20746865697220616c6c6f63617465642071756f7461000000000000606482015260840161044b565b3360009081526010602052604081208054839290610a88908490611091565b9250508190555080600b6000828254610aa19190611091565b9091555050600f546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610af257600080fd5b505af1158015610b06573d6000803e3d6000fd5b505050506000821115610b4257604051339083156108fc029084906000818181858888f19350505050158015610b40573d6000803e3d6000fd5b505b50505050505050565b80600d54610b599190611072565b3414610ba75760405162461bcd60e51b815260206004820152601a60248201527f73656e742065746865722076616c756520696e636f7272656374000000000000604482015260640161044b565b6000610bb16106de565b905060008282610bee5760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b604482015260640161044b565b83831015610c1357600d54610c03848661105b565b610c0d9190611072565b91508290505b600954811115610c655760405162461bcd60e51b815260206004820181905260248201527f65786365656473206d6178206d696e74207175616e7469747920706572207478604482015260640161044b565b600a5433600090815260116020526040902054610c83908390611091565b1115610cdc5760405162461bcd60e51b815260206004820152602260248201527f65786365656473206d6178206d696e74207175616e7469747920706572206164604482015261323960f11b606482015260840161044b565b3360009081526011602052604081208054839290610cfb908490611091565b9250508190555080600b6000828254610d149190611091565b9091555050600f546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050506000821115610db557604051339083156108fc029084906000818181858888f19350505050158015610db3573d6000803e3d6000fd5b505b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610e188584610e21565b14949350505050565b600081815b8451811015610e8d576000858281518110610e4357610e436110a9565b60200260200101519050808311610e695760008381526020829052604090209250610e7a565b600081815260208490526040902092505b5080610e85816110bf565b915050610e26565b509392505050565b60008060008060608587031215610eab57600080fd5b843567ffffffffffffffff80821115610ec357600080fd5b818701915087601f830112610ed757600080fd5b813581811115610ee657600080fd5b8860208260051b8501011115610efb57600080fd5b6020928301999098509187013596604001359550909350505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310610f4f57634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215610f6757600080fd5b81356001600160a01b0381168114610f7e57600080fd5b9392505050565b600060208284031215610f9757600080fd5b5035919050565b60008060008060008060008060008060006101608c8e031215610fc057600080fd5b505089359b60208b01359b5060408b01359a60608101359a506080810135995060a0810135985060c0810135975060e0810135965061010081013595506101208101359450610140013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561106d5761106d611045565b500390565b600081600019048311821515161561108c5761108c611045565b500290565b600082198211156110a4576110a4611045565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156110d3576110d3611045565b506001019056fea264697066735822122071819162694f4a1bd41529d79449698c63b9be12bd78abe44c66625aa6672b5364736f6c634300080a00330000000000000000000000005016c68fce9e5fbab960a0d55db626f7f8ced48b

Deployed Bytecode

0x60806040526004361061014b5760003560e01c80636bb7b1d9116100b6578063cd727c0e1161006f578063cd727c0e1461034e578063d8753aa514610364578063e3d74c8014610379578063f2fde38b1461038f578063f6580792146103af578063fc01fea5146103cf57600080fd5b80636bb7b1d9146102b9578063715018a6146102cf5780637cb64759146102e4578063866e0124146103045780638da5cb5b1461031a5780639224d54c1461033857600080fd5b806342ccc06c1161010857806342ccc06c146101e657806351cff8d9146102085780635b2818cd146102285780635fec39011461023e57806360bbbcee1461025457806367d949a61461028c57600080fd5b806314bf9af6146101505780631a387bc3146101655780631e4d185f1461018e578063230b43f4146101a45780632f7b390e146101ba57806335c6aaf8146101d0575b600080fd5b61016361015e366004610e95565b6103fc565b005b34801561017157600080fd5b5061017b600d5481565b6040519081526020015b60405180910390f35b34801561019a57600080fd5b5061017b60065481565b3480156101b057600080fd5b5061017b60025481565b3480156101c657600080fd5b5061017b600b5481565b3480156101dc57600080fd5b5061017b600c5481565b3480156101f257600080fd5b506101fb6105bf565b6040516101859190610f2d565b34801561021457600080fd5b50610163610223366004610f55565b610612565b34801561023457600080fd5b5061017b60095481565b34801561024a57600080fd5b5061017b60075481565b34801561026057600080fd5b50600f54610274906001600160a01b031681565b6040516001600160a01b039091168152602001610185565b34801561029857600080fd5b5061017b6102a7366004610f55565b60106020526000908152604090205481565b3480156102c557600080fd5b5061017b60055481565b3480156102db57600080fd5b50610163610679565b3480156102f057600080fd5b506101636102ff366004610f85565b6106af565b34801561031057600080fd5b5061017b60035481565b34801561032657600080fd5b506000546001600160a01b0316610274565b34801561034457600080fd5b5061017b60085481565b34801561035a57600080fd5b5061017b60045481565b34801561037057600080fd5b5061017b6106de565b34801561038557600080fd5b5061017b600a5481565b34801561039b57600080fd5b506101636103aa366004610f55565b61074d565b3480156103bb57600080fd5b506101636103ca366004610f9e565b6107e8565b3480156103db57600080fd5b5061017b6103ea366004610f55565b60116020526000908152604090205481565b600260015414156104545760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026001553233146104a85760405162461bcd60e51b815260206004820152601d60248201527f636f6e747261637473206e6f7420616c6c6f77656420746f206d696e74000000604482015260640161044b565b60006104b26105bf565b905060008160028111156104c8576104c8610f17565b14156105165760405162461bcd60e51b815260206004820152601860248201527f6e6f206163746976652073616c65207269676874206e6f770000000000000000604482015260640161044b565b600082116105665760405162461bcd60e51b815260206004820152601a60248201527f6e756d6265724f66546f6b656e732063616e6e6f742062652030000000000000604482015260640161044b565b600181600281111561057a5761057a610f17565b14156105915761058c85858585610844565b6105b4565b60028160028111156105a5576105a5610f17565b14156105b4576105b482610b4b565b505060018055505050565b600080600254421180156105d4575060035442105b905080156105e457600191505090565b6000600554421180156105f8575060065442105b905080156106095760029250505090565b60009250505090565b6000546001600160a01b0316331461063c5760405162461bcd60e51b815260040161044b90611010565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610674573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146106a35760405162461bcd60e51b815260040161044b90611010565b6106ad6000610dbb565b565b6000546001600160a01b031633146106d95760405162461bcd60e51b815260040161044b90611010565b600e55565b6000806106e96105bf565b905060018160028111156106ff576106ff610f17565b141561071b57600b54600454610715919061105b565b91505090565b600281600281111561072f5761072f610f17565b141561074557600b54600854610715919061105b565b600091505090565b6000546001600160a01b031633146107775760405162461bcd60e51b815260040161044b90611010565b6001600160a01b0381166107dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161044b565b6107e581610dbb565b50565b6000546001600160a01b031633146108125760405162461bcd60e51b815260040161044b90611010565b60029a909a55600398909855600496909655600594909455600692909255600755600955600a55600855600c55600d55565b80600c546108529190611072565b34146108a05760405162461bcd60e51b815260206004820152601a60248201527f73656e742065746865722076616c756520696e636f7272656374000000000000604482015260640161044b565b600e546040516bffffffffffffffffffffffff193360601b16602082015260348101849052610920919060540160405160208183030381529060405280519060200120868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929493925050610e0b9050565b61096c5760405162461bcd60e51b815260206004820152601c60248201527f6661696c656420746f20766572696679206d65726b6c6520726f6f7400000000604482015260640161044b565b60006109766106de565b9050600082826109b35760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b604482015260640161044b565b838310156109d857600c546109c8848661105b565b6109d29190611072565b91508290505b3360009081526010602052604090205485906109f5908390611091565b1115610a695760405162461bcd60e51b815260206004820152603a60248201527f77686974656c697374656420757365722063616e206f6e6c79206d696e74207560448201527f7020746f20746865697220616c6c6f63617465642071756f7461000000000000606482015260840161044b565b3360009081526010602052604081208054839290610a88908490611091565b9250508190555080600b6000828254610aa19190611091565b9091555050600f546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610af257600080fd5b505af1158015610b06573d6000803e3d6000fd5b505050506000821115610b4257604051339083156108fc029084906000818181858888f19350505050158015610b40573d6000803e3d6000fd5b505b50505050505050565b80600d54610b599190611072565b3414610ba75760405162461bcd60e51b815260206004820152601a60248201527f73656e742065746865722076616c756520696e636f7272656374000000000000604482015260640161044b565b6000610bb16106de565b905060008282610bee5760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b604482015260640161044b565b83831015610c1357600d54610c03848661105b565b610c0d9190611072565b91508290505b600954811115610c655760405162461bcd60e51b815260206004820181905260248201527f65786365656473206d6178206d696e74207175616e7469747920706572207478604482015260640161044b565b600a5433600090815260116020526040902054610c83908390611091565b1115610cdc5760405162461bcd60e51b815260206004820152602260248201527f65786365656473206d6178206d696e74207175616e7469747920706572206164604482015261323960f11b606482015260840161044b565b3360009081526011602052604081208054839290610cfb908490611091565b9250508190555080600b6000828254610d149190611091565b9091555050600f546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050506000821115610db557604051339083156108fc029084906000818181858888f19350505050158015610db3573d6000803e3d6000fd5b505b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610e188584610e21565b14949350505050565b600081815b8451811015610e8d576000858281518110610e4357610e436110a9565b60200260200101519050808311610e695760008381526020829052604090209250610e7a565b600081815260208490526040902092505b5080610e85816110bf565b915050610e26565b509392505050565b60008060008060608587031215610eab57600080fd5b843567ffffffffffffffff80821115610ec357600080fd5b818701915087601f830112610ed757600080fd5b813581811115610ee657600080fd5b8860208260051b8501011115610efb57600080fd5b6020928301999098509187013596604001359550909350505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310610f4f57634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215610f6757600080fd5b81356001600160a01b0381168114610f7e57600080fd5b9392505050565b600060208284031215610f9757600080fd5b5035919050565b60008060008060008060008060008060006101608c8e031215610fc057600080fd5b505089359b60208b01359b5060408b01359a60608101359a506080810135995060a0810135985060c0810135975060e0810135965061010081013595506101208101359450610140013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561106d5761106d611045565b500390565b600081600019048311821515161561108c5761108c611045565b500290565b600082198211156110a4576110a4611045565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156110d3576110d3611045565b506001019056fea264697066735822122071819162694f4a1bd41529d79449698c63b9be12bd78abe44c66625aa6672b5364736f6c634300080a0033

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

0000000000000000000000005016c68fce9e5fbab960a0d55db626f7f8ced48b

-----Decoded View---------------
Arg [0] : _o2LandAddress (address): 0x5016c68FCE9E5FbAb960a0D55dB626F7f8CEd48B

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005016c68fce9e5fbab960a0d55db626f7f8ced48b


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.