-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathSimpleBank.sol
More file actions
45 lines (33 loc) · 1.31 KB
/
SimpleBank.sol
File metadata and controls
45 lines (33 loc) · 1.31 KB
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
pragma solidity ^0.5.8;
contract SimpleBank {
mapping(address => uint) bankBalance;
event VaultDeposit(address accountHolder, uint deposit, uint newBalance);
event VaultWithdrawal(address accountHolder, uint withdrawal, uint newBalance);
address contractOwner;
constructor() public payable {
contractOwner = msg.sender;
}
modifier onlyOwner() {
require(contractOwner == msg.sender, "Only Bank Owner is authorized");
_;
}
function deposit() public payable {
require(bankBalance[msg.sender] + msg.value >= bankBalance[msg.sender], "Addition: balance overflow");
bankBalance[msg.sender] += msg.value;
uint amount = msg.value;
emit VaultDeposit(msg.sender, amount, bankBalance[msg.sender]);
}
function withdraw(uint amount) public returns (bool) {
require(amount <= bankBalance[msg.sender], "Subtraction: balance underflow");
bankBalance[msg.sender] -= amount;
emit VaultWithdrawal(msg.sender, amount, bankBalance[msg.sender]);
msg.sender.transfer(amount);
return true;
}
function getBalance() public view returns (uint) {
return bankBalance[msg.sender];
}
function vaultBalance() public view onlyOwner returns (uint) {
return address(this).balance;
}
}