Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions FIPS/fip-0086.md
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ GossiPBFT(instance, inputChain, baseChain, committee) → decision, certificate:
47: proposal ← m.value // Sway local proposal to possibly decided value
48: evidence ← m.evidence // Strong PREPARE quorum is inherited evidence
49: round ← round + 1
50: timeout ← 2 * Δ * pow(BackOffExponent, round)
50: timeout ← 2 * min(Δ * pow(BackOffExponent, round), deltaBackOffMax)
51: timeout_rebroadcast ← timeout + 1 // Arbitrary increment
52: }

Expand Down Expand Up @@ -593,7 +593,7 @@ In order to avoid unbounded accumulation of state, some messages from some futur
94: if (msg' ← shouldJump(round, phase) s.t. msg' != nil)
// The msg' is a CONVERGE for round
95: round ← msg'.round
96: timeout ← 2 * Δ * pow(BackOffExponent, round)
96: timeout ← 2 * min(Δ * pow(BackOffExponent, round), deltaBackOffMax)
97: timeout_rebroadcast ← timeout + 1 // Arbitrary increment
98: if msg'.evidence.phase = PREPARE: // Evidence is strong quorum of either PREPAREs of COMMITs for 丄
99: C ← C ∪ {msg'.value} // Add to candidate values if not there
Expand Down Expand Up @@ -710,7 +710,7 @@ GossiPBFT ensures termination provided that (i) all participants start the insta

[Given prior tests performed on Gossipsub](https://research.protocol.ai/publications/gossipsub-v1.1-evaluation-report/vyzovitis2020.pdf) (see also [here](https://gist.github.com/jsoares/9ce4c0ba6ebcfd2afa8f8993890e2d98)), sent messages are expected to reach almost all participants within 6 seconds, with a majority receiving them even after 2 seconds. However, if several participants start the instance $Δ + ε$ after some other participants, termination is not guaranteed for the selected timeouts of $2*Δ$. Thus, the protocol does not rely on an explicit synchrony bound for correctness. Instead, the estimate of Δ is increased locally within an instance as rounds progress without decision.

The synchronization of participants within an instance is achieved with a timeout exponentially increasing each round. Participants start each instance with `Δ=6s` and for each round, set the phase timeout to `2 * Δ * BackOffExponent^{round}`.
The synchronization of participants within an instance is achieved with a timeout exponentially increasing each round. Participants start each instance with `Δ=6s` and for each round, set the phase timeout to `2 * min(Δ * BackOffExponent^{round}, deltaBackOffMax)`. Note that a `deltaBackOffMax` is used to avoid a too big timeout.

As an optimization, participants may finish a phase once its execution is determined by the received messages, without waiting for the timeout. For example, if a participant receives QUALITY messages from all participants, it can proceed to the next phase without waiting for the timeout. More generally, if the remaining valid messages to be received cannot change the execution of the phase, regardless of the values contained in the messages, then a participant may continue to the next phase.

Expand Down