$$ \newcommand \Soft {\mathit{soft}} \newcommand \Cert {\mathit{cert}} \newcommand \Next {\mathit{next}} $$
Resynchronization Attempt
The resynchronization is an auxiliary function used throughout the recovery steps.
A partial order relation is defined in the space of all observed bundles. We call this relation freshness.
A resynchronization attempt broadcasts the freshest observed bundle (if any).
Priority-wise, bundles’ freshness is defined as follows:
-
Bundles for a \( \Cert \) step are fresher than all other bundles.
-
Bundles from a later period are fresher than bundles from an older period.
-
Bundles for \( \Next \) step are fresher than bundles for a \( \Soft \) step of the same period.
-
Bundles for \( \Next \) step for the \( \bot \) proposal-value are fresher than bundles for a \( \Next \) step for some other value.
For a formal definition of this property, refer to the ABFT normative section.
⚙️ IMPLEMENTATION
Bundle freshness reference implementation.
In the reference implementation, a resynchronization attempt is handled by the
partitionPolicy
function, as the network is assumed to be in a “partitioned state” due to the temporary inability to reach consensus. In this case, the function is only invoked when the current step \( s \geq 3 \) or when the current period \( p \geq 3 \) (that is, the player has gone through two full periods without reaching a consensus).