diff --git a/src/consensus/params.cpp b/src/consensus/params.cpp index 7d348da4a..53c257a86 100644 --- a/src/consensus/params.cpp +++ b/src/consensus/params.cpp @@ -25,6 +25,15 @@ namespace Consensus { return NetworkUpgradeState(nHeight, *this, idx) == UPGRADE_ACTIVE; } + int Params::HeightOfLatestSettledUpgrade() const { + for (auto idxInt = Consensus::MAX_NETWORK_UPGRADES - 1; idxInt > Consensus::BASE_SPROUT; idxInt--) { + if (vUpgrades[idxInt].hashActivationBlock.has_value()) { + return vUpgrades[idxInt].nActivationHeight; + } + } + return 0; + } + bool Params::FeatureRequired(const Consensus::ConsensusFeature feature) const { return vRequiredFeatures.count(feature) > 0; } diff --git a/src/consensus/params.h b/src/consensus/params.h index a24f7520c..0aefaee1f 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -237,6 +237,12 @@ struct Params { */ bool NetworkUpgradeActive(int nHeight, Consensus::UpgradeIndex idx) const; + /** + * Returns the activation height of the latest settled upgrade, as defined + * in . + */ + int HeightOfLatestSettledUpgrade() const; + bool FutureTimestampSoftForkActive(int nHeight) const; bool FeatureActive(int nHeight, Consensus::ConsensusFeature feature) const; diff --git a/src/init.cpp b/src/init.cpp index b200a3448..98851cad2 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1099,9 +1099,11 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) #ifdef ENABLE_MINING if (mapArgs.count("-mineraddress")) { auto addr = keyIO.DecodePaymentAddress(mapArgs["-mineraddress"]); - if (!(addr.has_value() && std::visit(ExtractMinerAddress(chainparams.GetConsensus(), 0), addr.value()).has_value())) { + auto consensus = chainparams.GetConsensus(); + int height = consensus.HeightOfLatestSettledUpgrade(); + if (!(addr.has_value() && std::visit(ExtractMinerAddress(consensus, height), addr.value()).has_value())) { return InitError(strprintf( - _("Invalid address for -mineraddress=: '%s' (must be a Sapling or transparent P2PKH address)"), + _("Invalid address for -mineraddress=: '%s' (must be a Sapling or transparent P2PKH address, or a Unified Address containing a valid receiver for the most recent settled network upgrade.)"), mapArgs["-mineraddress"])); } }