diff --git a/src/consensus/activation.h b/src/consensus/activation.h --- a/src/consensus/activation.h +++ b/src/consensus/activation.h @@ -32,4 +32,8 @@ bool IsGravitonEnabled(const Consensus::Params ¶ms, const CBlockIndex *pindexPrev); +/** Check if May 15th, 2020 protocol upgrade has activated. */ +bool IsPhononEnabled(const Consensus::Params ¶ms, + const CBlockIndex *pindexPrev); + #endif // BITCOIN_CONSENSUS_ACTIVATION_H diff --git a/src/consensus/activation.cpp b/src/consensus/activation.cpp --- a/src/consensus/activation.cpp +++ b/src/consensus/activation.cpp @@ -58,3 +58,13 @@ gArgs.GetArg("-gravitonactivationtime", params.gravitonActivationTime); } + +bool IsPhononEnabled(const Consensus::Params ¶ms, + const CBlockIndex *pindexPrev) { + if (pindexPrev == nullptr) { + return false; + } + + return pindexPrev->GetMedianTimePast() >= + gArgs.GetArg("-phononactivationtime", params.phononActivationTime); +} diff --git a/src/init.cpp b/src/init.cpp --- a/src/init.cpp +++ b/src/init.cpp @@ -993,6 +993,9 @@ // TODO remove after the Nov 2019 upgrade gArgs.AddArg("-gravitonactivationtime", "", false, OptionsCategory::HIDDEN); + + // TODO remove after the May 2020 upgrade + gArgs.AddArg("-phononactivationtime", "", false, OptionsCategory::HIDDEN); } std::string LicenseInfo() { diff --git a/src/test/activation_tests.cpp b/src/test/activation_tests.cpp --- a/src/test/activation_tests.cpp +++ b/src/test/activation_tests.cpp @@ -49,4 +49,30 @@ BOOST_CHECK(IsGravitonEnabled(params, &blocks.back())); } +BOOST_AUTO_TEST_CASE(isphononenabled) { + CBlockIndex prev; + + const Consensus::Params ¶ms = Params().GetConsensus(); + const auto activation = + gArgs.GetArg("-phononactivationtime", params.phononActivationTime); + SetMockTime(activation - 1000000); + + BOOST_CHECK(!IsPhononEnabled(params, nullptr)); + + std::array blocks; + for (size_t i = 1; i < blocks.size(); ++i) { + blocks[i].pprev = &blocks[i - 1]; + } + BOOST_CHECK(!IsPhononEnabled(params, &blocks.back())); + + SetMTP(blocks, activation - 1); + BOOST_CHECK(!IsPhononEnabled(params, &blocks.back())); + + SetMTP(blocks, activation); + BOOST_CHECK(IsPhononEnabled(params, &blocks.back())); + + SetMTP(blocks, activation + 1); + BOOST_CHECK(IsPhononEnabled(params, &blocks.back())); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/test_bitcoin_main.cpp b/src/test/test_bitcoin_main.cpp --- a/src/test/test_bitcoin_main.cpp +++ b/src/test/test_bitcoin_main.cpp @@ -28,7 +28,10 @@ return false; } -std::set testArgs = {"-gravitonactivationtime"}; +std::set testArgs = { + "-gravitonactivationtime", + "-phononactivationtime", +}; int main(int argc, char *argv[]) { // Additional CLI params supported by test_bitcoin: