diff --git a/contracts/EventManager.sol b/contracts/EventManager.sol index c77841b..f68a7a7 100644 --- a/contracts/EventManager.sol +++ b/contracts/EventManager.sol @@ -29,7 +29,7 @@ contract EventManager { uint256 eventDate; string[] images; // array of image URLs uint256[] tickets; - address eventHost; + address payable eventHost; } struct Ticket { @@ -86,7 +86,7 @@ contract EventManager { } function createEvent(string memory _name, string memory _description, uint256 _capacity, uint256 _ticketPrice, uint256 _eventDate, string[] memory _images) public returns (uint256 _eventId) { - events[eventCounter] = Event(_name, _description, _capacity, 0, _ticketPrice, _eventDate, _images, new uint256[](0), msg.sender); + events[eventCounter] = Event(_name, _description, _capacity, 0, _ticketPrice, _eventDate, _images, new uint256[](0), payable(msg.sender)); eventCounter++; return eventCounter - 1; } @@ -101,15 +101,18 @@ contract EventManager { return events[_eventId].tickets; } - //TODO: ADD CURRENCY CONVERSION + CHECK function buyTicket(uint256 _eventId) public payable returns (uint256 _ticketId) { require(_eventId < eventCounter, "Invalid event ID"); require(events[_eventId].eventDate > block.timestamp, "Event has already passed"); require(events[_eventId].tickets.length < events[_eventId].capacity, "Event is full"); uint256 ticketCost = getEventPriceFlare(_eventId); // Get ticket price in FLR - require(msg.value >= ticketCost, "Invalid ticket price"); // Ensure user has paid >= ticket price - if (msg.value > ticketCost) payable(msg.sender).transfer(msg.value - ticketCost); // Pay any excess the user paid + require(msg.value >= ticketCost, "Insufficient value provided"); // Ensure user has paid >= ticket price + if (msg.value > ticketCost) { + // Pay any excess the user paid + (bool sentExcess, ) = msg.sender.call{value: msg.value - ticketCost}(""); + require(sentExcess, "Failed to send FLR excess back to buyer"); + } // Create new ticket tickets[ticketCounter] = Ticket(msg.sender, block.timestamp, _eventId); @@ -123,8 +126,8 @@ contract EventManager { events[_eventId].ticketsSold++; // Transfer FLR to event host - (bool sent, ) = events[_eventId].eventHost.call{value: msg.value}(""); - require(sent, "Failed to send FLR to event host"); + (bool sentToHost, ) = events[_eventId].eventHost.call{value: ticketCost}(""); + require(sentToHost, "Failed to send FLR to event host"); return ticketCounter - 1; }