Created
September 7, 2021 09:03
-
-
Save madhavanmalolan/c2b6e762992683af636ef1430bdf7463 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=
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity >=0.7.0 <0.9.0; | |
interface cETH { | |
// define functions of COMPOUND we'll be using | |
function mint() external payable; // to deposit to compound | |
function redeem(uint redeemTokens) external returns (uint); // to withdraw from compound | |
//following 2 functions to determine how much you'll be able to withdraw | |
function exchangeRateStored() external view returns (uint); | |
function balanceOf(address owner) external view returns (uint256 balance); | |
} | |
contract SmartBankAccount { | |
uint totalContractBalance = 0; | |
address COMPOUND_CETH_ADDRESS = 0x859e9d8a4edadfEDb5A2fF311243af80F85A91b8; | |
cETH ceth = cETH(COMPOUND_CETH_ADDRESS); | |
function getContractBalance() public view 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; | |
// send ethers to mint() | |
ceth.mint{value: msg.value}(); | |
} | |
function getBalance(address userAddress) public view returns(uint256) { | |
return balances[userAddress] * ceth.exchangeRateStored() / 1e18; | |
} | |
function withdraw() public payable { | |
//CAN YOU OPTIMIZE THIS FUNCTION TO HAVE FEWER LINES OF CODE? | |
address payable withdrawTo = payable(msg.sender); | |
uint amountToTransfer = getBalance(msg.sender); | |
totalContractBalance = totalContractBalance - amountToTransfer; | |
balances[msg.sender] = 0; | |
ceth.redeem(getBalance(msg.sender)); | |
} | |
function addMoneyToContract() public payable { | |
totalContractBalance += msg.value; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment