Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CIP-0046? | Prepay Min Fixed Fee #190

Closed
wants to merge 4 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions CIP-PrepayMinFixedFee/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
CIP: ?
Title: Prepay Min Fixed Fee
Authors: Odin Stark <odinspool@gmail.com>, Shawn McMurdo <shawn_mcmurdo@yahoo.com>
Comments-URI: https://forum.cardano.org/t/prepay-min-fixed-fee-cip/81605
Status: Draft
Type: Standards
Created: 2021-08-08
License: CC-BY-4.0
---

## Simple Summary

Create a more fair marketplace for stakepools by paying the minimum fixed pool fee to qualifying pools before calculating pool and delegator rewards.

## Abstract

The current minimum fixed pool fee places a large and unfair burden on delegators to pools with smaller amounts of stake.
This incentivizes people to delegate to pools with higher stake causing centralization and creating an unequal playing field for stakepool operators.
Paying the minimum fixed pool fee before calculating pool and delegator rewards eliminates the imbalance between stakepools with less or more stake allowing for fair competition between stakepools and more fair rewards for delegators to stakepools with less stake.

## Motivation

Paying the minimum fixed pool fee before calculating pool and delegator rewards creates a more fair marketplace for all stakepool operators, gives delegators to pools with less stake more fair rewards, and increases decentralization, which is a goal of Cardano.

## Specification

The minimum fixed pool fee, minPoolCost, will be paid to each pool making at least one block in the epoch out of the total rewards for the epoch before the normal payment of rewards to pools and delegators.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this not make the optimal strategy to create a bunch of pools that only create 1 block per epoch to try and leech as much as possible from other pools?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I keep saying pledge influence relative to total delegated stake is the way to move forward.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this not make the optimal strategy to create a bunch of pools that only create 1 block per epoch to try and leech as much as possible from other pools?

I don't see how this changes the incentives to create multipools at all.
Having multiple pools with your pledge and delegation spread out between them is no better rewards-wise than a single pool.

Copy link

@capexeu capexeu Jan 18, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lets say that you have 1 Pool with 50M Stake and 1M pledge, and a 1% Flex fee, producing ~50 blocks per Epoch.
Now you were to split this into 10 pools of 5M Stake, 100kADA Pledge and still 1% flex fee, with ~5 blocks per Epoch.
In the current calculation method there would be a strong negative incentive to do this, since the delegates would have a very high relative fee in the 5M Stake Pools (~8%), while they have a very low relative fee in the 50M Stake Pool (~1.7%).
In the current calculation this will lead to a very unattractive situation for the delegates.
The SPO will receive 340 + 1% of ~50k = 840ADA in situation 1, but 10340 + 10(1% of 5k) = 3900ADA in situation 2.
This situation will probably not last long since all delegates would leave because of the high fees.

In the proposed calculation the 5M and 50M Stake situation will be equal for the delegates.
For the SPO the difference is still the same as in the current calculation (840ADA vs 3900ADA).
The SPO would take these 10*340 out of the total rewards pool and not from his own delegators, so there is no penalty for this behavior.
Is this a correct interpretation of the proposal? Or am I missing a step here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lets say that you have 1 Pool with 50M Stake and 1M pledge, and a 1% Flex fee, producing ~50 blocks per Epoch. Now you were to split this into 10 pools of 5M Stake, 100kADA Pledge and still 1% flex fee, with ~5 blocks per Epoch. In the current calculation method there would be a strong negative incentive to do this, since the delegates would have a very high relative fee in the 5M Stake Pools (~8%), while they have a very low relative fee in the 50M Stake Pool (~1.7%). In the current calculation this will lead to a very unattractive situation for the delegates. The SPO will receive 340 + 1% of ~50k = 840ADA in situation 1, but 10_340 + 10_(1% of 5k) = 3900ADA in situation 2. This situation will probably not last long since all delegates would leave because of the high fees.

In the proposed calculation the 5M and 50M Stake situation will be equal for the delegates. For the SPO the difference is still the same as in the current calculation (840ADA vs 3900ADA). The SPO would take these 10*340 out of the total rewards pool and not from his own delegators, so there is no penalty for this behavior. Is this a correct interpretation of the proposal? Or am I missing a step here?

It is a good point. It's a fundamental problem of having a minimum fixed fee. Reducing (or eliminating) the min fixed fee would alleviate this problem. Forcing the delegators to smaller pools to pay substantially higher fees is an unfair way to disincentivize pool splitting and causes centralization in the network.
See also CIP-0023 Fair Min Fees.

Only the minimum fixed fee is prepaid. Any difference between the minPoolCost and the pool's declared fixed fee would still be paid out of the pool rewards as is done now.
This proposal does not change the process for payment of the pool variable fee.
This proposal does not change the amount of ADA coming from the reserve or going to the treasury.
It adjusts the payment of rewards to pools and delegators only.

We introduce a cap on the prepaid fees of 2 * minPoolCost * stakePoolTargetNum (aka k or nOpt).
We will call this the prepaidFeeCap.
If there are more than 2 * stakePoolTargetNum block producing pools in an epoch then the prepaidFeeCap is divided equally among all pools making blocks. In this case, each pool will receive somewhat less than the minimum fixed fee as the prepaid part of the pool rewards. The difference between the prepaid amount and the pool’s declared fixed fee would be paid out of the pool rewards as is done currently.


## Rationale

To clarify the rationale and better understand the impact that this change would have, we present the following examples.

Given:
* 4 pools (A, B, C, and D) having total stake of 1m, 5m, 10m, and 50m ADA respectively.
* Each pool has a pledge of 100k ADA, fixed fee of 340 ADA and variable fee of 1%.
* Each pool has an example delegator who stakes 100k ADA.
* In an epoch, the pools have equal luck and perform equally well, making blocks proportional to their stake (A = 1, B = 5, C = 10, and D = 50).
* The total rewards available after treasury contribution is 21m ADA.
* The total number of blocks minted is 21k.

This gives us:
* 21m ADA / 21k blocks = 1000 ADA per block (current)
* (21m ADA - (1000 pools * 340 ADA)) / 21k blocks = 983.8 ADA per block (proposed)
* Current Pool A rewards after fees = 1000 - 340 - (660 * 0.01) = 653.4 ADA
* Proposed Pool A rewards after fees = 983.8 - (983.8 * 0.01) = 974.0 ADA
* Current Pool B rewards after fees = 5000 - 340 - (4660 * 0.01) = 4613.4 ADA
* Proposed Pool B rewards after fees = 4919 - (4919 * 0.01) = 4869.8 ADA
* Current Pool C rewards after fees = 10000 - 340 - (9660 * 0.01) = 9563.4 ADA
* Proposed Pool C rewards after fees = 9838 - (9838 * 0.01) = 9739.6 ADA
* Current Pool D rewards after fees = 50000 - 340 - (49660 * 0.01) = 49163.4 ADA
* Proposed Pool D rewards after fees = 49190 - (49190 * 0.01) = 48698.1 ADA

The table below shows the amount of fees earned by the SPO, the amount of rewards earned by the delegator and the effective fee percent paid by the delegator for each of the 4 pools in the current and proposed models.

| Who | Current | Proposed |
|-------|-----------|-----------|
| SPO A | 346.6 ADA | 349.8 ADA |
| Del A | 65.3 ADA | 97.4 ADA |
| Fee A | 34.7% | 2.6% |
| | | |
| SPO B | 386.6 ADA | 389.2 ADA |
| Del B | 92.3 ADA | 97.4 ADA |
| Fee B | 7.7% | 2.6% |
| | | |
| SPO C | 436.6 ADA | 438.4 ADA |
| Del C | 95.6 ADA | 97.4 ADA |
| Fee C | 4.4% | 2.6% |
| | | |
| SPO D | 836.6 ADA | 831.9 ADA |
| Del D | 98.3 ADA | 97.4 ADA |
| Fee D | 1.7% | 2.6% |

As you can see from this example, a delegator delegating to a pool with 50m ADA total stake receives over 50% more rewards (98.3 / 65.3) than if they delegated to a pool with 1m total stake, even though the pools are performing equally well.
This is a flaw in the current design that causes centralization to popular pools rather than better performing pools.
The proposal creates a much more fair marketplace for stakepools, removes the unfair fee burden placed on delegators to small pools and incentivizes a more performant network while maintaining similar payouts to stakepool operators as they currently receive.

## Backward Compatibility

No backwards compatability is needed.

## Test Cases

Any existing test cases that compare real and expected reward amounts would need to be updated.

## Implementations

This would require changes in the way cardano-node calculates pool and delegator rewards.

## Copyright

This CIP is licensed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode)