github.com/cwntr/go-defi@v0.0.0-20210629134751-07f9ec2f7e66/contracts/handlers/compound/HCether.sol (about) 1 pragma solidity ^0.5.0; 2 3 import "../../Config.sol"; 4 import "../../lib/libCache.sol"; 5 import "../../Cache.sol"; 6 import "../../lib/libCache.sol"; 7 import "./ICEther.sol"; 8 import "../HandlerBase.sol"; 9 import "@openzeppelin/contracts/utils/Address.sol"; 10 import "@openzeppelin/contracts/math/SafeMath.sol"; 11 import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; 12 import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; 13 14 contract HCEther is HandlerBase { 15 using SafeERC20 for IERC20; 16 17 address public constant CETHER = 0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5; 18 19 function mint(uint256 value) external payable { 20 ICEther compound = ICEther(CETHER); 21 compound.mint.value(value)(); 22 23 // Update involved token 24 _updateToken(CETHER); 25 } 26 27 function redeem(uint256 redeemTokens) external payable { 28 ICEther compound = ICEther(CETHER); 29 IERC20(CETHER).safeApprove(CETHER, redeemTokens); 30 require(compound.redeem(redeemTokens) == 0, "compound redeem failed"); 31 IERC20(CETHER).safeApprove(CETHER, 0); 32 } 33 34 function redeemUnderlying(uint256 redeemAmount) external payable { 35 ICEther compound = ICEther(CETHER); 36 IERC20(CETHER).safeApprove( 37 CETHER, 38 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 39 ); 40 require( 41 compound.redeemUnderlying(redeemAmount) == 0, 42 "compound redeem underlying failed" 43 ); 44 IERC20(CETHER).safeApprove(CETHER, 0); 45 } 46 47 function repayBorrowBehalf(uint256 amount, address borrower) 48 external 49 payable 50 { 51 ICEther compound = ICEther(CETHER); 52 uint256 debt = compound.borrowBalanceCurrent(borrower); 53 if (amount < debt) debt = amount; 54 compound.repayBorrowBehalf.value(debt)(borrower); 55 } 56 }