Did not find a tracking issue so that this isn't forgotten.
slash_validator(state: BeaconState,
slashed_index: ValidatorIndex,
whistleblower_index: ValidatorIndex=None)
whistleblower_index is always None (meaning the proposer gets all the reward).
In other words, we are looking to learn the rationale of the following statement
In Phase 0 only the proposer gets the whistleblower reward - that is, the proposer gets the whole slashing reward (8/8 of it).
Based on the following facts:
slash_validator() are done using only two parameters, while the function, defined here https://github.com/ethereum/eth2.0-specs/blob/dev/specs/phase0/beacon-chain.md#slash_validator takes three.whistleblower_index: ValidatorIndex=None. If None is given, then the code will execute the statement whistleblower_index = proposer_index.the idea is that a rational block proposer will just take the whistleblower's claim and repackage it for themselves. so in phase 0, we can just go ahead and give the full "whistleblower reward" to the proposer. this differs in later phases where we can discriminate the two actors.
by allowing for a None argument as the whistleblower_index, we can reuse the same rewarding logic in both places, rather than duplicating it across the spec
Is there a financial incentive for running a slasher then?
There is not supposed to be a big enough incentive, as running a slasher should be altruistic. The best you can do is selfishly withhold the slashing and get lucky enough to propose a block in which you can include it
I understand but it seems wrong that there should be no incentive besides altruism, as the protocol relies on slashers to detect wrongdoing, and that running a slasher uses computing resources. Actions that are important for the correct functioning of the network should be incentivized obviously, otherwise how can we rely on them being performed?
From my understanding, it's a reasonable assumption to make because there only needs to be one honest, properly functioning slasher in the world for the protocol to be policed correctly. This is a very low bar to entry, and at least someone will run a slasher, especially given there are optimized implementations of slasher itself. As long as a single individual is altruistic, he should be able to catch slashable offenses
@rauljordan Thanks for the answer. It seems like you are an optimist :-). I still think the protocol would be improved if we incentivized people to run slashers, so we don't rely on goodwill and have more than a single point of failure. Also because of the lack of incentive there is not much interest in running slashers, and as a result not many implementations (for example Teku doesn't have one).
Honestly, I don't see the benefit of not rewarding the slasher slightly (1/8th of the slashing amount). The code simplification mentioned seems irrelevant.
Most helpful comment
the idea is that a rational block proposer will just take the whistleblower's claim and repackage it for themselves. so in phase 0, we can just go ahead and give the full "whistleblower reward" to the proposer. this differs in later phases where we can discriminate the two actors.
by allowing for a
Noneargument as thewhistleblower_index, we can reuse the same rewarding logic in both places, rather than duplicating it across the spec