Open Stebalien opened 6 hours ago
The actual solution may have multiple phases:
But it looks like any solution will have to involve feedback between GPBFT and EC:
EC should maybe consider switching chains based on GPBFT.
If I understand correctly, the issue is that f3 participants needs to be notified if there the longest EC chain blocks is different with whaat they are finalizing over with today - so shouldn't this be the other way around -> F3 should maybe consider switch chains base on EC?
What will happen today if the chain receive a finalized set of blocks that doesn't matches EC longest chain blocks?
If I understand correctly, the issue is that f3 participants needs to be notified if there the longest EC chain blocks is different with whaat they are finalizing over with today - so shouldn't this be the other way around -> F3 should maybe consider switch chains base on EC?
Both.
What will happen today if the chain receive a finalized set of blocks that doesn't matches EC longest chain blocks?
We switch to the F3 finalized chain no matter what.
There's a theoretical issue where, if F3 takes a long time to finalize a tipset, it might cause long-range forks in EC. We're alleviating this by:
However, the issue still persists. The core of the issue is that:
To fix this, we likely need some way for F3 to discard the current proposal (if too old) and get a new one from the client. However, this is tricky to implement in the current GPBFT protocol without breaking the liveness guarantees.
There are really two parts to this issue:
However, the catch is that nobody can emit two decide messages for the same instance without potentially breaking GPBFT. But there are also certain decisions that are simply unacceptable.