/* Crafted with love by Fueled on Bacon https://fueledonbacon.com */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.15; import './IERC721Wide.sol'; interface IERC721EW is IERC721Wide { event NewEntry(uint256 indexed pos, string name, uint256 indexed price, uint256 maxSupply, uint256 saleEnd); event MintTickets(address indexed buyer, uint256 indexed userId, uint256 indexed entryType, uint256 amount); error ERC721EWWrongMerkleProof(); error ERC721EWUnableToVerifyMerkleProof(); struct EntryType { string name; uint256 price; uint256 maxSupply; uint256 maxBuy; uint256 sold; uint256 saleEnd; bytes32 merkleRoot; } /// @dev create ticket entry type, i.e VIP 2000USDC 100 /// @param name VIP, PLATINUM, TABLE.... /// @param price price per token/ticket /// @param maxSupply max number of tokens/tickets that can be sold /// @param maxBuy max number of tokens/tickets sender can buy /// @param saleEnd ticket sale deadline /// @param merkleRoot if wallet is whitelisted, ticket price will be 0 function createEntry( string memory name, uint256 price, uint256 maxSupply, uint256 maxBuy, uint256 saleEnd, bytes32 merkleRoot ) external; function buyTickets( address receiver, uint256 userId, uint256 entryPos, uint256 amount, uint256[] memory sellingPrices, bytes32[] calldata merkleProof ) external; function editMerkleRoot(uint256 entryPos, bytes32 newMerkleRoot) external; function getTicketInfo(uint256 tokenId) external view returns (EntryType memory); function getEntry(uint256 pos) external view returns (EntryType memory); }