mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 07:03:58 -05:00
66 lines
1.9 KiB
Go
66 lines
1.9 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.AggregrateDueBPS:
|
|
return "validator.waitAggregateWindow"
|
|
case cfg.SyncMessageDueBPS:
|
|
return "validator.waitSyncMessageWindow"
|
|
case cfg.ContributionDueBPS:
|
|
return "validator.waitContributionWindow"
|
|
case cfg.ProposerReorgCutoffBPS:
|
|
return "validator.waitProposerReorgWindow"
|
|
default:
|
|
return "validator.waitSlotComponent"
|
|
}
|
|
}
|