filecoin-project / specs-actors

DEPRECATED Specification of builtin actors, in the form of executable code.
Other
86 stars 102 forks source link

Adaptive rewards by using remaining amount, instead of using a fixed number at a certain time #377

Closed steven004 closed 4 years ago

steven004 commented 4 years ago

This is a proposal, for better matching what mentioned in Filecoin white paper.

We have designed Filecoin block reward is following an explonential-decay mode with 6-year half-life. Based on this, we could figure out lambda, and how much the decay would be each second precisely (to a reasonable level).

However, the real not is not the same as the ideal one. Due to network latency/jitter/broken, miner's hardware/software failure, etc, the number of blocks in the canonical chain is less than expected in the ideal world. That means, we will not be able to reward as much as it should, and, certainly, the real half-time will be more than 6 years.

One mitigation is to take the remaining rewards into calculation. It may not guarantee the half-life be 6 years exactly, but it will pull it closer. This is reasonable, and the algorithm complexity is the same if not better.

It is simply like:
Reward(t2) = Remaining(t1) * ( 1 - e^(-lambda*(t2-t1)) )

when t2-t1 is a known number (block time in most cases), the equation is much simpler.

anorth commented 4 years ago

Yes please!

davidad commented 4 years ago

While I can confirm that the formula proposed is analytically correct, I'm somewhat concerned about compounding of errors when each epoch's reward is computed by multiplying by the remaining unminted supply from the past epoch, which was computed by multiplying... etc. I'm not confident that the numerical stability is bad, necessarily, but I would have to do some tests to be confident that it is good.

I also agree that there is a problem with the current handling of null rounds, but I'd like to solve this by removing unnecessary dependence about what happened in past epochs. My proposed formula for expected simple minting at epoch t is Total*(e^lambda - 1)*(e^(-lambda*t)), where (e^lambda - 1) is a constant.

steven004 commented 4 years ago

A test will be convincible. I would think you can consider portion of blocks missed due to some reasons, such as network issues, miner failures, or re-orgs. Let's say 5%, it may result in around 0.5 year delay for half-life; while 10% blocks missed, resulting one year delay.

I would expect an adaptive reward will pull it in much.

Kubuxu commented 4 years ago

I think it is very similar to the formulation we had previously: https://github.com/filecoin-project/specs/pull/530

anorth commented 4 years ago

It has been determined by the cryptoeconomic team that we will not implement adaptive rewards in this fashion. There are a bunch of issues with the current reward implementation that need fixing, but the essential function is to remain the same. A reward that is not claimed will simply go on unclaimed, reducing the total reward asymptote that the emission scheme approaches.

Don't shoot the messenger!