-
Notifications
You must be signed in to change notification settings - Fork 56
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
Change block's finality definition #1118
Comments
I have a couple of comments on Rolling finality. First, the current definition is problematic: I can't deem any block H as final if its predecessor is not final (because the predecessor can change). Also, it goes without saying, that if block H "accumulated" 67% of stake confirmation, so will have its predecessor. Second, I'm a bit concerned about assuming that accumulated confirmations are immutable.
|
As per recent discussions, we are going for a "naive" implementation of Rolling Finality:
An Issue will be filed to discuss a more complex design that considers a cumulative weight of votes confirming the non-finalized block. |
Can we close this? @goshawk-3 @herr-seppia |
Summary
A
final
block is a block that can never be replaced during the fallback mechanism.Currently, a block is considered final if it's accepted at first iteration.
This lead to some edge case where consensus halt.
Possible solution design or implementation
Change finality as per following
Instant finality:
A block can achieve instant finality if one of the following conditions is met:
0
is accepted on top of an already finalized block.I
is accepted on top of an already finalized block, and all iterations lower thanI
have timed out. 1Rolling finality:
If the tip of the blockchain is not finalized, the concept of rolling finality comes into play.
The aim of rolling finality is to deterministically identify a new block that can be considered final.
This block is sought within the range between the last finalized block and the most recently accepted block.
The process involves retracing steps from the last accepted block
TIP
to the last finalized block (FINALIZED
) while counting the stakes of the provisioners involved in timeout certificates or winning certificates. 2If, at a specific block
H
(whereFINALIZED < H < TIP
), the sum3 of stakes reaches 67% of the total stake, blockH
is considered final. 4Additional context
This issue requires the following issue to be implemented
failed_iterations
fields #1116Tracking:
Footnotes
Blocks accepted with iteration greater than
RELAX_ITERATION_THRESHOLD
are exempt from instant finality ↩Blocks accepted with iteration greater than
RELAX_ITERATION_THRESHOLD
are not taken into account ↩It should be verified whether the first vote found for each provisioner needs to be discarded ↩
Since instant finality can be applied on top of rolling finality, this mechanism ensures recovery from non final blocks. ↩
The text was updated successfully, but these errors were encountered: