pub trait BoundedCatchUp: CertifiedBlockIsAvailable + BoundedRecovery { }Expand description
Caveat (Catch-up is not time-bounded). The work a node must do to reach a chain’s tip is proportional to the number of blocks it must replay, which is the height above the chain’s latest checkpoint — and nothing in the protocol bounds that distance.
The mechanism to bound it exists. A block whose sole transaction is
SystemOperation::Checkpoint publishes the chain’s execution state as a blob;
Client::bootstrap_chain_from_checkpoint installs it and resumes downloading from that height,
so the blocks below are never replayed. ChainWorkerState::reset_and_reexecute_chain uses the
same shortcut, replaying only from latest_checkpoint_height.
Nothing schedules it. ChainClient::checkpoint is invoked from one place in the workspace,
the linera CLI. There is no policy, no interval, and no protocol rule requiring a chain to
checkpoint — so on a chain that never does, catch-up is linear in the chain’s whole history and
BoundedRecovery cannot be discharged for a node that has fallen far behind.
This is the sharp edge of an otherwise-clean property: CertifiedBlockIsAvailable says a
recovering or joining node can reach the tip; making that quick is a deployment obligation
resting on checkpoint frequency that the protocol does not enforce.