1515#include < core/pow.hpp>
1616#include < core/target_utils.hpp>
1717#include < core/uint256.hpp>
18+ #include < core/version_gate.hpp> // SSOT: core::version_gate::is_v36_active
1819#include < btclibs/crypto/common.h>
1920#include < btclibs/crypto/sha256.h>
2021#include < btclibs/crypto/scrypt.h>
@@ -374,7 +375,7 @@ inline std::pair<uint256, uint64_t> compute_ref_hash_for_work(const RefHashParam
374375
375376 ref_stream << p.share_nonce ;
376377
377- if (p.share_version >= 36 ) {
378+ if (core::version_gate::is_v36_active ( p.share_version ) ) {
378379 // V36: pubkey_hash (uint160) + pubkey_type (uint8)
379380 ref_stream << p.pubkey_hash ;
380381 ref_stream << p.pubkey_type ;
@@ -399,7 +400,7 @@ inline std::pair<uint256, uint64_t> compute_ref_hash_for_work(const RefHashParam
399400 ref_stream << p.segwit_data ;
400401
401402 // V36: merged_addresses (after segwit_data, before far_share_hash)
402- if (p.share_version >= 36 )
403+ if (core::version_gate::is_v36_active ( p.share_version ) )
403404 ref_stream << p.merged_addresses ;
404405
405406 ref_stream << p.far_share_hash ;
@@ -408,7 +409,7 @@ inline std::pair<uint256, uint64_t> compute_ref_hash_for_work(const RefHashParam
408409 ref_stream << p.timestamp ;
409410 ref_stream << p.absheight ;
410411
411- if (p.share_version >= 36 ) {
412+ if (core::version_gate::is_v36_active ( p.share_version ) ) {
412413 ::Serialize (ref_stream, Using<AbsworkV36Format>(p.abswork));
413414 ref_stream << p.merged_coinbase_info ;
414415 ref_stream << p.merged_payout_hash ;
@@ -426,10 +427,10 @@ inline std::pair<uint256, uint64_t> compute_ref_hash_for_work(const RefHashParam
426427 {
427428 static int rfn_log = 0 ;
428429 static int rfn_v36_log = 0 ;
429- bool should_log = (rfn_log < 3 ) || (p.share_version >= 36 && rfn_v36_log < 5 );
430+ bool should_log = (rfn_log < 3 ) || (core::version_gate::is_v36_active ( p.share_version ) && rfn_v36_log < 5 );
430431 if (should_log) {
431432 rfn_log++;
432- if (p.share_version >= 36 ) rfn_v36_log++;
433+ if (core::version_gate::is_v36_active ( p.share_version ) ) rfn_v36_log++;
433434 static const char * HX = " 0123456789abcdef" ;
434435 std::string hex;
435436 auto * rd = reinterpret_cast <const unsigned char *>(ref_stream.data ());
@@ -543,7 +544,7 @@ uint256 share_init_verify(const ShareT& share, const core::CoinParams& params, b
543544 ref_stream << share.m_pubkey_hash ;
544545
545546 // subsidy: VarInt for V36+, raw uint64_t LE for older
546- if constexpr (ver >= 36 )
547+ if constexpr (core::version_gate::is_v36_active ( ver) )
547548 ::Serialize (ref_stream, VarInt(share.m_subsidy));
548549 else
549550 ref_stream << share.m_subsidy ;
@@ -578,7 +579,7 @@ uint256 share_init_verify(const ShareT& share, const core::CoinParams& params, b
578579 }
579580
580581 // merged_addresses (V36+)
581- if constexpr (ver >= 36 )
582+ if constexpr (core::version_gate::is_v36_active ( ver) )
582583 {
583584 if constexpr (requires { share.m_merged_addresses ; })
584585 ref_stream << share.m_merged_addresses ;
@@ -599,7 +600,7 @@ uint256 share_init_verify(const ShareT& share, const core::CoinParams& params, b
599600 ref_stream << share.m_absheight ;
600601
601602 // abswork: AbsworkV36Format for V36+, raw uint128 LE for older
602- if constexpr (ver >= 36 )
603+ if constexpr (core::version_gate::is_v36_active ( ver) )
603604 {
604605 if constexpr (requires { share.m_abswork ; })
605606 ::Serialize (ref_stream, Using<AbsworkV36Format>(share.m_abswork));
@@ -610,7 +611,7 @@ uint256 share_init_verify(const ShareT& share, const core::CoinParams& params, b
610611 }
611612
612613 // V36+ merged mining commitment fields
613- if constexpr (ver >= 36 )
614+ if constexpr (core::version_gate::is_v36_active ( ver) )
614615 {
615616 if constexpr (requires { share.m_merged_coinbase_info ; })
616617 ref_stream << share.m_merged_coinbase_info ;
@@ -621,7 +622,7 @@ uint256 share_init_verify(const ShareT& share, const core::CoinParams& params, b
621622
622623 // V36 ref_type includes message_data as PossiblyNoneType(b'', VarStrType())
623624 // When m_message_data is empty, BaseScript serialises as varint(0) = 0x00.
624- if constexpr (ver >= 36 )
625+ if constexpr (core::version_gate::is_v36_active ( ver) )
625626 {
626627 if constexpr (requires { share.m_message_data ; })
627628 ref_stream << share.m_message_data ;
@@ -937,7 +938,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, const
937938 // p2pool selects PPLNS formula by runtime AutoRatchet state, not compile-time
938939 // share version. When v36_active is true (AutoRatchet ACTIVATED/CONFIRMED),
939940 // use v36 PPLNS even for v35 shares. Ref: p2pool data.py:879, work.py:759.
940- const bool use_v36_pplns = v36_active || (ver >= 36 );
941+ const bool use_v36_pplns = v36_active || (core::version_gate::is_v36_active ( ver) );
941942 const uint64_t subsidy = share.m_subsidy ;
942943 const uint16_t donation = share.m_donation ;
943944
@@ -1270,7 +1271,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, const
12701271 else
12711272 ref_stream << share.m_pubkey_hash ;
12721273
1273- if constexpr (ver >= 36 )
1274+ if constexpr (core::version_gate::is_v36_active ( ver) )
12741275 ::Serialize (ref_stream, VarInt(share.m_subsidy));
12751276 else
12761277 ref_stream << share.m_subsidy ;
@@ -1299,7 +1300,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, const
12991300 }
13001301 }
13011302
1302- if constexpr (ver >= 36 )
1303+ if constexpr (core::version_gate::is_v36_active ( ver) )
13031304 {
13041305 if constexpr (requires { share.m_merged_addresses ; })
13051306 ref_stream << share.m_merged_addresses ;
@@ -1317,7 +1318,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, const
13171318 ref_stream << share.m_timestamp ;
13181319 ref_stream << share.m_absheight ;
13191320
1320- if constexpr (ver >= 36 )
1321+ if constexpr (core::version_gate::is_v36_active ( ver) )
13211322 {
13221323 if constexpr (requires { share.m_abswork ; })
13231324 ::Serialize (ref_stream, Using<AbsworkV36Format>(share.m_abswork));
@@ -1327,7 +1328,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, const
13271328 ref_stream << share.m_abswork ;
13281329 }
13291330
1330- if constexpr (ver >= 36 )
1331+ if constexpr (core::version_gate::is_v36_active ( ver) )
13311332 {
13321333 if constexpr (requires { share.m_merged_coinbase_info ; })
13331334 ref_stream << share.m_merged_coinbase_info ;
@@ -1337,7 +1338,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, const
13371338 }
13381339
13391340 // V36 ref_type includes message_data (must match verify_share)
1340- if constexpr (ver >= 36 )
1341+ if constexpr (core::version_gate::is_v36_active ( ver) )
13411342 {
13421343 if constexpr (requires { share.m_message_data ; })
13431344 ref_stream << share.m_message_data ;
@@ -1779,7 +1780,7 @@ bool share_check(const ShareT& share,
17791780 // This ensures V35 shares always verify with V35 PPLNS formula, even after
17801781 // the AutoRatchet transitions to ACTIVATED.
17811782 constexpr int64_t share_ver = ShareT::version;
1782- bool v36_active = (share_ver >= 36 );
1783+ bool v36_active = (core::version_gate::is_v36_active ( share_ver) );
17831784 if (!share.m_prev_hash .IsNull () && tracker.chain .contains (share.m_prev_hash ))
17841785 {
17851786 uint256 expected_gentx = generate_share_transaction (share, tracker, params, false , v36_active);
@@ -1903,7 +1904,7 @@ bool share_check(const ShareT& share,
19031904 // independently compute from the share chain. Without this, a malicious
19041905 // node could steal all merged chain (DOGE) rewards while appearing honest
19051906 // on the parent chain (LTC payouts are consensus-enforced via gentx above).
1906- if constexpr (ShareT::version >= 36 )
1907+ if constexpr (core::version_gate::is_v36_active ( ShareT::version) )
19071908 {
19081909 if constexpr (requires { share.m_merged_payout_hash ; })
19091910 {
@@ -1931,7 +1932,7 @@ bool share_check(const ShareT& share,
19311932
19321933 // 5. V36+ merged coinbase commitment verification (7-step chain)
19331934 // Verifies the actual merged coinbase matches canonical PPLNS construction.
1934- if constexpr (ShareT::version >= 36 )
1935+ if constexpr (core::version_gate::is_v36_active ( ShareT::version) )
19351936 {
19361937 auto mcv_err = verify_merged_coinbase_commitment (share, tracker, params);
19371938 if (!mcv_err.empty ())
@@ -2001,7 +2002,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker, const core::CoinPar
20012002 else
20022003 ref_stream << share.m_pubkey_hash ;
20032004
2004- if constexpr (ver >= 36 )
2005+ if constexpr (core::version_gate::is_v36_active ( ver) )
20052006 ::Serialize (ref_stream, VarInt(share.m_subsidy));
20062007 else
20072008 ref_stream << share.m_subsidy ;
@@ -2029,7 +2030,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker, const core::CoinPar
20292030 }
20302031 }
20312032
2032- if constexpr (ver >= 36 )
2033+ if constexpr (core::version_gate::is_v36_active ( ver) )
20332034 {
20342035 if constexpr (requires { share.m_merged_addresses ; })
20352036 ref_stream << share.m_merged_addresses ;
@@ -2047,7 +2048,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker, const core::CoinPar
20472048 ref_stream << share.m_timestamp ;
20482049 ref_stream << share.m_absheight ;
20492050
2050- if constexpr (ver >= 36 )
2051+ if constexpr (core::version_gate::is_v36_active ( ver) )
20512052 {
20522053 if constexpr (requires { share.m_abswork ; })
20532054 ::Serialize (ref_stream, Using<AbsworkV36Format>(share.m_abswork));
@@ -2057,7 +2058,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker, const core::CoinPar
20572058 ref_stream << share.m_abswork ;
20582059 }
20592060
2060- if constexpr (ver >= 36 )
2061+ if constexpr (core::version_gate::is_v36_active ( ver) )
20612062 {
20622063 if constexpr (requires { share.m_merged_coinbase_info ; })
20632064 ref_stream << share.m_merged_coinbase_info ;
@@ -2067,7 +2068,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker, const core::CoinPar
20672068 }
20682069
20692070 // V36 ref_type includes message_data
2070- if constexpr (ver >= 36 )
2071+ if constexpr (core::version_gate::is_v36_active ( ver) )
20712072 {
20722073 if constexpr (requires { share.m_message_data ; })
20732074 ref_stream << share.m_message_data ;
@@ -2092,7 +2093,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker, const core::CoinPar
20922093 uint256 gentx_hash = check_hash_link (share.m_hash_link , hash_link_data, gentx_before_refhash);
20932094
20942095 // V36+: Validate message_data (reject shares with invalid encrypted messages)
2095- if constexpr (ver >= 36 )
2096+ if constexpr (core::version_gate::is_v36_active ( ver) )
20962097 {
20972098 if constexpr (requires { share.m_message_data ; })
20982099 {
@@ -3280,7 +3281,7 @@ uint256 create_local_share(
32803281 {
32813282 static int xcheck_count = 0 ;
32823283 if (true ) { // Always cross-check (was: xcheck_count < 5)
3283- uint256 verify_hash = generate_share_transaction<MergedMiningShare>(*heap_share, tracker, params, true , (MergedMiningShare::version >= 36 ));
3284+ uint256 verify_hash = generate_share_transaction<MergedMiningShare>(*heap_share, tracker, params, true , (core::version_gate::is_v36_active ( MergedMiningShare::version) ));
32843285 bool xcheck_ok = (verify_hash == gentx_hash_for_header);
32853286 if (xcheck_ok) {
32863287 LOG_INFO << " [Pool] Cross-check PASSED" ;
0 commit comments