(2021-02-23)
Validator Slashing Protection DB Schema Changes
In the Pyrmont Testnet, Prysmatic Labs runs Prysm validators with a large volume of validating keys.
When operating at this scale, we have observed some inefficiencies in slashing protection db lookups.
Particularly, we found that the routine to check whether or not an attestation is known to be slashable
was conducting a full table scan (in BoltDB terms: it was iterating over every key in the bucket). This
type of scan led to lookups exceeding the slot duration and attestations failing due to DEADLINE_EXCEEDED.
This issue was particularly difficult to pinpoint as it was only reproducable on less powerful hardware
and the symptoms eventually resolved after about 30 minutes. @rauljordan wrote an interesting article
about this issue.
🚨 Rolling back to v1.2.x 🚨
As with many schema changes, there is a database migration required. In this case, Prysm is populating an
index with existing data. If you need to rollback for any reason, it is important to unset the migration
in the database so that the migration will occur again when you roll forward to 1.3.0+ in the future.
If you need to rollback to v1.2.x, you must run the validator database reverse migration.
See full instructions on our docs site here.
Notable changes
- Signficant improvements to slashing protection lookups #8460
- /healthz formatting #8472
- Updated go-ethereum dependency. This no longer causes prysm to have ipv4 addresses in ipv6 mapped addresses for discovery packets. #8490
- Implemented eth2api methods #8476 #8456
- Logging improvements #8330 #8457
Full list of changes below
1.3.0 (2021-02-22)
- Add nil check for validator db migration (#8493) (ad9cd19), closes #8493
- Better feature flag logging (#8457) (2c36e65), closes #8457
- Clean Up Go Sum (#8462) (2515dc4), closes #8462
- Constrain read/write channels (#8479) (7d3e53f), closes #8479
- Deprecate Uneeded Flags (#8455) (fe27ca3), closes #8455
- Hide beacon operation field in log if it's 0 (#8330) (d472380), closes #8330
- Ignore Analyzers Package in DeepSource Config (#8467) (1ba414b), closes #8467
- Implement GetFinalityCheckpoints in the beacon API (#8476) (1ae429d), closes #8476
- Implement GetStateFork in the beacon API (#8456) (6f24384), closes #8456
- Reform Inbound Limit (#8465) (6391dec), closes #8465
- Reformat healthz message by adding a comma (#8472) (eea0160), closes #8472
- rmeove methods (#8454) (bf7425b), closes #8454
- Stop Early in Validator Surround Vote Local Protection (#8460) (4f9752b), closes #8460
- Update bazelbuild/rules_go to 0.24.13 (#8463) (fc26505), closes #8463
- Update Geth Fork (#8490) (0f51578), closes #8490
- Use Correct Peer Status Method (#8471) (917252d), closes #8471
- Use Eth2 type CommitteeIndex (#8477) (dc1bec7), closes #8477
- Validator: Annotate attestation error spans (#8451) (558b162), closes #8451