registerEvent
/**
* @notice Register an event with the given event ID, ticket prices, access levels, and whitelist.
* @param userAddress The address of the event manager.
* @param eventId The unique identifier for the event.
* @param accessLevels Array of access levels associated with the event.
* @param ticketPrices Array of ticket prices for different access levels of the event.
* @param whitelist Array indicating whether each access level requires whitelisting.
*/
function registerEvent(
address userAddress,
string calldata eventId,
string[] calldata accessLevels,
uint256[] calldata ticketPrices,
bool[] calldata whitelist
) external onlyOwner {
// Check if the event ID already exists
if (getTokenIdsFromEventId(eventId).length > 0 || getAccessLevelsFromEventId(eventId).length > 0) {
revert DecastGating__EventIdAlreadyExists();
}
// Ensure input array lengths match
if (ticketPrices.length != accessLevels.length || accessLevels.length != whitelist.length) {
revert DecastGating__UnmatchedArrayLength();
}
// Initialize an array to store generated token IDs
uint256[] memory tokenIdsGeneration = new uint256[](accessLevels.length);
// Generate token IDs for each access level and perform necessary checks
for (uint256 i = 0; i < accessLevels.length; ++i) {
uint256 tokenId = generateTokenId(eventId, userAddress, accessLevels[i]);
// Check if the generated token ID already exists for the event
if (checkTokenIdExistsForEventId(eventId, tokenId)) {
revert DecastGating__TokenIdAlreadyExists();
}
tokenIdsGeneration[i] = tokenId;
}
// Update storage mappings
for (uint256 i = 0; i < accessLevels.length; ++i) {
uint256 tokenId = tokenIdsGeneration[i];
// Update event-specific mappings
s_eventIdToTokenIds[eventId].push(tokenId);
s_eventIdToAccessLevels[eventId].push(accessLevels[i]);
s_tokenIdToTicketPrice[tokenId] = ticketPrices[i];
s_tokenIdToWhitelist[tokenId] = whitelist[i];
}
// Mint a token for the event manager
uint256 eventManagerTokenId = getTokenIdOfAnEventManager(eventId);
_mint(userAddress, eventManagerTokenId, 1, "");
}
Explanation:
Last updated