Performance Fee


  • Performance fee can be calculated easily and correctly as long as all investors invest and redeem at the same time (i.e. as long as the number of shares in the fund remains constant over time).

  • If investors enter and exit at different points in time, then that can lead to unequal treatment of investors and also of the fund manager. This is due to the fact that the number of shares is not constant over time, and we either have to assume certain values (e.g. the current model assumes that the number of shares throughout the period is equal to the number of shares at the end of the period) or we have to keep track of the exact entry and exit points of each share (which requires a lot of on-chain storage).

  • Performance fee crystallises only after a certain period of time (e.g. after one year or one quarter). This crystallisation period acts as a buffer for short-term fluctuations, and incentivises the fund manager to optimise for long-term performance and not for short-term fluctuations.

  • Performance fee is paid out by creating shares for the manager, conserving the number of shares that investors hold.


  • We divide the fund lifetime into periods with constant number of shares, so called constant share periods. We calculate the performance fee at the end of each constant share period. A constant share period ends, whenever an investor buys shares or whenever an investor redeems shares.

  • Performance fees calculated at the end of a constant share period are allocated into an account, the AggregateValueDue account (which is a liability on the fund's balance sheet).

  • The AggregateValueDue account can increase or decrease, depending on the performance and the number of shares during a constant share period. It cannot become negative.

  • In addition to accounting for AggregateValueDue, shares corresponding to that amount are minted (or burned, depending on the performance), and they are held by the VaultProxy itself. Those shares are called sharesOutstanding. Those sharesOutstanding will be transferred to the manager at the end of the crystallization period (see below)

  • Performance Fee can be paid out to the manager at the end of the crystallisation period (generally a year, or a quarter). The manager has to initiate the transaction. If the AggregateValueDue account has a non-zero balance, the corresponding number of sharesOutstanding is paid out and HWM is set to the new value



  • management fee is already paid out (shares have been minted and transferred to the manager)

  • performance fee for previous periods is not paid out but accrued

  • calculations below can be carried out in the order written down

  • formulas are written in LaTeX notation

Performance fee percentage:


Period number:


Gross asset value (value of assets in fund):


Number of shares (before investment or redemption - EXCL. phantom shares):


High watermark:


Calculate performance fee due

Previous gross share price (read from storage, initially 0):


Current gross share price (i.e. net of management fees, but gross of performance fees due for period)

​gi=GAVi/TSig_i = GAV_{i} / TS_{i}​

Wealth above HWM created during period:

​Wi=(max(hi,gi)βˆ’max(hi,giβˆ’1))β‹…TSiW_i = (max(h_i,g_i) - max(h_i,g_{i-1})) \cdot TS_i​

Performance fee during period:

​Fi=Wiβ‹…x%F_{i} = W_i \cdot x\%​

AggregateValueDue carried over from previous period (read from storage):

​AFi=max(0,AFiβˆ’1+Fi)AF_i = max(0,AF_{i-1}+ F_i)​

AggregatedValueDue after period (write to storage):

​AFi=max(0,AFiβˆ’1+Fi)AF_i = max(0,AF_{i-1}+ F_i)​

NAV after accrual of performance fee:

​NAVi=GAViβˆ’AFiNAV_i = GAV_i - AF_i​

Net share price after accrual of performance fee:

​si=NAViTSis_i = \frac{NAV_i}{TS_i}​

Issue sharesOutstanding

Calculate sharesOutstanding (equivalent of AggregatedValueDue):

​Oi=AFiβ‹…TSiGAViβˆ’AFiO_i = \frac{AF_i \cdot TS_i}{GAV_i - AF_i}​

Load previously minted sharesOutstanding:


New shares to be minted (burn if negative)

​Oiβˆ’Oiβˆ’1O_i - O_{i-1}​

Net share price (different formula, same value as above):

​si=GAViTSi+Ois_i = \frac{GAV_i}{TS_i + O_i}​


Performance fee is accrued (see above formulas)

New investor buys n shares at net share price s_i for a total value of

​Vi=nβ‹…siV_i = n \cdot s_i​

New total supply:

​TSiβ€²=TSi+nTS'_i = TS_i + n​

New GAV:

​GAViβ€²=GAVi+ViGAV'_i = GAV_i + V_i​

or: Redemption

Performance fee is accrued (see above formulas)

Investor redeems n shares at net share price s_i for a total value of

​Vi=nβ‹…siV_i = n \cdot s_i ​

If performance fee is due (i.e. AggregatedValueDue is larger than zero), the redeemers portion of the sharesOutstanding is transferred to the manager. New number of phantom shares is

​Oiβ€²=(1βˆ’x%)β‹…OiO'_i = (1- x\%) \cdot O_i​

AggregatedValueDue in storage is reduced by the redeemers portion:

​AFiβ€²=(1βˆ’x%)β‹…AFiAF'_i = (1-x\%) \cdot AF_i​

New total supply:

​TSiβ€²=TSi+n+x%β‹…s^iTS'_i = TS_i + n + x\% \cdot \hat s_i​

New GAV:

​GAViβ€²=GAViβˆ’ViGAV'_i = GAV_i - V_i​

After investment/redemption

Calculate gross share price (excl. sharesOutstanding) (write to storage):

​gi=GAViβ€²/TSiβ€²g_i = GAV'_i / TS'_i ​

End of Crystallisation Period / Performance Fee Payout

Performance fee is accrued (see above formulas)

If the number of sharesOutstanding is greater than zero:

  1. All sharesOutstanding are transferred to the manager.

  2. AggregateValueDue amount is set to zero.

  3. HWM h_i is set to new value h_i = g_i = s_i (after payout, gross share price and net share price are equal, and HWM is set to that price)

If accrued performance fee is zero:

  1. Do nothing