fix: switch proposer_duties
table primary key to slot_number
#43
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As title says this PR changes the
PRIMARY_KEY
of theproposer_duties
table frompublic_key
toslot_number
, and updates the logic ofset_proposer_duties
method of thePostgresDatabaseService
accordingly.The reason this change is needed is that, even if rare, it might occur that a validator public key is chosen twice for the next proposer duties which leads to the second record not being written on the database table because there is a conflict with the primary key. This edge case happens quite often in a devnet which has a very small validator set size compared to Mainnet.
The downstream consequence of it is that when processing a new head event inside
process_head_event
in theChainEventUpdater
(see below)helix/crates/housekeeper/src/chain_event_updater.rs
Lines 151 to 175 in 3533496
some proposer duties are missing which might lead to
next_duty
to beingNone
. The latter is then read inside thesubmit_block
/submit_header
functions throwing the errorBuilderApiError::ProposerDutyNotFound
incorrectly.