Convex Helper Vaults: Suboptimal Harvest Paths Post-Mortem
In mid August, community members flagged an ongoing issue with the ROI showing for the CVX and cvxCRV Helper Vaults. As we dug deeper into the issue, we uncovered a suboptimal trading path in the harvest function.
As a result, the team decided to stop harvesting these vaults at 4:00 PM EST on August 22nd until a suitable solution was found to rectify the situation.
What went wrong?
As indicated on the harvest transaction shared below, the core problem was the hop during swaps between wETH to cvxCRV while harvesting StrategyCvxCrvHelper and StrategyCvxHelper without first hopping over the CRV. This translated into losses while swapping through a non-optimal/illiquid route every time a harvest was triggered.
- CVX → wETH → cvxCRV route for CVX to cvxCRV
- USDC → wETH → cvxCRV route for USDC to cvxCRV
The cvxCRV/wETH pool has less than $1M in liquidity which is fine with low AUM. As AUM increased, our trades naturally became larger and with less frequent harvests due to higher than usual gas fees, the size of trades grew even further. As a result, the slippage on these trades became quite significant.
Our Analytics and QA teams got together to analyze the problem and update the harvest strategy with new paths.
- CVX → wETH → CRV → cvxCRV route for CVX to cvxCRV
- USDC → wETH → CRV → cvxCRV route for USDC to cvxCRV
The new harvest strategies have been deployed on-chain, and the 48 hour timelock to update the strategy was set 12:37 UTC on September 1st, 2021. This means that the Dev Multisig will be able to deploy the new strategies as early as Thursday evening. At this point, the Price Per Share of bCVX and bcvxCRV will increase to incorporate all of the earnings since their last harvests.
Following this we will resume normal harvests, which take place every 2-3 days. We hope to increase frequency when gas prices normalize. We are also now using Flashbots to mine our harvests privately, preventing them from being front-run by bots.
Our analytics team took the time to quantify the losses of the two vaults along their lifespan comparing the non-optimal path at every harvest with the optimal path at the same block of execution.
Their findings were as follows:
Lost CVX = 572.6939065620006 ($4,066.12) in CVX Helper SETT
Lost CVXCRV = 29,337.26214744509 ($66,302.21) in cvxCRV Helper SETT
The losses represents 0.058% and 1.44% of current AUM for the CVX and cvxCRV Helper Vaults respectively.
Below is one harvest tx hash that suffered from the patch glitch:
We realised that something was wrong with the swapping path that our harvest function was taking, watching nearly 2K USDC become 34.12 cvxCRV and 1.28k CVX become 159.3 cvxCRV.
Analytics on harvest history
Queue tx hashes:
Making our users whole:
With a healthy treasury intact the incredible support we have received from the Convex community, BadgerDAO has decided to cover the trading losses. This however is an isolated event and may not be the course of action taken in future.. Thank you to our community for bringing this to our attention, and being persistent.
The lost funds will be injected into the appropriate vaults which will ultimately increase the price per full share of each. By the time harvests have been run and the capital has been injected, anyone who has deposited into these vaults should see performance very similar to the returns one would achieve by conducting the farming activities Badger automates for you.