API
An abstract contract which contains the core logic and storage for the FraxlendPair
constructor(bytes _configData, bytes _immutables, uint256 _maxLTV, uint256 _liquidationFee, uint256 _maturityDate, uint256 _penaltyRate, bool _isBorrowerWhitelistActive, bool _isLenderWhitelistActive) internal
The
constructor
function is called on deploymentParam | Type | Description |
---|---|---|
_configData | bytes | abi.encode(address _asset, address _collateral, address _oracleMultiply, address _oracleDivide, uint256 _oracleNormalization, address _rateContract, bytes memory _rateInitData) |
_immutables | bytes | |
_maxLTV | uint256 | The Maximum Loan-To-Value for a borrower to be considered solvent (1e5 precision) |
_liquidationFee | uint256 | The fee paid to liquidators given as a % of the repayment (1e5 precision) |
_maturityDate | uint256 | The maturityDate date of the Pair |
_penaltyRate | uint256 | The interest rate after maturity date |
_isBorrowerWhitelistActive | bool | Enables borrower whitelist |
_isLenderWhitelistActive | bool | Enables lender whitelist |
function initialize(string _name, address[] _approvedBorrowers, address[] _approvedLenders, bytes _rateInitCallData) external
The
initialize
function is called immediately after deploymentThis function can only be called by the deployer
Param | Type | Description |
---|---|---|
_name | string | The name of the contract |
_approvedBorrowers | address[] | An array of approved borrower addresses |
_approvedLenders | address[] | An array of approved lender addresses |
_rateInitCallData | bytes | The configuration data for the Rate Calculator contract |
function _totalAssetAvailable(struct VaultAccount _totalAsset, struct VaultAccount _totalBorrow) internal pure returns (uint256)
The
_totalAssetAvailable
function returns the total balance of Asset Tokens in the contractParam | Type | Description |
---|---|---|
_totalAsset | struct VaultAccount | VaultAccount struct which stores total amount and shares for assets |
_totalBorrow | struct VaultAccount | VaultAccount struct which stores total amount and shares for borrows |
Return | Type | Description |
---|---|---|
[0] | uint256 | The balance of Asset Tokens held by contract |
function _isSolvent(address _borrower, uint256 _exchangeRate) internal view returns (bool)
The
_isSolvent
function determines if a given borrower is solvent given an exchange rateParam | Type | Description |
---|---|---|
_borrower | address | The borrower address to check |
_exchangeRate | uint256 | The exchange rate, i.e. the amount of collateral to buy 1e18 asset |
Return | Type | Description |
---|---|---|
[0] | bool | Whether borrower is solvent |
function _isPastMaturity() internal view returns (bool)
The
_isPastMaturity
function determines if the current block timestamp is past the maturityDate dateReturn | Type | Description |
---|---|---|
[0] | bool | Whether or not the debt is past maturity |
modifier isSolvent(address _borrower)
Checks for solvency AFTER executing contract code
Param | Type | Description |
---|---|---|
_borrower | address | The borrower whose solvency we will check |
modifier approvedBorrower()
Checks if msg.sender is an approved Borrower
modifier approvedLender(address _receiver)
Checks if msg.sender and _receiver are both an approved Lender
Param | Type | Description |
---|---|---|
_receiver | address | An additional receiver address to check |
modifier isNotPastMaturity()
Ensure function is not called when passed maturity
event AddInterest(uint256 _interestEarned, uint256 _rate, uint256 _deltaTime, uint256 _feesAmount, uint256 _feesShare)
The
AddInterest
event is emitted when interest is accrued by borrowersParam | Type | Description |
---|---|---|
_interestEarned | uint256 | The total interest accrued by all borrowers |
_rate | uint256 | The interest rate used to calculate accrued interest |
_deltaTime | uint256 | The time elapsed since last interest accrual |
_feesAmount | uint256 | The amount of fees paid to protocol |
_feesShare | uint256 | The amount of shares distributed to protocol |
event UpdateRate(uint256 _ratePerSec, uint256 _deltaTime, uint256 _utilizationRate, uint256 _newRatePerSec)
The
UpdateRate
event is emitted when the interest rate is updatedParam | Type | Description |
---|---|---|
_ratePerSec | uint256 | The old interest rate (per second) |
_deltaTime | uint256 | The time elapsed since last update |
_utilizationRate | uint256 | The utilization of assets in the Pair |
_newRatePerSec | uint256 | The new interest rate (per second) |
function addInterest() external returns (uint256 _interestEarned, uint256 _feesAmount, uint256 _feesShare, uint64 _newRate)
The
addInterest
function is a public implementation of _addInterest and allows 3rd parties to trigger interest accrualReturn | Type | Description |
---|---|---|
_interestEarned | uint256 | The amount of interest accrued by all borrowers |
_feesAmount | uint256 | |
_feesShare | uint256 | |
_newRate | uint64 | |
function _addInterest() internal returns (uint256 _interestEarned, uint256 _feesAmount, uint256 _feesShare, uint64 _newRate)
The
_addInterest
function is invoked prior to every external function and is used to accrue interest and update interest rateCan only called once per block
Return | Type | Description |
---|---|---|
_interestEarned | uint256 | The amount of interest accrued by all borrowers |
_feesAmount | uint256 | |
_feesShare | uint256 | |
_newRate | uint64 | |
event UpdateExchangeRate(uint256 _rate)
The
UpdateExchangeRate
event is emitted when the Collateral:Asset exchange rate is updatedParam | Type | Description |
---|---|---|
_rate | uint256 | The new rate given as the amount of Collateral Token to buy 1e18 Asset Token |
function updateExchangeRate() external returns (uint256 _exchangeRate)
The
updateExchangeRate
function is the external implementation of _updateExchangeRate.This function is invoked at most once per block as these queries can be expensive
Return | Type | Description |
---|---|---|
_exchangeRate | uint256 | The new exchange rate |
function _updateExchangeRate() internal returns (uint256 _exchangeRate)
The
_updateExchangeRate
function retrieves the latest exchange rate. i.e how much collateral to buy 1e18 asset.This function is invoked at most once per block as these queries can be expensive
Return | Type | Description |
---|---|---|
_exchangeRate | uint256 | The new exchange rate |
function _deposit(struct VaultAccount _totalAsset, uint128 _amount, uint128 _shares, address _receiver) internal
The
_deposit
function is the internal implementation for lending assetsCaller must invoke
ERC20.approve
on the Asset Token contract prior to calling functionParam | Type | Description |
---|---|---|
_totalAsset | struct VaultAccount | An in memory VaultAccount struct representing the total amounts and shares for the Asset Token |
_amount | uint128 | The amount of Asset Token to be transferred |
_shares | uint128 | The amount of Asset Shares (fTokens) to be minted |
_receiver | address | The address to receive the Asset Shares (fTokens) |
function deposit(uint256 _amount, address _receiver) external returns (uint256 _sharesReceived)
The
deposit
function allows a user to Lend Assets by specifying the amount of Asset Tokens to lendCaller must invoke
ERC20.approve
on the Asset Token contract prior to calling functionParam | Type | Description |
---|---|---|
_amount | uint256 | The amount of Asset Token to transfer to Pair |
_receiver | address | The address to receive the Asset Shares (fTokens) |
Return | Type | Description |
---|---|---|
_sharesReceived | uint256 | The number of fTokens received for the deposit |
function mint(uint256 _shares, address _receiver) external returns (uint256 _amountReceived)
The
mint
function allows a user to Lend assets by specifying the number of Assets Shares (fTokens) to mintCaller must invoke
ERC20.approve
on the Asset Token contract prior to calling functionParam | Type | Description |
---|---|---|
_shares | uint256 | The number of Asset Shares (fTokens) that a user wants to mint |
_receiver | address | The address to receive the Asset Shares (fTokens) |
Return | Type | Description |
---|---|---|
_amountReceived | uint256 | The amount of Asset Tokens transferred to the Pair |
function _redeem(struct VaultAccount _totalAsset, uint128 _amountToReturn, uint128 _shares, address _receiver, address _owner) internal
The
_redeem
function is an internal implementation which allows a Lender to pull their Asset Tokens out of the PairCaller must invoke
ERC20.approve
on the Asset Token contract prior to calling functionParam | Type | Description |
---|---|---|
_totalAsset | struct VaultAccount | An in-memory VaultAccount struct which holds the total amount of Asset Tokens and the total number of Asset Shares (fTokens) |
_amountToReturn | uint128 | The number of Asset Tokens to return |
_shares | uint128 | The number of Asset Shares (fTokens) to burn |
_receiver | address | The address to which the Asset Tokens will be transferred |
_owner | address | The owner of the Asset Shares (fTokens) |
function redeem(uint256 _shares, address _receiver, address _owner) external returns (uint256 _amountToReturn)
The
redeem
function allows the caller to redeem their Asset Shares for Asset TokensParam | Type | Description |
---|---|---|
_shares | uint256 | The number of Asset Shares (fTokens) to burn for Asset Tokens |
_receiver | address | The address to which the Asset Tokens will be transferred |
_owner | address | The owner of the Asset Shares (fTokens) |
Return | Type | Description |
---|---|---|
_amountToReturn | uint256 | The amount of Asset Tokens to be transferred |
function withdraw(uint256 _amount, address _receiver, address _owner) external returns (uint256 _shares)
The
withdraw
function allows a user to redeem their Asset Shares for a specified amount of Asset TokensParam | Type | Description |
---|---|---|
_amount | uint256 | The amount of Asset Tokens to be transferred in exchange for burning Asset Shares |
_receiver | address | The address to which the Asset Tokens will be transferred |
_owner | address | The owner of the Asset Shares (fTokens) |
Return | Type | Description |
---|---|---|
_shares | uint256 | The number of Asset Shares (fTokens) burned |
event BorrowAsset(address _borrower, address _receiver, uint256 _borrowAmount, uint256 _sharesAdded)
The
BorrowAsset
event is emitted when a borrower increases their positionParam | Type | Description |
---|---|---|
_borrower | address | The borrower whose account was debited |
_receiver | address | The address to which the Asset Tokens were transferred |
_borrowAmount | uint256 | The amount of Asset Tokens transferred |
_sharesAdded | uint256 | The number of Borrow Shares the borrower was debited |
function _borrowAsset(uint128 _borrowAmount, address _receiver) internal returns (uint256 _sharesAdded)
The
_borrowAsset
function is the internal implementation for borrowing assetsParam | Type | Description |
---|---|---|
_borrowAmount | uint128 | The amount of the Asset Token to borrow |
_receiver | address | The address to receive the Asset Tokens |
Return | Type | Description |
---|---|---|
_sharesAdded | uint256 | The amount of borrow shares the msg.sender will be debited |
function borrowAsset(uint256 _borrowAmount, uint256 _collateralAmount, address _receiver) external returns (uint256 _shares)
The
borrowAsset
function allows a user to open/increase a borrow positionBorrower must call
ERC20.approve
on the Collateral Token contract if applicableParam | Type | Description |
---|---|---|
_borrowAmount | uint256 | The amount of Asset Token to borrow |
_collateralAmount | uint256 | The amount of Collateral Token to transfer to Pair |
_receiver | address | The address which will receive the Asset Tokens |
Return | Type | Description |
---|---|---|
_shares | uint256 | The number of borrow Shares the msg.sender will be debited |
function _addCollateral(address _sender, uint256 _collateralAmount, address _borrower) internal
The
_addCollateral
function is an internal implementation for adding collateral to a borrowers positionParam | Type | Description |
---|---|---|
_sender | address | The source of funds for the new collateral |
_collateralAmount | uint256 | The amount of Collateral Token to be transferred |
_borrower | address | The borrower account for which the collateral should be credited |
function addCollateral(uint256 _collateralAmount, address _borrower) external
The
addCollateral
function allows the caller to add Collateral Token to a borrowers positionmsg.sender must call ERC20.approve() on the Collateral Token contract prior to invocation
Param | Type | Description |
---|---|---|
_collateralAmount | uint256 | The amount of Collateral Token to be added to borrower's position |
_borrower | address | The account to be credited |
event RemoveCollateral(address _sender, uint256 _collateralAmount, address _receiver, address _borrower)
The
RemoveCollateral
event is emitted when collateral is removed from a borrower's positionParam | Type | Description |
---|---|---|
_sender | address | The account from which funds are transferred |
_collateralAmount | uint256 | The amount of Collateral Token to be transferred |
_receiver | address | The address to which Collateral Tokens will be transferred |
_borrower | address | |
function _removeCollateral(uint256 _collateralAmount, address _receiver, address _borrower) internal
The
_removeCollateral
function is the internal implementation for removing collateral from a borrower's positionParam | Type | Description |
---|---|---|
_collateralAmount | uint256 | The amount of Collateral Token to remove from the borrower's position |
_receiver | address | The address to receive the Collateral Token transferred |
_borrower | address | The borrower whose account will be debited the Collateral amount |
function removeCollateral(uint256 _collateralAmount, address _receiver) external
The
removeCollateral
function is used to remove collateral from msg.sender's borrow positionmsg.sender must be solvent after invocation or transaction will revert
Param | Type | Description |
---|---|---|
_collateralAmount | uint256 | The amount of Collateral Token to transfer |
_receiver | address | The address to receive the transferred funds |
event RepayAsset(address _sender, address _borrower, uint256 _amountToRepay, uint256 _shares)
The
RepayAsset
event is emitted whenever a debt position is repaidParam | Type | Description |
---|---|---|
_sender | address | The msg.sender of the transaction |
_borrower | address | The borrower whose account will be credited |
_amountToRepay | uint256 | The amount of Asset token to be transferred |
_shares | uint256 | The amount of Borrow Shares which will be debited from the borrower after repayment |
function _repayAsset(struct VaultAccount _totalBorrow, uint128 _amountToRepay, uint128 _shares, address _payer, address _borrower) internal
The
_repayAsset
function is the internal implementation for repaying a borrow positionThe payer must have called ERC20.approve() on the Asset Token contract prior to invocation
Param | Type | Description |
---|---|---|
_totalBorrow | struct VaultAccount | An in memory copy of the totalBorrow VaultAccount struct |
_amountToRepay | uint128 | The amount of Asset Token to transfer |
_shares | uint128 | The number of Borrow Shares the sender is repaying |
_payer | address | The address from which funds will be transferred |
_borrower | address | The borrower account which will be credited |
function repayAsset(uint256 _shares, address _borrower) external returns (uint256 _amountToRepay)
The
repayAsset
function allows the caller to pay down the debt for a given borrower.Caller must first invoke
ERC20.approve()
for the Asset Token contractParam | Type | Description |
---|---|---|
_shares | uint256 | The number of Borrow Shares which will be repaid by the call |
_borrower | address | The account for which the debt will be reduced |
Return | Type | Description |
---|---|---|
_amountToRepay | uint256 | The amount of Asset Tokens which were transferred in order to repay the Borrow Shares |
event Liquidate(address _borrower, uint256 _collateralForLiquidator, uint256 _shares)
The
Liquidate
event is emitted when a liquidation occursParam | Type |
---|