|
|
|
@ -36,6 +36,37 @@
|
|
|
|
|
# error "Bitcoin cannot be compiled without assertions."
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/** Expiration time for orphan transactions in seconds */
|
|
|
|
|
static const int64_t ORPHAN_TX_EXPIRE_TIME = 20 * 60;
|
|
|
|
|
/** Minimum time between orphan transactions expire time checks in seconds */
|
|
|
|
|
static const int64_t ORPHAN_TX_EXPIRE_INTERVAL = 5 * 60;
|
|
|
|
|
/** Headers download timeout expressed in microseconds
|
|
|
|
|
* Timeout = base + per_header * (expected number of headers) */
|
|
|
|
|
static constexpr int64_t HEADERS_DOWNLOAD_TIMEOUT_BASE = 15 * 60 * 1000000; // 15 minutes
|
|
|
|
|
static constexpr int64_t HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1000; // 1ms/header
|
|
|
|
|
/** Protect at least this many outbound peers from disconnection due to slow/
|
|
|
|
|
* behind headers chain.
|
|
|
|
|
*/
|
|
|
|
|
static constexpr int32_t MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT = 4;
|
|
|
|
|
/** Timeout for (unprotected) outbound peers to sync to our chainwork, in seconds */
|
|
|
|
|
static constexpr int64_t CHAIN_SYNC_TIMEOUT = 20 * 60; // 20 minutes
|
|
|
|
|
/** How frequently to check for stale tips, in seconds */
|
|
|
|
|
static constexpr int64_t STALE_CHECK_INTERVAL = 10 * 60; // 10 minutes
|
|
|
|
|
/** How frequently to check for extra outbound peers and disconnect, in seconds */
|
|
|
|
|
static constexpr int64_t EXTRA_PEER_CHECK_INTERVAL = 45;
|
|
|
|
|
/** Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict, in seconds */
|
|
|
|
|
static constexpr int64_t MINIMUM_CONNECT_TIME = 30;
|
|
|
|
|
|
|
|
|
|
static const uint64_t RANDOMIZER_ID_ADDRESS_RELAY = 0x3cac0035b5866b90ULL; // SHA256("main address relay")[0:8]
|
|
|
|
|
|
|
|
|
|
/// Age after which a stale block will no longer be served if requested as
|
|
|
|
|
/// protection against fingerprinting. Set to one month, denominated in seconds.
|
|
|
|
|
static const int STALE_RELAY_AGE_LIMIT = 30 * 24 * 60 * 60;
|
|
|
|
|
|
|
|
|
|
/// Age after which a block is considered historical for purposes of rate
|
|
|
|
|
/// limiting block relay. Set to one week, denominated in seconds.
|
|
|
|
|
static const int HISTORICAL_BLOCK_AGE = 7 * 24 * 60 * 60;
|
|
|
|
|
|
|
|
|
|
std::atomic<int64_t> nTimeBestReceived(0); // Used only to inform the wallet of when we last received a block
|
|
|
|
|
|
|
|
|
|
struct IteratorComparator
|
|
|
|
@ -57,20 +88,12 @@ static CCriticalSection g_cs_orphans;
|
|
|
|
|
std::map<uint256, COrphanTx> mapOrphanTransactions GUARDED_BY(g_cs_orphans);
|
|
|
|
|
std::map<COutPoint, std::set<std::map<uint256, COrphanTx>::iterator, IteratorComparator>> mapOrphanTransactionsByPrev GUARDED_BY(g_cs_orphans);
|
|
|
|
|
void EraseOrphansFor(NodeId peer);
|
|
|
|
|
/** Increase a node's misbehavior score. */
|
|
|
|
|
void Misbehaving(NodeId nodeid, int howmuch, const std::string& message="");
|
|
|
|
|
|
|
|
|
|
static size_t vExtraTxnForCompactIt GUARDED_BY(g_cs_orphans) = 0;
|
|
|
|
|
static std::vector<std::pair<uint256, CTransactionRef>> vExtraTxnForCompact GUARDED_BY(g_cs_orphans);
|
|
|
|
|
|
|
|
|
|
static const uint64_t RANDOMIZER_ID_ADDRESS_RELAY = 0x3cac0035b5866b90ULL; // SHA256("main address relay")[0:8]
|
|
|
|
|
|
|
|
|
|
/// Age after which a stale block will no longer be served if requested as
|
|
|
|
|
/// protection against fingerprinting. Set to one month, denominated in seconds.
|
|
|
|
|
static const int STALE_RELAY_AGE_LIMIT = 30 * 24 * 60 * 60;
|
|
|
|
|
|
|
|
|
|
/// Age after which a block is considered historical for purposes of rate
|
|
|
|
|
/// limiting block relay. Set to one week, denominated in seconds.
|
|
|
|
|
static const int HISTORICAL_BLOCK_AGE = 7 * 24 * 60 * 60;
|
|
|
|
|
|
|
|
|
|
// Internal stuff
|
|
|
|
|
namespace {
|
|
|
|
|
/** Enable BIP61 (sending reject messages) */
|
|
|
|
|