This change allows for easier maintenance of the code and the spec by
uncoupling them. Before any edit to either document resulted in having to
synchronize the other. By adding a reference to the canonical repo for the code
we avoid having to maintain a duplicate copy here.
The usual convention is that we mark function parameters in docstrings with
double backticks. There is no (longer a) parameter called 'validator' so we
update the docstring to conform to the convention.
In blockprocessing, `crosslink_committee` is not defined. This is a fix.
In Phase 0 this check is redundant since we've already asserted that the
custody bitfield is all zero, but it will matter in later phases.
* Simplify by removing `exit_epoch` in `BeaconState` and `Validator`. (Also less storage for full nodes.)
* Replace with `exit_epoch` when ordering validator with withdrawal. Slight loss of granularity, but that's actually a good thing because it reduces the opportunity for manipulation by proposers.
* (Logic change) Introduce invariant that attestations can be included for `EPOCH_LENGTH`.
* Simplify presentation by related checks into a single line.
* Fix bug whereby `intersection` (replaced by `slashable_indices `) could be non-empty, but no validator gets penalized because they were all already penalized.
* Rename `SlashableVote` to `SlashableAttestation` (for consistency with `Attestation`, and to avoid having "Vote" be a synonym of "Attestation").
* Rename `slot_included` to `inclusion_slot` for consistency with the `_slot` (and `_epoch`) postfix convention
* Homogenise ordering of fields in `Attestation` and `SlashableAttestation` objects (one has an `aggregation_bitfield` instead of the other's `validator_indices`).
* Homogenise ordering of fields in `Attestation` and `PendingAttestation` objects (one has an `aggregate_signature` instead of the other's `inclusion_slot`).
* Light presentation cleanup