Bitcoin Core  29.1.0
P2P Digital Currency
timeoffsets.h
Go to the documentation of this file.
1 // Copyright (c) 2024-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_NODE_TIMEOFFSETS_H
6 #define BITCOIN_NODE_TIMEOFFSETS_H
7 
8 #include <sync.h>
9 
10 #include <chrono>
11 #include <cstddef>
12 #include <deque>
13 
14 namespace node {
15 class Warnings;
16 } // namespace node
17 
19 {
20 public:
21  TimeOffsets(node::Warnings& warnings) : m_warnings{warnings} {}
22 
23 private:
25  static constexpr size_t MAX_SIZE{50};
27  static constexpr std::chrono::minutes WARN_THRESHOLD{10};
28 
29  mutable Mutex m_mutex;
32  std::deque<std::chrono::seconds> m_offsets GUARDED_BY(m_mutex){};
33 
35 
36 public:
38  void Add(std::chrono::seconds offset) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex);
39 
42  std::chrono::seconds Median() const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex);
43 
47 };
48 
49 #endif // BITCOIN_NODE_TIMEOFFSETS_H
bool WarnIfOutOfSync() const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Raise warnings if the median time offset exceeds the warnings threshold.
Definition: timeoffsets.cpp:46
TimeOffsets(node::Warnings &warnings)
Definition: timeoffsets.h:21
Manages warning messages within a node.
Definition: warnings.h:39
static constexpr std::chrono::minutes WARN_THRESHOLD
Minimum difference between system and network time for a warning to be raised.
Definition: timeoffsets.h:27
Mutex m_mutex
Definition: timeoffsets.h:29
void Add(std::chrono::seconds offset) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Add a new time offset sample.
Definition: timeoffsets.cpp:22
static constexpr size_t MAX_SIZE
Maximum number of timeoffsets stored.
Definition: timeoffsets.h:25
Definition: messages.h:20
std::deque< std::chrono::seconds > m_offsets GUARDED_BY(m_mutex)
The observed time differences between our local clock and those of our outbound peers.
Definition: timeoffsets.h:32
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:49
node::Warnings & m_warnings
Definition: timeoffsets.h:32
std::chrono::seconds Median() const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Compute and return the median of the collected time offset samples.
Definition: timeoffsets.cpp:34