-
Notifications
You must be signed in to change notification settings - Fork 202
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
Devs SBAT be sure of Istanbul liveness #116
Comments
I believe (but haven't checked) that the Pantheon Istanbul implementation fixes this -- see here for more info: https://github.com/PegaSysEng/pantheon/tree/master/consensus/ibft |
The liveness issue seems to be as following.
The scenario is as following:
No progress can be made since no one will unlock |
Also interesting comment openethereum/parity-ethereum#9298 (comment) and Consensys/quorum#305 |
My understanding of the original locking mechanism in IBFT is to ensure the safety during round changes. Otherwise byzantine nodes can send multiple It seems to me that the locking mechanism is inherently impossible to remedy with liveness, an example being Consensys/quorum#305. The solution above as well as the second on in the correctness analysis paper is to basically implement what tendermint has, a proof that it is safe for the nodes to unlock. The first solution in the paper is get rid of locking completely apparently, but not sure I completely understand it. To quote:
|
I believe this is the equivalent liveness PR in pantheon PegaSysEng/pantheon#872 |
As noted in the arxiv paper (section 6.2), there are two solutions to the liveness problem proposed in the paper. 1. Remove the locking and use a PBFT like round change.Per this article IBFT 2.0 from PegaSys is going to use the PBFT style mechanism.
Removing the locking mechanism solves the problem of getting a split locking situation, but it removes the safety guarantee. IBFT 2.0 reintroduces the safety guarantee by introducing the following requirements on round changes. (PBFT view changes are more general, see section 4.4. of PBFT paper).
In a PBFT context with multiple actions in a single view (analogous to a round), the new proposer needs to use Looking into PegaSys's source code. When a message is broadcast, it can either be in round 0, or a later round. If my understanding is correct that at each block height a new instance of IBFT block finalization is started, then round starts off at 0 for each new block. Here is PegaSys's block validating for ibft2.0. This thing to pay attention to is 2. Allow relocking on newer round like tendermint does.The lock causes problems because some nodes end up locked forever because of network partitioning. The reason that tendermint has locking and proof of lock change (polka) is explained here (thesis on tendermint) on page 23. I've just quoted relevant sections that explain why the lock and proof of lock change is required. Explanation of locking
Explanation of why polka needs to exist
|
I've started a small test to show how istanbul can lock up. The test doesn't run, but it has a comment explaining how to set up the test. The branch is trianglesphere/istanbul-liveness-failure |
Fun fact, quorum put Consensys/quorum#305 on their april deliverable |
There was some additional conversation on Consensys/quorum#305 with the author of the correctness analysis |
Istanbul has a liveness issue described in:
https://arxiv.org/pdf/1901.07160.pdf
https://drive.google.com/open?id=1v5kOvu5eppGHXdHqHoCIUMVmV7eAsDwpLljDtvVBR_U
and also described here:
ethereum/EIPs#650 (comment)
Istanbul learns of new blocks via miner/worker.go line 428, which results in a new FinalCommittedEvent being posted to the engine, handled at backend/handler.go line 123. Currently this just starts a new round.
The text was updated successfully, but these errors were encountered: