Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.48 ETH
Eth Value
$1,907.91 (@ $3,974.82/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 14 from a total of 14 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 18114272 | 453 days ago | IN | 0.04 ETH | 0.00280171 | ||||
Mint | 18077699 | 458 days ago | IN | 0.04 ETH | 0.00212792 | ||||
Mint | 18003265 | 469 days ago | IN | 0.04 ETH | 0.0011843 | ||||
Mint | 17994898 | 470 days ago | IN | 0.04 ETH | 0.00135689 | ||||
Mint | 17972592 | 473 days ago | IN | 0.04 ETH | 0.00289555 | ||||
Mint | 17967319 | 474 days ago | IN | 0.04 ETH | 0.00219936 | ||||
Mint | 17938829 | 478 days ago | IN | 0.04 ETH | 0.00225011 | ||||
Mint | 17931147 | 479 days ago | IN | 0.04 ETH | 0.00355936 | ||||
Mint | 17923574 | 480 days ago | IN | 0.04 ETH | 0.00209316 | ||||
Mint | 17922609 | 480 days ago | IN | 0.04 ETH | 0.00403882 | ||||
Mint | 17917715 | 481 days ago | IN | 0.04 ETH | 0.00140426 | ||||
Mint | 17917586 | 481 days ago | IN | 0.04 ETH | 0.00182692 | ||||
Set Sale State | 17917571 | 481 days ago | IN | 0 ETH | 0.00065685 | ||||
Set Base URI | 17917562 | 481 days ago | IN | 0 ETH | 0.00137255 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TheSoulsOfMelonBayGenesis
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; import {ERC721A} from "./ERC721A.sol"; import {Ownable} from "./Ownable.sol"; // Errors error SaleNotActive(); error InsufficientPayment(); error SupplyExceeded(); error WalletLimitExceeded(); error FirstDropSupplyExceeded(); error WithdrawFailed(); error ReservedNotReady(); contract TheSoulsOfMelonBayGenesis is Ownable, ERC721A { enum SaleStates { CLOSED, PUBLIC_FIRST_DROP, PUBLIC_SECOND_DROP } /** * Structure that holds the minting data of each address for each drop. */ struct TokenData { uint8 firstDropMinted; uint8 secondDropMinted; } // Mapping associating each address to its respective TokenData. mapping(address => TokenData) private _tokenData; // Number of NFTs users can mint in the public sale uint256 public constant PUBLIC_MINTS_PER_WALLET = 3; // Price for the public mint uint256 public publicPrice = 0.04 ether; // Total supply of the collection uint256 public maxSupply = 100; // First drop supply uint256 public firstDropSupply = 76; // Current sale state SaleStates public saleState; // Base metadata uri string private _baseTokenURI; /** * Contract constructor. Set the name and symbol for the NFT and initialize the baseURI. * @param name Name of the NFT * @param symbol Symbol for the NFT * @param baseURI Base string that will be used to form the metadata URI of each token */ constructor( string memory name, string memory symbol, string memory baseURI ) ERC721A(name, symbol) { _baseTokenURI = baseURI; } /** * Function to mint one or more tokens. * @param qty The quantity of tokens to be minted */ function mint(uint8 qty) external payable { if (saleState == SaleStates.CLOSED) revert SaleNotActive(); if (qty > PUBLIC_MINTS_PER_WALLET) revert WalletLimitExceeded(); if (msg.value < publicPrice * qty) revert InsufficientPayment(); if (_totalMinted() + qty > maxSupply) revert SupplyExceeded(); TokenData storage tokenData = _tokenData[msg.sender]; if (saleState == SaleStates.PUBLIC_FIRST_DROP) { if (_totalMinted() + qty > firstDropSupply) revert FirstDropSupplyExceeded(); if (tokenData.firstDropMinted + qty > PUBLIC_MINTS_PER_WALLET) revert WalletLimitExceeded(); tokenData.firstDropMinted += qty; } if (saleState == SaleStates.PUBLIC_SECOND_DROP) { if (tokenData.secondDropMinted + qty > PUBLIC_MINTS_PER_WALLET) revert WalletLimitExceeded(); tokenData.secondDropMinted += qty; } _mint(msg.sender, qty); } /** * Owner-only function to distribute a token after the first drop, reserved for specific use. * @param to Address where to send the token */ function dropReserved(address to) external onlyOwner { if (_totalMinted() != firstDropSupply) revert ReservedNotReady(); _mint(to, 1); } // ========================================================================= // Mint Settings // ========================================================================= /** * Owner-only function to set the current sale state. * @param _saleState New sale state */ function setSaleState(SaleStates _saleState) external onlyOwner { saleState = _saleState; } /** * Owner-only function to withdraw funds in the contract to a destination address. * @param receiver Destination address to receive funds */ function withdrawFunds(address receiver) external onlyOwner { (bool sent,) = receiver.call{value: address(this).balance}(""); if (!sent) { revert WithdrawFailed(); } } // ========================================================================= // Metadata // ========================================================================= /** * Owner-only function to set the base uri used for metadata. * @param baseURI uri to use for metadata */ function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function _baseURI() internal view override returns (string memory) { return _baseTokenURI; } /** * Function to retrieve the metadata uri for a given token. Reverts for tokens that don't exist. * @param tokenId Token Id to get metadata for */ function tokenURI(uint256 tokenId) public view override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId), ".json")) : ""; } }
// 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; } }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; import './IERC721A.sol'; /** * @dev Interface of ERC721 token receiver. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @title ERC721A * * @dev Implementation of the [ERC721](https://eips.ethereum.org/EIPS/eip-721) * Non-Fungible Token Standard, including the Metadata extension. * Optimized for lower gas during batch mints. * * Token IDs are minted in sequential order (e.g. 0, 1, 2, 3, ...) * starting from `_startTokenId()`. * * Assumptions: * * - An owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * - The maximum token ID cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Bypass for a `--via-ir` bug (https://github.com/chiru-labs/ERC721A/pull/364). struct TokenApprovalRef { address value; } // ============================================================= // CONSTANTS // ============================================================= // Mask of an entry in packed address data. uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant _BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant _BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant _BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant _BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant _BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; // The bit position of `extraData` in packed ownership. uint256 private constant _BITPOS_EXTRA_DATA = 232; // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`. uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; // The mask of the lower 160 bits for addresses. uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; // The maximum `quantity` that can be minted with {_mintERC2309}. // This limit is to prevent overflows on the address data entries. // For a limit of 5000, a total of 3.689e15 calls to {_mintERC2309} // is required to cause an overflow, which is unrealistic. uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; // The `Transfer` event signature is given by: // `keccak256(bytes("Transfer(address,address,uint256)"))`. bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; // ============================================================= // STORAGE // ============================================================= // The next token ID to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See {_packedOwnershipOf} implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` // - [232..255] `extraData` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => TokenApprovalRef) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // ============================================================= // CONSTRUCTOR // ============================================================= constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } // ============================================================= // TOKEN COUNTING OPERATIONS // ============================================================= /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() public view virtual override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view virtual returns (uint256) { // Counter underflow is impossible as `_currentIndex` does not decrement, // and it is initialized to `_startTokenId()`. unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } // ============================================================= // ADDRESS DATA OPERATIONS // ============================================================= /** * @dev Returns the number of tokens in `owner`'s account. */ function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } /** * Sets the auxiliary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; // Cast `aux` with assembly to avoid redundant masking. assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes // of the XOR of all function selectors in the interface. // See: [ERC165](https://eips.ethereum.org/EIPS/eip-165) // (e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`) return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the token collection symbol. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, it can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } // ============================================================= // OWNERSHIPS OPERATIONS // ============================================================= /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around over time. */ function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & _BITMASK_BURNED == 0) { // Invariant: // There will always be an initialized ownership slot // (i.e. `ownership.addr != address(0) && ownership.burned == false`) // before an unintialized ownership slot // (i.e. `ownership.addr == address(0) && ownership.burned == false`) // Hence, `curr` will not underflow. // // We can directly compare the packed value. // If the address is zero, packed will be zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * @dev Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } /** * @dev Packs ownership data into a single uint256. */ function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`. result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)) } } /** * @dev Returns the `nextInitialized` flag set if `quantity` equals 1. */ function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`. result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } // ============================================================= // APPROVAL OPERATIONS // ============================================================= /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the * zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) public payable virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} * for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) public virtual override { _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted. See {_mint}. */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned. } /** * @dev Returns whether `msgSender` is equal to `approvedAddress` or `owner`. */ function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean. msgSender := and(msgSender, _BITMASK_ADDRESS) // `msgSender == owner || msgSender == approvedAddress`. result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } /** * @dev Returns the storage slot and value for the approved address of `tokenId`. */ function _getApprovedSlotAndAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId].value`. assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } // ============================================================= // TRANSFER OPERATIONS // ============================================================= /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token * by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) public payable virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token * by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public payable virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Hook that is called before a set of serially-ordered token IDs * are about to be transferred. This includes minting. * And also called before burning one token. * * `startTokenId` - the first token ID to be transferred. * `quantity` - the amount to be transferred. * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token IDs * have been transferred. This includes minting. * And also called after one token has been burned. * * `startTokenId` - the first token ID to be transferred. * `quantity` - the amount to be transferred. * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * `from` - Previous owner of the given token ID. * `to` - Target address that will receive the token. * `tokenId` - Token ID to be transferred. * `_data` - Optional data to send along with the call. * * Returns whether the call correctly returned the expected magic value. */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } // ============================================================= // MINT OPERATIONS // ============================================================= /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event for each mint. */ function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // `balance` and `numberMinted` have a maximum limit of 2**64. // `tokenId` has a maximum limit of 2**256. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; // Use assembly to loop and emit the `Transfer` event for gas savings. // The duplicated `log4` removes an extra check and reduces stack juggling. // The assembly, together with the surrounding Solidity code, have been // delicately arranged to nudge the compiler into producing optimized opcodes. assembly { // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean. toMasked := and(to, _BITMASK_ADDRESS) // Emit the `Transfer` event. log4( 0, // Start of data (0, since no data). 0, // End of data (0, since no data). _TRANSFER_EVENT_SIGNATURE, // Signature. 0, // `address(0)`. toMasked, // `to`. startTokenId // `tokenId`. ) // The `iszero(eq(,))` check ensures that large values of `quantity` // that overflows uint256 will make the loop run out of gas. // The compiler will optimize the `iszero` away for performance. for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { // Emit the `Transfer` event. Similar to above. log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * This function is intended for efficient minting only during contract creation. * * It emits only one {ConsecutiveTransfer} as defined in * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309), * instead of a sequence of {Transfer} event(s). * * Calling this function outside of contract creation WILL make your contract * non-compliant with the ERC721 standard. * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309 * {ConsecutiveTransfer} event is only permissible during contract creation. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {ConsecutiveTransfer} event. */ function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are unrealistic due to the above check for `quantity` to be below the limit. unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the `balance` and `numberMinted`. _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * See {_mint}. * * Emits a {Transfer} event for each mint. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } // ============================================================= // BURN OPERATIONS // ============================================================= /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { // The nested ifs save around 20+ gas over a compound boolean condition. if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. assembly { if approvedAddress { // This is equivalent to `delete _tokenApprovals[tokenId]`. sstore(approvedAddressSlot, 0) } } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << _BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } // ============================================================= // EXTRA DATA OPERATIONS // ============================================================= /** * @dev Directly sets the extra data for the ownership data `index`. */ function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; // Cast `extraData` with assembly to avoid redundant masking. assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } /** * @dev Called during each token transfer to set the 24bit `extraData` field. * Intended to be overridden by the cosumer contract. * * `previousExtraData` - the value of `extraData` before transfer. * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} /** * @dev Returns the next extra data for the packed ownership data. * The returned result is shifted into position. */ function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } // ============================================================= // OTHER OPERATIONS // ============================================================= /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a uint256 to its ASCII string decimal representation. */ function _toString(uint256 value) internal pure virtual returns (string memory str) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), but // we allocate 0xa0 bytes to keep the free memory pointer 32-byte word aligned. // We will need 1 word for the trailing zeros padding, 1 word for the length, // and 3 words for a maximum of 78 digits. Total: 5 * 0x20 = 0xa0. let m := add(mload(0x40), 0xa0) // Update the free memory pointer to allocate. mstore(0x40, m) // Assign the `str` to the end. str := sub(m, 0x20) // Zeroize the slot after the string. mstore(str, 0) // Cache the end of the memory to calculate the length later. let end := str // We write the string from rightmost digit to leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // prettier-ignore for { let temp := value } 1 {} { str := sub(str, 1) // Write the character to the pointer. // The ASCII index of the '0' character is 48. mstore8(str, add(48, mod(temp, 10))) // Keep dividing `temp` until zero. temp := div(temp, 10) // prettier-ignore if iszero(temp) { break } } let length := sub(end, str) // Move the pointer 32 bytes leftwards to make room for the length. str := sub(str, 0x20) // Store the length. mstore(str, length) } } }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721A. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the * ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================================================= // IERC721 // ============================================================= /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables * (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in `owner`'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, * checking first that contract recipients are aware of the ERC721 protocol * to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move * this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external payable; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; /** * @dev Transfers `tokenId` from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} * whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token * by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external payable; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the * zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external payable; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} * for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll}. */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); // ============================================================= // IERC2309 // ============================================================= /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` * (inclusive) is transferred from `from` to `to`, as defined in the * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard. * * See {_mintERC2309} for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"FirstDropSupplyExceeded","type":"error"},{"inputs":[],"name":"InsufficientPayment","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"ReservedNotReady","type":"error"},{"inputs":[],"name":"SaleNotActive","type":"error"},{"inputs":[],"name":"SupplyExceeded","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"WalletLimitExceeded","type":"error"},{"inputs":[],"name":"WithdrawFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PUBLIC_MINTS_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"dropReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstDropSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"qty","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"enum TheSoulsOfMelonBayGenesis.SaleStates","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum TheSoulsOfMelonBayGenesis.SaleStates","name":"_saleState","type":"uint8"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052668e1bc9bf040000600a556064600b55604c600c553480156200002657600080fd5b5060405162001a3038038062001a3083398101604081905262000049916200026b565b82826200005633620000a8565b81516200006b906003906020850190620000f8565b50805162000081906004906020840190620000f8565b506000600155505080516200009e90600e906020840190620000f8565b5050505062000339565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200010690620002fc565b90600052602060002090601f0160209004810192826200012a576000855562000175565b82601f106200014557805160ff191683800117855562000175565b8280016001018555821562000175579182015b828111156200017557825182559160200191906001019062000158565b506200018392915062000187565b5090565b5b8082111562000183576000815560010162000188565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c657600080fd5b81516001600160401b0380821115620001e357620001e36200019e565b604051601f8301601f19908116603f011681019082821181831017156200020e576200020e6200019e565b816040528381526020925086838588010111156200022b57600080fd5b600091505b838210156200024f578582018301518183018401529082019062000230565b83821115620002615760008385830101525b9695505050505050565b6000806000606084860312156200028157600080fd5b83516001600160401b03808211156200029957600080fd5b620002a787838801620001b4565b94506020860151915080821115620002be57600080fd5b620002cc87838801620001b4565b93506040860151915080821115620002e357600080fd5b50620002f286828701620001b4565b9150509250925092565b600181811c908216806200031157607f821691505b602082108114156200033357634e487b7160e01b600052602260045260246000fd5b50919050565b6116e780620003496000396000f3fe60806040526004361061019c5760003560e01c80636ecd2306116100ec578063b88d4fde1161008a578063e748ef5511610064578063e748ef5514610444578063e985e9c514610464578063f2fde38b146104ad578063f6c1d372146104cd57600080fd5b8063b88d4fde146103fb578063c87b56dd1461040e578063d5abeb011461042e57600080fd5b80638da5cb5b116100c65780638da5cb5b1461039257806395d89b41146103b0578063a22cb465146103c5578063a945bf80146103e557600080fd5b80636ecd23061461034a57806370a082311461035d578063715018a61461037d57600080fd5b80633a9315f5116101595780635a67de07116101335780635a67de07146102c3578063603f4d52146102e35780636352211e1461030a57806368742da61461032a57600080fd5b80633a9315f51461027b57806342842e0e1461029057806355f804b3146102a357600080fd5b806301ffc9a7146101a157806306fdde03146101d6578063081812fc146101f8578063095ea7b31461023057806318160ddd1461024557806323b872dd14610268575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046111d8565b6104e3565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101eb610535565b6040516101cd919061124d565b34801561020457600080fd5b50610218610213366004611260565b6105c7565b6040516001600160a01b0390911681526020016101cd565b61024361023e366004611295565b61060b565b005b34801561025157600080fd5b50600254600154035b6040519081526020016101cd565b6102436102763660046112bf565b6106ab565b34801561028757600080fd5b5061025a600381565b61024361029e3660046112bf565b61083c565b3480156102af57600080fd5b506102436102be3660046112fb565b61085c565b3480156102cf57600080fd5b506102436102de36600461136d565b610870565b3480156102ef57600080fd5b50600d546102fd9060ff1681565b6040516101cd91906113a4565b34801561031657600080fd5b50610218610325366004611260565b61089f565b34801561033657600080fd5b506102436103453660046113cc565b6108aa565b6102436103583660046113e7565b61092a565b34801561036957600080fd5b5061025a6103783660046113cc565b610b58565b34801561038957600080fd5b50610243610ba7565b34801561039e57600080fd5b506000546001600160a01b0316610218565b3480156103bc57600080fd5b506101eb610bbb565b3480156103d157600080fd5b506102436103e036600461140a565b610bca565b3480156103f157600080fd5b5061025a600a5481565b61024361040936600461145c565b610c36565b34801561041a57600080fd5b506101eb610429366004611260565b610c80565b34801561043a57600080fd5b5061025a600b5481565b34801561045057600080fd5b5061024361045f3660046113cc565b610d05565b34801561047057600080fd5b506101c161047f366004611538565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b3480156104b957600080fd5b506102436104c83660046113cc565b610d3f565b3480156104d957600080fd5b5061025a600c5481565b60006301ffc9a760e01b6001600160e01b03198316148061051457506380ac58cd60e01b6001600160e01b03198316145b8061052f5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600380546105449061156b565b80601f01602080910402602001604051908101604052809291908181526020018280546105709061156b565b80156105bd5780601f10610592576101008083540402835291602001916105bd565b820191906000526020600020905b8154815290600101906020018083116105a057829003601f168201915b5050505050905090565b60006105d282610dba565b6105ef576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b60006106168261089f565b9050336001600160a01b0382161461064f57610632813361047f565b61064f576040516367d9dca160e11b815260040160405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006106b682610de2565b9050836001600160a01b0316816001600160a01b0316146106e95760405162a1148160e81b815260040160405180910390fd5b60008281526007602052604090208054338082146001600160a01b0388169091141761073657610719863361047f565b61073657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661075d57604051633a954ecd60e21b815260040160405180910390fd5b801561076857600082555b6001600160a01b038681166000908152600660205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260056020526040902055600160e11b83166107f357600184016000818152600560205260409020546107f15760015481146107f15760008181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b61085783838360405180602001604052806000815250610c36565b505050565b610864610e43565b610857600e8383611129565b610878610e43565b600d805482919060ff191660018360028111156108975761089761138e565b021790555050565b600061052f82610de2565b6108b2610e43565b6000816001600160a01b03164760405160006040518083038185875af1925050503d80600081146108ff576040519150601f19603f3d011682016040523d82523d6000602084013e610904565b606091505b505090508061092657604051631d42c86760e21b815260040160405180910390fd5b5050565b6000600d5460ff1660028111156109435761094361138e565b14156109625760405163b7b2409760e01b815260040160405180910390fd5b60038160ff1611156109875760405163746f460760e01b815260040160405180910390fd5b8060ff16600a5461099891906115bc565b3410156109b85760405163cd1c886760e01b815260040160405180910390fd5b600b548160ff166109c860015490565b6109d291906115db565b11156109f157604051637d3d824960e01b815260040160405180910390fd5b3360009081526009602052604090206001600d5460ff166002811115610a1957610a1961138e565b1415610abd57600c548260ff16610a2f60015490565b610a3991906115db565b1115610a585760405163219a7c0b60e21b815260040160405180910390fd5b8054600390610a6b90849060ff166115f3565b60ff161115610a8d5760405163746f460760e01b815260040160405180910390fd5b805482908290600090610aa490849060ff166115f3565b92506101000a81548160ff021916908360ff1602179055505b6002600d5460ff166002811115610ad657610ad661138e565b1415610b4b578054600390610af4908490610100900460ff166115f3565b60ff161115610b165760405163746f460760e01b815260040160405180910390fd5b805482908290600190610b32908490610100900460ff166115f3565b92506101000a81548160ff021916908360ff1602179055505b610926338360ff16610e9d565b60006001600160a01b038216610b81576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526006602052604090205467ffffffffffffffff1690565b610baf610e43565b610bb96000610f94565b565b6060600480546105449061156b565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c418484846106ab565b6001600160a01b0383163b15610c7a57610c5d84848484610fe4565b610c7a576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610c8b82610dba565b610ca857604051630a14c4b560e41b815260040160405180910390fd5b6000610cb26110cc565b9050805160001415610cd35760405180602001604052806000815250610cfe565b80610cdd846110db565b604051602001610cee929190611618565b6040516020818303038152906040525b9392505050565b610d0d610e43565b600c5460015414610d31576040516308f4cc0960e01b815260040160405180910390fd5b610d3c816001610e9d565b50565b610d47610e43565b6001600160a01b038116610db15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610d3c81610f94565b60006001548210801561052f575050600090815260056020526040902054600160e01b161590565b600081600154811015610e2a57600081815260056020526040902054600160e01b8116610e28575b80610cfe575060001901600081815260056020526040902054610e0a565b505b604051636f96cda160e11b815260040160405180910390fd5b6000546001600160a01b03163314610bb95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610da8565b60015481610ebe5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114610f6d57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101610f35565b5081610f8b57604051622e076360e81b815260040160405180910390fd5b60015550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611019903390899088908890600401611657565b6020604051808303816000875af1925050508015611054575060408051601f3d908101601f1916820190925261105191810190611694565b60015b6110af573d808015611082576040519150601f19603f3d011682016040523d82523d6000602084013e611087565b606091505b5080516110a7576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060600e80546105449061156b565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061111257611117565b6110f5565b50819003601f19909101908152919050565b8280546111359061156b565b90600052602060002090601f016020900481019282611157576000855561119d565b82601f106111705782800160ff1982351617855561119d565b8280016001018555821561119d579182015b8281111561119d578235825591602001919060010190611182565b506111a99291506111ad565b5090565b5b808211156111a957600081556001016111ae565b6001600160e01b031981168114610d3c57600080fd5b6000602082840312156111ea57600080fd5b8135610cfe816111c2565b60005b838110156112105781810151838201526020016111f8565b83811115610c7a5750506000910152565b600081518084526112398160208601602086016111f5565b601f01601f19169290920160200192915050565b602081526000610cfe6020830184611221565b60006020828403121561127257600080fd5b5035919050565b80356001600160a01b038116811461129057600080fd5b919050565b600080604083850312156112a857600080fd5b6112b183611279565b946020939093013593505050565b6000806000606084860312156112d457600080fd5b6112dd84611279565b92506112eb60208501611279565b9150604084013590509250925092565b6000806020838503121561130e57600080fd5b823567ffffffffffffffff8082111561132657600080fd5b818501915085601f83011261133a57600080fd5b81358181111561134957600080fd5b86602082850101111561135b57600080fd5b60209290920196919550909350505050565b60006020828403121561137f57600080fd5b813560038110610cfe57600080fd5b634e487b7160e01b600052602160045260246000fd5b60208101600383106113c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156113de57600080fd5b610cfe82611279565b6000602082840312156113f957600080fd5b813560ff81168114610cfe57600080fd5b6000806040838503121561141d57600080fd5b61142683611279565b91506020830135801515811461143b57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561147257600080fd5b61147b85611279565b935061148960208601611279565b925060408501359150606085013567ffffffffffffffff808211156114ad57600080fd5b818701915087601f8301126114c157600080fd5b8135818111156114d3576114d3611446565b604051601f8201601f19908116603f011681019083821181831017156114fb576114fb611446565b816040528281528a602084870101111561151457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561154b57600080fd5b61155483611279565b915061156260208401611279565b90509250929050565b600181811c9082168061157f57607f821691505b602082108114156115a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156115d6576115d66115a6565b500290565b600082198211156115ee576115ee6115a6565b500190565b600060ff821660ff84168060ff03821115611610576116106115a6565b019392505050565b6000835161162a8184602088016111f5565b83519083019061163e8183602088016111f5565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061168a90830184611221565b9695505050505050565b6000602082840312156116a657600080fd5b8151610cfe816111c256fea2646970667358221220cc2ce1b9dbb6c9d3a6a30d5bfbffe36b29d3640230ae879c5552485f8dfac68964736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001e54686520536f756c73206f66204d656c6f6e204261792047656e657369730000000000000000000000000000000000000000000000000000000000000000000554534f4d420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061019c5760003560e01c80636ecd2306116100ec578063b88d4fde1161008a578063e748ef5511610064578063e748ef5514610444578063e985e9c514610464578063f2fde38b146104ad578063f6c1d372146104cd57600080fd5b8063b88d4fde146103fb578063c87b56dd1461040e578063d5abeb011461042e57600080fd5b80638da5cb5b116100c65780638da5cb5b1461039257806395d89b41146103b0578063a22cb465146103c5578063a945bf80146103e557600080fd5b80636ecd23061461034a57806370a082311461035d578063715018a61461037d57600080fd5b80633a9315f5116101595780635a67de07116101335780635a67de07146102c3578063603f4d52146102e35780636352211e1461030a57806368742da61461032a57600080fd5b80633a9315f51461027b57806342842e0e1461029057806355f804b3146102a357600080fd5b806301ffc9a7146101a157806306fdde03146101d6578063081812fc146101f8578063095ea7b31461023057806318160ddd1461024557806323b872dd14610268575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046111d8565b6104e3565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506101eb610535565b6040516101cd919061124d565b34801561020457600080fd5b50610218610213366004611260565b6105c7565b6040516001600160a01b0390911681526020016101cd565b61024361023e366004611295565b61060b565b005b34801561025157600080fd5b50600254600154035b6040519081526020016101cd565b6102436102763660046112bf565b6106ab565b34801561028757600080fd5b5061025a600381565b61024361029e3660046112bf565b61083c565b3480156102af57600080fd5b506102436102be3660046112fb565b61085c565b3480156102cf57600080fd5b506102436102de36600461136d565b610870565b3480156102ef57600080fd5b50600d546102fd9060ff1681565b6040516101cd91906113a4565b34801561031657600080fd5b50610218610325366004611260565b61089f565b34801561033657600080fd5b506102436103453660046113cc565b6108aa565b6102436103583660046113e7565b61092a565b34801561036957600080fd5b5061025a6103783660046113cc565b610b58565b34801561038957600080fd5b50610243610ba7565b34801561039e57600080fd5b506000546001600160a01b0316610218565b3480156103bc57600080fd5b506101eb610bbb565b3480156103d157600080fd5b506102436103e036600461140a565b610bca565b3480156103f157600080fd5b5061025a600a5481565b61024361040936600461145c565b610c36565b34801561041a57600080fd5b506101eb610429366004611260565b610c80565b34801561043a57600080fd5b5061025a600b5481565b34801561045057600080fd5b5061024361045f3660046113cc565b610d05565b34801561047057600080fd5b506101c161047f366004611538565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b3480156104b957600080fd5b506102436104c83660046113cc565b610d3f565b3480156104d957600080fd5b5061025a600c5481565b60006301ffc9a760e01b6001600160e01b03198316148061051457506380ac58cd60e01b6001600160e01b03198316145b8061052f5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600380546105449061156b565b80601f01602080910402602001604051908101604052809291908181526020018280546105709061156b565b80156105bd5780601f10610592576101008083540402835291602001916105bd565b820191906000526020600020905b8154815290600101906020018083116105a057829003601f168201915b5050505050905090565b60006105d282610dba565b6105ef576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b60006106168261089f565b9050336001600160a01b0382161461064f57610632813361047f565b61064f576040516367d9dca160e11b815260040160405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006106b682610de2565b9050836001600160a01b0316816001600160a01b0316146106e95760405162a1148160e81b815260040160405180910390fd5b60008281526007602052604090208054338082146001600160a01b0388169091141761073657610719863361047f565b61073657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661075d57604051633a954ecd60e21b815260040160405180910390fd5b801561076857600082555b6001600160a01b038681166000908152600660205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260056020526040902055600160e11b83166107f357600184016000818152600560205260409020546107f15760015481146107f15760008181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b61085783838360405180602001604052806000815250610c36565b505050565b610864610e43565b610857600e8383611129565b610878610e43565b600d805482919060ff191660018360028111156108975761089761138e565b021790555050565b600061052f82610de2565b6108b2610e43565b6000816001600160a01b03164760405160006040518083038185875af1925050503d80600081146108ff576040519150601f19603f3d011682016040523d82523d6000602084013e610904565b606091505b505090508061092657604051631d42c86760e21b815260040160405180910390fd5b5050565b6000600d5460ff1660028111156109435761094361138e565b14156109625760405163b7b2409760e01b815260040160405180910390fd5b60038160ff1611156109875760405163746f460760e01b815260040160405180910390fd5b8060ff16600a5461099891906115bc565b3410156109b85760405163cd1c886760e01b815260040160405180910390fd5b600b548160ff166109c860015490565b6109d291906115db565b11156109f157604051637d3d824960e01b815260040160405180910390fd5b3360009081526009602052604090206001600d5460ff166002811115610a1957610a1961138e565b1415610abd57600c548260ff16610a2f60015490565b610a3991906115db565b1115610a585760405163219a7c0b60e21b815260040160405180910390fd5b8054600390610a6b90849060ff166115f3565b60ff161115610a8d5760405163746f460760e01b815260040160405180910390fd5b805482908290600090610aa490849060ff166115f3565b92506101000a81548160ff021916908360ff1602179055505b6002600d5460ff166002811115610ad657610ad661138e565b1415610b4b578054600390610af4908490610100900460ff166115f3565b60ff161115610b165760405163746f460760e01b815260040160405180910390fd5b805482908290600190610b32908490610100900460ff166115f3565b92506101000a81548160ff021916908360ff1602179055505b610926338360ff16610e9d565b60006001600160a01b038216610b81576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526006602052604090205467ffffffffffffffff1690565b610baf610e43565b610bb96000610f94565b565b6060600480546105449061156b565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c418484846106ab565b6001600160a01b0383163b15610c7a57610c5d84848484610fe4565b610c7a576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610c8b82610dba565b610ca857604051630a14c4b560e41b815260040160405180910390fd5b6000610cb26110cc565b9050805160001415610cd35760405180602001604052806000815250610cfe565b80610cdd846110db565b604051602001610cee929190611618565b6040516020818303038152906040525b9392505050565b610d0d610e43565b600c5460015414610d31576040516308f4cc0960e01b815260040160405180910390fd5b610d3c816001610e9d565b50565b610d47610e43565b6001600160a01b038116610db15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610d3c81610f94565b60006001548210801561052f575050600090815260056020526040902054600160e01b161590565b600081600154811015610e2a57600081815260056020526040902054600160e01b8116610e28575b80610cfe575060001901600081815260056020526040902054610e0a565b505b604051636f96cda160e11b815260040160405180910390fd5b6000546001600160a01b03163314610bb95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610da8565b60015481610ebe5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114610f6d57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101610f35565b5081610f8b57604051622e076360e81b815260040160405180910390fd5b60015550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611019903390899088908890600401611657565b6020604051808303816000875af1925050508015611054575060408051601f3d908101601f1916820190925261105191810190611694565b60015b6110af573d808015611082576040519150601f19603f3d011682016040523d82523d6000602084013e611087565b606091505b5080516110a7576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060600e80546105449061156b565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061111257611117565b6110f5565b50819003601f19909101908152919050565b8280546111359061156b565b90600052602060002090601f016020900481019282611157576000855561119d565b82601f106111705782800160ff1982351617855561119d565b8280016001018555821561119d579182015b8281111561119d578235825591602001919060010190611182565b506111a99291506111ad565b5090565b5b808211156111a957600081556001016111ae565b6001600160e01b031981168114610d3c57600080fd5b6000602082840312156111ea57600080fd5b8135610cfe816111c2565b60005b838110156112105781810151838201526020016111f8565b83811115610c7a5750506000910152565b600081518084526112398160208601602086016111f5565b601f01601f19169290920160200192915050565b602081526000610cfe6020830184611221565b60006020828403121561127257600080fd5b5035919050565b80356001600160a01b038116811461129057600080fd5b919050565b600080604083850312156112a857600080fd5b6112b183611279565b946020939093013593505050565b6000806000606084860312156112d457600080fd5b6112dd84611279565b92506112eb60208501611279565b9150604084013590509250925092565b6000806020838503121561130e57600080fd5b823567ffffffffffffffff8082111561132657600080fd5b818501915085601f83011261133a57600080fd5b81358181111561134957600080fd5b86602082850101111561135b57600080fd5b60209290920196919550909350505050565b60006020828403121561137f57600080fd5b813560038110610cfe57600080fd5b634e487b7160e01b600052602160045260246000fd5b60208101600383106113c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156113de57600080fd5b610cfe82611279565b6000602082840312156113f957600080fd5b813560ff81168114610cfe57600080fd5b6000806040838503121561141d57600080fd5b61142683611279565b91506020830135801515811461143b57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561147257600080fd5b61147b85611279565b935061148960208601611279565b925060408501359150606085013567ffffffffffffffff808211156114ad57600080fd5b818701915087601f8301126114c157600080fd5b8135818111156114d3576114d3611446565b604051601f8201601f19908116603f011681019083821181831017156114fb576114fb611446565b816040528281528a602084870101111561151457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561154b57600080fd5b61155483611279565b915061156260208401611279565b90509250929050565b600181811c9082168061157f57607f821691505b602082108114156115a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156115d6576115d66115a6565b500290565b600082198211156115ee576115ee6115a6565b500190565b600060ff821660ff84168060ff03821115611610576116106115a6565b019392505050565b6000835161162a8184602088016111f5565b83519083019061163e8183602088016111f5565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061168a90830184611221565b9695505050505050565b6000602082840312156116a657600080fd5b8151610cfe816111c256fea2646970667358221220cc2ce1b9dbb6c9d3a6a30d5bfbffe36b29d3640230ae879c5552485f8dfac68964736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001e54686520536f756c73206f66204d656c6f6e204261792047656e657369730000000000000000000000000000000000000000000000000000000000000000000554534f4d420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): The Souls of Melon Bay Genesis
Arg [1] : symbol (string): TSOMB
Arg [2] : baseURI (string):
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [4] : 54686520536f756c73206f66204d656c6f6e204261792047656e657369730000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 54534f4d42000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
336:4634:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9155:630:1;;;;;;;;;;-1:-1:-1;9155:630:1;;;;;:::i;:::-;;:::i;:::-;;;565:14:5;;558:22;540:41;;528:2;513:18;9155:630:1;;;;;;;;10039:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16360:214::-;;;;;;;;;;-1:-1:-1;16360:214:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:5;;;1674:51;;1662:2;1647:18;16360:214:1;1528:203:5;15812:398:1;;;;;;:::i;:::-;;:::i;:::-;;5894:317;;;;;;;;;;-1:-1:-1;6164:12:1;;6148:13;;:28;5894:317;;;2319:25:5;;;2307:2;2292:18;5894:317:1;2173:177:5;19903:2764:1;;;;;;:::i;:::-;;:::i;861:51:4:-;;;;;;;;;;;;911:1;861:51;;22758:187:1;;;;;;:::i;:::-;;:::i;4266:104:4:-;;;;;;;;;;-1:-1:-1;4266:104:4;;;;;:::i;:::-;;:::i;3442:103::-;;;;;;;;;;-1:-1:-1;3442:103:4;;;;;:::i;:::-;;:::i;1166:27::-;;;;;;;;;;-1:-1:-1;1166:27:4;;;;;;;;;;;;;;;:::i;11391:150:1:-;;;;;;;;;;-1:-1:-1;11391:150:1;;;;;:::i;:::-;;:::i;3714:207:4:-;;;;;;;;;;-1:-1:-1;3714:207:4;;;;;:::i;:::-;;:::i;1824:961::-;;;;;;:::i;:::-;;:::i;7045:230:1:-;;;;;;;;;;-1:-1:-1;7045:230:1;;;;;:::i;:::-;;:::i;1824:101:3:-;;;;;;;;;;;;;:::i;1194:85::-;;;;;;;;;;-1:-1:-1;1240:7:3;1266:6;-1:-1:-1;;;;;1266:6:3;1194:85;;10208:102:1;;;;;;;;;;;;;:::i;16901:231::-;;;;;;;;;;-1:-1:-1;16901:231:1;;;;;:::i;:::-;;:::i;952:39:4:-;;;;;;;;;;;;;;;;23526:396:1;;;;;;:::i;:::-;;:::i;4654:314:4:-;;;;;;;;;;-1:-1:-1;4654:314:4;;;;;:::i;:::-;;:::i;1036:30::-;;;;;;;;;;;;;;;;2954:156;;;;;;;;;;-1:-1:-1;2954:156:4;;;;;:::i;:::-;;:::i;17282:162:1:-;;;;;;;;;;-1:-1:-1;17282:162:1;;;;;:::i;:::-;-1:-1:-1;;;;;17402:25:1;;;17379:4;17402:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;17282:162;2074:198:3;;;;;;;;;;-1:-1:-1;2074:198:3;;;;;:::i;:::-;;:::i;1098:35:4:-;;;;;;;;;;;;;;;;9155:630:1;9240:4;-1:-1:-1;;;;;;;;;9558:25:1;;;;:101;;-1:-1:-1;;;;;;;;;;9634:25:1;;;9558:101;:177;;;-1:-1:-1;;;;;;;;;;9710:25:1;;;9558:177;9539:196;9155:630;-1:-1:-1;;9155:630:1:o;10039:98::-;10093:13;10125:5;10118:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10039:98;:::o;16360:214::-;16436:7;16460:16;16468:7;16460;:16::i;:::-;16455:64;;16485:34;;-1:-1:-1;;;16485:34:1;;;;;;;;;;;16455:64;-1:-1:-1;16537:24:1;;;;:15;:24;;;;;:30;-1:-1:-1;;;;;16537:30:1;;16360:214::o;15812:398::-;15900:13;15916:16;15924:7;15916;:16::i;:::-;15900:32;-1:-1:-1;39523:10:1;-1:-1:-1;;;;;15947:28:1;;;15943:172;;15994:44;16011:5;39523:10;17282:162;:::i;15994:44::-;15989:126;;16065:35;;-1:-1:-1;;;16065:35:1;;;;;;;;;;;15989:126;16125:24;;;;:15;:24;;;;;;:35;;-1:-1:-1;;;;;;16125:35:1;-1:-1:-1;;;;;16125:35:1;;;;;;;;;16175:28;;16125:24;;16175:28;;;;;;;15890:320;15812:398;;:::o;19903:2764::-;20040:27;20070;20089:7;20070:18;:27::i;:::-;20040:57;;20153:4;-1:-1:-1;;;;;20112:45:1;20128:19;-1:-1:-1;;;;;20112:45:1;;20108:86;;20166:28;;-1:-1:-1;;;20166:28:1;;;;;;;;;;;20108:86;20206:27;19036:24;;;:15;:24;;;;;19260:26;;39523:10;18673:30;;;-1:-1:-1;;;;;18370:28:1;;18651:20;;;18648:56;20389:179;;20481:43;20498:4;39523:10;17282:162;:::i;20481:43::-;20476:92;;20533:35;;-1:-1:-1;;;20533:35:1;;;;;;;;;;;20476:92;-1:-1:-1;;;;;20583:16:1;;20579:52;;20608:23;;-1:-1:-1;;;20608:23:1;;;;;;;;;;;20579:52;20774:15;20771:157;;;20912:1;20891:19;20884:30;20771:157;-1:-1:-1;;;;;21300:24:1;;;;;;;:18;:24;;;;;;21298:26;;-1:-1:-1;;21298:26:1;;;21368:22;;;;;;;;;21366:24;;-1:-1:-1;21366:24:1;;;14703:11;14678:23;14674:41;14661:63;-1:-1:-1;;;14661:63:1;21654:26;;;;:17;:26;;;;;:172;-1:-1:-1;;;21943:47:1;;21939:617;;22047:1;22037:11;;22015:19;22168:30;;;:17;:30;;;;;;22164:378;;22304:13;;22289:11;:28;22285:239;;22449:30;;;;:17;:30;;;;;:52;;;22285:239;21997:559;21939:617;22600:7;22596:2;-1:-1:-1;;;;;22581:27:1;22590:4;-1:-1:-1;;;;;22581:27:1;;;;;;;;;;;20030:2637;;;19903:2764;;;:::o;22758:187::-;22899:39;22916:4;22922:2;22926:7;22899:39;;;;;;;;;;;;:16;:39::i;:::-;22758:187;;;:::o;4266:104:4:-;1087:13:3;:11;:13::i;:::-;4340:23:4::1;:13;4356:7:::0;;4340:23:::1;:::i;3442:103::-:0;1087:13:3;:11;:13::i;:::-;3516:9:4::1;:22:::0;;3528:10;;3516:9;-1:-1:-1;;3516:22:4::1;::::0;3528:10;3516:22:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;3442:103:::0;:::o;11391:150:1:-;11463:7;11505:27;11524:7;11505:18;:27::i;3714:207:4:-;1087:13:3;:11;:13::i;:::-;3785:9:4::1;3799:8;-1:-1:-1::0;;;;;3799:13:4::1;3820:21;3799:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3784:62;;;3861:4;3856:59;;3888:16;;-1:-1:-1::0;;;3888:16:4::1;;;;;;;;;;;3856:59;3774:147;3714:207:::0;:::o;1824:961::-;1893:17;1880:9;;;;:30;;;;;;;;:::i;:::-;;1876:58;;;1919:15;;-1:-1:-1;;;1919:15:4;;;;;;;;;;;1876:58;911:1;1948:3;:29;;;1944:63;;;1986:21;;-1:-1:-1;;;1986:21:4;;;;;;;;;;;1944:63;2047:3;2033:17;;:11;;:17;;;;:::i;:::-;2021:9;:29;2017:63;;;2059:21;;-1:-1:-1;;;2059:21:4;;;;;;;;;;;2017:63;2117:9;;2111:3;2094:20;;:14;6546:13:1;;;6304:290;2094:14:4;:20;;;;:::i;:::-;:32;2090:61;;;2135:16;;-1:-1:-1;;;2135:16:4;;;;;;;;;;;2090:61;2203:10;2162:27;2192:22;;;:10;:22;;;;;2242:28;2229:9;;;;:41;;;;;;;;:::i;:::-;;2225:299;;;2313:15;;2307:3;2290:20;;:14;6546:13:1;;;6304:290;2290:14:4;:20;;;;:::i;:::-;:38;2286:76;;;2337:25;;-1:-1:-1;;;2337:25:4;;;;;;;;;;;2286:76;2380:25;;911:1;;2380:31;;2408:3;;2380:25;;:31;:::i;:::-;:57;;;2376:91;;;2446:21;;-1:-1:-1;;;2446:21:4;;;;;;;;;;;2376:91;2481:32;;2510:3;;2481:9;;:25;;:32;;2510:3;;2481:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2225:299;2551:29;2538:9;;;;:42;;;;;;;;:::i;:::-;;2534:212;;;2600:26;;911:1;;2600:32;;2629:3;;2600:26;;;;;:32;:::i;:::-;:58;;;2596:92;;;2667:21;;-1:-1:-1;;;2667:21:4;;;;;;;;;;;2596:92;2702:33;;2732:3;;2702:33;;:26;;:33;;2732:3;;2702:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2534:212;2756:22;2762:10;2774:3;2756:22;;:5;:22::i;7045:230:1:-;7117:7;-1:-1:-1;;;;;7140:19:1;;7136:60;;7168:28;;-1:-1:-1;;;7168:28:1;;;;;;;;;;;7136:60;-1:-1:-1;;;;;;7213:25:1;;;;;:18;:25;;;;;;1360:13;7213:55;;7045:230::o;1824:101:3:-;1087:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;10208:102:1:-;10264:13;10296:7;10289:14;;;;;:::i;16901:231::-;39523:10;16995:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;16995:49:1;;;;;;;;;;;;:60;;-1:-1:-1;;16995:60:1;;;;;;;;;;17070:55;;540:41:5;;;16995:49:1;;39523:10;17070:55;;513:18:5;17070:55:1;;;;;;;16901:231;;:::o;23526:396::-;23695:31;23708:4;23714:2;23718:7;23695:12;:31::i;:::-;-1:-1:-1;;;;;23740:14:1;;;:19;23736:180;;23778:56;23809:4;23815:2;23819:7;23828:5;23778:30;:56::i;:::-;23773:143;;23861:40;;-1:-1:-1;;;23861:40:1;;;;;;;;;;;23773:143;23526:396;;;;:::o;4654:314:4:-;4719:13;4749:16;4757:7;4749;:16::i;:::-;4744:59;;4774:29;;-1:-1:-1;;;4774:29:4;;;;;;;;;;;4744:59;4814:21;4838:10;:8;:10::i;:::-;4814:34;;4871:7;4865:21;4890:1;4865:26;;:96;;;;;;;;;;;;;;;;;4918:7;4927:18;4937:7;4927:9;:18::i;:::-;4901:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4865:96;4858:103;4654:314;-1:-1:-1;;;4654:314:4:o;2954:156::-;1087:13:3;:11;:13::i;:::-;3039:15:4::1;::::0;6546:13:1;;3021:33:4::1;3017:64;;3063:18;;-1:-1:-1::0;;;3063:18:4::1;;;;;;;;;;;3017:64;3091:12;3097:2;3101:1;3091:5;:12::i;:::-;2954:156:::0;:::o;2074:198:3:-;1087:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:3;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:3;;8484:2:5;2154:73:3::1;::::0;::::1;8466:21:5::0;8523:2;8503:18;;;8496:30;8562:34;8542:18;;;8535:62;-1:-1:-1;;;8613:18:5;;;8606:36;8659:19;;2154:73:3::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;17693:277:1:-:0;17758:4;17845:13;;17835:7;:23;17793:151;;;;-1:-1:-1;;17895:26:1;;;;:17;:26;;;;;;-1:-1:-1;;;17895:44:1;:49;;17693:277::o;12515:1249::-;12582:7;12616;12714:13;;12707:4;:20;12703:997;;;12751:14;12768:23;;;:17;:23;;;;;;-1:-1:-1;;;12855:24:1;;12851:831;;13510:111;13517:11;13510:111;;-1:-1:-1;;;13587:6:1;13569:25;;;;:17;:25;;;;;;13510:111;;12851:831;12729:971;12703:997;13726:31;;-1:-1:-1;;;13726:31:1;;;;;;;;;;;1352:130:3;1240:7;1266:6;-1:-1:-1;;;;;1266:6:3;39523:10:1;1415:23:3;1407:68;;;;-1:-1:-1;;;1407:68:3;;8891:2:5;1407:68:3;;;8873:21:5;;;8910:18;;;8903:30;8969:34;8949:18;;;8942:62;9021:18;;1407:68:3;8689:356:5;27091:2902:1;27186:13;;27213;27209:44;;27235:18;;-1:-1:-1;;;27235:18:1;;;;;;;;;;;27209:44;-1:-1:-1;;;;;27728:22:1;;;;;;:18;:22;;;;1495:2;27728:22;;;:71;;27766:32;27754:45;;27728:71;;;28035:31;;;:17;:31;;;;;-1:-1:-1;15123:15:1;;15097:24;15093:46;14703:11;14678:23;14674:41;14671:52;14661:63;;28035:170;;28264:23;;;;28035:31;;27728:22;;29016:25;27728:22;;28872:328;29520:1;29506:12;29502:20;29461:339;29560:3;29551:7;29548:16;29461:339;;29774:7;29764:8;29761:1;29734:25;29731:1;29728;29723:59;29612:1;29599:15;29461:339;;;-1:-1:-1;29831:13:1;29827:45;;29853:19;;-1:-1:-1;;;29853:19:1;;;;;;;;;;;29827:45;29887:13;:19;-1:-1:-1;22758:187:1;;;:::o;2426::3:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:3;;;-1:-1:-1;;;;;;2534:17:3;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;25948:697:1:-;26126:88;;-1:-1:-1;;;26126:88:1;;26106:4;;-1:-1:-1;;;;;26126:45:1;;;;;:88;;39523:10;;26193:4;;26199:7;;26208:5;;26126:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26126:88:1;;;;;;;;-1:-1:-1;;26126:88:1;;;;;;;;;;;;:::i;:::-;;;26122:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26404:13:1;;26400:229;;26449:40;;-1:-1:-1;;;26449:40:1;;;;;;;;;;;26400:229;26589:6;26583:13;26574:6;26570:2;26566:15;26559:38;26122:517;-1:-1:-1;;;;;;26282:64:1;-1:-1:-1;;;26282:64:1;;-1:-1:-1;25948:697:1;;;;;;:::o;4376:104:4:-;4428:13;4460;4453:20;;;;;:::i;39637:1708:1:-;39702:17;40130:4;40123;40117:11;40113:22;40220:1;40214:4;40207:15;40293:4;40290:1;40286:12;40279:19;;;40373:1;40368:3;40361:14;40474:3;40708:5;40690:419;40755:1;40750:3;40746:11;40739:18;;40923:2;40917:4;40913:13;40909:2;40905:22;40900:3;40892:36;41015:2;41005:13;;;41070:25;;41088:5;;41070:25;40690:419;;;-1:-1:-1;41137:13:1;;;-1:-1:-1;;41250:14:1;;;41310:19;;;41250:14;39637:1708;-1:-1:-1;39637:1708:1:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:5;-1:-1:-1;;;;;;88:32:5;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:5;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:5;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:5:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:5;;1343:180;-1:-1:-1;1343:180:5:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:5;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:5:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:592::-;2759:6;2767;2820:2;2808:9;2799:7;2795:23;2791:32;2788:52;;;2836:1;2833;2826:12;2788:52;2876:9;2863:23;2905:18;2946:2;2938:6;2935:14;2932:34;;;2962:1;2959;2952:12;2932:34;3000:6;2989:9;2985:22;2975:32;;3045:7;3038:4;3034:2;3030:13;3026:27;3016:55;;3067:1;3064;3057:12;3016:55;3107:2;3094:16;3133:2;3125:6;3122:14;3119:34;;;3149:1;3146;3139:12;3119:34;3194:7;3189:2;3180:6;3176:2;3172:15;3168:24;3165:37;3162:57;;;3215:1;3212;3205:12;3162:57;3246:2;3238:11;;;;;3268:6;;-1:-1:-1;2688:592:5;;-1:-1:-1;;;;2688:592:5:o;3285:271::-;3359:6;3412:2;3400:9;3391:7;3387:23;3383:32;3380:52;;;3428:1;3425;3418:12;3380:52;3467:9;3454:23;3506:1;3499:5;3496:12;3486:40;;3522:1;3519;3512:12;3561:127;3622:10;3617:3;3613:20;3610:1;3603:31;3653:4;3650:1;3643:15;3677:4;3674:1;3667:15;3693:343;3840:2;3825:18;;3873:1;3862:13;;3852:144;;3918:10;3913:3;3909:20;3906:1;3899:31;3953:4;3950:1;3943:15;3981:4;3978:1;3971:15;3852:144;4005:25;;;3693:343;:::o;4041:186::-;4100:6;4153:2;4141:9;4132:7;4128:23;4124:32;4121:52;;;4169:1;4166;4159:12;4121:52;4192:29;4211:9;4192:29;:::i;4232:269::-;4289:6;4342:2;4330:9;4321:7;4317:23;4313:32;4310:52;;;4358:1;4355;4348:12;4310:52;4397:9;4384:23;4447:4;4440:5;4436:16;4429:5;4426:27;4416:55;;4467:1;4464;4457:12;4506:347;4571:6;4579;4632:2;4620:9;4611:7;4607:23;4603:32;4600:52;;;4648:1;4645;4638:12;4600:52;4671:29;4690:9;4671:29;:::i;:::-;4661:39;;4750:2;4739:9;4735:18;4722:32;4797:5;4790:13;4783:21;4776:5;4773:32;4763:60;;4819:1;4816;4809:12;4763:60;4842:5;4832:15;;;4506:347;;;;;:::o;4858:127::-;4919:10;4914:3;4910:20;4907:1;4900:31;4950:4;4947:1;4940:15;4974:4;4971:1;4964:15;4990:1138;5085:6;5093;5101;5109;5162:3;5150:9;5141:7;5137:23;5133:33;5130:53;;;5179:1;5176;5169:12;5130:53;5202:29;5221:9;5202:29;:::i;:::-;5192:39;;5250:38;5284:2;5273:9;5269:18;5250:38;:::i;:::-;5240:48;;5335:2;5324:9;5320:18;5307:32;5297:42;;5390:2;5379:9;5375:18;5362:32;5413:18;5454:2;5446:6;5443:14;5440:34;;;5470:1;5467;5460:12;5440:34;5508:6;5497:9;5493:22;5483:32;;5553:7;5546:4;5542:2;5538:13;5534:27;5524:55;;5575:1;5572;5565:12;5524:55;5611:2;5598:16;5633:2;5629;5626:10;5623:36;;;5639:18;;:::i;:::-;5714:2;5708:9;5682:2;5768:13;;-1:-1:-1;;5764:22:5;;;5788:2;5760:31;5756:40;5744:53;;;5812:18;;;5832:22;;;5809:46;5806:72;;;5858:18;;:::i;:::-;5898:10;5894:2;5887:22;5933:2;5925:6;5918:18;5973:7;5968:2;5963;5959;5955:11;5951:20;5948:33;5945:53;;;5994:1;5991;5984:12;5945:53;6050:2;6045;6041;6037:11;6032:2;6024:6;6020:15;6007:46;6095:1;6090:2;6085;6077:6;6073:15;6069:24;6062:35;6116:6;6106:16;;;;;;;4990:1138;;;;;;;:::o;6133:260::-;6201:6;6209;6262:2;6250:9;6241:7;6237:23;6233:32;6230:52;;;6278:1;6275;6268:12;6230:52;6301:29;6320:9;6301:29;:::i;:::-;6291:39;;6349:38;6383:2;6372:9;6368:18;6349:38;:::i;:::-;6339:48;;6133:260;;;;;:::o;6398:380::-;6477:1;6473:12;;;;6520;;;6541:61;;6595:4;6587:6;6583:17;6573:27;;6541:61;6648:2;6640:6;6637:14;6617:18;6614:38;6611:161;;;6694:10;6689:3;6685:20;6682:1;6675:31;6729:4;6726:1;6719:15;6757:4;6754:1;6747:15;6611:161;;6398:380;;;:::o;6993:127::-;7054:10;7049:3;7045:20;7042:1;7035:31;7085:4;7082:1;7075:15;7109:4;7106:1;7099:15;7125:168;7165:7;7231:1;7227;7223:6;7219:14;7216:1;7213:21;7208:1;7201:9;7194:17;7190:45;7187:71;;;7238:18;;:::i;:::-;-1:-1:-1;7278:9:5;;7125:168::o;7298:128::-;7338:3;7369:1;7365:6;7362:1;7359:13;7356:39;;;7375:18;;:::i;:::-;-1:-1:-1;7411:9:5;;7298:128::o;7431:204::-;7469:3;7505:4;7502:1;7498:12;7537:4;7534:1;7530:12;7572:3;7566:4;7562:14;7557:3;7554:23;7551:49;;;7580:18;;:::i;:::-;7616:13;;7431:204;-1:-1:-1;;;7431:204:5:o;7640:637::-;7920:3;7958:6;7952:13;7974:53;8020:6;8015:3;8008:4;8000:6;7996:17;7974:53;:::i;:::-;8090:13;;8049:16;;;;8112:57;8090:13;8049:16;8146:4;8134:17;;8112:57;:::i;:::-;-1:-1:-1;;;8191:20:5;;8220:22;;;8269:1;8258:13;;7640:637;-1:-1:-1;;;;7640:637:5:o;9050:489::-;-1:-1:-1;;;;;9319:15:5;;;9301:34;;9371:15;;9366:2;9351:18;;9344:43;9418:2;9403:18;;9396:34;;;9466:3;9461:2;9446:18;;9439:31;;;9244:4;;9487:46;;9513:19;;9505:6;9487:46;:::i;:::-;9479:54;9050:489;-1:-1:-1;;;;;;9050:489:5:o;9544:249::-;9613:6;9666:2;9654:9;9645:7;9641:23;9637:32;9634:52;;;9682:1;9679;9672:12;9634:52;9714:9;9708:16;9733:30;9757:5;9733:30;:::i
Swarm Source
ipfs://cc2ce1b9dbb6c9d3a6a30d5bfbffe36b29d3640230ae879c5552485f8dfac689
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,975.43 | 0.48 | $1,908.21 |
Loading...
Loading
[ 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.