ensure sync duties for next epoch are registered in time (#5084)
* ensure sync duties for next epoch are registered in time For attestations, VC queries duties for current and next epoch. For sync messages, VC queries for current and next period (if soon). This means that for sync messages we don't actually have the duties for next epoch in all situations, leading to situation where VC may miss sync duties in the final slot of an epoch when using. As duties remain same within a sync committee period, simply copy them over to next epoch to avoid this situation without adding network latency. * Update beacon_chain/validator_client/duties_service.nim Co-authored-by: Jacek Sieka <jacek@status.im> --------- Co-authored-by: Jacek Sieka <jacek@status.im>
This commit is contained in:
parent
6f68c1a46e
commit
e9262ab6a3
|
@ -305,7 +305,9 @@ proc pollForSyncCommitteeDuties*(service: DutiesServiceRef,
|
||||||
validator_sync_committee_index: validatorSyncCommitteeIndex))
|
validator_sync_committee_index: validatorSyncCommitteeIndex))
|
||||||
res
|
res
|
||||||
|
|
||||||
fork = vc.forkAtEpoch(epoch)
|
nextEpoch = epoch + 1
|
||||||
|
nextEpochHasSameDuties =
|
||||||
|
epoch.sync_committee_period == nextEpoch.sync_committee_period
|
||||||
|
|
||||||
let addOrReplaceItems =
|
let addOrReplaceItems =
|
||||||
block:
|
block:
|
||||||
|
@ -318,6 +320,10 @@ proc pollForSyncCommitteeDuties*(service: DutiesServiceRef,
|
||||||
map.duties.withValue(epoch, epochDuty):
|
map.duties.withValue(epoch, epochDuty):
|
||||||
if epochDuty[] != duty:
|
if epochDuty[] != duty:
|
||||||
dutyFound = true
|
dutyFound = true
|
||||||
|
if nextEpochHasSameDuties:
|
||||||
|
map.duties.withValue(nextEpoch, epochDuty):
|
||||||
|
if epochDuty[] != duty:
|
||||||
|
dutyFound = true
|
||||||
|
|
||||||
if dutyFound and not alreadyWarned:
|
if dutyFound and not alreadyWarned:
|
||||||
info "Sync committee duties re-organization", duty, epoch
|
info "Sync committee duties re-organization", duty, epoch
|
||||||
|
@ -331,6 +337,8 @@ proc pollForSyncCommitteeDuties*(service: DutiesServiceRef,
|
||||||
var validatorDuties =
|
var validatorDuties =
|
||||||
vc.syncCommitteeDuties.getOrDefault(duty.pubkey)
|
vc.syncCommitteeDuties.getOrDefault(duty.pubkey)
|
||||||
validatorDuties.duties[epoch] = duty
|
validatorDuties.duties[epoch] = duty
|
||||||
|
if nextEpochHasSameDuties:
|
||||||
|
validatorDuties.duties[nextEpoch] = duty
|
||||||
vc.syncCommitteeDuties[duty.pubkey] = validatorDuties
|
vc.syncCommitteeDuties[duty.pubkey] = validatorDuties
|
||||||
|
|
||||||
return len(addOrReplaceItems)
|
return len(addOrReplaceItems)
|
||||||
|
|
Loading…
Reference in New Issue