AlkemiEarnVerified.sol

View Source: contracts/AlkemiEarnVerified.sol

↗ Extends: Exponential, SafeToken

Structs

Balance

struct Balance {
 uint256 principal,
 uint256 interestIndex
}

Market

struct Market {
 bool isSupported,
 uint256 blockNumber,
 contract InterestRateModel interestRateModel,
 uint256 totalSupply,
 uint256 supplyRateMantissa,
 uint256 supplyIndex,
 uint256 totalBorrows,
 uint256 borrowRateMantissa,
 uint256 borrowIndex
}

SupplyLocalVars

WithdrawLocalVars

AccountValueLocalVars

PayBorrowLocalVars

BorrowLocalVars

LiquidateLocalVars

Contract Members

Constants & Variables

Events

Modifiers

  • onlyOwner

  • onlyCustomerWithKYC

  • nonReentrant

onlyOwner

Modifier to check if the caller is the admin of the contract

Arguments

Name

Type

Description

onlyCustomerWithKYC

Modifier to check if the caller is KYC verified

Arguments

Name

Type

Description

nonReentrant

Prevents a contract from calling itself, directly or indirectly. If you mark a function nonReentrant, you should also mark it external. Calling one nonReentrant function from another is not supported. Instead, you can implement a private function doing the actual work, and an external wrapper marked as nonReentrant.

Arguments

Name

Type

Description

Functions

  • initializer()

  • ()

  • _changeKYCAdmin(address KYCAdmin, bool newStatus)

  • _changeCustomerKYC(address customer, bool newStatus)

  • _changeLiquidator(address liquidator, bool newStatus)

  • min(uint256 a, uint256 b)

  • addCollateralMarket(address asset)

  • calculateInterestIndex(uint256 startingInterestIndex, uint256 interestRateMantissa, uint256 blockStart, uint256 blockEnd)

  • calculateBalance(uint256 startingBalance, uint256 interestIndexStart, uint256 interestIndexEnd)

  • getPriceForAssetAmount(address asset, uint256 assetAmount, bool mulCollatRatio)

  • calculateBorrowAmountWithFee(uint256 borrowAmount)

  • fetchAssetPrice(address asset)

  • assetPrices(address asset)

  • getAssetAmountForValue(address asset, struct Exponential.Exp ethValue)

  • _adminFunctions(address newPendingAdmin, address newOracle, bool requestedState, uint256 originationFeeMantissa, uint256 newCloseFactorMantissa, address wethContractAddress, address _rewardControl)

  • _acceptAdmin()

  • getAccountLiquidity(address account)

  • getSupplyBalance(address account, address asset)

  • getBorrowBalance(address account, address asset)

  • _supportMarket(address asset, InterestRateModel interestRateModel)

  • _suspendMarket(address asset)

  • _setRiskParameters(uint256 collateralRatioMantissa, uint256 liquidationDiscountMantissa)

  • _setMarketInterestRateModel(address asset, InterestRateModel interestRateModel)

  • _withdrawEquity(address asset, uint256 amount)

  • supplyEther(uint256 etherAmount)

  • revertEtherToUser(address user, uint256 etherAmount)

  • supply(address asset, uint256 amount)

  • withdrawEther(address user, uint256 etherAmount)

  • withdraw(address asset, uint256 requestedAmount)

  • calculateAccountLiquidity(address userAddress)

  • calculateAccountValuesInternal(address userAddress)

  • calculateAccountValues(address userAddress)

  • repayBorrow(address asset, uint256 amount)

  • liquidateBorrow(address targetAccount, address assetBorrow, address assetCollateral, uint256 requestedAmountClose)

  • calculateDiscountedRepayToEvenAmount(address targetAccount, struct Exponential.Exp underwaterAssetPrice, address assetBorrow)

  • calculateDiscountedBorrowDenominatedCollateral(struct Exponential.Exp underwaterAssetPrice, struct Exponential.Exp collateralPrice, uint256 supplyCurrent_TargetCollateralAsset)

  • calculateAmountSeize(struct Exponential.Exp underwaterAssetPrice, struct Exponential.Exp collateralPrice, uint256 closeBorrowAmount_TargetUnderwaterAsset)

  • borrow(address asset, uint256 amount)

  • supplyOriginationFeeAsAdmin(address asset, address user, uint256 amount, uint256 newSupplyIndex)

  • refreshAlkIndex(address market, address user, bool isSupply, bool isVerified)

  • getMarketBalances(address asset)

  • revertIfError(enum ErrorReporter.Error err)

initializer

AlkemiEarnVerified is the core contract

Arguments

Name

Type

Description

Do not pay directly into AlkemiEarnVerified, please use supply.

Arguments

Name

Type

Description

_changeKYCAdmin

Function for use by the admin of the contract to add or remove KYC Admins

Arguments

Name

Type

Description

KYCAdmin

address

newStatus

bool

_changeCustomerKYC

Function for use by the KYC admins to add or remove KYC Customers

Arguments

Name

Type

Description

customer

address

newStatus

bool

_changeLiquidator

Function for use by the admin of the contract to add or remove Liquidators

Arguments

Name

Type

Description

liquidator

address

newStatus

bool

min

Simple function to calculate min between two numbers.

Arguments

Name

Type

Description

a

uint256

b

uint256

addCollateralMarket

Adds a given asset to the list of collateral markets. This operation is impossible to reverse. Note: this will not add the asset if it already exists.

Arguments

Name

Type

Description

asset

address

calculateInterestIndex

Calculates a new supply index based on the prevailing interest rates applied over time This is defined as we multiply the most recent supply index by (1 + blocks times rate)

Returns

Return value is expressed in 1e18 scale

Arguments

Name

Type

Description

startingInterestIndex

uint256

interestRateMantissa

uint256

blockStart

uint256

blockEnd

uint256

calculateBalance

Calculates a new balance based on a previous balance and a pair of interest indices This is defined as: The user's last balance checkpoint is multiplied by the currentSupplyIndex value and divided by the user's checkpoint index value

Returns

Return value is expressed in 1e18 scale

Arguments

Name

Type

Description

startingBalance

uint256

interestIndexStart

uint256

interestIndexEnd

uint256

getPriceForAssetAmount

Gets the price for the amount specified of the given asset.

Returns

Return value is expressed in a magnified scale per token decimals

Arguments

Name

Type

Description

asset

address

assetAmount

uint256

mulCollatRatio

bool

calculateBorrowAmountWithFee

Calculates the origination fee added to a given borrowAmount This is simply (1 + originationFee) * borrowAmount

Returns

Return value is expressed in 1e18 scale

Arguments

Name

Type

Description

borrowAmount

uint256

fetchAssetPrice

fetches the price of asset from the PriceOracle and converts it to Exp

Returns

Return value is expressed in a magnified scale per token decimals

Arguments

Name

Type

Description

asset

address

asset whose price should be fetched

assetPrices

Reads scaled price of specified asset from the price oracle

Returns

0 on an error or missing price, the price scaled by 1e18 otherwise

Arguments

Name

Type

Description

asset

address

Asset whose price should be retrieved

getAssetAmountForValue

Gets the amount of the specified asset given the specified Eth value ethValue / oraclePrice = assetAmountWei If there's no oraclePrice, this returns (Error.DIVISION_BY_ZERO, 0)

Returns

Return value is expressed in a magnified scale per token decimals

Arguments

Name

Type

Description

asset

address

ethValue

struct Exponential.Exp

_adminFunctions

Admin Functions. The newPendingAdmin must call _acceptAdmin to finalize the transfer.

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

newPendingAdmin

address

New pending admin

newOracle

address

New oracle address

requestedState

bool

value to assign to paused

originationFeeMantissa

uint256

rational collateral ratio, scaled by 1e18.

newCloseFactorMantissa

uint256

new Close Factor, scaled by 1e18

wethContractAddress

address

WETH Contract Address

_rewardControl

address

Reward Control Address

_acceptAdmin

Accepts transfer of admin rights. msg.sender must be pendingAdmin

Arguments

Name

Type

Description

getAccountLiquidity

returns the liquidity for given account. a positive result indicates ability to borrow, whereas a negative result indicates a shortfall which may be liquidated

Returns

signed integer in terms of eth-wei (negative indicates a shortfall)

Arguments

Name

Type

Description

account

address

the account to examine

getSupplyBalance

return supply balance with any accumulated interest for asset belonging to account

Returns

uint supply balance on success, throws on failed assertion otherwise

Arguments

Name

Type

Description

account

address

the account to examine

asset

address

the market asset whose supply balance belonging to account should be checked

getBorrowBalance

return borrow balance with any accumulated interest for asset belonging to account

Returns

uint borrow balance on success, throws on failed assertion otherwise

Arguments

Name

Type

Description

account

address

the account to examine

asset

address

the market asset whose borrow balance belonging to account should be checked

_supportMarket

Supports a given market (asset) for use

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

Asset to support; MUST already have a non-zero price set

interestRateModel

InterestRateModel

InterestRateModel to use for the asset

_suspendMarket

Suspends a given supported market (asset) from use. Assets in this state do count for collateral, but users may only withdraw, payBorrow, and liquidate the asset. The liquidate function no longer checks collateralization.

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

Asset to suspend

_setRiskParameters

Sets the risk parameters: collateral ratio and liquidation discount

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

collateralRatioMantissa

uint256

rational collateral ratio, scaled by 1e18. The de-scaled value must be >= 1.1

liquidationDiscountMantissa

uint256

rational liquidation discount, scaled by 1e18. The de-scaled value must be <= 0.1 and must be less than (descaled collateral ratio minus 1)

_setMarketInterestRateModel

Sets the interest rate model for a given market

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

Asset to support

interestRateModel

InterestRateModel

_withdrawEquity

withdraws amount of asset from equity for asset, as long as amount <= equity. Equity = cash + borrows - supply

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

asset whose equity should be withdrawn

amount

uint256

amount of equity to withdraw; must not exceed equity available

supplyEther

Convert Ether supplied by user into WETH tokens and then supply corresponding WETH to user

Returns

errors if any

Arguments

Name

Type

Description

etherAmount

uint256

Amount of ether to be converted to WETH

revertEtherToUser

Revert Ether paid by user back to user's account in case transaction fails due to some other reason

Arguments

Name

Type

Description

user

address

User account address

etherAmount

uint256

Amount of ether to be sent back to user

supply

supply amount of asset (which must be supported) to msg.sender in the protocol

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

The market asset to supply

amount

uint256

The amount to supply

withdrawEther

withdraw amount of ether from sender's account to sender's address

Arguments

Name

Type

Description

user

address

User account address

etherAmount

uint256

Amount of ether to be converted to WETH

withdraw

withdraw amount of asset from sender's account to sender's address

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

The market asset to withdraw

requestedAmount

uint256

The amount to withdraw (or -1 for max)

calculateAccountLiquidity

Gets the user's account liquidity and account shortfall balances. This includes any accumulated interest thus far but does NOT actually update anything in storage, it simply calculates the account liquidity and shortfall with liquidity being returned as the first Exp, ie (Error, accountLiquidity, accountShortfall).

Returns

Return values are expressed in 1e18 scale

Arguments

Name

Type

Description

userAddress

address

calculateAccountValuesInternal

Gets the ETH values of the user's accumulated supply and borrow balances, scaled by 10e18. This includes any accumulated interest thus far but does NOT actually update anything in storage

Returns

(error code, sum ETH value of supplies scaled by 10e18, sum ETH value of borrows scaled by 10e18)

Arguments

Name

Type

Description

userAddress

address

account for which to sum values

calculateAccountValues

Gets the ETH values of the user's accumulated supply and borrow balances, scaled by 10e18. This includes any accumulated interest thus far but does NOT actually update anything in storage

Returns

(uint 0=success; otherwise a failure (see ErrorReporter.sol for details), sum ETH value of supplies scaled by 10e18, sum ETH value of borrows scaled by 10e18)

Arguments

Name

Type

Description

userAddress

address

account for which to sum values

repayBorrow

Users repay borrowed assets from their own address to the protocol.

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

The market asset to repay

amount

uint256

The amount to repay (or -1 for max)

liquidateBorrow

users repay all or some of an underwater borrow and receive collateral

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

targetAccount

address

The account whose borrow should be liquidated

assetBorrow

address

The market asset to repay

assetCollateral

address

The borrower's market asset to receive in exchange

requestedAmountClose

uint256

The amount to repay (or -1 for max)

calculateDiscountedRepayToEvenAmount

This should ONLY be called if market is supported. It returns shortfall / [Oracle price for the borrow * (collateralRatio - liquidationDiscount - 1)] If the market isn't supported, we support liquidation of asset regardless of shortfall because we want borrows of the unsupported asset to be closed. Note that if collateralRatio = liquidationDiscount + 1, then the denominator will be zero and the function will fail with DIVISION_BY_ZERO.

Returns

Return values are expressed in 1e18 scale

Arguments

Name

Type

Description

targetAccount

address

underwaterAssetPrice

struct Exponential.Exp

assetBorrow

address

calculateDiscountedBorrowDenominatedCollateral

discountedBorrowDenominatedCollateral = [supplyCurrent / (1 + liquidationDiscount)] * (Oracle price for the collateral / Oracle price for the borrow)

Returns

Return values are expressed in 1e18 scale

Arguments

Name

Type

Description

underwaterAssetPrice

struct Exponential.Exp

collateralPrice

struct Exponential.Exp

supplyCurrent_TargetCollateralAsset

uint256

calculateAmountSeize

returns closeBorrowAmount_TargetUnderwaterAsset (1+liquidationDiscount) priceBorrow/priceCollateral

Returns

Return values are expressed in 1e18 scale

Arguments

Name

Type

Description

underwaterAssetPrice

struct Exponential.Exp

collateralPrice

struct Exponential.Exp

closeBorrowAmount_TargetUnderwaterAsset

uint256

borrow

Users borrow assets from the protocol to their own address

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

The market asset to borrow

amount

uint256

The amount to borrow

supplyOriginationFeeAsAdmin

supply amount of asset (which must be supported) to admin in the protocol

Returns

uint 0=success, otherwise a failure (see ErrorReporter.sol for details)

Arguments

Name

Type

Description

asset

address

The market asset to supply

user

address

amount

uint256

The amount to supply

newSupplyIndex

uint256

refreshAlkIndex

Trigger the underlying Reward Control contract to accrue ALK supply rewards for the supplier on the specified market

Arguments

Name

Type

Description

market

address

The address of the market to accrue rewards

user

address

The address of the supplier/borrower to accrue rewards

isSupply

bool

Specifies if Supply or Borrow Index need to be updated

isVerified

bool

Verified / Public protocol

getMarketBalances

Get supply and borrows for a market

Returns

updated supply and borrows

Arguments

Name

Type

Description

asset

address

The market asset to find balances of

revertIfError

Function to revert in case of an internal exception

Arguments

Name

Type

Description

err

enum ErrorReporter.Error

Last updated

Was this helpful?