Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.41 KB | None | 0 0
  1. pragma solidity 0.5.10;
  2.  
  3. contract ComptrollerErrorReporter {
  4. enum Error {
  5. NO_ERROR,
  6. UNAUTHORIZED,
  7. COMPTROLLER_MISMATCH,
  8. INSUFFICIENT_SHORTFALL,
  9. INSUFFICIENT_LIQUIDITY,
  10. INVALID_CLOSE_FACTOR,
  11. INVALID_COLLATERAL_FACTOR,
  12. INVALID_LIQUIDATION_INCENTIVE,
  13. MARKET_NOT_ENTERED,
  14. MARKET_NOT_LISTED,
  15. MARKET_ALREADY_LISTED,
  16. MATH_ERROR,
  17. NONZERO_BORROW_BALANCE,
  18. PRICE_ERROR,
  19. REJECTION,
  20. SNAPSHOT_ERROR,
  21. TOO_MANY_ASSETS,
  22. TOO_MUCH_REPAY
  23. }
  24.  
  25. enum FailureInfo {
  26. ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
  27. ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK,
  28. EXIT_MARKET_BALANCE_OWED,
  29. EXIT_MARKET_REJECTION,
  30. SET_CLOSE_FACTOR_OWNER_CHECK,
  31. SET_CLOSE_FACTOR_VALIDATION,
  32. SET_COLLATERAL_FACTOR_OWNER_CHECK,
  33. SET_COLLATERAL_FACTOR_NO_EXISTS,
  34. SET_COLLATERAL_FACTOR_VALIDATION,
  35. SET_COLLATERAL_FACTOR_WITHOUT_PRICE,
  36. SET_IMPLEMENTATION_OWNER_CHECK,
  37. SET_LIQUIDATION_INCENTIVE_OWNER_CHECK,
  38. SET_LIQUIDATION_INCENTIVE_VALIDATION,
  39. SET_MAX_ASSETS_OWNER_CHECK,
  40. SET_PENDING_ADMIN_OWNER_CHECK,
  41. SET_PENDING_IMPLEMENTATION_OWNER_CHECK,
  42. SET_PRICE_ORACLE_OWNER_CHECK,
  43. SUPPORT_MARKET_EXISTS,
  44. SUPPORT_MARKET_OWNER_CHECK,
  45. ZUNUSED
  46. }
  47.  
  48. /**
  49. * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary
  50. * contract-specific code that enables us to report opaque error codes from upgradeable contracts.
  51. **/
  52. event Failure(uint256 error, uint256 info, uint256 detail);
  53.  
  54. /**
  55. * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator
  56. */
  57. function fail(Error err, FailureInfo info) internal returns (uint256) {
  58. emit Failure(uint256(err), uint256(info), 0);
  59.  
  60. return uint256(err);
  61. }
  62.  
  63. /**
  64. * @dev use this when reporting an opaque error from an upgradeable collaborator contract
  65. */
  66. function failOpaque(Error err, FailureInfo info, uint256 opaqueError) internal returns (uint256) {
  67. emit Failure(uint256(err), uint256(info), opaqueError);
  68.  
  69. return uint256(err);
  70. }
  71. }
  72.  
  73. contract TokenErrorReporter {
  74. enum Error {
  75. NO_ERROR,
  76. UNAUTHORIZED,
  77. BAD_INPUT,
  78. COMPTROLLER_REJECTION,
  79. COMPTROLLER_CALCULATION_ERROR,
  80. INTEREST_RATE_MODEL_ERROR,
  81. INVALID_ACCOUNT_PAIR,
  82. INVALID_CLOSE_AMOUNT_REQUESTED,
  83. INVALID_COLLATERAL_FACTOR,
  84. MATH_ERROR,
  85. MARKET_NOT_FRESH,
  86. MARKET_NOT_LISTED,
  87. TOKEN_INSUFFICIENT_ALLOWANCE,
  88. TOKEN_INSUFFICIENT_BALANCE,
  89. TOKEN_INSUFFICIENT_CASH,
  90. TOKEN_TRANSFER_IN_FAILED,
  91. TOKEN_TRANSFER_OUT_FAILED
  92. }
  93.  
  94. /*
  95. * Note: FailureInfo (but not Error) is kept in alphabetical order
  96. * This is because FailureInfo grows significantly faster, and
  97. * the order of Error has some meaning, while the order of FailureInfo
  98. * is entirely arbitrary.
  99. */
  100. enum FailureInfo {
  101. ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
  102. ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED,
  103. ACCRUE_INTEREST_BORROW_RATE_CALCULATION_FAILED,
  104. ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED,
  105. ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED,
  106. ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED,
  107. ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED,
  108. BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,
  109. BORROW_ACCRUE_INTEREST_FAILED,
  110. BORROW_CASH_NOT_AVAILABLE,
  111. BORROW_FRESHNESS_CHECK,
  112. BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,
  113. BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED,
  114. BORROW_MARKET_NOT_LISTED,
  115. BORROW_COMPTROLLER_REJECTION,
  116. LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED,
  117. LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED,
  118. LIQUIDATE_COLLATERAL_FRESHNESS_CHECK,
  119. LIQUIDATE_COMPTROLLER_REJECTION,
  120. LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED,
  121. LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX,
  122. LIQUIDATE_CLOSE_AMOUNT_IS_ZERO,
  123. LIQUIDATE_FRESHNESS_CHECK,
  124. LIQUIDATE_LIQUIDATOR_IS_BORROWER,
  125. LIQUIDATE_REPAY_BORROW_FRESH_FAILED,
  126. LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED,
  127. LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED,
  128. LIQUIDATE_SEIZE_COMPTROLLER_REJECTION,
  129. LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER,
  130. LIQUIDATE_SEIZE_TOO_MUCH,
  131. MINT_ACCRUE_INTEREST_FAILED,
  132. MINT_COMPTROLLER_REJECTION,
  133. MINT_EXCHANGE_CALCULATION_FAILED,
  134. MINT_EXCHANGE_RATE_READ_FAILED,
  135. MINT_FRESHNESS_CHECK,
  136. MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED,
  137. MINT_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,
  138. MINT_TRANSFER_IN_FAILED,
  139. MINT_TRANSFER_IN_NOT_POSSIBLE,
  140. REDEEM_ACCRUE_INTEREST_FAILED,
  141. REDEEM_COMPTROLLER_REJECTION,
  142. REDEEM_EXCHANGE_TOKENS_CALCULATION_FAILED,
  143. REDEEM_EXCHANGE_AMOUNT_CALCULATION_FAILED,
  144. REDEEM_EXCHANGE_RATE_READ_FAILED,
  145. REDEEM_FRESHNESS_CHECK,
  146. REDEEM_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED,
  147. REDEEM_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,
  148. REDEEM_TRANSFER_OUT_NOT_POSSIBLE,
  149. REDUCE_RESERVES_ACCRUE_INTEREST_FAILED,
  150. REDUCE_RESERVES_ADMIN_CHECK,
  151. REDUCE_RESERVES_CASH_NOT_AVAILABLE,
  152. REDUCE_RESERVES_FRESH_CHECK,
  153. REDUCE_RESERVES_VALIDATION,
  154. REPAY_BEHALF_ACCRUE_INTEREST_FAILED,
  155. REPAY_BORROW_ACCRUE_INTEREST_FAILED,
  156. REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,
  157. REPAY_BORROW_COMPTROLLER_REJECTION,
  158. REPAY_BORROW_FRESHNESS_CHECK,
  159. REPAY_BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED,
  160. REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,
  161. REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE,
  162. SET_COLLATERAL_FACTOR_OWNER_CHECK,
  163. SET_COLLATERAL_FACTOR_VALIDATION,
  164. SET_COMPTROLLER_OWNER_CHECK,
  165. SET_INTEREST_RATE_MODEL_ACCRUE_INTEREST_FAILED,
  166. SET_INTEREST_RATE_MODEL_FRESH_CHECK,
  167. SET_INTEREST_RATE_MODEL_OWNER_CHECK,
  168. SET_MAX_ASSETS_OWNER_CHECK,
  169. SET_ORACLE_MARKET_NOT_LISTED,
  170. SET_PENDING_ADMIN_OWNER_CHECK,
  171. SET_RESERVE_FACTOR_ACCRUE_INTEREST_FAILED,
  172. SET_RESERVE_FACTOR_ADMIN_CHECK,
  173. SET_RESERVE_FACTOR_FRESH_CHECK,
  174. SET_RESERVE_FACTOR_BOUNDS_CHECK,
  175. TRANSFER_COMPTROLLER_REJECTION,
  176. TRANSFER_NOT_ALLOWED,
  177. TRANSFER_NOT_ENOUGH,
  178. TRANSFER_TOO_MUCH
  179. }
  180.  
  181. /**
  182. * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary
  183. * contract-specific code that enables us to report opaque error codes from upgradeable contracts.
  184. **/
  185. event Failure(uint256 error, uint256 info, uint256 detail);
  186.  
  187. /**
  188. * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator
  189. */
  190. function fail(Error err, FailureInfo info) internal returns (uint256) {
  191. emit Failure(uint256(err), uint256(info), 0);
  192.  
  193. return uint256(err);
  194. }
  195.  
  196. /**
  197. * @dev use this when reporting an opaque error from an upgradeable collaborator contract
  198. */
  199. function failOpaque(Error err, FailureInfo info, uint256 opaqueError) internal returns (uint256) {
  200. emit Failure(uint256(err), uint256(info), opaqueError);
  201.  
  202. return uint256(err);
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement