-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathGreedyBanker.sol
65 lines (56 loc) · 2.14 KB
/
GreedyBanker.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
// The original contract can be found in the reddit link below. But it has been thoroughly modified.
// https://www.reddit.com/r/solidity/comments/13gzpob/new_solidity_dev_code_review/?utm_source=share&utm_medium=web2x&context=3
contract GreedyBanker {
struct Account {
bool freebieUsed;
uint balance;
}
address immutable private banker;
mapping(address => Account) bank;
constructor() {
banker = msg.sender;
}
receive() external payable {
if (bank[msg.sender].freebieUsed) {
require(msg.value > 1000 wei, "Deposit must be greater than 1000 wei.");
bank[banker].balance += 1000;
bank[msg.sender].balance += (msg.value - 1000);
} else {
bank[msg.sender].freebieUsed = true;
bank[msg.sender].balance += msg.value;
}
}
fallback() external payable {
bank[banker].balance += msg.value;
}
function withdraw(uint256 amount) external {
require(
bank[msg.sender].balance >= amount,
"You cannot withdraw more than your current balance."
);
bank[msg.sender].balance -= amount;
payable(msg.sender).transfer(amount);
}
function deposit() payable external{
if (bank[msg.sender].freebieUsed) {
require(msg.value > 1000 wei, "Deposit must be greater than 1000 wei.");
bank[banker].balance += 1000;
bank[msg.sender].balance += (msg.value - 1000);
} else {
bank[msg.sender].freebieUsed = true;
bank[msg.sender].balance += msg.value;
}
}
function collectFees() external {
require(msg.sender == banker, "You are not the bank manager.");
uint oldBalance = bank[banker].balance;
bank[banker].balance = 0;
payable(banker).transfer(oldBalance);
}
function getBalance() public view returns (uint256) {
require(bank[msg.sender].freebieUsed || bank[msg.sender].balance >0 || msg.sender == banker,"You have no active account with this bank.");
return bank[msg.sender].balance;
}
}