Curve Initialization

Any user is able to generate an IBC curve by providing an initial amount of an ERC20 token as the selected reserve asset. An IBC is created per reserve asset type, and only one IBC can exist per reserve asset type.

An IBC using ETH as the reserve asset is created at protocol genesis, with ibETH (the minted ibAsset) marking the first history of assets that follow inversed market dynamics. Other types of ibAssets can be generated by any user providing ERC20 reserve assets.

The provided initial parameter values of initial liquidity reserves (R0R_0) is used to compute the initial minted supply (S0S_0), and the starting spot price (P0P_0).

Initial Parameters

The curve initializes to contain the provided R0R_0 amount of liquidity reserves. The generated IBC starts off with a price curve equation of:

price=1supplyprice=\frac{1}{\sqrt{supply}}

Where the price starts as 11 ibAsset = 11 reserve asset at a minted ibAsset supply of 11.

The initial minted supply and price values are then calculated as:

S0=R024S_0=\frac{{R_0}^{2}}{4}
P0=2R0P_0=\frac{2}{R_0}

Minimum Initial Reserve

A minimum amount of initial reserves is enforced, preventing rounding errors during further interactions. The minimum initial reserve is set as 0.00020.0002 reserve assets for all initializing IBCs. Furthermore, a small reserve amount from the minimum initial reserve is deducted away and made non-withdrawable and is locked in the IBC eternally in order to prevent further rounding errors and disallow the reserve being drained to zero.

Initial LP Token Supply

The IBC also starts with an initial minted supply of LP tokens, later used to calculate the LP token mint amounts to those providing liquidity to the initialized curve. The initial LP token amount is calculated as:

P0(R0P0S0)P_0\left(R_0-P_0S_0\right)

Which is equal to the initial price, times the specified amount of virtual reserves minus the amount of virtual reserves that would be needed to fully back the initial virtual minted supply at the initial price.

The LP token amount minted for a small deduction of the minimum initial reserve is also made non-removable, preventing potential rounding errors and total drainage of the reserve.

Curve Formation

Following from a generic IBC of mxk\frac{m}{x^k}, the initialized curve must show a spot price of P0P_0 at a minted virtual supply of S0S_0:

mS0k=P0\frac{m}{{S_0}^k}=P_0

The curve should also contain a liquidity reserve of R0R_0 at a minted supply of S0S_0:

0S0mxkdx=mS01k1k=R0\int_{0}^{S_0}\frac{m}{x^{k}}dx=\frac{m{S_0}^{1-k}}{1-k}=R_0

Whereby combining the two yields the values for mmand kk:

m=P0S01P0S0R0,k=1P0S0R0m=P_0{S_0}^{1-\frac{P_0S_0}{R_0}},\,k=1-\frac{P_0S_0}{R_0}

The curve is then defined as the below:

P(x)=P0(S0S0+x)1P0S0R0P(x)=P_0{\left(\frac{S_0}{S_0+x}\right)}^{1-\frac{P_0S_0}{R_0}}

Where xx is the amount of ibAssets being minted by further interactions post-initialization.

Curve Invariant

The generated IBC is observed to have the below invariant (ii) as mints and burns occur. ii does not update during mints and burns, but updates with LP additions and withdraws.

i=RSui=\frac{R}{S^{u}}

uu represents the utilization of provided liquidity vs. liquidity used to back minted ibAssets at the current spot price. uu is defined at curve initialization and is made to never update. uu is defined as:

u=PSR=0.5u=\frac{PS}{R}=0.5

For all initialized IBCs, uu is always set to have a value of 0.50.5.

With initialized values of R0R_0, S0S_0, P0P_0, the values ii and uu are set as:

i=R0S0u,u=P0S0R0=0.5i=\frac{R_0}{{S_0}^{u}},\,u=\frac{P_0S_0}{R_0}=0.5

The newly added values of ii and uu allow the price curve to also be written as:

P(x)=iu(S0+x)1uP(x)=\frac{iu}{{\left(S_0+x\right)}^{1-u}}

The invariant is used extensively in the IBC's implementation.

Last updated