Skip to content
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

Make snowman use snowflake directly instead of snowball #3403

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

yacovm
Copy link
Contributor

@yacovm yacovm commented Sep 19, 2024

Why this should be merged

Snowball was introduced in order to improve the stability of snowflake, by taking into account the history when returning the preference.

However, if deployed with a configuration where the preference is small enough, and a network partition causes a 50-50 split of the stake, it can actually backfire, as described in 6e1a905.

Additionally, latest research [1] points out that snowflake suffices for snowman.

[1] https://arxiv.org/abs/2404.14250

How this works

This commit removes snowball from snowman by substituting the snowball factory snowman uses, with a snowflake factory.

How this was tested

Added a test that simulates a mixed network which runs snowman with and without snowball, and ensures that a mixed network still converges.

Also ran a modified node on Fuji and monitored its consensus related metrics, and it seemed functioning well.

Snowball was introduced in order to improve the stability of snowflake,
by taking into account the history when returning the preference.

However, if deployed with a configuration where the preference is small enough, and a network partition
causes a 50-50 split of the stake, it can actually backfire, as described in 6e1a905.

Additionally, latest research [1] points out that snowflake suffices for snowman.

This commit removes snowball from snowman and adds a test that simulates a mixed network
which runs snowman with and without snowball, and ensures that a mixed network still converges.

[1] https://arxiv.org/abs/2404.14250

Signed-off-by: Yacov Manevich <[email protected]>
@yacovm yacovm self-assigned this Sep 19, 2024
snow/consensus/snowball/flat_test.go Show resolved Hide resolved
chains/manager.go Show resolved Hide resolved
snow/consensus/snowman/topological.go Show resolved Hide resolved
snow/consensus/snowman/mixed_test.go Show resolved Hide resolved
snow/consensus/snowball/tree_test.go Show resolved Hide resolved
snow/consensus/snowball/tree_test.go Show resolved Hide resolved
snow/consensus/snowball/tree_test.go Show resolved Hide resolved
@yacovm yacovm added the consensus This involves consensus label Sep 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
consensus This involves consensus
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants