From 9e64d69bf74c8a381fb59841519cc3736bce14d4 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Tue, 14 Dec 2021 10:15:10 +0000 Subject: [move] Move PoissonNextSend to src/random and update comment PoissonNextSend is used by net and net_processing and is stateless, so place it in the utility random.cpp translation unit. --- src/random.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/random.h') diff --git a/src/random.h b/src/random.h index 0c6dc24983..be73e44a87 100644 --- a/src/random.h +++ b/src/random.h @@ -10,7 +10,7 @@ #include #include -#include // For std::chrono::microseconds +#include #include #include @@ -82,6 +82,18 @@ D GetRandomDuration(typename std::common_type::type max) noexcept }; constexpr auto GetRandMicros = GetRandomDuration; constexpr auto GetRandMillis = GetRandomDuration; + +/** + * Return a timestamp in the future sampled from an exponential distribution + * (https://en.wikipedia.org/wiki/Exponential_distribution). This distribution + * is memoryless and should be used for repeated network events (e.g. sending a + * certain type of message) to minimize leaking information to observers. + * + * The probability of an event occuring before time x is 1 - e^-(x/a) where a + * is the average interval between events. + * */ +std::chrono::microseconds PoissonNextSend(std::chrono::microseconds now, std::chrono::seconds average_interval); + int GetRandInt(int nMax) noexcept; uint256 GetRandHash() noexcept; -- cgit v1.2.3