-
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
code: Stream the block when re-proposing (L16) #405
Comments
I think this is related to #365. While @cason seems to have argued for changes in consensus (if I understand correctly), my response was that we may treat this outside of consensus. It seems related as receivers might ignore parts of blocks that they have already seen. I think it makes sense to do it this way. |
I feel #365 covers a wider range of cases (but not L28) and we should discuss before making changes. I am also not entirely sure how For Starknet, there is no explicit Proposal message since it is implicit from the receipt of all block parts who carry We haven't yet made changes to the code for this because we need to figure out if and how we will handle both implicit (**) and explicit Proposal messages. fwiw I am also of the opinion that the handling should be done outside consensus. Regardless the proposal message flavor, this issue applies and a solution is required for the Starknet architecture. There is another part to clarify, at least in my mind:
(*) I think (**) Currently, for explicit proposals, in the code there is a multiplexing layer that holds on to the value builder output and explicit proposal. When both are present a proposal is sent to consensus engine. I am currently working on refactoring this, mainly to remove its pollution from the driver and outside of the "engine". The multiplexing code is also buggy and am looking to correct this. But handling multiple conflicting values and proposals, matching a value with a proposal, etc proves to be pretty complex even on paper. Another incentive to remove the explicit Proposal messages (i.e. remove them from the wire but emulate them in consensus code) |
Opened #407 with some questions |
It seems like the definition of the As far as I can tell, there is no method corresponding to |
We discussed related issues with @cason today, and he explained to me that
If you look at the algorithm, this is used four times
So, in principle, if you re-propose, it might be enough to send a small propose message (with I think there are advantages of small explicit propose messages, but we need to figure out how to align this with Starknet requirements. Would be good to discuss. |
Not sure I understand the papyrus impl. It seems that currently they just run by reading existing blocks:
right. There might be a way, on the receive side we could look at
agreed |
I would say that Byzantine re-proposers are just Byzantine, and Tendermint consensus deals with that. What could happen is that the re-proposer
Then there might be different correct nodes
But from the Tendermint perspective, this just means that N1 and N2 receive different proposals for the same round, that is, it is just double sign on different proposals. Of course in this round there is no guaranteed decision, but this is always the case for Byzantine proposers. Safety wise, Tendermint takes care of this (e.g., for N2 there are not enough prevotes from round |
I think that the valid round should be on |
In general, in case of re-proposed value, I would suggest:
Since we don't have 3. yet implemented and full values are broadcast, for the sake of simplicity we just send the same full value again in the case of re-proposals. |
Indeed Matan mentioned this a few days ago, sorry forgot to update the issue. |
cc @romac @cason @josef-widder
A proposer that hits L16 with valid value should trigger the streaming of the full block as some validators may have missed it.
In the code this means:
proposal_round
(required inFin
signature).valid_round
should come from the stored value with theblock_hash
hash.malachite/code/crates/starknet/host/src/mock/host.rs
Lines 130 to 135 in 221c787
The text was updated successfully, but these errors were encountered: