Note: this threshold is proposed so that a stop-loss trigger should not be needed (based on historical data), and instead acts as an emergency exit route in an extreme worst case scenario.
- Gro protocol strategies currently provide liquidity to Curve pools through Convex
- Each of these pools include an ‘exotic’ stablecoin (e.g. FRAX) paired with 3CRV
- The respective prices of assets in a Curve pool can change in relation to the weights of the assets in the pool, and broadly reflects the price in the market of that asset (although this can vary)
- When assets are withdrawn from a strategy and the ‘exotic’ stablecoin is underweight in the pool, then slippage (a negative return) is realised in the protocol (more on this below).
- Prices of stablecoins often fluctuate, this leads to trading of those assets in Curve pools which generate fees for the Curve LPs. This is a good thing.
- However if the price of an asset drops relative to DAI/USDC/USDT and doesn’t recover, this will lead to an enduring loss since Gro protocol delivers returns to its users as DAI, USDC or USDC.
- Implementing automated stop-losses will allow the protocol to cut losses before they grow too large, but may also result in taking losses on assets that eventually recover.
Worst possible slippage the protocol would have experienced in the most off-peg stablecoin if withdrawing during the last 12 months would have been 2.7% (alUSD)
When assets are withdrawn from a strategy (by user action, harvest, or updating strategy selection), the 3CRV pool token is withdrawn from a metapool, and then USDC, USDT or DAI is withdrawn from that 3CRV token. If the protocol is withdrawing an asset that is underweight in the pool (because its price is low relative to other pool components) then slippage (a negative return) is realised in the protocol.
The maximum slippage had a strategy withdrawn its current allocation at the worst time during the last 12 months from the most offpeg stablecoin strategy would have been 2.7%.
In order to set the correct level for stop-losses, we have pulled together on-chain data from Curve using Dune Analytics to get the max imbalance in any given pool in the past 12 months.
We have then simulated max total slippage based on these maximum imbalances together with current A factors, pool depths, and strategy allocations.
(1) Highest imbalance, data from STOP-LOSS-V2 and https://dune.com/groworkshop/stoploss-appendix
(3) https://app.gro.xyz; FEI and OUSD placeholder of $5m
(4) calculated using charts set out below
(5) https://curve.fi; withdrawal fee assumes upper bound
Slippage measured in percent (or basis points) can be roughly equated with the price of that asset: e.g. 4% (400bps) of slippage is the same as receiving $0.96c for each $1.00 asset.
Given the maximum exposure of 50% for any one strategy, a 4% loss to an individual strategy would equate to a 2% loss for any given Vault user.
NOTE: this price threshold would need to be continuously breached for a time threshold (20 mins) before the stop-loss is triggered. This is to avoid unnecessary exits where there is a very temporary spike or dip in prices.
- Implemented manually at first, using Discord alert channel to tell core team to enter Emergency mode, update slippage to the detected value, and harvest at that level
- Automatic stop losses are being created as priority and will be implemented soon based on the parameters from this vote
- The data used will be based on actual price realised from a hypothetical Curve pool withdrawal (i.e. it measures slippage when withdrawing the protocol LP position); this may not be identical to the ‘market’ price as it’s affected by a number of other factors (including size of position relative to pool depth and ‘A’ factor of pool)
- We are working on a solution for USDT, as this is part of 3CRV and and will update on that in the coming weeks
This vote will run for 7 days. As an interim measure and in the spirit of caution, the team will manually implement a stop-loss of 400bps across all assets until this vote has passed with a definite answer.
LUSD, A=500, 1.662%, 62m Pool Size
alUSD A=200, 2.660%, 120m PoolSize
mUSD, A=200, 2.251% 65mPoolSize
Frax: A=1500: 0.029%, 1.5B PoolSize
FEI: A=100, slippage 0.869% with poolSize 50m
oUSD:A=100, slippage 1% with poolSize 34m