From c1a1e49c9723a03618596e162a8b10210b9dd202 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Fri, 7 Feb 2020 09:04:37 +0000 Subject: [PATCH] Add half-sized random fanout for block propagation --- nano/node/confirmation_solicitor.cpp | 3 +++ nano/node/network.cpp | 4 ++-- nano/node/network.hpp | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/nano/node/confirmation_solicitor.cpp b/nano/node/confirmation_solicitor.cpp index 8dfa9bae66..ea38a72ece 100644 --- a/nano/node/confirmation_solicitor.cpp +++ b/nano/node/confirmation_solicitor.cpp @@ -28,6 +28,7 @@ bool nano::confirmation_solicitor::broadcast (nano::election const & election_a) { nano::publish message (election_a.status.winner); unsigned count = 0; + // Directed broadcasting to get confirmations for (auto i (representatives.begin ()), n (representatives.end ()); i != n && count < max_representatives; ++i) { if (election_a.last_votes.find (i->account) == election_a.last_votes.end ()) @@ -36,6 +37,8 @@ bool nano::confirmation_solicitor::broadcast (nano::election const & election_a) ++count; } } + // Random flood for block propagation + network.flood_message (message, true, 0.5f); error = false; } return error; diff --git a/nano/node/network.cpp b/nano/node/network.cpp index ba82542689..ddf351ad56 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -216,9 +216,9 @@ bool nano::network::send_votes_cache (std::shared_ptr return result; } -void nano::network::flood_message (nano::message const & message_a, bool const is_droppable_a) +void nano::network::flood_message (nano::message const & message_a, bool const is_droppable_a, float const scale_a) { - for (auto & i : list (fanout ())) + for (auto & i : list (fanout (scale_a))) { i->send (message_a, nullptr, is_droppable_a); } diff --git a/nano/node/network.hpp b/nano/node/network.hpp index 572e49f146..7a649941e3 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -98,7 +98,7 @@ class network final ~network (); void start (); void stop (); - void flood_message (nano::message const &, bool const = true); + void flood_message (nano::message const &, bool const = true, float const = 1.0f); void flood_keepalive () { nano::keepalive message;