Programmable Pricing Curve

Programmable pricing curves try to improve capital efficiency of BlueLotusDao pricing model. The curves are still a constant product, but of virtual balances instead of real balances. Thanks to the virtual balances, which are amplified significantly from real balances, BlueLotusDAO pools can achieve moderate spread and slippage rates compared to the Uniswap model given the same capital.
We first define
x0x_0
and
y0y_0
to be the liquidity providers’ initial contributions to the pool, such that
x0y0=kx_0 \cdot y_0 = k
. This is the familiar simple constant-product function.
We now introduce what is known as the amplification factor a and a > 1 . As its name suggests, it amplifies the real balances to virtual balances. Hence, we can define virtual balances
x0x'_0
and
y0y'_0
, where
x0=x0ax'_0 = x_0 \cdot a
and
y0=y0ay'_0 = y_0 \cdot a
.
The pool with programmable pricing curve model will maintain a constant product of these virtual balances by using the new inventory function:
xy=kx' · y' = k'
The constant
kkk'k′
can be derived from
kkkk
as follows:
xy=kx0y0=k(x0a)(y0a)=kk=ka2xy=ka2x' \cdot y' = k' \\ x'_0 \cdot y'_0 = k' \\ (x_0 \cdot a) \cdot (y_0 \cdot a) = k' \\ k' = k \cdot a^2 \\ x' \cdot y' = k ⋅ a^2
We see that users benefit from lower spread and slippage when the pools use the new pricing curve. However, this comes at the expense of the price range no longer being unbounded, but being restricted between a fixed price range.
Let us take a pool with amplification factor 2 as an example, where the virtual balances are double the real balances in the original constant-product model. The price range support for this is from
P04\cfrac{P_0}{4}
to
4P04P_0
. In other words, this particular pool can support 0.25x to 4x the initial price set. Should this price range be exceeded, it would result in the pool being depleted of one of the tokens.
The inventory curves of BlueLotusDAO and programmable pricing curve are visualized in figure below.
Inventory curves of Uniswap (red), Curve (green) and programmable pricing curve (cyan)

Price ranges in the Amplification model

To illustrate mathematically:
Let
  • PP
    be the price function of
    XX
    against
    YY
  •  Initial price,
    P0=y0x0P_0 = \cfrac{y_0}{x_0}
  • Pmin,PmaxP_{min}, P_{max}
    , the minimal and maximal price supported by the programmable pricing curve respectively
Therefore, to compute the minimal and maximal price:
Pmax=P0(aa1)2Pmin=P0(a1a)2P_{max} = P_0 \cdot (\cfrac{a}{a-1})^2 \\ P_{min} = P_0 \cdot (\cfrac{a-1}{a})^2
The pool will run out of token
XX
or
YY
when the real balances
x0x_0
and
y0y_0
are zero respectively.
In summary, we see that users benefit from lower spread and slippage when the pools use the new pricing curve. However, this comes at the expense of the price range no longer being unbounded, but being restricted between
PminP_{min}
and
PmaxP_{max}
.
Functions of price ratio
PminP_{min}
(red), 1 (cyan), and
PmaxP_{max}
(purple)
Inventory curves of two reserves: Uniswap V2 swap model (green), Amplification model (purple)