ava-labs / avalanchego

Go implementation of an Avalanche node.
https://avax.network
BSD 3-Clause "New" or "Revised" License
2.09k stars 646 forks source link

Error driven snowflake multi counter #3092

Closed aaronbuchwald closed 2 weeks ago

aaronbuchwald commented 3 weeks ago

Why this should be merged

This PR updates the snowball package consensus constructors to switch from taking in a single alphaConfidence and beta value to a slice of terminationConditions.

Additionally, this PR adds test coverage for UnarySnowflake/BinarySnowflake/NnarySnowflake with multiple termination conditions.

This is a follow up to https://github.com/ava-labs/avalanchego/pull/2978.

The actual snow parameters passed in to the node are still hardcoded to only supporting a single value. Supporting multiple termination conditions in production requires adapting the early termination conditions to support multiple alphaPreference/alphaConfidence thresholds. Evaluating that direction will require gathering further metrics and potentially refactoring the consensus engine.

How this works

How this was tested

aaronbuchwald commented 2 weeks ago

% go-mutesting unary_snowflake_test.go binary_snowflake.go nnary_snowflake.go
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.0" with checksum d684fa92e7089e7bdfdb85fc608120e1
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.1" with checksum b28df059bf675d2ca14b505ce1011ee0
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.2" with checksum d536b1cd25ea90c952fae616300bae8e
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.3" with checksum 16bd1f52017f22c79a1839b97d4a3f1f
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.4" with checksum 831455411eff41de447b5730e11beef2
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.5" with checksum 7321aaf726fa346a0df42a965aae5024
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.6" with checksum 57364e4113c6baf316abe0ffd5d40ec3
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.7" with checksum 630dcd3dfdbfcb72d7c10cefd6551202
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.8" with checksum 29a974f31675fc6ab306fd75430de832
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.9" with checksum 3067e653c637eac2c8e3f4263d73afa3
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.10" with checksum 1aa109f6222c995910a1669380f98e5a
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.12" with checksum da246a3f5f4c536cbf710c343e90ea91
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.13" with checksum 39a619b20456f18af5a4e91cc6616159
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.14" with checksum 634cd9b3289b01fba8f760bb3edded65
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/binary_snowflake.go.15" with checksum 46e4e947aebf2bf9d69cf0001a938562
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.0" with checksum bef9332838dd79b28e493e28f916afa9
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.1" with checksum a68722dec802832a971cea82685d4217
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.2" with checksum d087b126c6adf5c9f02b6fc8d5391617
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.3" with checksum e7f0a3d737587b1e2401fce5baebc624
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.4" with checksum 09e93bd85c9761b107ba8d4dcc4b06bb
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.5" with checksum 970ebbbbc41a33c5b972ecee33796e44
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.6" with checksum e0d9eb5d2b4bf0e69a0f707b690e0e25
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.7" with checksum 94c4b819bb35f09d039fbd9db3dfc1c1
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.8" with checksum 59147981212f539f1320b12094da63bb
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.9" with checksum 3f8b8042eecce3cafe9cd698a73b9042
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.10" with checksum 5d9c6e631e2ee162f2b34ca0a331db8b
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.12" with checksum fae84183f02bf950353c5858242b55f3
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.13" with checksum 7648701596898930068096718dc930c8
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.14" with checksum 32842e5042e2cdb44bf71a553abb3f79
PASS "/var/folders/hh/1wcmqgg15wv_llwygdpy6hr00000gq/T/go-mutesting-4033284218/nnary_snowflake.go.15" with checksum 8a205e9f327ae8c85d97634981dee0f6
The mutation score is 1.000000 (30 passed, 0 failed, 2 duplicated, 0 skipped, total is 30)