mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-04-19 03:01:06 -04:00
This PR adds gloas specific time basis points for validator duties (attestation, aggregation, and sync contribution) and wires the validator client to use them once `GloasForkEpoch` is active. For now, `GloasForkEpoch` is set to far-future so behavior is unchanged until the fork epoch is configured Note to the rev: today sync message duty uses `waitOneThirdOrValidBlock` which shares with attestation dead line, that's why sync message bps is not used
74 lines
2.2 KiB
Go
74 lines
2.2 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/OffchainLabs/prysm/v7/config/params"
|
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
|
"github.com/OffchainLabs/prysm/v7/monitoring/tracing"
|
|
"github.com/OffchainLabs/prysm/v7/monitoring/tracing/trace"
|
|
prysmTime "github.com/OffchainLabs/prysm/v7/time"
|
|
"github.com/OffchainLabs/prysm/v7/time/slots"
|
|
)
|
|
|
|
// slotComponentDeadline returns the absolute time corresponding to the provided slot component.
|
|
func (v *validator) slotComponentDeadline(slot primitives.Slot, component primitives.BP) (time.Time, error) {
|
|
startTime, err := slots.StartTime(v.genesisTime, slot)
|
|
if err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
delay := params.BeaconConfig().SlotComponentDuration(component)
|
|
return startTime.Add(delay), nil
|
|
}
|
|
|
|
func (v *validator) waitUntilSlotComponent(ctx context.Context, slot primitives.Slot, component primitives.BP) {
|
|
ctx, span := trace.StartSpan(ctx, v.slotComponentSpanName(component))
|
|
defer span.End()
|
|
|
|
finalTime, err := v.slotComponentDeadline(slot, component)
|
|
if err != nil {
|
|
log.WithError(err).WithField("slot", slot).Error("Slot overflows, unable to wait for slot component deadline")
|
|
return
|
|
}
|
|
wait := prysmTime.Until(finalTime)
|
|
if wait <= 0 {
|
|
return
|
|
}
|
|
t := time.NewTimer(wait)
|
|
defer t.Stop()
|
|
select {
|
|
case <-ctx.Done():
|
|
tracing.AnnotateError(span, ctx.Err())
|
|
return
|
|
case <-t.C:
|
|
return
|
|
}
|
|
}
|
|
|
|
func (v *validator) slotComponentSpanName(component primitives.BP) string {
|
|
cfg := params.BeaconConfig()
|
|
switch component {
|
|
case cfg.AttestationDueBPS:
|
|
return "validator.waitAttestationWindow"
|
|
case cfg.AttestationDueBPSGloas:
|
|
return "validator.waitAttestationWindow"
|
|
case cfg.AggregateDueBPS:
|
|
return "validator.waitAggregateWindow"
|
|
case cfg.AggregateDueBPSGloas:
|
|
return "validator.waitAggregateWindow"
|
|
case cfg.SyncMessageDueBPS:
|
|
return "validator.waitSyncMessageWindow"
|
|
case cfg.SyncMessageDueBPSGloas:
|
|
return "validator.waitSyncMessageWindow"
|
|
case cfg.ContributionDueBPS:
|
|
return "validator.waitContributionWindow"
|
|
case cfg.ContributionDueBPSGloas:
|
|
return "validator.waitContributionWindow"
|
|
case cfg.ProposerReorgCutoffBPS:
|
|
return "validator.waitProposerReorgWindow"
|
|
default:
|
|
return "validator.waitSlotComponent"
|
|
}
|
|
}
|