From 2cf5c796dc3abfa3065056f5aa09032f0ffef88a Mon Sep 17 00:00:00 2001 From: Capri Date: Tue, 1 Sep 2026 08:46:18 +0000 Subject: [PATCH] Activate post-quantum rules at block 6000 --- src/Makefile.qt.include | 2 +- src/chainparams.cpp | 12 ++++++------ src/deploymentstatus.h | 5 +++++ src/versionbits.cpp | 10 ++++++++++ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 69eb474..fe4784b 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -331,7 +331,7 @@ endif if ENABLE_ZMQ vexta_qt_ldadd += $(LIBVEXTA_ZMQ) $(ZMQ_LIBS) endif -vexta_qt_ldadd += $(LIBVEXTA_CLI) $(LIBVEXTA_COMMON) $(LIBVEXTA_UTIL) $(LIBVEXTA_CONSENSUS) $(LIBVEXTA_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) \ +vexta_qt_ldadd += $(LIBVEXTA_CLI) $(LIBVEXTA_COMMON) $(LIBVEXTA_UTIL) $(LIBVEXTA_CONSENSUS) $(LIBVEXTA_PQ) $(LIBVEXTA_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) \ $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(BDB_LIBS) $(MINIUPNPC_LIBS) $(NATPMP_LIBS) $(LIBSECP256K1) \ $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(SQLITE_LIBS) vexta_qt_ldflags = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 8e2fd4e..164d1b8 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -104,11 +104,11 @@ public: consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay // VEXTA quantum-resistant witness v2/v3. - // Integrated but intentionally not active yet. + // Activates at the configured min_activation_height. consensus.vDeployments[Consensus::DEPLOYMENT_PQR].bit = 3; consensus.vDeployments[Consensus::DEPLOYMENT_PQR].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_PQR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; - consensus.vDeployments[Consensus::DEPLOYMENT_PQR].min_activation_height = 0; + consensus.vDeployments[Consensus::DEPLOYMENT_PQR].min_activation_height = 6000; // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256{}; @@ -243,11 +243,11 @@ public: consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay // VEXTA quantum-resistant witness v2/v3. - // Integrated but intentionally not active yet. + // Activates at the configured min_activation_height. consensus.vDeployments[Consensus::DEPLOYMENT_PQR].bit = 3; consensus.vDeployments[Consensus::DEPLOYMENT_PQR].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_PQR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; - consensus.vDeployments[Consensus::DEPLOYMENT_PQR].min_activation_height = 0; + consensus.vDeployments[Consensus::DEPLOYMENT_PQR].min_activation_height = 6000; // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256{}; @@ -383,11 +383,11 @@ public: consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay // VEXTA quantum-resistant witness v2/v3. - // Integrated but intentionally not active yet. + // Activates at the configured min_activation_height. consensus.vDeployments[Consensus::DEPLOYMENT_PQR].bit = 3; consensus.vDeployments[Consensus::DEPLOYMENT_PQR].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; consensus.vDeployments[Consensus::DEPLOYMENT_PQR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; - consensus.vDeployments[Consensus::DEPLOYMENT_PQR].min_activation_height = 0; + consensus.vDeployments[Consensus::DEPLOYMENT_PQR].min_activation_height = 6000; // message start is defined as the first 4 bytes of the sha256d of the block script CHashWriter h(SER_DISK, 0); diff --git a/src/deploymentstatus.h b/src/deploymentstatus.h index d8a8f3a..46a92dc 100644 --- a/src/deploymentstatus.h +++ b/src/deploymentstatus.h @@ -49,6 +49,11 @@ inline bool DeploymentEnabled(const Consensus::Params& params, Consensus::Buried inline bool DeploymentEnabled(const Consensus::Params& params, Consensus::DeploymentPos dep) { assert(Consensus::ValidDeployment(dep)); + + if (dep == Consensus::DEPLOYMENT_PQR) { + return true; + } + return params.vDeployments[dep].nStartTime != Consensus::BIP9Deployment::NEVER_ACTIVE; } diff --git a/src/versionbits.cpp b/src/versionbits.cpp index b758b12..8f7a0eb 100644 --- a/src/versionbits.cpp +++ b/src/versionbits.cpp @@ -193,6 +193,11 @@ public: ThresholdState VersionBitsCache::State(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::DeploymentPos pos) { + if (pos == Consensus::DEPLOYMENT_PQR) { + const int next_height = pindexPrev ? pindexPrev->nHeight + 1 : 0; + return next_height >= params.vDeployments[pos].min_activation_height ? ThresholdState::ACTIVE : ThresholdState::DEFINED; + } + LOCK(m_mutex); return VersionBitsConditionChecker(pos).GetStateFor(pindexPrev, params, m_caches[pos]); } @@ -204,6 +209,11 @@ BIP9Stats VersionBitsCache::Statistics(const CBlockIndex* pindexPrev, const Cons int VersionBitsCache::StateSinceHeight(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::DeploymentPos pos) { + if (pos == Consensus::DEPLOYMENT_PQR) { + const int next_height = pindexPrev ? pindexPrev->nHeight + 1 : 0; + return next_height >= params.vDeployments[pos].min_activation_height ? params.vDeployments[pos].min_activation_height : 0; + } + LOCK(m_mutex); return VersionBitsConditionChecker(pos).GetStateSinceHeightFor(pindexPrev, params, m_caches[pos]); }