package octez-shell-libs
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=ddfb5076eeb0b32ac21c1eed44e8fc86a6743ef18ab23fff02d36e365bb73d61
sha512=d22a827df5146e0aa274df48bc2150b098177ff7e5eab52c6109e867eb0a1f0ec63e6bfbb0e3645a6c2112de3877c91a17df32ccbff301891ce4ba630c997a65
doc/octez-shell-libs.shell/Tezos_shell/Synchronisation_heuristic/index.html
Module Tezos_shell.Synchronisation_heuristic
Source
Synchronisation heuristic
The synchronisation heuristic module handles a heuristic to decide whether a node is synchronized with respect to its peers. This heuristic is parameterized by two variables:
threshold
is the number of peers to take into account for the heuristic
latency
is the timestamp drift (in seconds) expected for thethreshold
best candidates (see below).
A node is either Not_synchronised
or Synchronised
. If the node is Synchronised
the chain may be stuck (last block validated was a while ago). The heuristic needs to be updated every time a block is validated or if a peer sends a block which is already known as valid. In the following, we denote such a block as a `candidate`. The heuristic maintains a set of candidates such that there is at most one candidate per peer. Given a peer, the heuristic always keeps the most recent candidate.
The heuristic works as follows:
If t.threshold
is negative then get_state t
always returns Not_synchronised
.
If t.threshold
is 0 then get_state t
always returns Synchronised {is_chain_stuck=false}
.
Otherwise:
- The state is
Synchronised {is_chain_stuck = false}
if the set of candidates that are more recent than ``latency`` seconds from now has a cardinal equal or greater to ``threshold``.
- The state is
Synchronised {is_chain_stuck = true}
if all the following statements are respected:
1. threshold > 1
2. The ``threshold`` most recent candidates have the same timestamp.
3. There is no candidate more than ``latency`` seconds from now
- The state is
Not_synchronised
otherwise.
Notice that if threshold
is 1, the state is either Synchronised {is_chain_stuck=false}
or Not_synchronised
.
This heuristic should be used with a small threshold
: Between 2 and 10. Other values should be used with care and are mostly here for testing or debugging purpose.
Following the separation of concerns principle, the heuristic exports two modules:
- The
Core
module contains all the logic behind the heuristic described above and can be used as such.
- The
Bootstrapping
module provides facility to register callbacks when the status of the heuristic changes, and in particular defines abootstrapped
flag which is set totrue
if the heuristic was synchronised at least once.