-
Notifications
You must be signed in to change notification settings - Fork 7
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
Implement multi-hop routing of consensus messages #472
Conversation
… but is not yet integrated.
- reqwest doesn't support local sockets, so I've hacked around it by creating an in-process proxy
…a new consensus. This was causing premature commitment when the old consensus was a single producer
- Reorganize to use unittest - Add control for node logging
- Wrong index caused incorrect behavior of is_sole_producer and could also lead to dereferencing a null pointer - set_producers can now enter the default implementation in more cases, because we call it with the actual producers of each block
- View change now includes a base block - Fork restrictions are now based on the view change rather than the best prepared block - Ensure that view changes are synchronized network-wide - Propagage and use joint producer view changes, including when the new producers are not BFT - Fix missing connection state change to ready when we have no blocks
…the first error in each loop
…r end of the connection.
- Y has been committed by 2f+1 producers, because that is the requirement for it to be considered irreversible | ||
- let Z be the earliest block that is an ancestor of X (inclusive of X), conflicts with Y, is better than Y, and is prepared by 2f+1 producers. Such a block is guaranteed to exist because X itself must be prepared by 2f+1 producers in order to be committed by any honest producer. | ||
|
||
The existence of Z implies that at least f+1 producers have violated the protocol |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doesn't the existence of X and Y already imply that at least f+1 producers have violated the protocol?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It does. This list is the breakdown of exactly how they violated the protocol.
{ | ||
if (route.second.metric == RouteMetric::infinite) | ||
{ | ||
return true; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't infinite metric return !feasible?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://datatracker.ietf.org/doc/html/rfc8966#feasibility-condition
"Note further that retractions (updates with infinite metric) are always feasible, since they cannot possibly cause a routing loop"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Based on the name, I expected this to test that the routing would follow the shortest path, but the tests really seem only to verify that multi-hop routing works (and will only route messages to producers).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not exactly sure how I would test that. The exact path followed is kind of an implementation detail.
No description provided.