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

function accounts(address) external view returns (uint256 fixedDeposits, uint256 fixedBorrows, uint256 floatingBorrowShares)

Tracks fixed deposit and borrow map and floating borrow shares of an account.

asset

function asset() external view returns (contract ERC20)

Address of underlying ERC20 asset.

auditor

function auditor() external view returns (contract Auditor)

Auditor contract that validates health factor of accounts that operate with this Market.

backupFeeRate

function backupFeeRate() external view returns (uint256)

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 floatingAssetsAverage.

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

Was this helpful?