Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 118 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint Allow List | 16888157 | 1097 days ago | IN | 0.05 ETH | 0.0004283 | ||||
| Mint Allow List | 16795937 | 1110 days ago | IN | 0.05 ETH | 0.00077452 | ||||
| Mint Allow List | 16795936 | 1110 days ago | IN | 0.05 ETH | 0.00075772 | ||||
| Mint Allow List | 16795936 | 1110 days ago | IN | 0.05 ETH | 0.00076081 | ||||
| Mint Allow List | 16795936 | 1110 days ago | IN | 0.05 ETH | 0.00076218 | ||||
| Mint Allow List | 16795935 | 1110 days ago | IN | 0.05 ETH | 0.00068085 | ||||
| Mint Public | 16764006 | 1114 days ago | IN | 0.05 ETH | 0.00253345 | ||||
| Mint Public | 16763965 | 1114 days ago | IN | 0.05 ETH | 0.00394168 | ||||
| Mint Allow List | 16763957 | 1114 days ago | IN | 0.05 ETH | 0.00133261 | ||||
| Mint Public | 16763956 | 1114 days ago | IN | 0.1 ETH | 0.00283532 | ||||
| Mint Public | 16763955 | 1114 days ago | IN | 0.05 ETH | 0.00422695 | ||||
| Mint Public | 16763952 | 1114 days ago | IN | 0.1 ETH | 0.00521895 | ||||
| Mint Public | 16763942 | 1114 days ago | IN | 0.05 ETH | 0.00421684 | ||||
| Mint Public | 16763930 | 1114 days ago | IN | 0.05 ETH | 0.00397598 | ||||
| Mint Public | 16763927 | 1114 days ago | IN | 0.05 ETH | 0.00498807 | ||||
| Mint Public | 16763925 | 1114 days ago | IN | 0.05 ETH | 0.00549769 | ||||
| Mint Public | 16763904 | 1114 days ago | IN | 0.05 ETH | 0.0057832 | ||||
| Mint Public | 16763902 | 1114 days ago | IN | 0.05 ETH | 0.00601795 | ||||
| Mint Public | 16763897 | 1114 days ago | IN | 0.05 ETH | 0.00689492 | ||||
| Mint Public | 16763895 | 1114 days ago | IN | 0.05 ETH | 0.0068384 | ||||
| Mint Public | 16763886 | 1114 days ago | IN | 0.05 ETH | 0.00562291 | ||||
| Mint Allow List | 16763878 | 1114 days ago | IN | 0.05 ETH | 0.00127093 | ||||
| Mint Public | 16763876 | 1114 days ago | IN | 0.05 ETH | 0.0058641 | ||||
| Mint Public | 16763874 | 1114 days ago | IN | 0.05 ETH | 0.00522154 | ||||
| Mint Public | 16763860 | 1114 days ago | IN | 0.06 ETH | 0.00525171 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 16763965 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763955 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763952 | 1114 days ago | 0.1 ETH | ||||
| Transfer | 16763942 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763930 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763927 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763925 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763904 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763902 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763897 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763895 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763886 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763876 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763874 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763860 | 1114 days ago | 0.06 ETH | ||||
| Transfer | 16763857 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763849 | 1114 days ago | 0.1 ETH | ||||
| Transfer | 16763847 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763846 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763844 | 1114 days ago | 0.1 ETH | ||||
| Transfer | 16763844 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763842 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763841 | 1114 days ago | 0.05 ETH | ||||
| Transfer | 16763838 | 1114 days ago | 0.1 ETH | ||||
| Transfer | 16763837 | 1114 days ago | 0.1 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MerkleMinMinter
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@ @@@@@@@@@@@@ @@@@@@@@* @@@@@@@@ @@@ @@@@ &@@@@@@@@@@@@ @@@@@@
// @@@@@ @@@@@@@@@@@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@
// @@@@@ #@ @@@@@@@@@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@. @@@@@@@ @@@@@@@@@
// @@@@@ #@@ @@@@@@@@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ @@@@ @@@@@@@@@@
// @@@@@ #@@@@ @@@@@@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ & @@@@@@@@@@@@
// @@@@@ #@@@@@ @@@@@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ *@@@@@@@@@@@@@
// @@@@@ #@@@@@@@ @@@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@
// @@@@@ #@@@@@@@@@ &@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@
// @@@@@ #@@@@@@@@@@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@
// @@@@@ #@@@@@@@@@@@@ @@@@@@@@* @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@ @@@
// @@@ @@@@@@@@ .@@@@@@@@ @@@@@@ @@@@@ @@@@@@@@@@@@@@ @@@@@* &@@@@@@@@@@@@ @@@
// @@@ @@@@@@@@@ @@@@@@@@@ @@@@@@ @@@@@ @@@@@@@@@@@@@@@@@@ @@@@@* /@@@@@@@@@@@@@@@@@@ @@@
// @@@ @@@@@*@@@, @@@@ @@@@@ @@@@@@ @@@@@ @@@@@ @@@@@ @@@@@* @@@@@@, @@@@@@ @@@
// @@@ @@@@@ @@@@ @@@@ @@@@@ @@@@@@ @@@@@ @@@@@ @@@@@* @@@@@@ @@@@@@ @@@
// @@@ @@@@@ @@@@ @@@@ @@@@@ @@@@@@ @@@@@ %@@@@@@@@@@@ @@@@@* @@@@@ @@@
// @@@ @@@@@ @@@@ @@@@ @@@@@ @@@@@@ @@@@@ @@@@@@@@@@@@@@@@ @@@@@* &@@@@@ @@@
// @@@ @@@@@ @@@@ @@@@ @@@@@ @@@@@@ @@@@@ @@@@@@@@@@ @@@@@* @@@@@ @@@
// @@@ @@@@@ @@@@ ,@@@ @@@@@ @@@@@@ @@@@@ @@@@@@ @@@@@ @@@@@* @@@@@@ @@@@@@ @@@
// @@@ @@@@@ @@@@@@@@ @@@@@ @@@@@@@ @@@@@@ @@@@@# ,@@@@@ @@@@@* @@@@@@@ @@@@@@ @@@
// @@@ @@@@@ &@@@@@@ @@@@@ /@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@* @@@@@@@@@@@@@@@@@ @@@
// @@@ @@@@@ @@@@@@ @@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@* @@@@@@@@@@@* @@@
// @@@ @@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "openzeppelin-contracts/utils/cryptography/MerkleProof.sol";
import "./INM721A.sol";
import "./DropData2.sol";
contract MerkleMinMinter {
mapping(address => DropData) internal _dropData;
mapping(address => mapping(address => uint256)) public addressPublicMintCount;
mapping(address => mapping(address => uint256)) public addressWLMintCount;
mapping(address => mapping(address => uint256)) public referralCount;
event MintbossMint(address _dropAddress, address _referrer, string _eid, uint256 _quantity);
event MintPhaseChanged(address _dropAddress, address _from, uint256 newPhase);
event MintCreated(address _dropAddress);
constructor() {}
function createMint(
address _dropAddress,
DropData memory _initialDropData
) external {
require(_dropData[_dropAddress].merkleroot == bytes32(0), "Mint already exists");
DropData storage data = _dropData[_dropAddress];
data.merkleroot = _initialDropData.merkleroot;
data.mintbossAllowed = _initialDropData.mintbossAllowed;
data.mintbossMintPrice = _initialDropData.mintbossMintPrice;
data.mintbossAllowListMintPrice = _initialDropData.mintbossAllowListMintPrice;
data.mintbossReferralFee = _initialDropData.mintbossReferralFee;
data.mintPhase = _initialDropData.mintPhase;
data.publicMintPrice = _initialDropData.publicMintPrice;
data.minPublicMintCount = _initialDropData.minPublicMintCount;
data.minWLMintCount = _initialDropData.minWLMintCount;
data.maxPublicMintCount = _initialDropData.maxPublicMintCount;
data.maxWLMintCount = _initialDropData.maxWLMintCount;
data.allowlistMintPrice = _initialDropData.allowlistMintPrice;
emit MintCreated(_dropAddress);
}
// SETTERS
function setDropData(address _dropAddress, DropData memory _newDropData) external onlyAdmin(_dropAddress) {
DropData storage data = _dropData[_dropAddress];
data.merkleroot = _newDropData.merkleroot;
data.mintbossAllowed = _newDropData.mintbossAllowed;
data.mintbossMintPrice = _newDropData.mintbossMintPrice;
data.mintbossAllowListMintPrice = _newDropData.mintbossAllowListMintPrice;
data.mintbossReferralFee = _newDropData.mintbossReferralFee;
data.mintPhase = _newDropData.mintPhase;
data.publicMintPrice = _newDropData.publicMintPrice;
data.minPublicMintCount = _newDropData.minPublicMintCount;
data.minWLMintCount = _newDropData.minWLMintCount;
data.maxPublicMintCount = _newDropData.maxPublicMintCount;
data.maxWLMintCount = _newDropData.maxWLMintCount;
data.allowlistMintPrice = _newDropData.allowlistMintPrice;
}
// Allows the contract owner to update the merkle root (allowlist)
function setMerkleRoot(address _dropAddress, bytes32 _merkleroot) external onlyAdmin(_dropAddress) {
_dropData[_dropAddress].merkleroot = _merkleroot;
}
// An owner-only function which toggles the public sale on/off
function setMintPhase(address _dropAddress, uint256 _newPhase) external onlyAdmin(_dropAddress) {
_dropData[_dropAddress].mintPhase = _newPhase;
emit MintPhaseChanged(_dropAddress, msg.sender, _newPhase);
}
// GETTERS
function getDropData(address _dropAddress) external view returns (
bytes32 _merkleroot,
bool _mintbossAllowed,
uint256 _mintbossMintPrice,
uint256 _mintbossAllowListMintPrice,
uint256 _mintbossReferralFee, // The amount sent to the referrer on each mint
uint256 _mintPhase, // 0 = closed, 1 = WL sale, 2 = public sale
uint256 _publicMintPrice, // Public mint price
uint256 _minPublicMintCount, // The minimum number of tokens any one address can mint
uint256 _minWLMintCount,
uint256 _maxPublicMintCount, // The maximum number of tokens any one address can mint
uint256 _maxWLMintCount,
uint256 _allowlistMintPrice
) {
DropData storage data = _dropData[_dropAddress];
return (
data.merkleroot,
data.mintbossAllowed,
data.mintbossMintPrice,
data.mintbossAllowListMintPrice,
data.mintbossReferralFee,
data.mintPhase,
data.publicMintPrice,
data.minPublicMintCount,
data.minWLMintCount,
data.maxPublicMintCount,
data.maxWLMintCount,
data.allowlistMintPrice
);
}
// MINT FUNCTIONS
// Minting function for addresses on the allowlist only
function mintAllowList(address _dropAddress, address _recipient, uint256 _quantity, address payable _referrer, string memory _eid, bytes32[] calldata _proof) external payable {
DropData storage data = _dropData[_dropAddress];
uint256 mintCount = addressWLMintCount[_dropAddress][_recipient];
require(_verify(_leaf(_recipient), _proof, data.merkleroot), "Wallet not on allowlist");
require(_quantity >= data.minWLMintCount, "Mint quantity too low");
require(mintCount + _quantity <= data.maxWLMintCount, "Exceeded whitelist allowance");
require(data.mintPhase==1, "Allowlist sale is not active");
if (_referrer != address(0)) {
require(_referrer != _recipient, "Referrer cannot be sender");
require(data.mintbossAllowed, "Mintboss dissallowed");
require(_quantity * data.mintbossAllowListMintPrice == msg.value, "Incorrect price");
} else {
if(_quantity * data.allowlistMintPrice != msg.value) revert InvalidEthAmount();
}
addressWLMintCount[_dropAddress][_recipient] = mintCount + _quantity;
INM721A(payable(_dropAddress)).mint(_recipient, _quantity);
_payOut(_dropAddress, _referrer, _eid, _quantity, msg.value);
}
function mintPublic(address _dropAddress, address _recipient, uint256 _quantity, address payable _referrer, string memory _eid) external payable {
DropData storage data = _dropData[_dropAddress];
uint256 mintCount = addressPublicMintCount[_dropAddress][_recipient];
require(data.mintPhase==2, "Public sale inactive");
require(_quantity >= data.minPublicMintCount, "Mint quantity too low");
require(mintCount + _quantity <= data.maxPublicMintCount, "Exceeded max mint");
if (_referrer != address(0)) {
require(_referrer != _recipient, "Referrer cannot be sender");
require(data.mintbossAllowed, "Mintboss dissallowed");
if(_quantity * data.mintbossMintPrice != msg.value) revert InvalidEthAmount();
} else {
if(_quantity * data.publicMintPrice != msg.value) revert InvalidEthAmount();
}
addressPublicMintCount[_dropAddress][_recipient] = mintCount + _quantity;
INM721A(payable(_dropAddress)).mint(_recipient, _quantity);
_payOut(_dropAddress, _referrer, _eid, _quantity, msg.value);
}
function _payOut(address _dropAddress, address payable _referrer, string memory _eid, uint256 _quantity, uint256 _value) internal {
DropData storage data = _dropData[_dropAddress];
uint256 remainingAmount = _value;
if (_referrer != address(0)) {
uint256 refererralFee = data.mintbossReferralFee * _quantity;
referralCount[_dropAddress][_referrer] += _quantity;
remainingAmount -= refererralFee;
emit MintbossMint(_dropAddress, _referrer, _eid, _quantity);
payable(_referrer).transfer(refererralFee);
}
payable(_dropAddress).transfer(remainingAmount);
}
// MERKLE FUNCTIONS
// Used to construct a merkle tree leaf
function _leaf(address _account) internal pure returns (bytes32)
{
return keccak256(abi.encodePacked(_account));
}
// Verifies a leaf is part of the tree
function _verify(bytes32 leaf, bytes32[] memory _proof, bytes32 _root) pure
internal returns (bool)
{
return MerkleProof.verify(_proof, _root, leaf);
}
// MODIFIERS
modifier onlyAdmin(address _dropAddress) virtual {
require(INM721A(payable(_dropAddress)).hasAnyRole(msg.sender, INM721A(payable(_dropAddress)).ADMIN_ROLE()), "not admin");
_;
}
modifier onlyMinter(address _dropAddress) virtual {
require(INM721A(payable(_dropAddress)).hasAnyRole(msg.sender, INM721A(payable(_dropAddress)).MINTER_ROLE()), "not minter");
_;
}
// ERRORS
error InvalidEthAmount();
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.0;
/**
* @dev These functions deal with verification of Merkle Tree proofs.
*
* The tree and the proofs can be generated using our
* https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
* You will find a quickstart guide in the readme.
*
* WARNING: You should avoid using leaf values that are 64 bytes long prior to
* hashing, or use a hash function other than keccak256 for hashing leaves.
* This is because the concatenation of a sorted pair of internal nodes in
* the merkle tree could be reinterpreted as a leaf value.
* OpenZeppelin's JavaScript library generates merkle trees that are safe
* against this attack out of the box.
*/
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 Calldata version of {verify}
*
* _Available since v4.7._
*/
function verifyCalldata(
bytes32[] calldata proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProofCalldata(proof, leaf) == root;
}
/**
* @dev Returns the rebuilt hash obtained by traversing a Merkle 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++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Calldata version of {processProof}
*
* _Available since v4.7._
*/
function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
* `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
function multiProofVerify(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProof(proof, proofFlags, leaves) == root;
}
/**
* @dev Calldata version of {multiProofVerify}
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
function multiProofVerifyCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProofCalldata(proof, proofFlags, leaves) == root;
}
/**
* @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
* proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
* leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
* respectively.
*
* CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
* is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
* tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
*
* _Available since v4.7._
*/
function processMultiProof(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the merkle tree.
uint256 leavesLen = leaves.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
return hashes[totalHashes - 1];
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
/**
* @dev Calldata version of {processMultiProof}.
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
function processMultiProofCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the merkle tree.
uint256 leavesLen = leaves.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
return hashes[totalHashes - 1];
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
}
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
/// @solidity memory-safe-assembly
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
struct DropData {
bytes32 merkleroot;
bool mintbossAllowed;
uint256 mintbossMintPrice;
uint256 mintbossAllowListMintPrice;
uint256 mintbossReferralFee; // The amount sent to the referrer on each mint
uint256 mintPhase; // 0 = closed, 1 = WL sale, 2 = public sale
uint256 publicMintPrice; // Public mint price
uint256 minPublicMintCount; // The minimum number of tokens any one address can mint
uint256 minWLMintCount;
uint256 maxPublicMintCount; // The maximum number of tokens any one address can mint
uint256 maxWLMintCount;
uint256 allowlistMintPrice;
//uint256 maxTotalSupply;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
interface INM721A {
function setBaseURI(string calldata _baseURI) external;
function setRoyaltyInfo(address receiver, uint96 feeBasisPoints) external;
function mint(address _recipient, uint256 _quantity) external;
function totalSupply() external view returns (uint256);
function balanceOf(address _owner) external view returns (uint256);
function ownerOf(uint256 _tokenId) external view returns (address);
function approve(address operator, uint256 tokenId) external payable;
function getApproved(uint256 tokenId) external view returns (address);
function setApprovalForAll(address operator, bool approved) external;
function isApprovedForAll(address owner, address operator) external view returns (bool);
function transferFrom(address from, address to, uint256 tokenId) external payable;
function safeTransferFrom(address from, address to, uint256 tokenId) external payable;
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external payable;
function supportsInterface(bytes4 interfaceId) external view returns (bool);
function tokenURI(uint256 _tokenId) external view returns (string memory);
function ADMIN_ROLE() external view returns (uint256);
function MINTER_ROLE() external view returns (uint256);
function hasAnyRole(address _user, uint256 _roles) external view returns (bool);
function initialize(address _owner, string calldata _baseUri, string calldata _name, string calldata _symbol, uint256 _maxTotalSupply, address[] calldata _payees, uint256[] calldata _shares) external returns (address);
function grantRoles(address _user, uint256 _roles) external payable;
function transferOwnership(address _newOwner) external;
}{
"remappings": [
"ERC721A-Upgradeable/=lib/ERC721A-Upgradeable/contracts/",
"closedsea/=lib/closedsea/src/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/closedsea/lib/openzeppelin-contracts/lib/erc4626-tests/",
"erc721a-upgradeable/=lib/ERC721A-Upgradeable/contracts/",
"erc721a/=lib/closedsea/lib/erc721a/contracts/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
"operator-filter-registry/=lib/closedsea/lib/operator-filter-registry/src/",
"solady/=lib/solady/src/",
"solmate/=lib/solady/lib/solmate/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidEthAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_dropAddress","type":"address"}],"name":"MintCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_dropAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPhase","type":"uint256"}],"name":"MintPhaseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_dropAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_referrer","type":"address"},{"indexed":false,"internalType":"string","name":"_eid","type":"string"},{"indexed":false,"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"MintbossMint","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"addressPublicMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"addressWLMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dropAddress","type":"address"},{"components":[{"internalType":"bytes32","name":"merkleroot","type":"bytes32"},{"internalType":"bool","name":"mintbossAllowed","type":"bool"},{"internalType":"uint256","name":"mintbossMintPrice","type":"uint256"},{"internalType":"uint256","name":"mintbossAllowListMintPrice","type":"uint256"},{"internalType":"uint256","name":"mintbossReferralFee","type":"uint256"},{"internalType":"uint256","name":"mintPhase","type":"uint256"},{"internalType":"uint256","name":"publicMintPrice","type":"uint256"},{"internalType":"uint256","name":"minPublicMintCount","type":"uint256"},{"internalType":"uint256","name":"minWLMintCount","type":"uint256"},{"internalType":"uint256","name":"maxPublicMintCount","type":"uint256"},{"internalType":"uint256","name":"maxWLMintCount","type":"uint256"},{"internalType":"uint256","name":"allowlistMintPrice","type":"uint256"}],"internalType":"struct DropData","name":"_initialDropData","type":"tuple"}],"name":"createMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dropAddress","type":"address"}],"name":"getDropData","outputs":[{"internalType":"bytes32","name":"_merkleroot","type":"bytes32"},{"internalType":"bool","name":"_mintbossAllowed","type":"bool"},{"internalType":"uint256","name":"_mintbossMintPrice","type":"uint256"},{"internalType":"uint256","name":"_mintbossAllowListMintPrice","type":"uint256"},{"internalType":"uint256","name":"_mintbossReferralFee","type":"uint256"},{"internalType":"uint256","name":"_mintPhase","type":"uint256"},{"internalType":"uint256","name":"_publicMintPrice","type":"uint256"},{"internalType":"uint256","name":"_minPublicMintCount","type":"uint256"},{"internalType":"uint256","name":"_minWLMintCount","type":"uint256"},{"internalType":"uint256","name":"_maxPublicMintCount","type":"uint256"},{"internalType":"uint256","name":"_maxWLMintCount","type":"uint256"},{"internalType":"uint256","name":"_allowlistMintPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dropAddress","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"address payable","name":"_referrer","type":"address"},{"internalType":"string","name":"_eid","type":"string"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintAllowList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_dropAddress","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"address payable","name":"_referrer","type":"address"},{"internalType":"string","name":"_eid","type":"string"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"referralCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dropAddress","type":"address"},{"components":[{"internalType":"bytes32","name":"merkleroot","type":"bytes32"},{"internalType":"bool","name":"mintbossAllowed","type":"bool"},{"internalType":"uint256","name":"mintbossMintPrice","type":"uint256"},{"internalType":"uint256","name":"mintbossAllowListMintPrice","type":"uint256"},{"internalType":"uint256","name":"mintbossReferralFee","type":"uint256"},{"internalType":"uint256","name":"mintPhase","type":"uint256"},{"internalType":"uint256","name":"publicMintPrice","type":"uint256"},{"internalType":"uint256","name":"minPublicMintCount","type":"uint256"},{"internalType":"uint256","name":"minWLMintCount","type":"uint256"},{"internalType":"uint256","name":"maxPublicMintCount","type":"uint256"},{"internalType":"uint256","name":"maxWLMintCount","type":"uint256"},{"internalType":"uint256","name":"allowlistMintPrice","type":"uint256"}],"internalType":"struct DropData","name":"_newDropData","type":"tuple"}],"name":"setDropData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dropAddress","type":"address"},{"internalType":"bytes32","name":"_merkleroot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dropAddress","type":"address"},{"internalType":"uint256","name":"_newPhase","type":"uint256"}],"name":"setMintPhase","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b506115dd806100206000396000f3fe6080604052600436106100915760003560e01c80639927c7e7116100595780639927c7e714610149578063a55b47f114610181578063b64a706e14610260578063edb93ff614610280578063f2e0bf1e146102b857600080fd5b80631f8e46511461009657806321a92e18146100ab57806358949229146100f65780635f88967f14610116578063894bebf814610136575b600080fd5b6100a96100a4366004611190565b6102d8565b005b3480156100b757600080fd5b506100e36100c636600461120f565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561010257600080fd5b506100a9610111366004611248565b6105b0565b34801561012257600080fd5b506100a9610131366004611292565b61070e565b6100a9610144366004611362565b610835565b34801561015557600080fd5b506100e361016436600461120f565b600360209081526000928352604080842090915290825290205481565b34801561018d57600080fd5b5061020761019c36600461143e565b6001600160a01b0316600090815260208190526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999b60ff9099169a97999698959794969395929491939092565b604080519c8d529a151560208d0152998b019890985260608a0196909652608089019490945260a088019290925260c087015260e0860152610100850152610120840152610140830152610160820152610180016100ed565b34801561026c57600080fd5b506100a961027b366004611292565b610c0e565b34801561028c57600080fd5b506100e361029b36600461120f565b600260209081526000928352604080842090915290825290205481565b3480156102c457600080fd5b506100a96102d3366004611248565b610dad565b6001600160a01b038086166000908152602081815260408083206001835281842094891684529390915290205460058201546002146103555760405162461bcd60e51b81526020600482015260146024820152735075626c69632073616c6520696e61637469766560601b60448201526064015b60405180910390fd5b81600701548510156103a15760405162461bcd60e51b81526020600482015260156024820152744d696e74207175616e7469747920746f6f206c6f7760581b604482015260640161034c565b60098201546103b08683611471565b11156103f25760405162461bcd60e51b8152602060048201526011602482015270115e18d959591959081b585e081b5a5b9d607a1b604482015260640161034c565b6001600160a01b038416156104dd57856001600160a01b0316846001600160a01b03160361045e5760405162461bcd60e51b81526020600482015260196024820152782932b332b93932b91031b0b73737ba1031329039b2b73232b960391b604482015260640161034c565b600182015460ff166104a95760405162461bcd60e51b8152602060048201526014602482015273135a5b9d189bdcdcc8191a5cdcd85b1b1bddd95960621b604482015260640161034c565b348260020154866104ba9190611484565b146104d857604051630772327b60e01b815260040160405180910390fd5b61050c565b348260060154866104ee9190611484565b1461050c57604051630772327b60e01b815260040160405180910390fd5b6105168582611471565b6001600160a01b038881166000818152600160209081526040808320948c1680845294909152908190209390935591516340c10f1960e01b81526004810191909152602481018790526340c10f1990604401600060405180830381600087803b15801561058257600080fd5b505af1158015610596573d6000803e3d6000fd5b505050506105a78785858834610ec6565b50505050505050565b81806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610623919061149b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069091906114b4565b6106ac5760405162461bcd60e51b815260040161034c906114d1565b6001600160a01b038316600081815260208181526040918290206005018590558151928352339083015281018390527f1300419b7a6db85f0b15af47201cdbf6a69ddb73ebe595d490d6863a908d598a906060015b60405180910390a1505050565b6001600160a01b0382166000908152602081905260409020541561076a5760405162461bcd60e51b81526020600482015260136024820152724d696e7420616c72656164792065786973747360681b604482015260640161034c565b6001600160a01b03821660008181526020818152604091829020845181558482015160018201805460ff1916911515919091179055848301516002820155606085015160038201556080850151600482015560a0850151600582015560c0850151600682015560e0850151600782015561010085015160088201556101208501516009820155610140850151600a820155610160850151600b820155915192835290917f05f88590a138a7853336ed409fd84cb70d5705ce6e0fc8c73df1d89f96fead789101610701565b6001600160a01b0380881660009081526020818152604080832060028352818420948b168452939091529020546108e46108a8896040516bffffffffffffffffffffffff19606083901b166020820152600090603401604051602081830303815290604052805190602001209050919050565b8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505086549150610fff9050565b6109305760405162461bcd60e51b815260206004820152601760248201527f57616c6c6574206e6f74206f6e20616c6c6f776c697374000000000000000000604482015260640161034c565b816008015487101561097c5760405162461bcd60e51b81526020600482015260156024820152744d696e74207175616e7469747920746f6f206c6f7760581b604482015260640161034c565b600a82015461098b8883611471565b11156109d95760405162461bcd60e51b815260206004820152601c60248201527f45786365656465642077686974656c69737420616c6c6f77616e636500000000604482015260640161034c565b8160050154600114610a2d5760405162461bcd60e51b815260206004820152601c60248201527f416c6c6f776c6973742073616c65206973206e6f742061637469766500000000604482015260640161034c565b6001600160a01b03861615610b3957876001600160a01b0316866001600160a01b031603610a995760405162461bcd60e51b81526020600482015260196024820152782932b332b93932b91031b0b73737ba1031329039b2b73232b960391b604482015260640161034c565b600182015460ff16610ae45760405162461bcd60e51b8152602060048201526014602482015273135a5b9d189bdcdcc8191a5cdcd85b1b1bddd95960621b604482015260640161034c565b34826003015488610af59190611484565b14610b345760405162461bcd60e51b815260206004820152600f60248201526e496e636f727265637420707269636560881b604482015260640161034c565b610b68565b3482600b015488610b4a9190611484565b14610b6857604051630772327b60e01b815260040160405180910390fd5b610b728782611471565b6001600160a01b038a81166000818152600260209081526040808320948e1680845294909152908190209390935591516340c10f1960e01b81526004810191909152602481018990526340c10f1990604401600060405180830381600087803b158015610bde57600080fd5b505af1158015610bf2573d6000803e3d6000fd5b50505050610c038987878a34610ec6565b505050505050505050565b81806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c81919061149b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee91906114b4565b610d0a5760405162461bcd60e51b815260040161034c906114d1565b506001600160a01b039190911660009081526020818152604091829020835181559083015160018201805460ff1916911515919091179055908201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a82015561016090910151600b90910155565b81806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e20919061149b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d91906114b4565b610ea95760405162461bcd60e51b815260040161034c906114d1565b506001600160a01b03909116600090815260208190526040902055565b6001600160a01b038086166000908152602081905260409020908290861615610fbf576000848360040154610efb9190611484565b6001600160a01b03808a166000908152600360209081526040808320938c16835292905290812080549293508792909190610f37908490611471565b90915550610f47905081836114f4565b91507f57097dc38e3c2ccf9be5d20901a2497f51743967eb8d723a7fd124c80c65fc1d88888888604051610f7e9493929190611507565b60405180910390a16040516001600160a01b0388169082156108fc029083906000818181858888f19350505050158015610fbc573d6000803e3d6000fd5b50505b6040516001600160a01b0388169082156108fc029083906000818181858888f19350505050158015610ff5573d6000803e3d6000fd5b5050505050505050565b600061100c838386611014565b949350505050565b600082611021858461102a565b14949350505050565b600081815b845181101561106f5761105b8286838151811061104e5761104e611578565b6020026020010151611079565b9150806110678161158e565b91505061102f565b5090505b92915050565b60008183106110955760008281526020849052604090206110a4565b60008381526020839052604090205b9392505050565b6001600160a01b03811681146110c057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff811182821017156110fd576110fd6110c3565b60405290565b600082601f83011261111457600080fd5b813567ffffffffffffffff8082111561112f5761112f6110c3565b604051601f8301601f19908116603f01168101908282118183101715611157576111576110c3565b8160405283815286602085880101111561117057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156111a857600080fd5b85356111b3816110ab565b945060208601356111c3816110ab565b93506040860135925060608601356111da816110ab565b9150608086013567ffffffffffffffff8111156111f657600080fd5b61120288828901611103565b9150509295509295909350565b6000806040838503121561122257600080fd5b823561122d816110ab565b9150602083013561123d816110ab565b809150509250929050565b6000806040838503121561125b57600080fd5b8235611266816110ab565b946020939093013593505050565b80151581146110c057600080fd5b803561128d81611274565b919050565b6000808284036101a08112156112a757600080fd5b83356112b2816110ab565b9250610180601f1982018113156112c857600080fd5b6112d06110d9565b9150602085013582526112e560408601611282565b6020830152606085013560408301526080850135606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e08401526101208087013582850152610140915081870135818501525061016080870135828501528287013581850152505050809150509250929050565b600080600080600080600060c0888a03121561137d57600080fd5b8735611388816110ab565b96506020880135611398816110ab565b95506040880135945060608801356113af816110ab565b9350608088013567ffffffffffffffff808211156113cc57600080fd5b6113d88b838c01611103565b945060a08a01359150808211156113ee57600080fd5b818a0191508a601f83011261140257600080fd5b81358181111561141157600080fd5b8b60208260051b850101111561142657600080fd5b60208301945080935050505092959891949750929550565b60006020828403121561145057600080fd5b81356110a4816110ab565b634e487b7160e01b600052601160045260246000fd5b808201808211156110735761107361145b565b80820281158282048414176110735761107361145b565b6000602082840312156114ad57600080fd5b5051919050565b6000602082840312156114c657600080fd5b81516110a481611274565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b818103818111156110735761107361145b565b600060018060a01b038087168352602081871681850152608060408501528551915081608085015260005b8281101561154e5786810182015185820160a001528101611532565b5050600060a0828501015260a0601f19601f83011684010191505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016115a0576115a061145b565b506001019056fea2646970667358221220070a54f0b2c838a7c88f4e60c1aaeace73d7b6a0f993e97f79b1803b7b7985ee64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106100915760003560e01c80639927c7e7116100595780639927c7e714610149578063a55b47f114610181578063b64a706e14610260578063edb93ff614610280578063f2e0bf1e146102b857600080fd5b80631f8e46511461009657806321a92e18146100ab57806358949229146100f65780635f88967f14610116578063894bebf814610136575b600080fd5b6100a96100a4366004611190565b6102d8565b005b3480156100b757600080fd5b506100e36100c636600461120f565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561010257600080fd5b506100a9610111366004611248565b6105b0565b34801561012257600080fd5b506100a9610131366004611292565b61070e565b6100a9610144366004611362565b610835565b34801561015557600080fd5b506100e361016436600461120f565b600360209081526000928352604080842090915290825290205481565b34801561018d57600080fd5b5061020761019c36600461143e565b6001600160a01b0316600090815260208190526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999b60ff9099169a97999698959794969395929491939092565b604080519c8d529a151560208d0152998b019890985260608a0196909652608089019490945260a088019290925260c087015260e0860152610100850152610120840152610140830152610160820152610180016100ed565b34801561026c57600080fd5b506100a961027b366004611292565b610c0e565b34801561028c57600080fd5b506100e361029b36600461120f565b600260209081526000928352604080842090915290825290205481565b3480156102c457600080fd5b506100a96102d3366004611248565b610dad565b6001600160a01b038086166000908152602081815260408083206001835281842094891684529390915290205460058201546002146103555760405162461bcd60e51b81526020600482015260146024820152735075626c69632073616c6520696e61637469766560601b60448201526064015b60405180910390fd5b81600701548510156103a15760405162461bcd60e51b81526020600482015260156024820152744d696e74207175616e7469747920746f6f206c6f7760581b604482015260640161034c565b60098201546103b08683611471565b11156103f25760405162461bcd60e51b8152602060048201526011602482015270115e18d959591959081b585e081b5a5b9d607a1b604482015260640161034c565b6001600160a01b038416156104dd57856001600160a01b0316846001600160a01b03160361045e5760405162461bcd60e51b81526020600482015260196024820152782932b332b93932b91031b0b73737ba1031329039b2b73232b960391b604482015260640161034c565b600182015460ff166104a95760405162461bcd60e51b8152602060048201526014602482015273135a5b9d189bdcdcc8191a5cdcd85b1b1bddd95960621b604482015260640161034c565b348260020154866104ba9190611484565b146104d857604051630772327b60e01b815260040160405180910390fd5b61050c565b348260060154866104ee9190611484565b1461050c57604051630772327b60e01b815260040160405180910390fd5b6105168582611471565b6001600160a01b038881166000818152600160209081526040808320948c1680845294909152908190209390935591516340c10f1960e01b81526004810191909152602481018790526340c10f1990604401600060405180830381600087803b15801561058257600080fd5b505af1158015610596573d6000803e3d6000fd5b505050506105a78785858834610ec6565b50505050505050565b81806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610623919061149b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069091906114b4565b6106ac5760405162461bcd60e51b815260040161034c906114d1565b6001600160a01b038316600081815260208181526040918290206005018590558151928352339083015281018390527f1300419b7a6db85f0b15af47201cdbf6a69ddb73ebe595d490d6863a908d598a906060015b60405180910390a1505050565b6001600160a01b0382166000908152602081905260409020541561076a5760405162461bcd60e51b81526020600482015260136024820152724d696e7420616c72656164792065786973747360681b604482015260640161034c565b6001600160a01b03821660008181526020818152604091829020845181558482015160018201805460ff1916911515919091179055848301516002820155606085015160038201556080850151600482015560a0850151600582015560c0850151600682015560e0850151600782015561010085015160088201556101208501516009820155610140850151600a820155610160850151600b820155915192835290917f05f88590a138a7853336ed409fd84cb70d5705ce6e0fc8c73df1d89f96fead789101610701565b6001600160a01b0380881660009081526020818152604080832060028352818420948b168452939091529020546108e46108a8896040516bffffffffffffffffffffffff19606083901b166020820152600090603401604051602081830303815290604052805190602001209050919050565b8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505086549150610fff9050565b6109305760405162461bcd60e51b815260206004820152601760248201527f57616c6c6574206e6f74206f6e20616c6c6f776c697374000000000000000000604482015260640161034c565b816008015487101561097c5760405162461bcd60e51b81526020600482015260156024820152744d696e74207175616e7469747920746f6f206c6f7760581b604482015260640161034c565b600a82015461098b8883611471565b11156109d95760405162461bcd60e51b815260206004820152601c60248201527f45786365656465642077686974656c69737420616c6c6f77616e636500000000604482015260640161034c565b8160050154600114610a2d5760405162461bcd60e51b815260206004820152601c60248201527f416c6c6f776c6973742073616c65206973206e6f742061637469766500000000604482015260640161034c565b6001600160a01b03861615610b3957876001600160a01b0316866001600160a01b031603610a995760405162461bcd60e51b81526020600482015260196024820152782932b332b93932b91031b0b73737ba1031329039b2b73232b960391b604482015260640161034c565b600182015460ff16610ae45760405162461bcd60e51b8152602060048201526014602482015273135a5b9d189bdcdcc8191a5cdcd85b1b1bddd95960621b604482015260640161034c565b34826003015488610af59190611484565b14610b345760405162461bcd60e51b815260206004820152600f60248201526e496e636f727265637420707269636560881b604482015260640161034c565b610b68565b3482600b015488610b4a9190611484565b14610b6857604051630772327b60e01b815260040160405180910390fd5b610b728782611471565b6001600160a01b038a81166000818152600260209081526040808320948e1680845294909152908190209390935591516340c10f1960e01b81526004810191909152602481018990526340c10f1990604401600060405180830381600087803b158015610bde57600080fd5b505af1158015610bf2573d6000803e3d6000fd5b50505050610c038987878a34610ec6565b505050505050505050565b81806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c81919061149b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee91906114b4565b610d0a5760405162461bcd60e51b815260040161034c906114d1565b506001600160a01b039190911660009081526020818152604091829020835181559083015160018201805460ff1916911515919091179055908201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a82015561016090910151600b90910155565b81806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e20919061149b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d91906114b4565b610ea95760405162461bcd60e51b815260040161034c906114d1565b506001600160a01b03909116600090815260208190526040902055565b6001600160a01b038086166000908152602081905260409020908290861615610fbf576000848360040154610efb9190611484565b6001600160a01b03808a166000908152600360209081526040808320938c16835292905290812080549293508792909190610f37908490611471565b90915550610f47905081836114f4565b91507f57097dc38e3c2ccf9be5d20901a2497f51743967eb8d723a7fd124c80c65fc1d88888888604051610f7e9493929190611507565b60405180910390a16040516001600160a01b0388169082156108fc029083906000818181858888f19350505050158015610fbc573d6000803e3d6000fd5b50505b6040516001600160a01b0388169082156108fc029083906000818181858888f19350505050158015610ff5573d6000803e3d6000fd5b5050505050505050565b600061100c838386611014565b949350505050565b600082611021858461102a565b14949350505050565b600081815b845181101561106f5761105b8286838151811061104e5761104e611578565b6020026020010151611079565b9150806110678161158e565b91505061102f565b5090505b92915050565b60008183106110955760008281526020849052604090206110a4565b60008381526020839052604090205b9392505050565b6001600160a01b03811681146110c057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff811182821017156110fd576110fd6110c3565b60405290565b600082601f83011261111457600080fd5b813567ffffffffffffffff8082111561112f5761112f6110c3565b604051601f8301601f19908116603f01168101908282118183101715611157576111576110c3565b8160405283815286602085880101111561117057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156111a857600080fd5b85356111b3816110ab565b945060208601356111c3816110ab565b93506040860135925060608601356111da816110ab565b9150608086013567ffffffffffffffff8111156111f657600080fd5b61120288828901611103565b9150509295509295909350565b6000806040838503121561122257600080fd5b823561122d816110ab565b9150602083013561123d816110ab565b809150509250929050565b6000806040838503121561125b57600080fd5b8235611266816110ab565b946020939093013593505050565b80151581146110c057600080fd5b803561128d81611274565b919050565b6000808284036101a08112156112a757600080fd5b83356112b2816110ab565b9250610180601f1982018113156112c857600080fd5b6112d06110d9565b9150602085013582526112e560408601611282565b6020830152606085013560408301526080850135606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e08401526101208087013582850152610140915081870135818501525061016080870135828501528287013581850152505050809150509250929050565b600080600080600080600060c0888a03121561137d57600080fd5b8735611388816110ab565b96506020880135611398816110ab565b95506040880135945060608801356113af816110ab565b9350608088013567ffffffffffffffff808211156113cc57600080fd5b6113d88b838c01611103565b945060a08a01359150808211156113ee57600080fd5b818a0191508a601f83011261140257600080fd5b81358181111561141157600080fd5b8b60208260051b850101111561142657600080fd5b60208301945080935050505092959891949750929550565b60006020828403121561145057600080fd5b81356110a4816110ab565b634e487b7160e01b600052601160045260246000fd5b808201808211156110735761107361145b565b80820281158282048414176110735761107361145b565b6000602082840312156114ad57600080fd5b5051919050565b6000602082840312156114c657600080fd5b81516110a481611274565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b818103818111156110735761107361145b565b600060018060a01b038087168352602081871681850152608060408501528551915081608085015260005b8281101561154e5786810182015185820160a001528101611532565b5050600060a0828501015260a0601f19601f83011684010191505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016115a0576115a061145b565b506001019056fea2646970667358221220070a54f0b2c838a7c88f4e60c1aaeace73d7b6a0f993e97f79b1803b7b7985ee64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.01
Net Worth in ETH
0.000004
Token Allocations
POL
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| POL | 100.00% | $0.096416 | 0.1 | $0.009642 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.