From 19aa83ca80c677499dfafff7d7e399926daeaf8c Mon Sep 17 00:00:00 2001 From: Duke Date: Wed, 27 Dec 2023 12:53:07 -0500 Subject: [PATCH] You can now estimate future blocktimes of Arrakis Chains with: ./contrib/block_time.pl 5555555 DRAGONX --- contrib/block_time.pl | 21 ++++- src/deprecation.cpp | 62 ------------- src/deprecation.h | 41 --------- src/gtest/test_deprecation.cpp | 153 --------------------------------- 4 files changed, 18 insertions(+), 259 deletions(-) delete mode 100644 src/deprecation.cpp delete mode 100644 src/deprecation.h delete mode 100644 src/gtest/test_deprecation.cpp diff --git a/contrib/block_time.pl b/contrib/block_time.pl index 1b7c6a914..e4c21a9bc 100755 --- a/contrib/block_time.pl +++ b/contrib/block_time.pl @@ -7,14 +7,18 @@ use strict; # Given a block time, estimate when it will happen my $block = shift || die "Usage: $0 123"; +my $coin = shift; my $hush = "./src/hush-cli"; unless (-e $hush) { die "$hush does not exist, aborting"; } +if ($coin) { + $hush .= " -ac_name=$coin"; +} my $blockcount = qx{$hush getblockcount}; unless ($blockcount = int($blockcount)) { - print "Invalid response from hush-cli\n"; + print "Invalid response from $hush\n"; exit 1; } @@ -22,13 +26,24 @@ if ($block <= $blockcount) { die "That block has already happened!"; } else { my $diff = $block - $blockcount; - my $minutes = $diff*1.25; # 75s in minutes + my $minpb = 1.25; # 75s in minutes for HUSH3 + if ($coin eq 'DRAGONX') { + $minpb = 0.6; # minutes per block + } elsif ($coin) { + # TODO: support custom bloctimes + $minpb = 1; # assumes default blocktime of 60s + } + my $minutes = $diff*$minpb; my $seconds = $minutes*60; my $now = time; my $then = $now + $seconds; my $ldate = localtime($then); my $gmdate = gmtime($then); - print "Hush Block $block will happen at roughly:\n"; + if ($coin) { + print "$coin Block $block will happen at roughly:\n"; + } else { + print "Hush Block $block will happen at roughly:\n"; + } print "$ldate Eastern # $then\n"; print "$gmdate GMT # $then\n"; } diff --git a/src/deprecation.cpp b/src/deprecation.cpp deleted file mode 100644 index 8d20b87b5..000000000 --- a/src/deprecation.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Copyright (c) 2016-2023 The Hush developers -// Distributed under the GPLv3 software license, see the accompanying -// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - -/****************************************************************************** - * Copyright © 2014-2019 The SuperNET Developers. * - * * - * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * - * the top-level directory of this distribution for the individual copyright * - * holder information and the developer policies on copyright and licensing. * - * * - * Unless otherwise agreed in a custom licensing agreement, no part of the * - * SuperNET software, including this file may be copied, modified, propagated * - * or distributed except according to the terms contained in the LICENSE file * - * * - * Removal or modification of this copyright notice is prohibited. * - * * - ******************************************************************************/ - -#include "deprecation.h" -#include "clientversion.h" -#include "init.h" -#include "ui_interface.h" -#include "util.h" -#include "chainparams.h" - -static const std::string CLIENT_VERSION_STR = FormatVersion(CLIENT_VERSION); -extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; - -void EnforceNodeDeprecation(int nHeight, bool forceLogging, bool fThread) { - - // Do not enforce deprecation in regtest or on testnet - std::string networkID = Params().NetworkIDString(); - std::string msg; - - if (networkID != "main" || SMART_CHAIN_SYMBOL[0] != 0 ) return; - - int blocksToDeprecation = DEPRECATION_HEIGHT - nHeight; - if (blocksToDeprecation <= 0) { - // In order to ensure we only log once per process when deprecation is - // disabled (to avoid log spam), we only need to log in two cases: - // - The deprecating block just arrived - // - This can be triggered more than once if a block chain reorg - // occurs, but that's an irregular event that won't cause spam. - // - The node is starting - if (blocksToDeprecation == 0 || forceLogging) { - msg = strprintf(_("This version has been deprecated as of block height %d."), - DEPRECATION_HEIGHT) + " " + - _("You should upgrade to the latest version of Hush."); - LogPrintf("*** %s\n", msg); - uiInterface.ThreadSafeMessageBox(msg, "", CClientUIInterface::MSG_ERROR); - } - StartShutdown(); - } else if (blocksToDeprecation == DEPRECATION_WARN_LIMIT || (blocksToDeprecation < DEPRECATION_WARN_LIMIT && forceLogging)) { - msg = strprintf(_("This version will be deprecated at block height %d, and will automatically shut down."), - DEPRECATION_HEIGHT) + " " + - _("You should upgrade to the latest version of Hush."); - LogPrintf("*** %s\n", msg); - uiInterface.ThreadSafeMessageBox(msg, "", CClientUIInterface::MSG_WARNING); - } -} diff --git a/src/deprecation.h b/src/deprecation.h deleted file mode 100644 index 8cd724229..000000000 --- a/src/deprecation.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Copyright (c) 2016-2023 The Hush developers -// Distributed under the GPLv3 software license, see the accompanying -// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - -/****************************************************************************** - * Copyright © 2014-2019 The SuperNET Developers. * - * * - * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * - * the top-level directory of this distribution for the individual copyright * - * holder information and the developer policies on copyright and licensing. * - * * - * Unless otherwise agreed in a custom licensing agreement, no part of the * - * SuperNET software, including this file may be copied, modified, propagated * - * or distributed except according to the terms contained in the LICENSE file * - * * - * Removal or modification of this copyright notice is prohibited. * - * * - ******************************************************************************/ - -#ifndef ZCASH_DEPRECATION_H -#define ZCASH_DEPRECATION_H - -// Deprecation policy: -// * Shut down WEEKS_UNTIL_DEPRECATION weeks' worth of blocks after the estimated release block height. -// * A warning is shown during the DEPRECATION_WARN_LIMIT worth of blocks prior to shut down. -static const int WEEKS_UNTIL_DEPRECATION = 52; -static const int DEPRECATION_HEIGHT = 5555555; -static const int APPROX_RELEASE_HEIGHT = DEPRECATION_HEIGHT - (WEEKS_UNTIL_DEPRECATION * 7 * 24 * 60); - -// Number of blocks before deprecation to warn users -static const int DEPRECATION_WARN_LIMIT = 60 * 24 * 60; // 2 months - -/** - * Checks whether the node is deprecated based on the current block height, and - * shuts down the node with an error if so (and deprecation is not disabled for - * the current client version). - */ -void EnforceNodeDeprecation(int nHeight, bool forceLogging=false, bool fThread=true); - -#endif // ZCASH_DEPRECATION_H diff --git a/src/gtest/test_deprecation.cpp b/src/gtest/test_deprecation.cpp deleted file mode 100644 index 454afe40c..000000000 --- a/src/gtest/test_deprecation.cpp +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright (c) 2016-2023 The Hush developers -// Distributed under the GPLv3 software license, see the accompanying -// Released under the GPLv3 - -#include -#include - -#include "chainparams.h" -#include "clientversion.h" -#include "deprecation.h" -#include "init.h" -#include "ui_interface.h" -#include "util.h" -#include "util/strencodings.h" - -#include -#include - -using ::testing::StrictMock; - -static const std::string CLIENT_VERSION_STR = FormatVersion(CLIENT_VERSION); -extern std::atomic fRequestShutdown; - -class MockUIInterface { -public: - MOCK_METHOD3(ThreadSafeMessageBox, bool(const std::string& message, - const std::string& caption, - unsigned int style)); -}; - -static bool ThreadSafeMessageBox(MockUIInterface *mock, - const std::string& message, - const std::string& caption, - unsigned int style) -{ - return mock->ThreadSafeMessageBox(message, caption, style); -} - -class DeprecationTest : public ::testing::Test { -protected: - virtual void SetUp() { - uiInterface.ThreadSafeMessageBox.disconnect_all_slots(); - uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, &mock_, _1, _2, _3)); - SelectParams(CBaseChainParams::MAIN); - - } - - virtual void TearDown() { - fRequestShutdown = false; - mapArgs.clear(); - } - - StrictMock mock_; - - static std::vector read_lines(boost::filesystem::path filepath) { - std::vector result; - - std::ifstream f(filepath.string().c_str()); - std::string line; - while (std::getline(f,line)) { - result.push_back(line); - } - - return result; - } -}; - -TEST_F(DeprecationTest, NonDeprecatedNodeKeepsRunning) { - EXPECT_FALSE(ShutdownRequested()); - EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT - 1); - EXPECT_FALSE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, NodeNearDeprecationIsWarned) { - EXPECT_FALSE(ShutdownRequested()); - EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_WARNING)); - EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT); - EXPECT_FALSE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, NodeNearDeprecationWarningIsNotDuplicated) { - EXPECT_FALSE(ShutdownRequested()); - EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT + 1); - EXPECT_FALSE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, NodeNearDeprecationWarningIsRepeatedOnStartup) { - EXPECT_FALSE(ShutdownRequested()); - EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_WARNING)); - EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT + 1, true); - EXPECT_FALSE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, DeprecatedNodeShutsDown) { - EXPECT_FALSE(ShutdownRequested()); - EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_ERROR)); - EnforceNodeDeprecation(DEPRECATION_HEIGHT); - EXPECT_TRUE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, DeprecatedNodeErrorIsNotDuplicated) { - EXPECT_FALSE(ShutdownRequested()); - EnforceNodeDeprecation(DEPRECATION_HEIGHT + 1); - EXPECT_TRUE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, DeprecatedNodeErrorIsRepeatedOnStartup) { - EXPECT_FALSE(ShutdownRequested()); - EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_ERROR)); - EnforceNodeDeprecation(DEPRECATION_HEIGHT + 1, true); - EXPECT_TRUE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, DeprecatedNodeIgnoredOnRegtest) { - SelectParams(CBaseChainParams::REGTEST); - EXPECT_FALSE(ShutdownRequested()); - EnforceNodeDeprecation(DEPRECATION_HEIGHT+1); - EXPECT_FALSE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, DeprecatedNodeIgnoredOnTestnet) { - SelectParams(CBaseChainParams::TESTNET); - EXPECT_FALSE(ShutdownRequested()); - EnforceNodeDeprecation(DEPRECATION_HEIGHT+1); - EXPECT_FALSE(ShutdownRequested()); -} - -TEST_F(DeprecationTest, AlertNotify) { - boost::filesystem::path temp = GetTempPath() / - boost::filesystem::unique_path("alertnotify-%%%%.txt"); - - mapArgs["-alertnotify"] = std::string("echo %s >> ") + temp.string(); - - EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_WARNING)); - EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT, false, false); - - std::vector r = read_lines(temp); - EXPECT_EQ(r.size(), 1u); - - // -alertnotify restricts the message to safe characters. - auto expectedMsg = strprintf( - "This version will be deprecated at block height %d, and will automatically shut down. You should upgrade to the latest version of Hush.", - DEPRECATION_HEIGHT); - - // Windows built-in echo semantics are different than posixy shells. Quotes and - // whitespace are printed literally. -#ifndef WIN32 - EXPECT_EQ(r[0], expectedMsg); -#else - EXPECT_EQ(r[0], strprintf("'%s' ", expectedMsg)); -#endif - boost::filesystem::remove(temp); -}