LendingPool
The LendingPool
contract is the main contract of the protocol. It exposes all the user-oriented actions that can be invoked using either Solidity or web3 libraries.
The source code can be found on Github here.
LendingPool
methods**deposit, borrow, withdraw and repay
**are only for ERC20, if you want to deposit, borrow, withdraw or repay using native ETH (or native MATIC incase of Polygon), use WETHGateway
instead.
Methods
deposit()
function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode)
Deposits a certain amount
of an asset
into the protocol, minting the same amount
of corresponding vTokens, and transferring them to the onBehalfOf
address.
The referral program is currently inactive and you can pass0
as thereferralCode.
In future for referral code to be active again, a governance proposal, with the list of unique referral codes for various integration must be passed via governance.
When depositing, the LendingPool
contract must have**allowance()
to spend funds on behalf ofmsg.sender
** for at-least**amount
** for the asset
being deposited. This can be done via the standard ERC20 approve()
method.
Parameter Name | Type | Description |
---|---|---|
| address | address of the underlying asset |
| uint256 | amount deposited, expressed in wei units |
| address | address whom will receive the vTokens.
Use |
| uint16 | referral code for our referral program. Use 0 for no referral. |
withdraw()
function withdraw(address asset, uint256 amount, address to)
Withdraws amount
of the underlying asset
, i.e. redeems the underlying token and burns the vTokens.
When withdrawing to
another address,**msg.sender
**should havevToken
that will be burned by lendingPool .
Parameter Name | Type | Description |
---|---|---|
| address | address of the underlying asset, not the vToken |
| uint256 | amount deposited, expressed in wei units.
Use |
| address | address that will receive the |
depositNFT()
function depositNFT(address nft, uint256[] tokenIds, uint256[] amounts, address onBehalfOf, uint16 referralCode)
Deposits NFTs with given tokenIds
and amounts
into the protocol, minting the corresponding nTokens, and transferring them to the onBehalfOf
address.
The referral program is currently inactive and you can pass0
as thereferralCode.
In future for referral code to be active again, a governance proposal, with the list of unique referral codes for various integration must be passed via governance.
When depositing NFTs, the LendingPool
contract must have**getApproved()
to transfering NFT on behalf ofmsg.sender
** for each token Id in tokenIds
for the nft
being deposited. This can be done via the standard ERC721 approve()
method.
Parameter Name | Type | Description |
---|---|---|
| address | address of the underlying asset |
| uint256[] | The list of token ids to be deposited. |
| uint256[] | The amounts of tokens to be deposited for each token id. All elements must be 1 for an ERC721 NFT collection. |
| address | address whom will receive the nTokens.
Use |
| uint16 | referral code for our referral program. Use 0 for no referral. |
withdrawNFT()
function withdrawNFT(address nft, uint256[] tokenIds, uint256[] amounts, address to)
Withdraws the underlying nft
corresponding to the tokenids
and amounts
, i.e. redeems the underlying tokens and burns the nTokens.
When withdrawing to
another address, msg.sender
should have nToken
that will be burned by lendingPool .
Parameter Name | Type | Description |
---|---|---|
| address | address of the underlying NFT, not the nToken |
| uint256[] | The list of token ids to be deposited. |
| uint256[] | The amounts of tokens to be deposited for each token id. All elements must be 1 for an ERC721 NFT collection. |
| uint256[] | The list of token ids to be deposited. |
| uint256[] | The amounts of tokens to be deposited for each token id. All elements must be 1 for an ERC721 NFT collection. |
| address | address that will receive the |
borrow**()**
function borrow(address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode, address onBehalfOf)
Borrows amount
of asset
with interestRateMode
, sending the amount
to msg.sender
, with the debt being incurred by onBehalfOf
.
Note: onBehalfOf
must have enough collateral via depositNFT()
or have delegated credit to msg.sender
via approveDelegation()
.
Parameter Name | Type | Description |
---|---|---|
| address | address of the underlying asset |
| uint256 | amount to be borrowed, expressed in wei units |
| uint256 | the type of borrow debt. Currently unused, must be > 0 |
| uint16 | referral code for our referral program. Use 0 for no referral code. |
| address | address of user who will incur the debt. Use |
repay**()**
function repay(address asset, uint256 amount, uint256 rateMode, address onBehalfOf)
Repays onBehalfOf
's debt amount
of asset
which has a rateMode
.
Parameter Name | Type | Description |
---|---|---|
| address | address of the underlying asset.md#supported-assets) |
| uint256 | amount to be borrowed, expressed in wei units. Use In case of repayments on behalf of another user, it's recommended to send an |
| uint256 | the type of borrow debt. Currently unused, must be > 0. |
| address | address of user who will incur the debt. Use |
nftLiquidationCall**()**
function nftLiquidationCall(address collateral, address debt, address user, uint256[] tokenIds, uint256[] amounts, bool receiveNToken)
Liquidate positions with a health factor below 1.
When the health factor of a position is below 1, liquidators repay part or all of the outstanding borrowed amount on behalf of the borrower, while receiving a discounted amount of collateral in return (also known as a liquidation 'bonus"). Liquidators can decide if they want to receive an equivalent amount of collateral nTokens, or the underlying NFT directly. When the liquidation is completed successfully, the health factor of the position is increased, bringing the health factor above 1.
Liquidators can only close a certain amount of collateral defined by a close factor. Currently the close factor is 0.5. In other words, liquidators can only liquidate collateral that is worth a maximum of 50% of the amount pending to be repaid in a position. The liquidation discount applies to this amount. The liquidator uses tokenIds
to select the NFTs he/she wishes to obtain. The NFT at the front of the tokenIds
list will be acquired first when liquidated.
Liquidators must approve()
the LendingPool
contract to use as much of the underlying ERC20 as the sum of the value of all tokensIds
used for the liquidation.
NOTES
In most scenarios, profitable liquidators will choose to liquidate as much as they can (50% of the
user
position).To check a user's health factor, use
getUserAccountData()
.
Parameter Name | Type | Description |
---|---|---|
| address | address of the collateral nft |
| address | address of the underlying borrowed asset to be repaid |
| address | address of the borrower |
| uint256[] | The list of token ids to be obtained after the liquidation |
| uint256[] | The amounts of tokens to be obtained for each token id. All elements must be 1 for an ERC721 NFT collection. |
| bool | if |
View Methods
getReserveData**()**
function getReserveData(address asset)
Returns the state and configuration of the reserve
Parameter Name | Type | Description |
---|---|---|
| address | address of the reserve |
Return values
Parameter Name | Type | Description |
---|---|---|
| uint256 | bit 0-47: reserved bit 48-55: Decimals bit 56: reserve is active bit 57: reserve is frozen bit 58: borrowing is enabled bit 59-63: reserved bit 64-79: reserve factor ** All % are 1e4 i.e. percentage plus two decimals ** Decimals is 1e2 |
| uint128 | liquidity index in ray |
| uint128 | variable borrow index in ray |
| uint128 | current supply / liquidity / deposit rate in ray |
| uint128 | current variable borrow rate in ray |
| uint128 | reserved |
| uint40 | timestamp of when reserve data was last updated |
| address | address of associated vToken (tokenised deposit) |
| address | reserved |
| address | address of associated variable debt token |
| address | address of interest rate strategy. |
| uint8 | the position in the list of active reserves |
getNFTVaultData**()**
function getNFTVaultData(address asset)
Returns the state and configuration of the reserve
Parameter Name | Type | Description |
---|---|---|
| address | address of the NFT |
Return values
Parameter Name | Type | Description |
---|---|---|
| uint256 | bit 0-15: LTV bit 16-31: Liq. threshold bit 32-47: Liq. bonus bit 48-55: Decimals bit 56: vault is active bit 57: vault is frozen ** All % are 1e4 i.e. percentage plus two decimals ** Decimals is 1e2 ** Caveat on Liquidation bonus
|
| address | address of associated nToken (tokenised vault) |
| address | address of the contract that checks the eligibility of the deposited NFTs |
| uint8 | the position in the list of active reserves |
| uint40 | reserved |
getUserAccountData**()**
function getUserAccountData(address user)
Returns the user account data across all the reserves
Parameter Name | Type | Description |
---|---|---|
| address | address of the user |
Return values
Parameter Name | Type | Description |
---|---|---|
| uint256 | total collateral in ETH of the use (wei decimal unit) |
| uint256 | total debt in ETH of the user (wei decimal unit) |
| uint256 | borrowing power left of the user (wei decimal unit) |
| uint256 | liquidation threshold of the user (1e4 format => percentage plus two decimals) |
| uint256 | Loan To Value of the user (1e4 format => percentage plus two decimals) |
| uint256 | current health factor of the user. Also see |
getConfiguration**()**
function getConfiguration(address asset)
Returns the configuration of the reserve
Parameter Name | Type | Description |
---|---|---|
| address | address of the reserve |
Return values
Return Type | Description |
---|---|
uint256 | bit 0-47: reserved bit 48-55: Decimals bit 56: reserve is active bit 57: reserve is frozen bit 58: borrowing is enabled bit 59-63: reserved bit 64-79: reserve factor ** All % are 1e4 i.e. percentage plus two decimals ** Decimals is 1e2 |
getNFTVaultConfiguration**()**
function getNFTVaultConfiguration(address asset)
Returns the configuration of the reserve
Parameter Name | Type | Description |
---|---|---|
| address | address of the NFT |
Return values
Return Type | Description |
---|---|
uint256 | bit 0-15: LTV bit 16-31: Liq. threshold bit 32-47: Liq. bonus bit 48-55: Decimals bit 56: vault is active bit 57: vault is frozen ** All % are 1e4 i.e. percentage plus two decimals ** Decimals is 1e2 ** Caveat on Liquidation bonus
|
getUserConfiguration**()**
function getUserConfiguration(address user)
Returns the configuration of the user across all the reserves.
Parameter Name | Type | Description |
---|---|---|
| address | address of the user |
Return values
Parameter Name | Return Type | Description |
---|---|---|
data | uint256 | For ERC20 asset. The bitmask is divided into pairs of bits, one pair for each asset. The first bit of the pair is reserved, the second bit indicates if it is being borrowed.
The corresponding assets are in the same position as If we start from the right and move left in the above binary pairs, the third pair is If we continue to go to the end of the binary pairs (furthest left), we have |
ndata | uint256 | For NFT asset. The bitmask is divided into bits, one bit for each NFT. The bit indicates if it is being used as collateral by the user.
The corresponding assets are in the same position as If we start from the right and move left in the above binary pairs, the third pair is If we continue to go to the end of the binary pairs (furthest left), we have |
getReserveNormalizedIncome**()**
function getReserveNormalizedIncome(address asset)
Returns the normalized income per unit of asset
.
A return value of indicates no income. As time passes, the income is accrued. A value of indicates that for each unit of asset, two units of income have been accrued.
Parameter Name | Type | Description |
---|---|---|
| address | address of the reserve |
getReserveNormalizedVariableDebt**()**
function getReserveNormalizedVariableDebt(address asset)
Returns the normalized variable debt per unit of asset
.
A return value of indicates no debt. As time passes, the debt is accrued. A value of indicates that for each unit of asset, two units of debt have been accrued.
Parameter Name | Type | Description |
---|---|---|
| address | address of the reserve |
paused**()**
function paused()
Returns true
if the LendingPool is paused.
getReservesList**()**
function getReservesList()
Returns the list of initialized reserves.
getNFTVaultsList**()**
function getNFTVaultsList()
Returns the list of initialized NFT vaults.
getAddressesProvider**()**
function getAddressesProvider()
Returns the addresses provider.
Error Codes
In order to reduce gas usage and code size, vinci contracts return numbered errors. If you are making calls to the protocol and receive numbered errors, you can find what the numbers represent by checking the Errors.sol
Last updated