-
Notifications
You must be signed in to change notification settings - Fork 720
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
[FR] - Alternative pledge benefit factors in rewards equation #1518
Comments
I'm not sure if this should be a CIP or if there is a process for that yet but thought I would get it into the issue tracker since I have been discussing this on Twitter and the Cardano Forums. |
I have always thought that pledge should be treated differently. Currently there are no real incentives to pledge since the reward difference between 0 pledge and 500k pledge is insignificant, basically a small fraction of a percent. This opens the way to scammers/bad actors as POs with absolutely no skin in the game, and no interest in sustainability of Cardano protocol; who will create a race to the bottom with negative consequences. Pledge should be implemented as a non-linear relationship (reward potential vs pledge) in the range 0 to 500k; then linear all the way up to maximum pledge. At the same time I believe that max pledge should not be the saturation point, as it is now, because it simple means that private pools have a enormous advantage as compared to ordinary pools. Maybe an idea would be max pledge = 1/3 of saturation point we have the a0 factor that can control the pledge importance. Under current implementation, when a0 increases from expected 0.3, the situation becomes even worse in favor of private pools. If a0 is decreased from 0.3, then 0 pledge pools would become even more important players. This shows that a linear relationships does not work. imo the only way that a linear relationship can work is making use of a min pledge (entry point) |
Using a curve both below and above the crossover point instead of having a max pledge means there is no hard limit, only incentives which seems to have been a design goal. |
From the discussion on the Cardano Forums at I realized that I was using the active stake (estimated at 22b) rather than the total stake (estimated at 31b) in the rewards calculation. Because the a0 pledge benefit is spread over the pledge range from 0 to saturation there is a dependence on k and total_stake. One possibility would be crossover = total_stake / (k * crossover_factor) where crossover_factor is any real number greater than 0. Also, we can generalize the alternative approaches to parameterize the curve exponent. s = pow(pledge, (1 / curve_exp)) * pow(crossover, ((curve_exp - 1) / curve_exp)) / total_stake The curve_exp could be set to any integer greater than 0 and when set to 1 produces the current rewards equation. |
Hi all, The Specification section of the proposal is as follows: This is a modification of the maxPool function defined in section 11.8 Rewards Distribution Calculation of “A Formal Specification of the Cardano Ledger”. maxPool = (R / (1 + a0)) * (o + (s * a0 * ((o - (s * ((z0 - o) / z0))) / z0))) where: The idea is to replace s in the above equation with an n-root curve expression of pledge rather than the linear pledge value. We use an expression called crossover to represent the point where the curve crosses the line and the benefit in the new and original equations is identical. crossover = total_stake / (k * crossover_factor) where crossover_factor is any real number greater than or equal to 1. Also, we can parameterize the n-root curve exponent. s = pow(pledge, (1 / curve_root)) * pow(crossover, ((curve_root - 1) / curve_root)) / total_stake The curve_root could be set to any integer greater than 0 and when set to 1 produces the current rewards equation. By making this modification to the rewards equation we introduce two new protocol parameters, crossover_factor and curve_root, that need to be set thoughtfully. The Test Cases section is as follows: See rewards.php for some simple PHP code that allows you to try different values for crossover_factor and curve_root and compare the resulting rewards to the current equation. An interesting set of parameters as an example is: curve_root = 3 Running "php -f rewards.php 3 8" produces: Assumptions Curve root: 3 Pledge Rewards Benefit Alt Rwd Alt Bnft As you can see this gives meaningful pledge benefit rewards to pools pledging less than 1m ADA. |
Filing this as a CIP was the appropriate thing to do - closing this ticket. |
Internal/Exernal
External
Describe the feature you'd like
A better pledge benefit factor in the reward equation that would increase incentives for pool operators to pledge thus increasing Sybil attack resistance while reducing exorbitant rewards for private and whale pools to a more reasonable amount.
Describe alternatives you've considered
I came up with a couple alternative reward equations that use curves for the pledge benefit rather than the current linear benefit.
Alt2 substitutes the square root of pledge times the square root of crossover where crossover is the amount of pledge where the benefit is the same for the curve and the line.
That is sqrt(pledge) * sqrt(crossover) in place of pledge in the reward equation.
Alt3 substitutes the cube root of pledge times the square of the cube root of crossover.
That is pow(pledge, 1/3) * pow(crossover, 2/3) in place of pledge.
In the example below I use 5 million ADA pledge as the crossover point where the benefit of pledge is equal in all 3 formulas.
Assumptions
Reserve: 14b
Total stake: 22b
Tx fees: 0
Fully Saturated Pool
Rewards available in epoch: 29.3m
Pool saturation: 146.7m
Why does any of this matter?
With the current reward equation there are 2 major problems.
Pools pledging less than 500k ADA see less than 0.1% reward benefit.
This is not a strong incentive for pool operators as at current prices that is more than $60k USD.
Private pools and whale pools get massive reward benefit without providing any additional protection against Sybil attacks. Why should a private pool make 29% more rewards than a pool with 5m ADA pledge while doing the same work?
The Alt2 and Alt3 versions show a much more reasonable distribution of pledge related rewards than the current version while encouraging meaningful pledges from more pool operators thus making the network more secure against Sybil attacks.
Below is the code used to generate the examples above.
Please correct me if I have translated the reward function incorrectly.
The text was updated successfully, but these errors were encountered: