* Stab at Legendre custody construction + some tests
* Fix some problems and fix function puller to remove phase0 only lines in phase1
* Pass the linter
* Add headings
* Fix domain for BLS stub
* Change Jacobi to Legendre
* n -> q to clarify notation
* Headings
* Another missing heading
* Custody subchunks via padding
* Fix max_reveal_lateness stuff
* Better names for reveal period functions
* Better parametrization of max_reveal_lateness computation and tests for custody reveal processing
* Fix linter
* Allow challenging for one period after the custody reveal, shorter periods for minimal tests
* Fix lint
* Fix linter error
If the exit queue is very long, then a validator may take many months to exit. With the code as currently written, however, self-slashing is a potentially lucrative route to get one's money out faster, because one can exit in 36 days.
This PR changes it so that slashing can only extend your withdrawal time, not contract it. Also, instead of the slashed balances used to calculate one's slashing penalty being those in `[withdrawal - 54 days ... withdrawal - 18 days]`, we now run the penalization algorithm once every 36 days that a validator is slashed but not withdrawn, so that it covers the 36-day period where the validator was actually slashed. It also moves the minimum slashing penalty to the `slash_validator` function so that it is only applied once.
We also simplify the `slashed_balances` logic to be per-epoch.
This was dropped in a376b6607fe5e6406371f44254960e891ee5ee8d, as improvement in dust checking.
Now that dust-checking is done, we still need to check if the sender has the minimum value, as decrease balance just clips to 0.
See be86f966f87958856584b3f20c095abf910a3d0c for older dust-creation problem work around, which was dropped in the above.
The bug enabled you to transfer your full balance to someone else, and pay the same amount in fee, possibly to a puppet proposer to collect back funds.
Effectively enabling printing of money. Silly bug, good to fix and introduce tests for.