Pods Options
app.pods.financeGithubBlogDiscord
  • Getting Started
  • Understand Options
    • What are options?
    • How do options work?
    • Pricing Options
  • The Protocol
    • Overview
    • Safety Measures
    • Ecosystem Participants
    • Use Cases
  • Options
    • Overview
    • Options Instrument
      • Variables
      • Functions
        • Mint
        • Unmint
        • Withdraw
        • Exercise
    • Smart Contracts
      • OptionFactory
      • PodPut
      • WPodPut
      • PodCall
      • WPodCall
    • Applied Use Cases
    • Understanding Returns
  • Options AMM
    • Overview
    • Options AMM
      • Variables
      • Components
      • Functions
        • Add Liquidity
        • Re-add Liquidity
        • Trade
        • Remove Liquidity
      • Pricing
      • Find The Next IV
      • Fees
      • Scenarios
        • LP Simulations
    • Smart Contracts
      • OptionAMMPool
      • OptionAMMFactory
      • OptionPoolRegistry
    • Applied Math
  • Developers
    • System Overview
    • Deployed Contracts
    • Dev Environment
  • Interfacing with Pods
    • Brand Assets
  • Code Integration Guides
    • Integrating with Pods (video)
    • How To Create Your Own Option
    • How To Create Your Own Pool
    • How To Trade (Buy/Sell)
    • How To Exercise
    • How To Remove Liquidity
  • User Guides
    • Videos
  • Security
    • Audits
  • APPENDIX
    • FAQ
    • Glossary of Terms
  • Additional Resources
  • app.pods.finance
  • Github
  • Blog
  • Discord
  • Twitter
  • Pods v0 Docs
Powered by GitBook
On this page
  • Re-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

Was this helpful?

  1. Options AMM
  2. Options AMM
  3. Functions

Re-add Liquidity

Re-adding liquidity is very similar to add liquidity function, except for how the UB is updated.

PreviousAdd LiquidityNextTrade

Last updated 4 years ago

Was this helpful?

Re-add Liquidity

This event can only happen for users that provided liquidity before. The event of re-adding liquidity requires the following information from the user: 1. AduA_{du}Adu​ Amount of token A to be added 2. BduB_{du}Bdu​ Amount of token B to be added 3. Owner

After the information was supplied, the re-add liquidity function will perform the following activities:

1. Calculate factors

1.1 Calculate Option Price

For simplicity, let's acknowledge that the option price is a function that required a MarketDataMarketDataMarketData and an internal vector (IVIVIV) as input.

Pi=fp(IVi−1,MarketDatai)P_i=f_p(IV_{i-1},MarketData_i)Pi​=fp​(IVi−1​,MarketDatai​)

For more details about the pricing formula or its contract implementation, check . .

2. Updates

2.1 Update Deamortized Balance of the pool for each token

In this step, the AMM saves how much it owes the user at the current Pool Value Factor "expense."

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

At the contract level, an ERC20 transfer is happening. Total balance (TB) is just a mathematical representation. The Total balance is checked by consulting thebalanceOf() of the pool contract of the respective token (tokenA or tokenB)

Re-add liquidity ✅

1.2 Calculate the Pool's Value Factor (FviF_{v_{i}}Fvi​​)

Since the re-add liquidity happens in a given momenti≠0i≠0i=0, FviF_{v_{i}}Fvi​​may not be equal to 1, so there should be a FviF_{v_{i}}Fvi​​calculation. The following formula will trigger the calculation:

Fvi=TBAi−1⋅Pi+TBBi−1DBAi−1⋅Pi+DBBi−1\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}}}Fvi​​=DBAi−1​​⋅Pi​+DBBi−1​​TBAi−1​​⋅Pi​+TBBi−1​​​

DBAi=DBAi−1+AduFvi\displaystyle DB_{A_{i}}=DB_{A_{i-1}} +\frac{A_{du}}{F_{v_{i}}}DBAi​​=DBAi−1​​+Fvi​​Adu​​

DBBi=DBBi−1+BduFvi\displaystyle DB_{B_{i}}=DB_{B_{i-1}} +\frac{B_{du}}{F_{v_{i}}}DBBi​​=DBBi−1​​+Fvi​​Bdu​​

Updating this factor represents combining both deposits considering the time each entered the pool. UBAu=UBAui−1⋅FviUBFu+Adu\displaystyle UB_{A_{u}}=UB_{A_{u_{i-1}}}\cdot \frac {F_{v_{i}}}{UB_{F_{u}}}+A_{du}UBAu​​=UBAui−1​​​⋅UBFu​​Fvi​​​+Adu​

UBBu=UBBui−1⋅FviUBFu+Bdu\displaystyle UB_{B_{u}}=UB_{B_{u_{i-1}}}\cdot \frac {F_{v_{i}}}{UB_{F_{u}}}+B_{du}UBBu​​=UBBui−1​​​⋅UBFu​​Fvi​​​+Bdu​

The UBfuUB_{f_{u}}UBfu​​ works as if it was a picture of the pool's factor at the moment of this user's deposit. This factor will be updated again whenever there is a re-add liquidity event by the same user.

UBFu=FviUB_{F_{u}}=Fv_iUBFu​​=Fvi​

TBAi=TBAi−1+AduTB_{A_{i}}=TB_{A_{i-1}} +A_{du}TBAi​​=TBAi−1​​+Adu​

TBBi=TBBi−1+BduTB_{B_{i}}=TB_{B_{i-1}} +B_{du}TBBi​​=TBBi−1​​+Bdu​

this section
ABPrice variable on _addLiquidity at AMM.sol
FimpOpening variable on _addLiquidity function at AMM.sol
FImp function at AMM.sol
deamortizedBalance on _addLiquidity at AMM.sol
Updating User Balance (userDepositSnapshot) at _addLiquidity on AMM.sol