77#include " share.hpp"
88#include " share_messages.hpp"
99#include " share_types.hpp"
10+ #include < core/version_gate.hpp> // SSOT: core::version_gate::is_v36_active
1011
1112#include < core/hash.hpp>
1213#include < core/pack.hpp>
@@ -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, bool check_pow = true)
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, bool check_pow = true)
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, bool check_pow = true)
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, bool check_pow = true)
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, bool check_pow = true)
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 ;
@@ -935,7 +936,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, bool
935936 // p2pool selects PPLNS formula by runtime AutoRatchet state, not compile-time
936937 // share version. When v36_active is true (AutoRatchet ACTIVATED/CONFIRMED),
937938 // use v36 PPLNS even for v35 shares. Ref: p2pool data.py:879, work.py:759.
938- const bool use_v36_pplns = v36_active || (ver >= 36 );
939+ const bool use_v36_pplns = v36_active || (core::version_gate::is_v36_active ( ver) );
939940 const uint64_t subsidy = share.m_subsidy ;
940941 const uint16_t donation = share.m_donation ;
941942
@@ -1268,7 +1269,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, bool
12681269 else
12691270 ref_stream << share.m_pubkey_hash ;
12701271
1271- if constexpr (ver >= 36 )
1272+ if constexpr (core::version_gate::is_v36_active ( ver) )
12721273 ::Serialize (ref_stream, VarInt(share.m_subsidy));
12731274 else
12741275 ref_stream << share.m_subsidy ;
@@ -1297,7 +1298,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, bool
12971298 }
12981299 }
12991300
1300- if constexpr (ver >= 36 )
1301+ if constexpr (core::version_gate::is_v36_active ( ver) )
13011302 {
13021303 if constexpr (requires { share.m_merged_addresses ; })
13031304 ref_stream << share.m_merged_addresses ;
@@ -1315,7 +1316,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, bool
13151316 ref_stream << share.m_timestamp ;
13161317 ref_stream << share.m_absheight ;
13171318
1318- if constexpr (ver >= 36 )
1319+ if constexpr (core::version_gate::is_v36_active ( ver) )
13191320 {
13201321 if constexpr (requires { share.m_abswork ; })
13211322 ::Serialize (ref_stream, Using<AbsworkV36Format>(share.m_abswork));
@@ -1325,7 +1326,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, bool
13251326 ref_stream << share.m_abswork ;
13261327 }
13271328
1328- if constexpr (ver >= 36 )
1329+ if constexpr (core::version_gate::is_v36_active ( ver) )
13291330 {
13301331 if constexpr (requires { share.m_merged_coinbase_info ; })
13311332 ref_stream << share.m_merged_coinbase_info ;
@@ -1335,7 +1336,7 @@ uint256 generate_share_transaction(const ShareT& share, TrackerT& tracker, bool
13351336 }
13361337
13371338 // V36 ref_type includes message_data (must match verify_share)
1338- if constexpr (ver >= 36 )
1339+ if constexpr (core::version_gate::is_v36_active ( ver) )
13391340 {
13401341 if constexpr (requires { share.m_message_data ; })
13411342 ref_stream << share.m_message_data ;
@@ -1737,7 +1738,7 @@ bool share_check(const ShareT& share,
17371738 // This ensures V35 shares always verify with V35 PPLNS formula, even after
17381739 // the AutoRatchet transitions to ACTIVATED.
17391740 constexpr int64_t share_ver = ShareT::version;
1740- bool v36_active = (share_ver >= 36 );
1741+ bool v36_active = (core::version_gate::is_v36_active ( share_ver) );
17411742 if (!share.m_prev_hash .IsNull () && tracker.chain .contains (share.m_prev_hash ))
17421743 {
17431744 uint256 expected_gentx = generate_share_transaction (share, tracker, false , v36_active);
@@ -1861,7 +1862,7 @@ bool share_check(const ShareT& share,
18611862 // independently compute from the share chain. Without this, a malicious
18621863 // node could steal all merged chain (DOGE) rewards while appearing honest
18631864 // on the parent chain (LTC payouts are consensus-enforced via gentx above).
1864- if constexpr (ShareT::version >= 36 )
1865+ if constexpr (core::version_gate::is_v36_active ( ShareT::version) )
18651866 {
18661867 if constexpr (requires { share.m_merged_payout_hash ; })
18671868 {
@@ -1889,7 +1890,7 @@ bool share_check(const ShareT& share,
18891890
18901891 // 5. V36+ merged coinbase commitment verification (7-step chain)
18911892 // Verifies the actual merged coinbase matches canonical PPLNS construction.
1892- if constexpr (ShareT::version >= 36 )
1893+ if constexpr (core::version_gate::is_v36_active ( ShareT::version) )
18931894 {
18941895 auto mcv_err = verify_merged_coinbase_commitment (share, tracker);
18951896 if (!mcv_err.empty ())
@@ -1959,7 +1960,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker)
19591960 else
19601961 ref_stream << share.m_pubkey_hash ;
19611962
1962- if constexpr (ver >= 36 )
1963+ if constexpr (core::version_gate::is_v36_active ( ver) )
19631964 ::Serialize (ref_stream, VarInt(share.m_subsidy));
19641965 else
19651966 ref_stream << share.m_subsidy ;
@@ -1987,7 +1988,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker)
19871988 }
19881989 }
19891990
1990- if constexpr (ver >= 36 )
1991+ if constexpr (core::version_gate::is_v36_active ( ver) )
19911992 {
19921993 if constexpr (requires { share.m_merged_addresses ; })
19931994 ref_stream << share.m_merged_addresses ;
@@ -2005,7 +2006,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker)
20052006 ref_stream << share.m_timestamp ;
20062007 ref_stream << share.m_absheight ;
20072008
2008- if constexpr (ver >= 36 )
2009+ if constexpr (core::version_gate::is_v36_active ( ver) )
20092010 {
20102011 if constexpr (requires { share.m_abswork ; })
20112012 ::Serialize (ref_stream, Using<AbsworkV36Format>(share.m_abswork));
@@ -2015,7 +2016,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker)
20152016 ref_stream << share.m_abswork ;
20162017 }
20172018
2018- if constexpr (ver >= 36 )
2019+ if constexpr (core::version_gate::is_v36_active ( ver) )
20192020 {
20202021 if constexpr (requires { share.m_merged_coinbase_info ; })
20212022 ref_stream << share.m_merged_coinbase_info ;
@@ -2025,7 +2026,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker)
20252026 }
20262027
20272028 // V36 ref_type includes message_data
2028- if constexpr (ver >= 36 )
2029+ if constexpr (core::version_gate::is_v36_active ( ver) )
20292030 {
20302031 if constexpr (requires { share.m_message_data ; })
20312032 ref_stream << share.m_message_data ;
@@ -2050,7 +2051,7 @@ uint256 verify_share(const ShareT& share, TrackerT& tracker)
20502051 uint256 gentx_hash = check_hash_link (share.m_hash_link , hash_link_data, gentx_before_refhash);
20512052
20522053 // V36+: Validate message_data (reject shares with invalid encrypted messages)
2053- if constexpr (ver >= 36 )
2054+ if constexpr (core::version_gate::is_v36_active ( ver) )
20542055 {
20552056 if constexpr (requires { share.m_message_data ; })
20562057 {
@@ -3252,7 +3253,7 @@ uint256 create_local_share(
32523253 {
32533254 static int xcheck_count = 0 ;
32543255 if (true ) { // Always cross-check (was: xcheck_count < 5)
3255- uint256 verify_hash = generate_share_transaction<MergedMiningShare>(*heap_share, tracker, true , (MergedMiningShare::version >= 36 ));
3256+ uint256 verify_hash = generate_share_transaction<MergedMiningShare>(*heap_share, tracker, true , (core::version_gate::is_v36_active ( MergedMiningShare::version) ));
32563257 bool xcheck_ok = (verify_hash == gentx_hash_for_header);
32573258 if (xcheck_ok) {
32583259 LOG_INFO << " [Pool] Cross-check PASSED" ;
0 commit comments