[GIP-27] Bound LUSD oracle price by $1.1

This forum post is published by yaron on behalf of riskdao.org

Summary

Deploy a new price oracle for LUSD that bounds LUSD price by $1.1.

Motivation

At the time of writing, buying $6m of LUSD in the market would temporarily (*) pump its price by over 20%, and $10m buy pressure would effectively drain the entire LUSD buy liquidity. This could give rise to a price manipulation attacks (aka “profitable trades”) once the credit account caps are lifted (with the current limit an attack would not be profitable).

LUSD is notoriously traded above $1 (currently traded at $1.03). It has an healthy amount of sell liquidity, which allows liquidators to easily sell it during liquidations, but very low buy liquidity.
Its main source of liquidity, namely, Curve Finance currently has only 5.5m of LUSD available for buy. In addition Uniswap has additional 3m of liquidity, and would not be able to absorb significant buy pressure.

(*) The LUSD system has an internal mechanism to let arbitrage bots profit when LUSD is traded above $1.1, however, there are no on-chain evidences that such bots were ever activated. Since inception, LUSD was traded above $1.1 in three different occasions, and our analysis shows that the internal LUSD mechanism was not used in those cases, and instead Uniswap liquidity was used to arbitrage the price below to $1.1.
Hence, we have concerns that currently there are no bots waiting to invoke this arbitrage, and it might take a while before LUSD internal mechanism is activated, and during this time Chainlink will quote a price that is higher than $1.1.

In the presence of this uncertainty we believe that without introducing a sanity mechanism for LUSD price, it would be problematic to raise the credit account caps in the future.

Edit: it should be noted that it is proposed to set it up only for LUSD, and not to:
LUSD3CRV, cvxLUSD3CRV, and stkcvxLUSD3CRV. As for LUSD3CRV the oracle implementation already takes the minimum among LUSD and the 3CRV (3Pool token), and the value of 3CRV is not expected to be over $1.

Implementation

The bounded oracle smart contract implementation is available here.
The contract will be deployed and the Gearbox DAO will set it as the LUSD price oracle, and will call BoundedPriceFeed::setUpperBound(1.1e8).

smart finding. agree on adding an upper bound like it was implemented on Curve/Yearn price oracles.

btw, what was historical max value for LUSD? Seems 1.07?

Take a look in this tx:
https://ethtx.info/mainnet/0xca34aa021b766ce9442ed34ff37cde6c265141f3676a24b2bda1ec1e8391609f/

556,924 were sold for 708,929 USD.
$1.27 LUSD per token.
This is actually an arbitrage for a trade that happened earlier and pumped the price to that level.

1 Like

Snapshot:

https://snapshot.org/#/gearbox.eth/proposal/0x946503b110a8a1e4659c6ab7828f2f65acbb0b5d7732c4c86ee329b023817a05

1 Like

Done:

1 Like