pragma solidity ^0.5.8; interface ComptrollerInterface { /** * @notice Marker function used for light validation when updating the comptroller of a market * @dev Implementations should simply return true. * @return true */ function isComptroller() external view returns (bool); /*** Assets You Are In ***/ function enterMarkets(address[] calldata cTokens) external returns (uint256[] memory); function exitMarket(address cToken) external returns (uint256); /*** Policy Hooks ***/ function mintAllowed(address cToken, address minter, uint256 mintAmount) external returns (uint256); function mintVerify(address cToken, address minter, uint256 mintAmount, uint256 mintTokens) external; function redeemAllowed(address cToken, address redeemer, uint256 redeemTokens) external returns (uint256); function redeemVerify(address cToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external; function borrowAllowed(address cToken, address borrower, uint256 borrowAmount) external returns (uint256); function borrowVerify(address cToken, address borrower, uint256 borrowAmount) external; function repayBorrowAllowed(address cToken, address payer, address borrower, uint256 repayAmount) external returns (uint256); function repayBorrowVerify( address cToken, address payer, address borrower, uint256 repayAmount, uint256 borrowerIndex ) external; function liquidateBorrowAllowed( address cTokenBorrowed, address cTokenCollateral, address liquidator, address borrower, uint256 repayAmount ) external returns (uint256); function liquidateBorrowVerify( address cTokenBorrowed, address cTokenCollateral, address liquidator, address borrower, uint256 repayAmount, uint256 seizeTokens ) external; function seizeAllowed( address cTokenCollateral, address cTokenBorrowed, address liquidator, address borrower, uint256 seizeTokens ) external returns (uint256); function seizeVerify( address cTokenCollateral, address cTokenBorrowed, address liquidator, address borrower, uint256 seizeTokens ) external; function transferAllowed(address cToken, address src, address dst, uint256 transferTokens) external returns (uint256); function transferVerify(address cToken, address src, address dst, uint256 transferTokens) external; /*** Liquidity/Liquidation Calculations ***/ function liquidateCalculateSeizeTokens(address cTokenBorrowed, address cTokenCollateral, uint256 repayAmount) external view returns (uint256, uint256); }