Monero
Functions | Variables
cryptonote::anonymous_namespace{tx_pool.cpp} Namespace Reference

Functions

uint64_t get_relay_delay (time_t now, time_t received)
 
uint64_t template_accept_threshold (uint64_t amount)
 
uint64_t get_transaction_weight_limit (uint8_t version)
 
void set_if_less (std::atomic< time_t > &next_check, const time_t candidate) noexcept
 

Variables

constexpr const std::chrono::seconds dandelionpp_embargo_average {CRYPTONOTE_DANDELIONPP_EMBARGO_AVERAGE}
 
time_t const MIN_RELAY_TIME = (60 * 5)
 
time_t const MAX_RELAY_TIME = (60 * 60 * 4)
 
float const ACCEPT_THRESHOLD = 1.0f
 
constexpr const std::chrono::minutes max_relayable_check {2}
 Max DB check interval for relayable txes. More...
 
constexpr const std::chrono::seconds forward_delay_average {CRYPTONOTE_FORWARD_DELAY_AVERAGE}
 

Function Documentation

◆ get_relay_delay()

uint64_t cryptonote::anonymous_namespace{tx_pool.cpp}::get_relay_delay ( time_t  now,
time_t  received 
)

◆ get_transaction_weight_limit()

uint64_t cryptonote::anonymous_namespace{tx_pool.cpp}::get_transaction_weight_limit ( uint8_t  version)

◆ set_if_less()

void cryptonote::anonymous_namespace{tx_pool.cpp}::set_if_less ( std::atomic< time_t > &  next_check,
const time_t  candidate 
)
noexcept

◆ template_accept_threshold()

uint64_t cryptonote::anonymous_namespace{tx_pool.cpp}::template_accept_threshold ( uint64_t  amount)

Variable Documentation

◆ ACCEPT_THRESHOLD

float const cryptonote::anonymous_namespace{tx_pool.cpp}::ACCEPT_THRESHOLD = 1.0f

◆ dandelionpp_embargo_average

constexpr const std::chrono::seconds cryptonote::anonymous_namespace{tx_pool.cpp}::dandelionpp_embargo_average {CRYPTONOTE_DANDELIONPP_EMBARGO_AVERAGE}
constexpr

The Dandelion++ has formula for calculating the average embargo timeout: (-k*(k-1)*hop)/(2*log(1-ep)) where k is the number of hops before this node and ep is the probability that one of the k hops hits their embargo timer, and hop is the average time taken between hops. So decreasing ep will make it more probable that "this" node is the first to expire the embargo timer. Increasing k will increase the number of nodes that will be "hidden" as a prior recipient of the tx.

As example, k=5 and ep=0.1 means "this" embargo timer has a 90% probability of being the first to expire amongst 5 nodes that saw the tx before "this" one. These values are independent to the fluff probability, but setting a low k with a low p (fluff probability) is not ideal since a blackhole is more likely to reveal earlier nodes in the chain.

This value was calculated with k=5, ep=0.10, and hop = 175 ms. A testrun from a recent Intel laptop took ~80ms to receive+parse+proces+send transaction. At least 50ms will be added to the latency if crossing an ocean. So 175ms is the fudge factor for a single hop with 39s being the embargo timer.

◆ forward_delay_average

constexpr const std::chrono::seconds cryptonote::anonymous_namespace{tx_pool.cpp}::forward_delay_average {CRYPTONOTE_FORWARD_DELAY_AVERAGE}
constexpr

◆ MAX_RELAY_TIME

time_t const cryptonote::anonymous_namespace{tx_pool.cpp}::MAX_RELAY_TIME = (60 * 60 * 4)

◆ max_relayable_check

constexpr const std::chrono::minutes cryptonote::anonymous_namespace{tx_pool.cpp}::max_relayable_check {2}
constexpr

Max DB check interval for relayable txes.

◆ MIN_RELAY_TIME

time_t const cryptonote::anonymous_namespace{tx_pool.cpp}::MIN_RELAY_TIME = (60 * 5)