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  }