Problem
The Comptroller contract stores a Liquidation Incentive parameter, which is currently 8%. This incentive is used to entice liquidators to perform liquidations.
Lately, “predatory” liquidators have begun burning the liquidation incentive in gas fees, earning no profit for themselves, and transferring all profit to miners (MEV).
While this is effective at de-risking the protocol (in the short-term), it is driving community liquidators out of business. The quantity, and diversification of liquidators is what provides safety for the Compound protocol. If the predatory liquidators are successful at discouraging community liquidators, the health of the protocol will be jeopardized.
Improvements to the liquidation process are needed.
Possible Solution
The liquidation incentive can be split between the liquidator (5%), and the protocol reserves (3%). This brings multiple advantages:
- Regardless of whether the liquidator is friendly or predatory, the liquidation increases reserves, which benefits the users (safety), and COMP token-holders
- Cascading liquidations pose less of a risk to the protocol; each liquidation increases the cushion for the next liquidation
- The threshold at which the protocol suffers insolvency from a single address improves by 3%. This is because the “break-even” health of a user is ~ (Collateral Factor + Liquidation Incentive); the larger the liquidation incentive, the less collateral available to protect the protocol
Second, the gas costs of liquidations can be optimized; reducing the gas required to liquidate, and limiting gas battles – which will benefit community liquidators.
Trade-offs / Risks
Decreasing the liquidator incentive to 5% may reduce willingness to liquidate.
Counter-argument: prior to the cascading liquidation / sell-off in March 2020, the Liquidation Incentive parameter was set to 5%; this was sufficient to always incentivize liquidation on a first-come first served basis. It was raised to 8% out of precaution (during an extremely volatile week).
Potential Improvements
cToken
[core] In seizeInternal(), transfer 97% of the seizetokens to the liquidator, and 3% of the seizetokens to the Comptroller
- Store a third balance in memory for ComptrollerTokensNew
- Emit event for second transfer (to Comptroller)
- Note: this math would actually be 3.24% incentive going to the protocol, 4.76% to the liquidator (based on math!), which is OK - you could also calculate the right ratio
[optional] Liquidation gas optimizations
The cToken and Comptroller have myriad opportunities for small iterative improvements to gas cost, including graceful failure info, duplicated checks (e.g. for freshness, borrower=liquidator), etc. There may or may not be low-hanging fruit.
Comptroller
[optional] In liquidateBorrowAllowed(), require that tx.gasprice is below an arbitrarily (yet reasonable) threshold, e.g. 2,000 gwei; this would limit gas-racing to MEV
[optional] In liquidateBorrowAllowed(), only check the closeFactor for borrow balances over $100,000; this would allow fully closing small borrowing positions, which is more gas optimal
Deployment / Rollout
The core incentive changes would be at a cToken level, and would only apply to upgradable (2nd generation) cTokens, including DAI, USDT, UNI, and COMP, which would be upgraded through a governance proposal.
The major collateral markets, ETH & WBTC, would have to migrate to upgradable cTokens - which is a long-standing goal - for which these liquidation improvements are a good catalyst.
Future Improvements
- Dynamically weight the incentive between liquidator and protocol; accounts that are deeply unprofitable could carry a larger weighting towards the liquidator (e.g. 8%), incentivizing the closure of the most at-risk accounts first.
- Adjust the incentive based on a function of time (similar to an auction model)