Skip to content

Instantly share code, notes, and snippets.

@madhavanmalolan
Created August 10, 2021 06:29
Show Gist options
  • Save madhavanmalolan/5759b84ed4a1402b66021358d7295396 to your computer and use it in GitHub Desktop.
Save madhavanmalolan/5759b84ed4a1402b66021358d7295396 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.4+commit.c7e474f2.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)) + 1; //simple interest of 0.07% 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