From 09bd4d29c5d0c19dcac398d49d164f2230588f05 Mon Sep 17 00:00:00 2001 From: Colin LeMahieu Date: Wed, 17 Jul 2024 11:29:54 +0100 Subject: [PATCH 1/2] Set default vote req/ack size to 255 and add CLI option "disable_large_votes" to return to original behavior. --- nano/core_test/message.cpp | 2 +- nano/core_test/request_aggregator.cpp | 4 ++-- nano/node/cli.cpp | 7 +++++++ nano/node/network.cpp | 4 ++++ nano/node/network.hpp | 4 ++-- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index e093aa6eec..60d2338218 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -199,7 +199,7 @@ TEST (message, confirm_header_flags_max) TEST (message, confirm_ack_hash_serialization) { std::vector hashes; - for (auto i (hashes.size ()); i < nano::network::confirm_ack_hashes_max; i++) + for (auto i (hashes.size ()); i < 15; i++) { nano::keypair key1; nano::block_hash previous; diff --git a/nano/core_test/request_aggregator.cpp b/nano/core_test/request_aggregator.cpp index 7d7148404f..5cc40202bb 100644 --- a/nano/core_test/request_aggregator.cpp +++ b/nano/core_test/request_aggregator.cpp @@ -262,7 +262,7 @@ TEST (request_aggregator, two_endpoints) TEST (request_aggregator, split) { - constexpr size_t max_vbh = nano::network::confirm_ack_hashes_max; + size_t max_vbh = nano::network::confirm_ack_hashes_max; nano::test::system system; nano::node_config node_config = system.default_config (); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; @@ -303,7 +303,7 @@ TEST (request_aggregator, split) // Two votes were sent, the first one for 12 hashes and the second one for 1 hash ASSERT_EQ (1, node.stats.count (nano::stat::type::aggregator, nano::stat::detail::aggregator_accepted)); ASSERT_EQ (0, node.stats.count (nano::stat::type::aggregator, nano::stat::detail::aggregator_dropped)); - ASSERT_TIMELY_EQ (3s, 13, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_hashes)); + ASSERT_TIMELY_EQ (3s, nano::network::confirm_ack_hashes_max + 1, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_hashes)); ASSERT_TIMELY_EQ (3s, 2, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_votes)); ASSERT_TIMELY_EQ (3s, 0, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_unknown)); ASSERT_TIMELY_EQ (3s, 0, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_cached_hashes)); diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 7a6d4be5aa..1d07d8681b 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -122,6 +122,7 @@ void nano::add_node_flag_options (boost::program_options::options_description & ("block_processor_verification_size", boost::program_options::value(), "Increase batch signature verification size in block processor, default 0 (limited by config signature_checker_threads), unlimited for fast_bootstrap") ("inactive_votes_cache_size", boost::program_options::value(), "Increase cached votes without active elections size, default 16384") ("vote_processor_capacity", boost::program_options::value(), "Vote processor queue size before dropping votes, default 144k") + ("disable_large_votes", boost::program_options::value(), "Disable large votes") ; // clang-format on } @@ -183,6 +184,12 @@ std::error_code nano::update_flags (nano::node_flags & flags_a, boost::program_o { flags_a.vote_processor_capacity = vote_processor_capacity_it->second.as (); } + auto disable_large_votes_it = vm.find ("disable_large_votes"); + if (disable_large_votes_it != vm.end ()) + { + nano::network::confirm_req_hashes_max = 7; + nano::network::confirm_ack_hashes_max = 12; + } // Config overriding auto config (vm.find ("config")); if (config != vm.end ()) diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 1f4051017d..92443870df 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -13,6 +13,10 @@ using namespace std::chrono_literals; +// TODO: Return to static const and remove "disable_large_votes" when rolled out +std::size_t nano::network::confirm_req_hashes_max{ 255 }; +std::size_t nano::network::confirm_ack_hashes_max{ 255 }; + /* * network */ diff --git a/nano/node/network.hpp b/nano/node/network.hpp index 6a08683137..31ebeee2b3 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -170,8 +170,8 @@ class network final static unsigned const broadcast_interval_ms = 10; static std::size_t const buffer_size = 512; - static std::size_t const confirm_req_hashes_max = 7; - static std::size_t const confirm_ack_hashes_max = 12; + static std::size_t confirm_req_hashes_max; + static std::size_t confirm_ack_hashes_max; }; std::unique_ptr collect_container_info (network & network, std::string const & name); From 8478d12c3f13c568bb00aae58e22e477b4363ab8 Mon Sep 17 00:00:00 2001 From: Colin LeMahieu Date: Tue, 16 Jul 2024 21:09:09 +0100 Subject: [PATCH 2/2] Bump protocol version confirm_ack rebroadcasted flag public is_originator flag large confirm_ack messages --- nano/lib/config.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 7b1e1d241b..c67095967b 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -356,12 +356,12 @@ class network_constants static nano::networks active_network; /** Current protocol version */ - uint8_t const protocol_version = 0x14; + uint8_t const protocol_version = 0x15; /** Minimum accepted protocol version */ - uint8_t const protocol_version_min = 0x12; + uint8_t const protocol_version_min = 0x14; /** Minimum accepted protocol version used when bootstrapping */ - uint8_t const bootstrap_protocol_version_min = 0x13; + uint8_t const bootstrap_protocol_version_min = 0x14; }; std::string get_node_toml_config_path (std::filesystem::path const & data_path);