In this post, I’ll talk about Inverse Finance's new debt repayment contract, how it works and why it's likely to lead to a fairer and quicker repayment for all involved.
Frontier has experienced two price manipulation incidents that have resulted in $8.8 million of depositor debt, at the time of the incident, that is left for the DAO to pay. You can read more here and here. Repaying debt in a fair manner, where sophisticated users don’t hold an advantage, is hard. In the case of Inverse Finance, our most immediate priority has been to make sure that enough liquidity enters the system so that remaining loans can be liquidated. Had we not prioritized that, even more bad debt would have built up over time. However, as all liquidity that entered the system was sniped by liquidators, and any leftovers were quickly scooped up by sophisticated users running bots leaving regular users on the bottom rung, it was clear something had to be done.
So what are the qualities we want to see in a good debt repayment process?
A fair ordering of payouts
A speedy repayment
Low transaction fees
There are a few different approaches that could be tried for this. One way would have been a Tanda, where a repayment amount is offered out as a lottery every week, and participating addresses are chosen at random until the debt has been paid in full. While something like this is certainly fair, and gives a fairly speedy repayment for the average user, it has a problem of fairly high transaction fees, while also introducing a lot of complexity.
Another approach would be to let users stake their anTokens, and simply pay out at a pro-rata rate. While more gas efficient, and certainly fair, this approach would have taken painfully long to pay back the full amount. The final debt repayment would be the one to fully pay back every single user.
The New Inverse Debt Repayment Contract The approach we settled on, was the one that would allow us to repay the last debt as swiftly as possible, while still keeping debt repayment fair. So how does it work?
The core idea is to let people pull their money out before others as long as they’re willing to take a discount when doing so. This may sound punitive, but as it is opt-in, it’s a fair ordering mechanism that reduces the total debt burden. This means that every time someone decides to exit early, the date of the last repayment draws a little bit closer. Essentially, users that exit early will push forward the exit date of the last user.
Does that mean users will have to wait until the very end to be able to exit without taking a cut? Not at all. The smart contract works on a reserve basis, where as long as there is 15% or more of underlying tokens stored in the contract compared to the total outstanding debt, users can exit without any kind of cut. What reduction in payout can a user expect below 15%?
It depends on the total amount of reserves. The payout has a linear progression from keeping 45% of book value at 0% reserves, up to keeping 100% of book value at 15% reserves and above.
Both the minimum payout and the reserve requirements are subject to change by Inverse DAO governance, and these are just initial conservative parameters.
Why is this innovative?
This approach allows the market to help the DAO pay off its bad debt more quickly by acknowledging the different time preferences of the affected users. Users with more urgent liquidity needs may opt for the discounted outcome, while others may conclude it is better to wait. Crucially, nobody is forced to exit at a discount. As far as we know, this approach to on-chain debt repayment has not been tried before and we look forward to comments from other DAO’s who study this approach
This was driven as part of a multi-pronged approach to resolving our bad debt, first announced here in May 2022. Resolving a debt of this size, we then agreed, was unlikely to come with a single solution but rather a multi-layered one. Adding this market-based dimension to our plans is part of an ongoing effort to resolve the debt as early as possible. If you’re interested in having a look at the code, you can find it here.