Problem Set
Currently Lido is spending multiple millions of dollars supporting liquidity in stETH/ETH pools, among others.
If the stETH/ETH exchange rate is <(1-x) where x is a fair liquidity / yield discount, new uesers prefer to buy the existing stETH from existing users, vs minting new stETH.
Therefore, in order for Lido to grow ETH deposits, Lido must maintain a stETH/ETH rate >(1-x).
Given there is structural selling pressure on stETH due to inability to withdraw (for now) and therefore arbitrage until the Shanghai update goes live, Lido essentially subsidizes all buying pressure at a static incentive rate per LP.
We’ve proposed the ratchet as one solution:
This means that month on month, the number of LDO issued is the lower of the previous month LDO issued times a reduction, or a new amount of LDO at the latest USD market price, which means the amount of LDO tends to ratchet down unless there are very large dislocations in market price.
However, this crude control solution solves for reducing spend on liquidity, not necessarily optimizing its outcome. What is missing is a reliable and scientific method for pushing and pulling liquidity only when and where its needed in a programmatic way.
Solution Proposed:
Steakhouse Skewer: PID-regulated Liquidity Control
- Only subsidize stETH/ETH LPs when the structural selling and buying pressures push the exchange rate off the target rate
- Pre-Shanghai, the target rate should be lower than the parity rate (assuming a discount rate higher than the yield due to liquidity premium)
- Use a PID controller method inspired by RAI to determine the correct amount of liquidity incentive for LPs
Overview of PID Controller Method
https://en.m.wikipedia.org/wiki/PID_controller
A PID controller is suitable in systems with a control process and an observed output of that process. Three components introduce a change in the control variable to implement a change in the desired direction for the output, according to different parameters.
The proportional component simply reverses the error, e.g. for a drift of e away from the target level, the proportional component will drive a -K_{p} \cdot e(t) change until the error is zeroed out.
The integral component increases with distance, the longer the drift persists, the larger the response, e.g. for a sustained drift over a period of time t, the integral component will increase by K_{i} \int^{t} e(\tau)d\tau until the error is zeroed out.
The derivative component will react more strongly with change, the sharper the change the larger the response, e.g. for a large market shock, the derivative component will increase more, by K_{d} \frac{de(t)}{dt}.
Application to liquidity
Our proposal for Lido would be to target a level of price drift away from a target rate of 1:1 relative to ETH, or close to it accounting for incentives and fees.
If the price of stETH in ETH terms drifts away from a desired level and arbitrage routes are unable to put pressure on the gap, the liquidity controller would be in charge of supplying incentives to LP pools until the exchange rate stabilized.
This liquidity incentive could be denominated in stETH or DAI. The liquidity controller contract would be loaded with a budgeted or reserve amount and a price oracle with keeper bot triggers would keep the controller functioning to supply its reserve to specified liquidity pools.
By applying a PID controller logic to liquidity discussions we can frame the choice of sizing the liquidity budget from a hard USD or ETH amount to a discussion around the parameters:
- How much proportional response do we want to introduce to respond to a drift in the exchange rate?
- How much do we want to ramp up to push against a drift in the exchange rate over time?
- How strongly do we want to respond to instantaneous changes to the exchange rate?
Benefits
The chief benefit is to move away from a discussion about price levels, USD spend or any other type of one-off argument, and towards a principled discussion about parameter setting.
In the hypothesis that liquidity incentives are ineffective for sustaining the stETH rate, the controller would just drift towards 0 over time.
In the hypothesis that liquidity incentives are effective for sustaining the rate, we focus on tuning the parameters until we get the maximum possible effect for each DAI invested.
Drawbacks
Would likely require substantial implementation time though it could be tested ‘manually’ for effectiveness in the context of the rewards committee.
Ideally, pools would implement a similar mechanism on their end rather than at the protocol level. However, the protocol-level spend remains a primary lever for token holders at the moment.
Acknowledgements
with apologies to rai