Limit arbitragers profit to 15%

The Problem

USDN is currently heavily depegged — its market price is ~2 USDN per 1 USD.
BR value is ~9%, so the BR Protection is enabled. This means that USDN to WAVES swaps redeem 9% in WAVES and 91% in SURF, which makes arbitrage impossible.
If the BR value goes up and the BR Protection mechanics gets disabled, the arbitrageurs will be able to make ~100% extra profit due to heavy depeg. The extra profits will be made at the expense of the contract reserves, and in the current conditions this is unacceptable.

The Neutrino team realized this problem while developing the multi-collateral swaps, and we came to the conclusion that it is necessary to limit the maximum possible profits made by arbitrageurs during the conditions of heavy depeg.
We also noticed that some users offered similar ideas (idea1 and idea2) lately, so we hope that the Neutrino community approves it.

What do you suggest to change?

As it was stated earlier, USDN will become a soft peg token. However, we want to avoid draining the Neutrino reserves by arbitagers because of the big depeg. We suggest limiting the maximum possible USDN->WAVES arbitrage profit to 15%. (WAVES->USDN remains as is and use original WAVES/USD price)

How we want to do it:

We suggest unbinding USDN from the hard peg on the contract and “let it float”.
To do so, we modify the WAVES/USD price, that is currently provided by the oracle, by means of the the following formula:

where,

  • minCoefficient is the min coefficient value. This value is needed to protect the system from attacks. It will be explained below. We suggest initially setting it to 0.6.

  • peg is USDN/USD price. This value will be provided by the oracle, similarly to how it works for WAVES/USD price.

  • arbRegulator is the coefficient that allows limiting the profit of arbitrageurs. We suggest initially setting it to 0.15, so the max possible arbitrage profit is 15%.

BR and newPrice

We also suggest using the newPrice to calculate BR value, which will enable USDN->WAVES swaps. At the same time, it is important to note that:

  • The BR Protection mechanics will still work.

  • USDN->WAVES Max Swap Amount is significantly reduced based on the proposal.

  • In the case of successive long-term arbitrage, USDN peg will tend to 1, which will also serve as additional protection, since the BR protection starts working.

Calculating BR based on newPrice will allow to:

  • Stabilize current USDN price.

  • Enable arbitrage in a controlled manner and environment.

  • Swap USDN with lower losses for the contract.

Why do we need minCoefficient?

minCoefficient is needed to avoid attacks on the BR by means of dumping USDN/USDT price. Such attacks could keep BR at a level higher than BR Protection and continuously swap USDN->WAVES in order to drain the reserves.

Why do we need to enable arbitrage now?

The Neutrino team needs more time to test and implement the multi-collateral swaps in safe manner (ETA is the end of Jan or beginning of Feb). Also, we came to the conclusion that the mechanics offered in this document will also be needed in the version with the multi-collateral swaps, so that we can limit the huge profits made by arbitrageurs. At the same time the offered mechanics are technically not complicated to implement (about 3 days) and quite safe due to the reduced Max Swap Amount. It allows us to stabilize and balance USDN price right now, while we are implementing the multi-collateral swaps.

Example of the limited arbitrage

Example 1: how does the arbitrage limit work?

Input parameters:

  • WAVES/USD contract price: 1.416
  • USD/USDN price, Waves.Exchange: 1.8
With the current (old) mechanics:

A user exchanges 500 USDT to 900 USDN on the market.

Then the user swaps 900 USDN to 645 WAVES and exchanges the WAVES to 900 USDT on the market. (fees are not considered here)

In this case the user makes 400 USDT, which is 80% profit.

With the suggested (new) mechanics:

newPrice on the Neutrino contract will be 2.216348

A user exchanges 500 USDT to 900 USDN on the market.

Then the user swaps 900 USDN to 406 WAVES and exchanges the WAVES to 575 USDT on the market.

In this case the user makes 75 USDT, which is 15% profit.

Example 2: how does the minCoefficient work?

Input parameters:

  • WAVES/USD contract price: 1.416
  • USD/USDN price, Waves.Exchange: 2.1
With the current (old) mechanics:

A user exchanges 500 USDT to 1,050 USDN on the market.

Then the user swaps 1,050 USDN to 741 WAVES and exchanges the WAVES to 1,050 USDT on the market. (fees are not considered here)

In this case the user makes 550 USDT, which is 110% profit.

With the suggested (new) mechanics:

Since depeg is so big, the priceCoefficient is based on 0.6 (minCoefficient) value
newPrice on the Neutrino contract will be 2.36

A user exchanges 500 USDT to 1,050 USDN on the market.
Then the user swaps 1,050 USDN to 444 WAVES and exchanges the WAVES to 630 USDT on the market.
In this case the user makes 130 USDT, which is 26% profit.

This example shows that in case of a big depeg the BR value will depend on const minCoefficient 0.6 value. Meaning that it is impossible to manipulate BR even if USDN depeg is big. Arbitrageurs will have stronger incentive to stabilize peg.

To play more, see examples in the Google Sheet.

Very confusing, the idea is to limit the arbitrage profit to 15%, but the second example results to 26% profit. And you state that arbitrageurs have stronger incentive to stabilise peg, but bigger depeg, results to more profit.
The idea of the direction is good, current form already limits the SC drain, but it doesn’t do what you layout.

Please amend formula or change your statement.

2 Likes