Skip to content
This repository has been archived by the owner on Mar 18, 2019. It is now read-only.

Latest fee model ideas

Daniel Wang edited this page Aug 4, 2018 · 8 revisions

Latest fee model ideas

Kyber integration

Current ideas depend heavily on a Kyber integration which allows us to

  • market buy LRC using other tokens at current market prices
  • query the conversion rate between LRC and other tokens at current market prices

We are limited by the tokens Kyber supports for this.

Default fee model using LRC exclusively for fee payments

All fees need to be payed in LRC and holding LRC will give a 50% discount on trading fees. This is achieved as follows.

If the order specifies it wants to pay X LRC we first check if the order can pay the complete X LRC. If he has all X LRC necessary for the payment, the miner/wallet is payed X LRC. If the order cannot pay the complete X LRC we will market buy 2X LRC using Kyber. X LRC is burned and X LRC is sent to the miner/wallet. The token used to buy LRC is (from top to bottom):

  1. WETH
  2. tokenB (if WETH is not supported by Kyber)

We do not consider using tokenS to purchase LRC as tokenS might all be sold to the next order in the ring. We do not want to re-calculate fill amounts because of fee exchange.

If none of the above can produce the needed amount of LRC, the ring cannot be settled.

Wallets should configure the percentage part of the fees (p) he wants, not the miner. By mining a fee, the miner implicitly accepts (1-p) as his fee, even (1-p) might be 0.

Ideas for allowing fee payments in non-LRC tokens

We want the fee model to be as flexible as possible to allow as many use cases as possible. For this we would need fee payments in tokens other than LRC.

Making payments in non-LRC tokens more expensive than auto-buying LRC

The fee cost would be as follows for a specified fee cost of X LRC:

  1. User holds X LRC, pays X LRC => cost: X LRC
  2. User auto-buys LRC, pays X LRC and burns X LRC => cost: 2X LRC
  3. User pays in non-LRC token, burns for example 2X LRC worth of tokenS => cost: 3X LRC

I think we should only support #1 and #2.

The method used should always be the highest method possible on the list.

An additional mode allowing payments in non-LRC tokens for all fee recipients

We can allow non-LRC fee payments by allowing the fee recipient to burn 50% of the fees he gets in non-LRC in tokens in LRC. In this case, the order itself does not need to buy double the LRC and burn half.

The miner could decide which mode he wants to use.

Allow wallets to be payed in non-LRC tokens

We could still force miners to be payed in LRC, but allow more flexibility with fee payments to wallet. Wallets could be paid in a combination of the following:

  1. a percentage of tokenS (pre-trading)
  2. a percentage of tokenB (post-trading)
  3. an LRC fee percentage (P)

Miners don't need to specify their fee-split percentage in this case. By mining the ring they accept a fee payment of (1-P) of the total LRC fee.

I think in all cases, miners do not specify the fee-split percentage.

Currently, in many cases the miners are also the wallets. So this mode could be used for all fee payments making LRC less important (because just part of the LRC fee is not needed to be profitable).

We need to verify the miner signing address is the same as one of the order owner; otherwise wallets can only get LRC split, no tokenS or tokenB fee are available.

Flexible fee payments with P2P trades

A P2P trade is when the miner is also one of the owners of an order in the ring. In this case we could allow even more fee payments options for the wallet.

Example use case: ICO

Here the ICO platform is the wallet and the ICO participant is the miner because he submits its own order. In this case the ICO platform wants 100% of all fees, so the miner (the ICO participant) will be okay with getting 0%.

This use case falls under the special case of P2P trades.

Fee payment options example

If two users trade such that A gives B 100X and B gives A 10Y, a 1% fee can be payed as follows:

  1. A gives B 99X and receives 10Y (miner gets 1X from B)
  2. A gives B 100X and receives 9.9Y (miner gets 0.1 Y from A)
  3. A gives B 99X and receive 9.9Y (miner gets 1X from A)
  4. A gives B 99X and receives 9.9Y (miner gets 0.1 Y from B)

1 and 2 are post-trading. 3 and 4 are pre-trading.