X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Futil.cpp;fp=src%2Futil.cpp;h=2c5ec846723db37745cc3e7468f11f8bf872f340;hp=79de9db5625303b7f2828ca7cd176d9851fcbc2a;hb=ba1e2d7c33a2e54e967c248c39439b894881459b;hpb=3f40bc3293e197f08788673da3b68e6cea9c67bf diff --git a/src/util.cpp b/src/util.cpp index 79de9db..2c5ec84 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -4,6 +4,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "util.h" +#include "allocators.h" #include "interface.h" #include "sync.h" #include "version.h" @@ -47,7 +48,6 @@ string strMiscWarning; bool fTestNet = false; bool fNoListen = false; bool fLogTimestamps = false; -CMedianFilter vTimeOffsets(200,0); bool fReopenDebugLog = false; // Extended DecodeDumpTime implementation, see this page for details: @@ -1261,18 +1261,6 @@ void ShrinkDebugFile() - - - - -// -// "Never go to sea with two chronometers; take one or three." -// Our three time sources are: -// - System clock -// - Median of other nodes clocks -// - The user (asking the user to fix the system clock if the first two disagree) -// - // System clock int64_t GetTime() { @@ -1281,91 +1269,6 @@ int64_t GetTime() return now; } -// Trusted NTP offset or median of NTP samples. -extern int64_t nNtpOffset; - -// Median of time samples given by other nodes. -static int64_t nNodesOffset = INT64_MAX; - -// Select time offset: -int64_t GetTimeOffset() -{ - // If NTP and system clock are in agreement within 40 minutes, then use NTP. - if (abs64(nNtpOffset) < 40 * 60) - return nNtpOffset; - - // If not, then choose between median peer time and system clock. - if (abs64(nNodesOffset) < 70 * 60) - return nNodesOffset; - - return 0; -} - -int64_t GetNodesOffset() -{ - return nNodesOffset; -} - -int64_t GetAdjustedTime() -{ - return GetTime() + GetTimeOffset(); -} - -void AddTimeData(const CNetAddr& ip, int64_t nTime) -{ - int64_t nOffsetSample = nTime - GetTime(); - - // Ignore duplicates - static set setKnown; - if (!setKnown.insert(ip).second) - return; - - // Add data - vTimeOffsets.input(nOffsetSample); - printf("Added time data, samples %d, offset %+" PRId64 " (%+" PRId64 " minutes)\n", vTimeOffsets.size(), nOffsetSample, nOffsetSample/60); - if (vTimeOffsets.size() >= 5 && vTimeOffsets.size() % 2 == 1) - { - int64_t nMedian = vTimeOffsets.median(); - std::vector vSorted = vTimeOffsets.sorted(); - // Only let other nodes change our time by so much - if (abs64(nMedian) < 70 * 60) - { - nNodesOffset = nMedian; - } - else - { - nNodesOffset = INT64_MAX; - - static bool fDone; - if (!fDone) - { - bool fMatch = false; - - // If nobody has a time different than ours but within 5 minutes of ours, give a warning - for (int64_t nOffset : vSorted) - if (nOffset != 0 && abs64(nOffset) < 5 * 60) - fMatch = true; - - if (!fMatch) - { - fDone = true; - string strMessage = _("Warning: Please check that your computer's date and time are correct! If your clock is wrong NovaCoin will not work properly."); - strMiscWarning = strMessage; - printf("*** %s\n", strMessage.c_str()); - uiInterface.ThreadSafeMessageBox(strMessage+" ", string("NovaCoin"), CClientUIInterface::OK | CClientUIInterface::ICON_EXCLAMATION); - } - } - } - if (fDebug) { - for (int64_t n : vSorted) - printf("%+" PRId64 " ", n); - printf("| "); - } - if (nNodesOffset != INT64_MAX) - printf("nNodesOffset = %+" PRId64 " (%+" PRId64 " minutes)\n", nNodesOffset, nNodesOffset/60); - } -} - string FormatVersion(int nVersion) { if (nVersion%100 == 0)