Documentation
¶
Index ¶
- Variables
- type Option
- func WithBlockTime(duration time.Duration) Option
- func WithMetrics() Option
- func WithParams(params Parameters) Option
- func WithPruningWindow(window time.Duration) Option
- func WithRecencyThreshold(threshold time.Duration) Option
- func WithSyncFromHash(hash string) Option
- func WithSyncFromHeight(height uint64) Option
- func WithTrustingPeriod(duration time.Duration) Option
- type Parameters
- type State
- type Syncer
Constants ¶
This section is empty.
Variables ¶
var NetworkHeadRequestTimeout = time.Second * 2
NetworkHeadRequestTimeout is the amount of time the syncer is willing to wait for the exchange to request the head of the chain from the network.
Functions ¶
This section is empty.
Types ¶
type Option ¶ added in v0.4.0
type Option func(*Parameters)
Option is the functional option that is applied to the Syner instance to configure its parameters.
func WithBlockTime ¶
WithBlockTime is a functional option that configures the `blockTime` parameter.
func WithParams ¶ added in v0.2.6
func WithParams(params Parameters) Option
WithParams is a functional option that overrides Parameters.
func WithPruningWindow ¶ added in v0.7.0
WithPruningWindow sets the duration within which headers will be retained before being pruned.
func WithRecencyThreshold ¶ added in v0.3.0
WithRecencyThreshold is a functional option that configures the `recencyThreshold` parameter.
func WithSyncFromHash ¶ added in v0.7.0
WithSyncFromHash sets given header hash a starting point for syncing. See [Parameters.SyncFromHash] for details.
func WithSyncFromHeight ¶ added in v0.7.0
WithSyncFromHeight sets given height a starting point for syncing. See [Parameters.SyncFromHeight] for details.
func WithTrustingPeriod ¶
WithTrustingPeriod is a functional option that configures the `trustingPeriod` parameter.
type Parameters ¶
type Parameters struct { // PruningWindow defines the duration within which headers are retained before being pruned. PruningWindow time.Duration // SyncFromHash is the hash of the header from which Syncer should start syncing. // Zero value to disable. Value updates up and down the chain are gracefully handled by Syncer. // // By default, Syncer maintains PruningWindow number of headers. SyncFromHash overrides this default, // allowing any user to specify a custom starting point. // // SyncFromHash has higher priority than SyncFromHeight. SyncFromHash string // SyncFromHeight is the height of the header from which Syncer should start syncing. // Zero value to disable. Value updates up and down the chain are gracefully handled by Syncer. // // By default, Syncer maintains PruningWindow number of headers. SyncFromHeight overrides this default, // allowing any user to specify a custom starting point. // // SyncFromHeight has lower priority than SyncFromHash. SyncFromHeight uint64 // contains filtered or unexported fields }
Parameters is the set of parameters that must be configured for the syncer.
func DefaultParameters ¶
func DefaultParameters() Parameters
DefaultParameters returns the default params to configure the syncer.
func (*Parameters) Hash ¶ added in v0.7.0
func (p *Parameters) Hash() (header.Hash, error)
func (*Parameters) Validate ¶
func (p *Parameters) Validate() error
type State ¶
type State struct { ID uint64 `json:"id"` // incrementing ID of a sync Height uint64 `json:"height"` // height at the moment when State is requested for a sync FromHeight uint64 `json:"from_height"` // the starting point of a sync ToHeight uint64 `json:"to_height"` // the ending point of a sync FromHash header.Hash `json:"from_hash"` ToHash header.Hash `json:"to_hash"` Start time.Time `json:"start"` End time.Time `json:"end"` Error string `json:"error,omitempty"` // the error that might happen within a sync }
State collects all the information about a sync.
type Syncer ¶
type Syncer[H header.Header[H]] struct { Params *Parameters // contains filtered or unexported fields }
Syncer implements efficient synchronization for headers.
Subjective Head - the latest known local valid header and a sync target. Network Head - the latest valid network-wide header. Becomes subjective once applied locally.
There are two main processes running in Syncer: - Main syncing loop(s.syncLoop)
- Performs syncing from the latest stored header up to the latest known Subjective Head
- Syncs by requesting missing headers from Exchange or
- By accessing cache of pending headers
- Receives every new Network Head from PubSub gossip subnetwork (s.incomingNetworkHead)
- Validates against the latest known Subjective Head, is so
- Sets as the new Subjective Head, which
- if there is a gap between the previous and the new Subjective Head
- Triggers s.syncLoop and saves the Subjective Head in the pending so s.syncLoop can access it
func NewSyncer ¶
func NewSyncer[H header.Header[H]]( getter header.Getter[H], store header.Store[H], sub header.Subscriber[H], opts ...Option, ) (*Syncer[H], error)
NewSyncer creates a new instance of Syncer.
func (*Syncer[H]) Head ¶
Head returns the most recent network head header.
It will try to get the most recent network head or return the current non-expired subjective head as a fallback. If the head has changed, it will update the tail with the new head.