Add Liquidity
Understanding the add liquidity event step-by-step.

The event of adding liquidity requires the following information from the user: 1.
AduA_{du}
Amount of token A to be added 2.
BduB_{du}
Amount of token B to be added 3. Owner
After the information was supplied, the add liquidity function will perform the following activities:

This happens if
i0i≠0
. If
i=0i=0
, it is not required to calculate the option price in the very first liquidity provision in a pool.
For simplicity, let's acknowledge that the option price is a function that required a
MarketData{MarketData}
and an internal vector (
IVIV
) as input.
Pi=fp(IVi1,MarketDatai)P_i=f_p({IV_{i-1}},{MarketData_i})
For more details about the pricing formula or its contract implementation for pricing the options, check this section.
ABPrice variable on _addLiquidity at AMM.sol

If
i=0i=0
,
Fvi=1F_{v_{i}}=1
If
i0i≠0
,
Fvi=TBAi1Pi+TBBi1DBAi1Pi+DBBi1\displaystyle F_{v_{i}}= \frac{TB_{A_{i-1}}\cdot P_i+TB_{B_{i-1}}}{DB_{A_{i-1}} \cdot P_i+DB_{B_{i-1}}}
Since this is the first liquidity provision of the pool, this is
i=0i=0
and therefore,
Fvi=1F_{v_{i}}=1
.
PoolValue factor variable on _addLiquidity at AMM.sol
FImp function at AMM.sol

By the time the pool is created (
i=0i=0
) , the
DBAiDB_{A_i}
and
DBBiDB_{B_i}
will be equal to the
AduA_{du}
and
BduB_{du}
since:
Fvi=1F_{v_{i}} = 1
DBAi1=0\displaystyle DB_{A_{i-1}}=0
DBBi1=0\displaystyle DB_{B_{i-1}}=0
DBAi=DBAi1+AduFvi\displaystyle DB_{A_{i}}=DB_{A_{i-1}} +\frac{A_{du}}{F_{v_{i}}}
DBBi=DBBi1+BduFvi\displaystyle DB_{B_{i}}=DB_{B_{i-1}} +\frac{B_{du}}{F_{v_{i}}}
deamortizedBalance on _addLiquidity at AMM.sol

Updating this factor is essential, especially when there is a re-add liquidity event.
UBAu=AduUB_{A_{u}}=A_{du}
UBBu=BduUB_{B_{u}}=B_{du}
The
UBfuUB_{f_{u}}
works as if it was a snapshot of the pool's factor at the moment of this user's deposit. This factor will be updated in the case of re-add liquidity by the user.
UBFu=FvduUB_{F_{u}}=F{v_{du}}
Updating User Balance (userDepositSnapshot) at _addLiquidity on AMM.sol

TBAi=TBAi1+AduTB_{A_{i}}=TB_{A_{i-1}} +A_{du}
TBBi=TBBi1+BduTB_{B_{i}}=TB_{B_{i-1}} +B_{du}
At the contract level, an ERC20 transfer is happening. Total balance (TB) is just a mathematical representation. The Total balance is checked by consulting the balanceOf() of the pool contract of the respective token (tokenA or tokenB)
Add liquidity ✅
Copy link
On this page
Add Liquidity
1. Calculate factors
1.1 Calculate Option Price
1.2 Calculate the Pool's Value Factor ()
2. Updates
2.1 Update Deamortized Balance of the pool for each token
2.2 Update the User Balances for each token and the Pool Factor previously calculated
2.3 Update Total Balance of the pool for each token