Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 14 additions & 9 deletions template/contracts/src/BuyMeACoffee.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ pragma solidity ^0.8.23;
*/
struct Memo {
uint256 numCoffees;
string userName;
string twitterHandle;
string message;
uint256 time;
address userAddress;
Expand All @@ -45,11 +47,11 @@ contract BuyMeACoffee {
error OnlyOwner();

event BuyMeACoffeeEvent(address indexed buyer, uint256 price);
event NewMemo(address indexed userAddress, uint256 time, uint256 numCoffees, string message);
event NewMemo(address indexed userAddress, uint256 time, uint256 numCoffees, string userName, string twitterHandle, string message);

constructor() {
owner = payable(msg.sender);
price = 0.00004 ether;
price = 0.0001 ether;
}

/**
Expand All @@ -58,27 +60,29 @@ contract BuyMeACoffee {

/**
* @dev Function to buy a coffee
* @param userName The name of the user
* @param twitterHandle The Twitter handle of the user
* @param message The message of the user
* (Note: Using calldata for gas efficiency)
*/
function buyCoffee(uint256 numCoffees, string calldata message) public payable {
function buyCoffee(uint256 numCoffees, string calldata userName, string calldata twitterHandle, string calldata message) public payable {
if (msg.value < price * numCoffees) {
revert InsufficientFunds();
}

emit BuyMeACoffeeEvent(msg.sender, msg.value);

if (bytes(message).length == 0) {
revert InvalidArguments("Invalid message");
if (bytes(userName).length == 0 && bytes(message).length == 0) {
revert InvalidArguments("Invalid userName or message");
}

if (bytes(message).length > 1024) {
if (bytes(userName).length > 75 || bytes(twitterHandle).length > 75 || bytes(message).length > 1024) {
revert InvalidArguments("Input parameter exceeds max length");
}

memos.push(Memo(numCoffees, message, block.timestamp, msg.sender));
memos.push(Memo(numCoffees, userName, twitterHandle, message, block.timestamp, msg.sender));

emit NewMemo(msg.sender, block.timestamp, numCoffees, message);
emit NewMemo(msg.sender, block.timestamp, numCoffees, userName, twitterHandle, message);
}

/**
Expand Down Expand Up @@ -182,7 +186,8 @@ contract BuyMeACoffee {
}

/**
* @dev Recieve function to accept ether
* @dev Receive function to accept ether
*/
receive() external payable {}
}