Build a decentralized app with Solidity (Quickstart)
VendingMachine.sol
Console1 events
[lab]Loaded VendingMachine.sol; compiler target solc 0.8.34.
Ln 1, Col 129 lines · Solidity · 0.8.34
1// SPDX-License-Identifier: MIT2pragma solidity ^0.8.9;3
4contract VendingMachine {5 mapping(address => uint) private _cupcakeBalances;6 mapping(address => uint) private _cupcakeDistributionTimes;7
8 function giveCupcakeTo(address userAddress) public returns (bool) {9 if (_cupcakeDistributionTimes[userAddress] == 0) {10 _cupcakeBalances[userAddress] = 0;11 _cupcakeDistributionTimes[userAddress] = 0;12 }13
14 uint fiveSecondsFromLastDistribution = _cupcakeDistributionTimes[userAddress] + 5 seconds;15 bool userCanReceiveCupcake = fiveSecondsFromLastDistribution <= block.timestamp;16
17 if (userCanReceiveCupcake) {18 _cupcakeBalances[userAddress]++;19 _cupcakeDistributionTimes[userAddress] = block.timestamp;20 return true;21 } else {22 revert("HTTP 429: Too Many Cupcakes (you must wait at least 5 seconds between cupcakes)");23 }24 }25
26 function getCupcakeBalanceFor(address userAddress) public view returns (uint) {27 return _cupcakeBalances[userAddress];28 }29}