Skip to content

spec: should we update the valid value for a round that has finished? #315

@cason

Description

@cason

The logic of line 36 of the arXiv paper updates the validValue_p and validRound_p upon receiving, for the first time, a value v and 2f + 1 Prevotes for id(v) in current round round_p. If, in addition, the validator has not yet issued a Precommit, we also update lockedValue_p and lockedRound_p a Precommit for id(v).

While the logic is restrictive in the paper, in my opinion because the same logic is used to update valid and locked values and rounds, there should be no objection to state the logic as following:

upon 〈PROPOSAL, hp , r, v, ∗〉 from proposer(hp , r) AND 2f + 1 〈PREVOTE, hp, r , id(v)〉with valid(v) and r <= round_p
   if r > validRound_p
      validRound_p ← r
      validValue_p ← v

This means, in few words, that when a node is already in round round_p = 2 but it receives 2f + 1 〈PREVOTE, hp, 1 , id(v)〉 for a full value v the node knows, it would update valid round to r = 1 and value value to v. I don't think we can do that for messages from future rounds, for instance, if r = 3, but I don't see any restricting for doing that for previous rounds.

What is the goal? The goal is to produce ValidValue events even when a node only realizes that a value has became valid after the round where this has happened, due to asynchrony mostly. When a value becomes valid we are pretty sure that this is the value that must be decided on that height, except for some particular corner case. In particular, this is a value that we should retain, as it is very likely to be the end decision value for the height.

Metadata

Metadata

Assignees

No one assigned

    Labels

    specRelated to specifications

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions