-
Notifications
You must be signed in to change notification settings - Fork 0
/
FitnessApp.sol
37 lines (25 loc) · 993 Bytes
/
FitnessApp.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract FitnessApp {
mapping(address => mapping(uint256 => bool)) public subscriptions;
uint256 public constant YEARLY_SUBSCRIPTION_PRICE = 0.1 ether;
address public owner;
constructor() {
owner = msg.sender;
}
modifier onlyOwner () {
require(msg.sender == owner, "This can only be called by the contract owner!");
_;
}
function subscribe(uint256 _year) payable external {
require(msg.value == YEARLY_SUBSCRIPTION_PRICE, "WRONG AMOUNT SENT");
require(!subscriptions[msg.sender][_year], "ALREADY SUBSCRIBED FOR THAT YEAR");
subscriptions[msg.sender][_year] = true;
}
function payOut(uint256 _currentYear, address _receiver, uint256 _amount) onlyOwner external {
require(subscriptions[_receiver][_currentYear], "USER IS NOT SUBSCRIBED");
payable(_receiver).transfer(_amount);
}
receive() external payable {
}
}