Strategies boost algorithm

ATTENTION! The project has been shut down! Details can be found at:

https://cadabra.gitbook.io/v2/articles/announcement-of-cadabra-finance-stopping

Everything written below on this and all other pages is no longer relevant and is provided for historical information only. If you continue to use the project website or its smart contracts, you do so at your own risk.

The boost algorithm is as follows:

After each liquidity addition, a user's fixed pool share is calculated as:

Su=LPdepositTVLS_u=\frac{LP_{deposit}}{TVL}

Where LPdepositLP_{deposit} is the value of deposited tokens and TVLTVL is the value of all pools across all chains.

If the user already has a non-zero SuS_u^{} then the new share is added to the old one:

Su=Su+LPdepositTVLS_u^{'} = S_u + \frac{LP_{deposit}}{TVL}

If the user withdraws LPwLP_w amount of tokens out of his total LPuLP_u amount of liquidity then the SuS_u is updated accordingly:

Su=SuLPwLPuS_u^{'}=S_u\frac{LP_w}{LP_u}

At any moment of time a user's working balance is defined as:

WBu=SuTVLWB_u = S_u \cdot TVL

At the end of a reporting period (one day), we have:

  • WBuWB_u — the time-weighted value of the working balance of the user u;

  • Du,sD_{u,s} — the time-weighted value of the deposit by the same user in strategy s;

  • APRsAPR_s — the annual percentage rate (APR) of strategy s

The user's total allocation over which the boost value calculated is:

Du=sDu,sD_{u} = \sum_{s} D_{u,s}

1. User Boost Factor

βu=min(1,  WBuDu)\beta_{u} = \min\left(1,\; \frac{WB_{u}}{D_{u}}\right)
  • 10k in the pool and 100k in strategies → β = 0.1.

  • 20k in the pool (or more) and 20k in strategies → β = 1 (full boost).

2. User–Strategy Position Weight

Wu,s=Du,sAPRsβuW_{u,s} = D_{u,s} \cdot APR_{s} \cdot \beta_{u}
  • APR sets the priority between strategies.

  • A single β applies to all of a user's strategies.

3. Token Distribution

Let RR be the total amount of tokens to be distributed during the period. Total weight:

Wtot=usWu,sW_{\text{tot}} = \sum_{u} \sum_{s} W_{u,s}

The reward that should be allocated to a user for a specific strategy:

Rewardu,s=RWu,sWtot\text{Reward}_{u,s} = R \cdot \frac{W_{u,s}}{W_{\text{tot}}}

If the allocated reward exceeds the reward corresponding to the baseline APR, it is capped at the baseline reward amount:

Rewardu,sbaseline=min(Rewardu,s,  Du,sAPRs)\text{Reward}^\text{baseline}_{u,s} = \min\left(\text{Reward}_{u,s},\; D_{u,s} \cdot APR_{s} \right)

The algorithm starts with the users with the highest Wu,sW_{u,s}, in the case where their reward exceeds the baseline the leftover tokens are simply counted towards the remaining RR

Last updated