Euler
Search…
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
    1
    -> 2^256
    2
    ~= 1.1579208923e+77
    3
    -> 10^27 * (1 + (100/100 / (86400*365)))^(86400*365*100)
    4
    ~= 2.6881128798e+70
    Copied!

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 modified 6mo ago