Calculating Fees within DeFi Vaults — Covered Call Example
With the evolution of DeFi, and especially asset management protocols on the blockchain, users want to understand what type of fees they are paying for when using these protocols, and how these fees affect their overall performance and yield.
There are two types of fees you may come across, withdrawal fees and performance fees. Withdrawal fees are taken only when you withdraw assets from a vault, and are taken on the total amount withdrawn, your total assets. Performance fees are taken at the end of each period or epoch (during each rebalance or before the withdrawal if you chose to withdraw after this epoch ends). I am going to go through examples of calculating fees and net of fees performance below. These examples look at performance fees that are taken only on the yield a vault received, and only if performance is positive.
But what is performance in this case? People may have different views on what performance is based on how they measure their assets, meaning what coin/token they use as a base currency (numeraire). Let’s go through two different examples using a stylized SOL Covered Call scenario. We will measure performance in two different ways, first looking at everything through the lens of SOL, then looking at everything with USDC as our base.
Stylized Example Set up
This is the same example I used in my previous article, Covered Call Strategies in DeFi.
Let’s set the withdrawal fee to 0.1%, and the performance fee is 10%.
Say SOL is currently $200 and you deposited 1 SOL into a covered strategy which is writing a call option at a strike price of $220 expiring in 1 week, collecting a $10 (0.05 SOL or 5%) premium.
Scenario 1
SOL expires at 200 USDC, so the call expires worthless. SOL has moved 0% versus USDC
SOL Base - You collect 10/200 = 0.05 SOL (5% yield) gross of fees
- The performance fee at the end of the epoch would be 10% * 0.05 = 0.005 SOL
- So total performance net of performance fee of the epoch would be 0.045 SOL, and your value that would compound at the end of the epoch is 1.045 SOL
- The withdrawal fee at the end of the epoch would be 0.1% * 1.045 = 0.001045 SOL
- If you withdraw at the end of the epoch you would have 1.043955 SOL
- Total performance net of all fees is 4.4% (or 0.043955 SOL)
USDC Base - You collect 10 USDC gross of fees
- The performance fee at the end of the epoch would be 10% * 10 = 1 USDC
- So total performance net of performance fee of the epoch would be 9 USDC, and your value that would compound at the end of the epoch is 209 USDC (=1.045 SOL)
- The withdrawal fee at the end of the epoch would be 0.1% * 209 USDC = 0.209 USDC
- If you withdraw at the end of the epoch you would have 208.791 USDC (=1.043955 SOL)
- Total performance net of all fees is 208.791 / 200 - 1 = 4.4% (8.791 USDC)
Scenario 2
SOL expires at 150 USDC, so the call expires worthless. SOL has moved -25% versus USDC
SOL Base - You collect 10/150 = 0.0667 SOL (6.67% yield) gross of fees
- The performance fee at the end of the epoch would be 10% * 0.0667 = 0.00667 SOL
- So total performance net of performance fee of the epoch would be 0.06 SOL, and your value that would compound at the end of the epoch is 1.06 SOL
- The withdrawal fee at the end of the epoch would be 0.1% * 1.06 = 0.00106 SOL
- If you withdraw at the end of the epoch you would have 1.05894 SOL
- Total performance net of all fees is 5.89% (or 0.05894 SOL)
USDC Base - You collect 10 USDC gross of fees
- The performance fee at the end of the epoch would be 10% * 10 = 1 USDC, but you lost 50 USDC by holding the 1 SOL from 200 to 150
- So total performance net of performance fee of the epoch would be -41 USDC (150 - 200 + 10 - 1), and your value that would compound at the end of the epoch is 159 USDC (=1.06 SOL)
- The withdrawal fee at the end of the epoch would be 0.1% * 159 USDC = 0.159 USDC
- If you withdraw at the end of the epoch you would have 158.841 USDC (= 1.05894 SOL)
- Total performance net of all fees is 158.841 / 200 - 1 = -20.58% (-41USDC)
Scenario 3
SOL expires at 235 USDC, so the call expires in the money SOL has moved 17.5% versus USDC
SOL Base - You deliver 1 SOL for 220 USDC (the vault converts the USDC received back to SOL, so 220/235 = 0.936 SOL) and you collect 10/235 = 0.042 SOL. So your total SOL is 0.978 and total performance gross of fees is -0.02 SOL
- The performance fee at the end of the epoch would be 0 because the performance during the epoch was negative
- The withdrawal fee at the end of the epoch would be 0.1% * 0.978 = 0.000978 SOL
- If you withdraw at the end of the epoch you would have 0.977 SOL
- Total performance net of all fees is -2.23% (or -0.0223 SOL)
USDC Base - You collect 10 USDC gross of fees, you deliver your 1 SOL for 220 USDC, so total performance gross of fees is 30 USDC (220 - 200 + 10), and you value that would compound at the end of the epoch is 230
- The performance fee at the end of the epoch would be 0 because the performance during the epoch was negative (in SOL terms)
- The withdrawal fee at the end of the epoch would be 0.1% * 230 USDC = 0.230 USDC
- If you withdraw at the end of the epoch you would have 229.77 USDC (= 0.977 SOL)
- Total performance net of all fees is 229.77 / 200 - 1 = 14.89% (29.77 USDC)
Breakeven Yield
It’s possible to calculate what yield you need to breakeven given these fees. Below is a quick algebraic proof. Let X be your initial deposit (a constant). Let y be the yield we are solving for. 0.001 is the 0.1% withdrawal fee and 0.1 is the 10% performance fee.
Ending Asset Balance Net of All Fees = (1–0.001) * X * (1 + y (1–0.1))…. Set that to X, so we can solve the breakeven yield.
(1–0.001) * X * (1 + y (1–0.1)) = X
0.999 * X * (1 + y (0.9)) = X
0.999 * X+0.8991 * X * y= X
0.8991* X * y = 0.001 * X
y = 0.001/0.8991
0.111222333444555666777888999111222…..% (keeps repeating, pretty cool number in my opinion)
So the yield needed to get back to your initial deposit after all fees is roughly 0.111%. Anything higher than that yield means you will have positive performance. This is all assuming that the written option is not exercised.
Conclusion
My preferred option asset management protocol is Friktion . They think of the world with SOL as its base, so all performance fees are based on SOL numeraire performance. But many people use a different token, or fiat, to monitor their own performance. Hopefully this helps clear up any confusion around how fees are calculated, and gives you an idea on how to monitor net of fee performance.
Good luck and happy degening.
About the Author
For full disclosure I mostly use Solana for DeFi, because I don’t have enough assets to justify Ethereum gas fees. I have a little bit in Algorand, Cardano and Polkadot DeFi. I am actively involved in multiple Friktion volts and a contributor in their Discord, and am beta testing Dappio Wonderland 🐰.
I am invested in SOL, ADA, ETH, DOT, ALGO, MIOTA along with plenty of other tokens.
This is not Financial Advice!