> For the complete documentation index, see [llms.txt](https://docs.alkemi.network/earn-contracts/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.alkemi.network/earn-contracts/docs/errorreporter.md).

# ErrorReporter.sol

View Source: [contracts/ErrorReporter.sol](https://github.com/AlkemiNetwork/alkemi-earn-contracts/tree/ae6d5c01ff8b3810c4005457ac7ce441ab1c7ec5/contracts/ErrorReporter.sol)

**↘ Derived Contracts:** [**CarefulMath**](/earn-contracts/docs/carefulmath.md)**,** [**Exponential**](/earn-contracts/docs/exponential.md)**,** [**Liquidator**](/earn-contracts/docs/liquidator.md)**,** [**SafeToken**](/earn-contracts/docs/safetoken.md)

**Enums**

#### Error

```javascript
enum Error {
 NO_ERROR,
 OPAQUE_ERROR,
 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,
 KYC_ADMIN_CHECK_FAILED,
 KYC_ADMIN_ADD_OR_DELETE_ADMIN_CHECK_FAILED,
 KYC_CUSTOMER_VERIFICATION_CHECK_FAILED,
 LIQUIDATOR_CHECK_FAILED,
 LIQUIDATOR_ADD_OR_DELETE_ADMIN_CHECK_FAILED,
 SET_WETH_ADDRESS_ADMIN_CHECK_FAILED,
 WETH_ADDRESS_NOT_SET_ERROR,
 ETHER_AMOUNT_MISMATCH_ERROR
}
```

#### FailureInfo

```javascript
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,
 KYC_ADMIN_CHECK_FAILED,
 KYC_ADMIN_ADD_OR_DELETE_ADMIN_CHECK_FAILED,
 KYC_CUSTOMER_VERIFICATION_CHECK_FAILED,
 LIQUIDATOR_CHECK_FAILED,
 LIQUIDATOR_ADD_OR_DELETE_ADMIN_CHECK_FAILED,
 SET_WETH_ADDRESS_ADMIN_CHECK_FAILED,
 WETH_ADDRESS_NOT_SET_ERROR,
 SEND_ETHER_ADMIN_CHECK_FAILED,
 ETHER_AMOUNT_MISMATCH_ERROR
}
```

**Events**

```javascript
event Failure(uint256  error, uint256  info, uint256  detail);
```

### Functions

* fail(enum ErrorReporter.Error err, enum ErrorReporter.FailureInfo info)
* failOpaque(enum ErrorReporter.FailureInfo info, uint256 opaqueError)

#### fail

use this when reporting a known error from the Alkemi Earn Verified or a non-upgradeable collaborator

```javascript
function fail(enum ErrorReporter.Error err, enum ErrorReporter.FailureInfo info) internal nonpayable
returns(uint256)
```

**Arguments**

| Name | Type                           | Description |
| ---- | ------------------------------ | ----------- |
| err  | enum ErrorReporter.Error       |             |
| info | enum ErrorReporter.FailureInfo |             |

#### failOpaque

use this when reporting an opaque error from an upgradeable collaborator contract

```javascript
function failOpaque(enum ErrorReporter.FailureInfo info, uint256 opaqueError) internal nonpayable
returns(uint256)
```

**Arguments**

| Name        | Type                           | Description |
| ----------- | ------------------------------ | ----------- |
| info        | enum ErrorReporter.FailureInfo |             |
| opaqueError | uint256                        |             |

|   |
| - |
