SupplyCap, BorrowCap
Last updated
Last updated
Borrow caps: limits of how much of each asset can be borrowed, which reduces insolvency risk.
Supply caps: limits how much of a certain asset is supplied. Helps control excessive exposure to a certain asset and mitigate attacks like infinite minting or price oracle manipulation.
If borrow/supply cap is set to 0; this sigifies that there is no cap.
In case Borrow Cap of the reserve is set lower than the current totalDebt, the existing borrowers are not effected but no more borrows (stable or variable) can be initiated for that reserve.
In case Supply Cap of the reserve is set lower than the current liquidity of the reserve, the existing suppliers are not effected but no more liquidity can be supplied to that reserve.
Each asset has a corresponding ReserveData
struct which outlines its key information and configuration.
PoolStorage
holds mapping _reserves
which maps asset address to ReserveData
.
Within eachReserveData
struct, there is a nested struct of type ReserveConfigurationMap
. The nested struct contain a bitmap, storing the asset's configuration:
An asset's borrow and supply caps are defined within the bitmap, along with other relevant information.
To retrieve a specific asset's supply cap, we call getSupplyCap
and pass said asset's ReserveConfigurationMap
.
Only bits 116 - 151 are set to 0
in the mask; these bits will be set to 1
after the ~
operation.
data & ~SUPPLY_CAP_MASK
will return a hexadecimal number in which all the characters are set to 0,
except potentially the bits representing the supply cap.
These bits will return the hex value of the supply cap.
If supply cap is indeed 0
, then 0x000...000
would be returned.
Numbers in Solidity are left-padded. Therefore to convert our resulting hexadecimal number to the appropriate number representation so that it can be cast as a uint256
, right shifting by 116 bits is required.
this will remove all the 0s on the right, from the least significant bit to the value
left-padding will be done accordingly, to ensure 32 byte representation
See more at getReserveFactor
Process is similar to getSupplyCap