Skip to content

Commit e8fa7a7

Browse files
authored
nmc(v37): classify always-fire dual-path as BUCKET-1 (do not converge to core SSOT) (#500)
The NMC won-aux-block dispatcher fires the namecoind submitauxblock RPC leg ALWAYS, even after a P2P win -- unlike core::broadcast_block_with_fallback, which short-circuits on P2P success to avoid a double-broadcast. For a merge- mined aux block the always-fire RPC leg is a per-coin consensus-path invariant (duplicate aux submission is a harmless daemon rejection, never a silent drop). Add an in-file v37 3-bucket classification banner marking this as BUCKET-1 (per-coin isolation, KEEP) so the v37 multichain migration -- or any agent converging coins onto the core broadcast SSOT -- does not collapse NMC onto the short-circuit SSOT and silently drop the aux leg. Comment-only; behaviour is already KAT-locked by NmcAuxBlockBroadcast.DualPathAlwaysFiresFallback. No consensus-value, build, or runtime change. nmc-fenced (src/impl/nmc only). Co-authored-by: frstrtr <frstrtr@users.noreply.github.com>
1 parent b8903fd commit e8fa7a7

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

src/impl/nmc/coin/block_broadcast.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,20 @@ struct AuxBlockBroadcast
7474
// client yet) -- each leg is guarded so the dispatcher never throws or
7575
// dereferences an unset sink. Never silent-drops a won block: with NEITHER sink
7676
// present it logs an ERROR (lost-subsidy scream) and returns any()==false.
77+
// --- v37 BUCKET CLASSIFICATION (3-bucket rule) -------------------------------
78+
// BUCKET 1 (per-coin isolation invariant) -- KEEP, do NOT standardize/converge.
79+
// This dispatcher deliberately does NOT delegate to
80+
// core::broadcast_block_with_fallback() (src/core/block_broadcast.hpp). That
81+
// core SSOT SHORT-CIRCUITS on a P2P win (if p2p_ok return true) to avoid
82+
// a double-broadcast -- correct for a single-chain won block (BTC delegates to
83+
// it). NMC is merge-mined: the external namecoind submitauxblock RPC leg is
84+
// fired ALWAYS, even after a P2P win (a duplicate aux submission is a harmless
85+
// daemon rejection, never a silent drop). Converging NMC onto the core short-
86+
// circuit SSOT would DROP the always-fire aux leg -- a consensus-path
87+
// regression. The always-fire property is KAT-locked by
88+
// NmcAuxBlockBroadcast.DualPathAlwaysFiresFallback. v37 multichain migration
89+
// MUST preserve this per-coin aux contract, not collapse it onto the SSOT.
90+
// -----------------------------------------------------------------------------
7791
inline AuxBlockBroadcast broadcast_won_aux_block(const P2pRelaySink& p2p_relay,
7892
const AuxRpcSink& aux_rpc,
7993
const std::vector<unsigned char>& block_bytes,

0 commit comments

Comments
 (0)