Market
The Market is the main contract of the protocol. It exposes all user-oriented actions for fixed and variable borrows, deposits, repayments, and withdrawals.
The contract is also an ERC20 token itself. Following the ERC4626 standard, exaTokens
are minted to the user once he deposits underlying assets into the variable pool. These tokens are then burned once the underlying assets are withdrawn. If transferred, the variable deposit position is also transferred.
Public State Variables
accounts
Tracks fixed deposit and borrow map and floating borrow shares of an account.
asset
Address of underlying ERC20 asset.
auditor
Auditor contract that validates health factor of accounts that operate with this Market.
backupFeeRate
Rate charged to the fixed pool to be retained by the floating pool for initially providing liquidity.
dampSpeedDown
Damp speed factor to update floatingAssetsAverage
when floatingAssets
is lower.
dampSpeedUp
Damp speed factor to update floatingAssetsAverage
when floatingAssets
is higher.
earningsAccumulator
Accumulated earnings from extraordinary sources to be gradually distributed.
earningsAccumulatorSmoothFactor
Factor used for gradual accrual of earnings to the floating pool.
fixedBorrowPositions
Tracks account's fixed borrow positions by maturity, account and position.
fixedDepositPositions
Tracks account's fixed deposit positions by maturity, account and position.
fixedPools
Tracks fixed pools state by maturity.
floatingAssets
Amount of floating assets deposited to the pool.
floatingAssetsAverage
Average of the floating assets to get fixed borrow rates and prevent rate manipulation.
floatingBackupBorrowed
Amount of assets lent by the floating pool to the fixed pools.
floatingDebt
Amount of assets lent by the floating pool to accounts.
floatingUtilization
Current floating utilization used to get the new floating borrow rate.
interestRateModel
Interest rate model contract used to get the borrow rates.
lastAccumulatorAccrual
Last time the accumulator distributed earnings.
lastAverageUpdate
Last time the floating assets average was updated.
lastFloatingDebtUpdate
Last time the floating debt was updated.
maxFuturePools
Number of fixed pools to be active at the same time.
penaltyRate
Rate per second to be charged to delayed fixed pools borrowers after maturity.
reserveFactor
Percentage factor that represents the liquidity reserves that can't be borrowed.
treasury
Address of the treasury that will receive the allocated earnings.
treasuryFeeRate
Rate to be charged by the treasury to floating and fixed borrows.
View Methods
accountSnapshot
Gets current snapshot for an account across all maturities.
Parameters
Name | Type | Description |
---|---|---|
account | address | account to return status snapshot in the specified maturity date. |
Returns
Type | Description |
---|---|
uint256 | The amount of assets the account deposited to the floating pool |
uint256 | The amount of debt the account owes from fixed and floating borrows |
convertToAssets
Returns the amount of assets that would be exchanged by the pool for the amount of shares provided.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | amount of shares. |
Returns
Type | Description |
---|---|
uint256 | amount of exchanged assets. |
convertToShares
Returns the amount of shares that would be exchanged by the vault for the amount of assets provided.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | amount of assets. |
Returns
Type | Description |
---|---|
uint256 | amount of exchanged shares. |
maxRedeem
Returns the maximum amount of shares that can be redeem from the owner balance through a redeem call.
Parameters
Name | Type | Description |
---|---|---|
owner | address | owner of the shares. |
Returns
Type | Description |
---|---|
uint256 | max amount of redeemable shares. |
maxWithdraw
Returns the maximum amount of underlying assets that can be withdrawn from the owner balance with a single withdraw call.
Parameters
Name | Type | Description |
---|---|---|
owner | address | owner of the assets. |
Returns
Type | Description |
---|---|
uint256 | max amount of withdrawable assets. |
previewBorrow
Simulates the effects of a borrow at the current time, given current contract conditions.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | amount of assets to borrow. |
Returns
Type | Description |
---|---|
uint256 | amount of shares that will be assigned to the account after the borrow. |
previewDebt
Gets all borrows and penalties for an account.
Parameters
Name | Type | Description |
---|---|---|
borrower | address | account to return status snapshot for fixed and floating borrows. |
Returns
Name | Type | Description |
---|---|---|
debt | uint256 | the total debt, denominated in number of assets. |
previewDeposit
Allows users to simulate the effects of their deposit at the current block.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | assets to be deposited. |
Returns
Type | Description |
---|---|
uint256 | shares to receive in exchange of deposited assets. |
previewFloatingAssetsAverage
Gets the current floatingAssetsAverage
without updating the storage variable.
Returns
Type | Description |
---|---|
uint256 | projected |
previewMint
Allows users to simulate the effects of their mint at the current block.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | shares to be minted. |
Returns
Type | Description |
---|---|
uint256 | assets to deposit in exchange of minted shares. |
previewRedeem
Allows users to simulate the effects of their redemption at the current block.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | shares to be redeem. |
Returns
Type | Description |
---|---|
uint256 | assets to receive in exchange of burned shares. |
previewRefund
Simulates the effects of a refund at the current time, given current contract conditions.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | amount of shares to subtract from caller's accountability. |
Returns
Type | Description |
---|---|
uint256 | amount of assets that will be repaid. |
previewRepay
Simulates the effects of a repay at the current time, given current contract conditions.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | amount of assets to repay. |
Returns
Type | Description |
---|---|
uint256 | amount of shares that will be subtracted from the account after the repay. |
previewWithdraw
Allows users to simulate the effects of their withdrawal at the current block.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | assets to be withdrawn. |
Returns
Type | Description |
---|---|
uint256 | burned shares in exchange of withdrawn assets. |
totalAssets
Calculates the floating pool balance plus earnings to be accrued at current timestamp from maturities and accumulator.
Returns
Type | Description |
---|---|
uint256 | actual floatingAssets plus earnings to be accrued at current timestamp. |
totalFloatingBorrowAssets
Calculates the total floating debt, considering elapsed time since last update and current interest rate.
Returns
Type | Description |
---|---|
uint256 | actual floating debt plus projected interest. |
totalFloatingBorrowShares
Total amount of floating borrow shares assigned to floating borrow accounts.
Write Methods
borrow
Borrows a certain amount from the floating pool.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | amount to be sent to receiver and repaid by borrower. |
receiver | address | address that will receive the borrowed assets. |
borrower | address | address that will repay the borrowed assets. |
Returns
Name | Type | Description |
---|---|---|
borrowShares | uint256 | shares corresponding to the borrowed assets. |
borrowAtMaturity
Borrows a certain amount from a maturity.
Parameters
Name | Type | Description |
---|---|---|
maturity | uint256 | maturity date for repayment. |
assets | uint256 | amount to be sent to receiver and repaid by borrower. |
maxAssets | uint256 | maximum amount of debt that the account is willing to accept. |
receiver | address | address that will receive the borrowed assets. |
borrower | address | address that will repay the borrowed assets. |
Returns
Name | Type | Description |
---|---|---|
assetsOwed | uint256 | total amount of assets (principal + fee) to be repaid at maturity. |
clearBadDebt
Clears floating and fixed debt for an account spreading the losses to the earningsAccumulator
.
Can only be called from the auditor.
Parameters
Name | Type | Description |
---|---|---|
borrower | address | account with insufficient collateral to be cleared the debt. |
deposit
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | amount of assets to deposit. |
receiver | address | address of the account that will receive the minted shares. |
Returns
Name | Type | Description |
---|---|---|
shares | uint256 | amount of minted shares. |
depositAtMaturity
Deposits a certain amount to a maturity.
Parameters
Name | Type | Description |
---|---|---|
maturity | uint256 | maturity date where the assets will be deposited. |
assets | uint256 | amount to receive from the msg.sender. |
minAssetsRequired | uint256 | minimum amount of assets required by the depositor for the transaction to be accepted. |
receiver | address | address that will be able to withdraw the deposited assets. |
Returns
Name | Type | Description |
---|---|---|
positionAssets | uint256 | total amount of assets (principal + fee) to be withdrawn at maturity. |
liquidate
Liquidates undercollateralized position(s).
Msg.sender liquidates borrower's position(s) and repays a certain amount of debt for multiple maturities, seizing a part of borrower's collateral.
Parameters
Name | Type | Description |
---|---|---|
borrower | address | wallet that has an outstanding debt across all maturities. |
maxAssets | uint256 | maximum amount of debt that the liquidator is willing to accept. (it can be less) |
seizeMarket | contract Market | market from which the collateral will be seized to give the liquidator. |
Returns
Name | Type | Description |
---|---|---|
repaidAssets | uint256 | actual amount repaid. |
mint
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | amount of shares to mint. |
receiver | address | address of account that will receive the minted shares. |
Returns
Name | Type | Description |
---|---|---|
assets | uint256 | amount of deposited assets. |
redeem
Redeems the owner's floating pool assets to the receiver address.
Makes sure that the owner doesn't have shortfall after withdrawing.
Parameters
Name | Type | Description |
---|---|---|
shares | uint256 | amount of shares to be redeemed for underlying asset. |
receiver | address | address to which the assets will be transferred. |
owner | address | address which owns the floating pool assets. |
Returns
Name | Type | Description |
---|---|---|
assets | uint256 | amount of underlying asset that was withdrawn. |
refund
Repays a certain amount of shares to the floating pool.
Parameters
Name | Type | Description |
---|---|---|
borrowShares | uint256 | shares to be subtracted from the borrower's accountability. |
borrower | address | address of the account that has the debt. |
Returns
Name | Type | Description |
---|---|---|
assets | uint256 | subtracted assets from the borrower's accountability. |
actualShares | uint256 | actual subtracted shares from the borrower's accountability. |
repay
Repays a certain amount of assets to the floating pool.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | assets to be subtracted from the borrower's accountability. |
borrower | address | address of the account that has the debt. |
Returns
Name | Type | Description |
---|---|---|
actualRepay | uint256 | the actual amount that should be transferred into the protocol. |
borrowShares | uint256 | subtracted shares from the borrower's accountability. |
repayAtMaturity
Repays a certain amount to a maturity.
Parameters
Name | Type | Description |
---|---|---|
maturity | uint256 | maturity date where the assets will be repaid. |
positionAssets | uint256 | amount to be paid for the borrower's debt. |
maxAssets | uint256 | maximum amount of debt that the account is willing to accept to be repaid. |
borrower | address | address of the account that has the debt. |
Returns
Name | Type | Description |
---|---|---|
actualRepayAssets | uint256 | the actual amount that was transferred into the protocol. |
seize
Public function to seize a certain amount of assets.
Public function for liquidator to seize borrowers assets in the floating pool. This function will only be called from another Market, on liquidation
calls. That's why msg.sender needs to be passed to the private function (to be validated as a market)
Parameters
Name | Type | Description |
---|---|---|
liquidator | address | address which will receive the seized assets. |
borrower | address | address from which the assets will be seized. |
assets | uint256 | amount to be removed from borrower's possession. |
withdraw
Withdraws the owner's floating pool assets to the receiver address.
Makes sure that the owner doesn't have shortfall after withdrawing.
Parameters
Name | Type | Description |
---|---|---|
assets | uint256 | amount of underlying to be withdrawn. |
receiver | address | address to which the assets will be transferred. |
owner | address | address which owns the floating pool assets. |
Returns
Name | Type | Description |
---|---|---|
shares | uint256 | amount of shares redeemed for underlying asset. |
withdrawAtMaturity
Withdraws a certain amount from a maturity.
It's expected that this function can't be paused to prevent freezing account funds.
Parameters
Name | Type | Description |
---|---|---|
maturity | uint256 | maturity date where the assets will be withdrawn. |
positionAssets | uint256 | position size to be reduced. |
minAssetsRequired | uint256 | minimum amount required by the account (if discount included for early withdrawal). |
receiver | address | address that will receive the withdrawn assets. |
owner | address | address that previously deposited the assets. |
Returns
Name | Type | Description |
---|---|---|
assetsDiscounted | uint256 | amount of assets withdrawn (can include a discount for early withdraw). |
Last updated