-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSmartBankAccount.sol
57 lines (44 loc) · 2.07 KB
/
SmartBankAccount.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
pragma solidity ^0.8.11;
// pragma solidity >=0.7.0 <0.9.0;
// SPDX-License-Identifier: MIT
contract SmartBankAccount {
uint totalContractBalance = 0;
function getContractBalance() public view returns(uint){
return totalContractBalance;
}
mapping(address => uint) balances;
mapping(address => uint) depositTimestamps;
function addBalance(address userAddress) public payable returns(address,uint,uint,uint){
balances[userAddress] = msg.value;
totalContractBalance = totalContractBalance + msg.value;
depositTimestamps[userAddress] = block.timestamp;
return (userAddress,depositTimestamps[userAddress],balances[userAddress],totalContractBalance);
}
function getBalanceBank(address userAddress) public view returns(uint) {
uint principal = balances[userAddress];
uint timeElapsed = block.timestamp - depositTimestamps[userAddress]; //seconds
return principal + uint((principal * 7 * timeElapsed) / (100 * 365 * 24 * 60 * 60)) + 1; //simple interest of 0.07% per year
}
function getBalanceOutsideBank(address userAddress) public view returns(uint) {
return userAddress.balance;
}
function withdraw(address userAddress) public payable {
address payable withdrawTo = payable(userAddress);
uint amountToTransfer = getBalanceBank(userAddress);
require(amountToTransfer < totalContractBalance,"insufficient funds on bank");
withdrawTo.transfer(amountToTransfer);
totalContractBalance = totalContractBalance - amountToTransfer;
balances[userAddress] = 0;
}
function withdrawAmount(uint amount,address userAddress) public payable{
address payable withdrawTo = payable(userAddress);
require(amount < getBalanceBank(userAddress),"insufficient funds on user account");
withdrawTo.transfer(amount);
balances[userAddress] -= amount;
totalContractBalance -= amount;
}
function addMoneyToContract() public payable {
totalContractBalance += msg.value;
}
}
@parroz4