diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index 0b6c9c973..c70bde93a 100644 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -300,9 +300,10 @@ namespace cryptonote { using clock = std::chrono::system_clock; auto last_relayed_time = std::numeric_limits::max(); - if (tx_relay == relay_method::forward) + if (tx_relay == relay_method::forward || tx_relay == relay_method::stem) { - last_relayed_time = clock::to_time_t(clock::now() + crypto::random_poisson_seconds{forward_delay_average}()); + const auto delay = tx_relay == relay_method::forward ? forward_delay_average : dandelionpp_embargo_average; + last_relayed_time = clock::to_time_t(clock::now() + crypto::random_poisson_seconds{delay}()); set_if_less(m_next_check, time_t(last_relayed_time)); } // else the `set_relayed` function will adjust the time accordingly later @@ -815,6 +816,8 @@ namespace cryptonote case relay_method::local: case relay_method::fluff: case relay_method::block: + if (!meta.relayed) + break; // if it hasn't been relayed yet, relay it if (now - meta.last_relayed_time <= get_relay_delay(meta.last_relayed_time, meta.receive_time)) return true; // continue to next tx break;