Skip to content

Instantly share code, notes, and snippets.

@madhavanmalolan
Created September 15, 2021 09:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madhavanmalolan/3555d7cca21a79acf36197d72e0c411f to your computer and use it in GitHub Desktop.
Save madhavanmalolan/3555d7cca21a79acf36197d72e0c411f to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.7+commit.e28d00a7.js&optimize=false&runs=200&gist=
pragma solidity >=0.7.0 <0.9.0;
contract SmartBankAccount {
uint totalContractBalance = 0;
function getContractBalance() public returns(uint){
return totalContractBalance;
}
mapping(address => uint) balances;
mapping(address => uint) depositTimestamps;
function addBalance() public payable {
balances[msg.sender] = msg.value;
totalContractBalance = totalContractBalance + msg.value;
depositTimestamps[msg.sender] = block.timestamp;
}
function getBalance(address userAddress) public returns(uint){
uint principal = balances[userAddress];
uint timeElapsed = block.timestamp - depositTimestamps[userAddress]; //seconds
return principal + uint((principal * 7 * timeElapsed) / (100 * 365 * 24 * 60 * 60)); //simple interest of 7% per year
}
function withdraw() public payable {
address payable withdrawTo = payable(msg.sender);
uint amountToTransfer = getBalance(msg.sender);
withdrawTo.transfer(amountToTransfer);
totalContractBalance = totalContractBalance - amountToTransfer;
balances[msg.sender] = 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment