Created
August 30, 2021 13:00
-
-
Save prtk418/7207fb1f0524b1ac2d1f90e53cb4b717 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 ceth.balanceOf(userAddress) / ceth.exchangeRateStored(); | |
} | |
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