package octez-shell-libs
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=c6df840ebbf115e454db949028c595bec558a59a66cade73b52a6d099d6fa4d4
sha512=d8aee903b9fe130d73176bc8ec38b78c9ff65317da3cb4f3415f09af0c625b4384e7498201fdb61aa39086a7d5d409d0ab3423f9bc3ab989a680cf444a79bc13
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.