162 lines
6.7 KiB
Solidity
162 lines
6.7 KiB
Solidity
pragma solidity ^0.4.18;
|
|
|
|
contract ErrorReporter {
|
|
|
|
/**
|
|
* @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary
|
|
* contract-specific code that enables us to report opaque error codes from upgradeable contracts.
|
|
**/
|
|
event Failure(uint error, uint info, uint detail);
|
|
|
|
enum Error {
|
|
NO_ERROR,
|
|
OPAQUE_ERROR, // To be used when reporting errors from upgradeable contracts; the opaque code should be given as `detail` in the `Failure` event
|
|
UNAUTHORIZED,
|
|
INTEGER_OVERFLOW,
|
|
INTEGER_UNDERFLOW,
|
|
DIVISION_BY_ZERO,
|
|
BAD_INPUT,
|
|
TOKEN_INSUFFICIENT_ALLOWANCE,
|
|
TOKEN_INSUFFICIENT_BALANCE,
|
|
TOKEN_TRANSFER_FAILED,
|
|
MARKET_NOT_SUPPORTED,
|
|
SUPPLY_RATE_CALCULATION_FAILED,
|
|
BORROW_RATE_CALCULATION_FAILED,
|
|
TOKEN_INSUFFICIENT_CASH,
|
|
TOKEN_TRANSFER_OUT_FAILED,
|
|
INSUFFICIENT_LIQUIDITY,
|
|
INSUFFICIENT_BALANCE,
|
|
INVALID_COLLATERAL_RATIO,
|
|
MISSING_ASSET_PRICE,
|
|
EQUITY_INSUFFICIENT_BALANCE,
|
|
INVALID_CLOSE_AMOUNT_REQUESTED,
|
|
ASSET_NOT_PRICED,
|
|
INVALID_LIQUIDATION_DISCOUNT,
|
|
INVALID_COMBINED_RISK_PARAMETERS,
|
|
ZERO_ORACLE_ADDRESS,
|
|
CONTRACT_PAUSED
|
|
}
|
|
|
|
/*
|
|
* Note: FailureInfo (but not Error) is kept in alphabetical order
|
|
* This is because FailureInfo grows significantly faster, and
|
|
* the order of Error has some meaning, while the order of FailureInfo
|
|
* is entirely arbitrary.
|
|
*/
|
|
enum FailureInfo {
|
|
ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
|
|
BORROW_ACCOUNT_LIQUIDITY_CALCULATION_FAILED,
|
|
BORROW_ACCOUNT_SHORTFALL_PRESENT,
|
|
BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,
|
|
BORROW_AMOUNT_LIQUIDITY_SHORTFALL,
|
|
BORROW_AMOUNT_VALUE_CALCULATION_FAILED,
|
|
BORROW_CONTRACT_PAUSED,
|
|
BORROW_MARKET_NOT_SUPPORTED,
|
|
BORROW_NEW_BORROW_INDEX_CALCULATION_FAILED,
|
|
BORROW_NEW_BORROW_RATE_CALCULATION_FAILED,
|
|
BORROW_NEW_SUPPLY_INDEX_CALCULATION_FAILED,
|
|
BORROW_NEW_SUPPLY_RATE_CALCULATION_FAILED,
|
|
BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,
|
|
BORROW_NEW_TOTAL_BORROW_CALCULATION_FAILED,
|
|
BORROW_NEW_TOTAL_CASH_CALCULATION_FAILED,
|
|
BORROW_ORIGINATION_FEE_CALCULATION_FAILED,
|
|
BORROW_TRANSFER_OUT_FAILED,
|
|
EQUITY_WITHDRAWAL_AMOUNT_VALIDATION,
|
|
EQUITY_WITHDRAWAL_CALCULATE_EQUITY,
|
|
EQUITY_WITHDRAWAL_MODEL_OWNER_CHECK,
|
|
EQUITY_WITHDRAWAL_TRANSFER_OUT_FAILED,
|
|
LIQUIDATE_ACCUMULATED_BORROW_BALANCE_CALCULATION_FAILED,
|
|
LIQUIDATE_ACCUMULATED_SUPPLY_BALANCE_CALCULATION_FAILED_BORROWER_COLLATERAL_ASSET,
|
|
LIQUIDATE_ACCUMULATED_SUPPLY_BALANCE_CALCULATION_FAILED_LIQUIDATOR_COLLATERAL_ASSET,
|
|
LIQUIDATE_AMOUNT_SEIZE_CALCULATION_FAILED,
|
|
LIQUIDATE_BORROW_DENOMINATED_COLLATERAL_CALCULATION_FAILED,
|
|
LIQUIDATE_CLOSE_AMOUNT_TOO_HIGH,
|
|
LIQUIDATE_CONTRACT_PAUSED,
|
|
LIQUIDATE_DISCOUNTED_REPAY_TO_EVEN_AMOUNT_CALCULATION_FAILED,
|
|
LIQUIDATE_NEW_BORROW_INDEX_CALCULATION_FAILED_BORROWED_ASSET,
|
|
LIQUIDATE_NEW_BORROW_INDEX_CALCULATION_FAILED_COLLATERAL_ASSET,
|
|
LIQUIDATE_NEW_BORROW_RATE_CALCULATION_FAILED_BORROWED_ASSET,
|
|
LIQUIDATE_NEW_SUPPLY_INDEX_CALCULATION_FAILED_BORROWED_ASSET,
|
|
LIQUIDATE_NEW_SUPPLY_INDEX_CALCULATION_FAILED_COLLATERAL_ASSET,
|
|
LIQUIDATE_NEW_SUPPLY_RATE_CALCULATION_FAILED_BORROWED_ASSET,
|
|
LIQUIDATE_NEW_TOTAL_BORROW_CALCULATION_FAILED_BORROWED_ASSET,
|
|
LIQUIDATE_NEW_TOTAL_CASH_CALCULATION_FAILED_BORROWED_ASSET,
|
|
LIQUIDATE_NEW_TOTAL_SUPPLY_BALANCE_CALCULATION_FAILED_BORROWER_COLLATERAL_ASSET,
|
|
LIQUIDATE_NEW_TOTAL_SUPPLY_BALANCE_CALCULATION_FAILED_LIQUIDATOR_COLLATERAL_ASSET,
|
|
LIQUIDATE_FETCH_ASSET_PRICE_FAILED,
|
|
LIQUIDATE_TRANSFER_IN_FAILED,
|
|
LIQUIDATE_TRANSFER_IN_NOT_POSSIBLE,
|
|
REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,
|
|
REPAY_BORROW_CONTRACT_PAUSED,
|
|
REPAY_BORROW_NEW_BORROW_INDEX_CALCULATION_FAILED,
|
|
REPAY_BORROW_NEW_BORROW_RATE_CALCULATION_FAILED,
|
|
REPAY_BORROW_NEW_SUPPLY_INDEX_CALCULATION_FAILED,
|
|
REPAY_BORROW_NEW_SUPPLY_RATE_CALCULATION_FAILED,
|
|
REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,
|
|
REPAY_BORROW_NEW_TOTAL_BORROW_CALCULATION_FAILED,
|
|
REPAY_BORROW_NEW_TOTAL_CASH_CALCULATION_FAILED,
|
|
REPAY_BORROW_TRANSFER_IN_FAILED,
|
|
REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE,
|
|
SET_ASSET_PRICE_CHECK_ORACLE,
|
|
SET_MARKET_INTEREST_RATE_MODEL_OWNER_CHECK,
|
|
SET_ORACLE_OWNER_CHECK,
|
|
SET_ORIGINATION_FEE_OWNER_CHECK,
|
|
SET_PAUSED_OWNER_CHECK,
|
|
SET_PENDING_ADMIN_OWNER_CHECK,
|
|
SET_RISK_PARAMETERS_OWNER_CHECK,
|
|
SET_RISK_PARAMETERS_VALIDATION,
|
|
SUPPLY_ACCUMULATED_BALANCE_CALCULATION_FAILED,
|
|
SUPPLY_CONTRACT_PAUSED,
|
|
SUPPLY_MARKET_NOT_SUPPORTED,
|
|
SUPPLY_NEW_BORROW_INDEX_CALCULATION_FAILED,
|
|
SUPPLY_NEW_BORROW_RATE_CALCULATION_FAILED,
|
|
SUPPLY_NEW_SUPPLY_INDEX_CALCULATION_FAILED,
|
|
SUPPLY_NEW_SUPPLY_RATE_CALCULATION_FAILED,
|
|
SUPPLY_NEW_TOTAL_BALANCE_CALCULATION_FAILED,
|
|
SUPPLY_NEW_TOTAL_CASH_CALCULATION_FAILED,
|
|
SUPPLY_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,
|
|
SUPPLY_TRANSFER_IN_FAILED,
|
|
SUPPLY_TRANSFER_IN_NOT_POSSIBLE,
|
|
SUPPORT_MARKET_FETCH_PRICE_FAILED,
|
|
SUPPORT_MARKET_OWNER_CHECK,
|
|
SUPPORT_MARKET_PRICE_CHECK,
|
|
SUSPEND_MARKET_OWNER_CHECK,
|
|
WITHDRAW_ACCOUNT_LIQUIDITY_CALCULATION_FAILED,
|
|
WITHDRAW_ACCOUNT_SHORTFALL_PRESENT,
|
|
WITHDRAW_ACCUMULATED_BALANCE_CALCULATION_FAILED,
|
|
WITHDRAW_AMOUNT_LIQUIDITY_SHORTFALL,
|
|
WITHDRAW_AMOUNT_VALUE_CALCULATION_FAILED,
|
|
WITHDRAW_CAPACITY_CALCULATION_FAILED,
|
|
WITHDRAW_CONTRACT_PAUSED,
|
|
WITHDRAW_NEW_BORROW_INDEX_CALCULATION_FAILED,
|
|
WITHDRAW_NEW_BORROW_RATE_CALCULATION_FAILED,
|
|
WITHDRAW_NEW_SUPPLY_INDEX_CALCULATION_FAILED,
|
|
WITHDRAW_NEW_SUPPLY_RATE_CALCULATION_FAILED,
|
|
WITHDRAW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,
|
|
WITHDRAW_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,
|
|
WITHDRAW_TRANSFER_OUT_FAILED,
|
|
WITHDRAW_TRANSFER_OUT_NOT_POSSIBLE
|
|
}
|
|
|
|
|
|
/**
|
|
* @dev use this when reporting a known error
|
|
*/
|
|
function fail(Error err, FailureInfo info) internal returns (uint) {
|
|
Failure(uint(err), uint(info), 0);
|
|
|
|
return uint(err);
|
|
}
|
|
|
|
|
|
/**
|
|
* @dev use this when reporting an opaque error from an upgradeable collaborator contract
|
|
*/
|
|
function failOpaque(FailureInfo info, uint opaqueError) internal returns (uint) {
|
|
Failure(uint(Error.OPAQUE_ERROR), uint(info), opaqueError);
|
|
|
|
return uint(Error.OPAQUE_ERROR);
|
|
}
|
|
|
|
}
|