-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
spec: Formally define the valid(v)
properties
#510
Comments
An important observation regarding value validity is to consider that, typically due to bugs, we might need to fix or update our implementation of
The rationale here is the following. If a value was considered valid by an implementation of At the same time, it is possible that |
An important point to note here is that the implication Do we have a document that that collects such requirements? |
We have some TODOs: https://github.com/informalsystems/malachite/blob/main/specs/consensus/overview.md#validation |
Does So the claim is that if a node's
. Are you claiming that reversing a faulty invalidation is ok?
|
We however accept |
If |
I am claiming that reversing a faulty invalidation is acceptable. Notice that if The opposite, however, is not true. If Regarding the second part, notice that a node must remember the votes it has previously issued. So if it has rejected But if I understand this logical implication is confusing, it took a while to me to phrase it properly. |
I think it is worth to define a way to implement the above mentioned property using what we call soft-upgrades:
For this we need to define a set of heights associated to each implementation of
In this way, we split the execution into multiple height intervals |
From the above definition, namely, from the adoption of soft upgrades, it remains to discuss what happens in the transition heights Without lack of generality, I assume that when starting We have then two possibilities to consider. A. In this case, we are likely committing a value B. In this case, we are probably stuck in height
Notice that case 1. must be covered by case 2. Namely, if But if we keep proposing values that, like So, for ensuring that nodes do not crash in case 1., we need |
valid(v)
propertiesvalid(v)
properties
A different way to look at soft-upgrades is as follows:
In this way, we effectively split evaluation of |
Originally posted by @josef-widder in #389 (comment)
The
valid(v)
function is supposed to be deterministic. In particular, ifv
is produced and proposed by a correct proposer, thenvalid(v)
should returntrue
at every correct process.Definition of done: add details to this section.
The text was updated successfully, but these errors were encountered: