Numeric Limits
amounts
uint112
Maximum sane amount (result of balanceOf) for external tokens
Uniswap2 limits token amounts to this
Spec: For an 18 decimal token, more than a million billion tokens (1e15)
small amounts
uint96
For holding amounts that we don't expect to get quite as large, in particular reserve balances
Can pack together with an address in a single slot
Spec: For an 18 decimal token, more than a billion tokens (1e9)
debt amounts
uint144
Maximum sane amount for debts
Packs together with an amount in a single storage slot
Spec: Should hold the maximum possible amount (uint112) but scaled by another 9 decimal places (for the internal debt precision)
Actual: 2e16
prices
Minimum supported price:
Fraction:
1e3 / 1e18 = 1e-15
Tick:
-345405
sqrtPriceX96:
2505418623681149822473
Maximum supported price:
Fraction:
1e33 / 1e18 = 1e15
Tick:
345405
sqrtPriceX96:
2505410343826649584586222772852783278
The supported price range was chosen for the following reason:
The maximum price squared fits in a uint256:
6e73 < 1e77
Not necessary to use FullMath library
The maximum supported price times the maximum supported amount fits within a uint256:
5e66 < 1e77
Also holds with debt and its extra 9 digits of precision:
5e75 < 1e77
interestRate
int96
"Second Percent Yield"
Fraction scaled by 1e27
Example:
10% APR = 1e27 * 0.1 / (86400*365) = 1e27 * 0.000000003170979198376458650 = 3170979198376458650
Spec: 1 billion % APR, positive or negative
interestAccumulator
uint256
Starts at 1e27, multiplied by (1e27 + interestRate) every second
Spec: 100% APR for 100 years
moduleId
uint32
One per module, so this is way more than needed
Divided into 3 sections
<500_000: Public single-proxy
=500_000 and <1_000_000: Public multi-proxy
=1_000_000: Internal
Spec: A dozen or so modules, with room to grow in all sections
collateralFactor/borrowFactor
uint32
Fraction between 0 and 1, scaled by 2^32 - 1
Spec: At least 3 decimal places (overkill)
Last updated