Skip to content

[draft] nmc: PE 2e regtest won-block soak harness (substrate-ready) - #251

Closed
frstrtr wants to merge 4 commits into
masterfrom
nmc/p1-pe-2e-regtest-aux-soak-harness
Closed

[draft] nmc: PE 2e regtest won-block soak harness (substrate-ready)#251
frstrtr wants to merge 4 commits into
masterfrom
nmc/p1-pe-2e-regtest-aux-soak-harness

Conversation

@frstrtr

@frstrtr frstrtr commented Jun 20, 2026

Copy link
Copy Markdown
Owner

NMC PE 2e won-block soak harness — substrate-ready prep, self-serviceable per integrator UID1601 (soak against namecoind -regtest, never mainnet; real-block/real-funds risk avoided).

Scope (scripts-only, NMC-fenced, non-stacking): zero overlap with #247 (share_tracker/aux_id); cut off master, not stacked.

  • scripts/gen-nmc-daemon-creds.sh — NMC-only regtest RPC creds self-provisioner (mirrors gen-bch-daemon-creds.sh; openssl-rand pass, localhost-only, never carded).
  • scripts/nmc_regtest_aux_soak.sh — two legs:
    • LEG 1 (RPC fallback) createauxblock/getauxblock surface + asserts chainid == NMC_AUXPOW_CHAIN_ID SSOT (1).
    • LEG 2 (P2P primary) paired regtest node + addnode peer link for on_block_found relay.

DRAFT / [GATED-ON-2D]: the c2pool-coupled won-block assertions (real submitauxblock + P2P relay) are marked GATED-ON-2D — they fire once PE 2d wires submit_block()/submit_aux_block() out of their logged-only stubs (aux_chain_embedded.hpp:130-175). Lands together with the 2d tap. Substrate (nodes, creds, aux-RPC surface, peering) is validated and runnable now.

v37 note: harness substrate, no consensus/share surface — pure tooling.

frstrtr added a commit that referenced this pull request Jun 20, 2026
…nt success) (#253)

The embedded submitauxblock RPC leg has no daemon to RPC and is not a
same-process fallback like BTC submitblock-to-bitcoind, so it cannot
itself broadcast and must not claim success. Return false, mirroring
submit_block() never-silent-drop (#162); the P2P relay via submit_block()
is the one authoritative embedded route. Updates the fallback-leg KAT to
assert false (supersedes integrator note #3 per UID1610) while keeping the
distinct no-cache invariant.

Punch-list item (2) of the 2d broadcaster gate; item (1) host m_block_relay
wiring + #251 won-block un-gate stay queued behind the #247/#251 tap.

Co-authored-by: frstrtr <frstrtr@users.noreply.github.com>
frstrtr added a commit that referenced this pull request Jun 20, 2026
…te P2P won-block from 2d

Per integrator design call (2026-06-20): embedded mode relies SOLELY on P2P
relay for won-block propagation. submit_aux_block() is intentionally inert
in-process (mirrors doge embedded path), so LEG 1 (submitauxblock) is
external-RPC-deployment-only / N/A in the embedded soak -- never driven here.
The dual-path submitblock fallback stays a DEPLOYMENT-level gate, kept explicit.

LEG 2 (P2P primary) is the live embedded won-block route and is UN-GATED from
2d (#247/#253/#254 landed on master 294fb30). The end-to-end assert fires once
the in-loop c2pool embedded regtest process drives node A -- next slice.

Recut off origin/master (294fb30); scripts-only, fenced to scripts/.
@frstrtr
frstrtr force-pushed the nmc/p1-pe-2e-regtest-aux-soak-harness branch from c59a1ee to 8458431 Compare June 20, 2026 11:34
frstrtr added a commit that referenced this pull request Jun 20, 2026
…e N/A

Per integrator caveat (UID1666): the dual-path broadcaster gate spans
deployment MODES (P2P for embedded, submitauxblock-RPC for external
daemon), not redundant paths within embedded. Word LEG-1 as deferred to
the external-daemon deployment soak (mainnet .140 path) and still needing
its own on-the-wire verification -- never as N/A/covered -- so the gate
keeps the record that submitauxblock was never proven on the wire.
frstrtr added a commit that referenced this pull request Jun 20, 2026
…ed-template)

Implements the integrator-decided PE-2e won-block seam: a test-only
forced-won-share trigger + captured-GBT-template reconstruct, mirroring
dgb #271. No BTC --regtest CLI / production surface added.

- coin/block_assembly.hpp: assemble_won_block SSOT (reconstruct_block_header
  recomputes merkle_root via the aux_merkle_root branch walk; [gentx]++others;
  BlockType TX_WITH_WITNESS codec == live submitblock path).
- coin/reconstruct_won_block.hpp: reconstruct_won_block_from_template, the
  version-agnostic broadcast source (current_work transactions[], not a share
  ref-walk).
- test/reconstruct_won_block_test.cpp: forced-won-share seam drives the
  reconstruct; 4 KATs (seam fires faithful parent block / template is tx source
  in order / empty template => coinbase-only / non-empty branch recomputes root
  via SSOT). bytes round-trip, hex==HexStr.
- build.yml: new target into BOTH allowlists (#143 NOT_BUILT trap).

Per-coin isolation: src/impl/nmc/ only. p2pool-merged-v36 surface: NONE.

Co-authored-by: frstrtr <frstrtr@users.noreply.github.com>
frstrtr added 3 commits June 20, 2026 16:58
…te P2P won-block from 2d

Per integrator design call (2026-06-20): embedded mode relies SOLELY on P2P
relay for won-block propagation. submit_aux_block() is intentionally inert
in-process (mirrors doge embedded path), so LEG 1 (submitauxblock) is
external-RPC-deployment-only / N/A in the embedded soak -- never driven here.
The dual-path submitblock fallback stays a DEPLOYMENT-level gate, kept explicit.

LEG 2 (P2P primary) is the live embedded won-block route and is UN-GATED from
2d (#247/#253/#254 landed on master 294fb30). The end-to-end assert fires once
the in-loop c2pool embedded regtest process drives node A -- next slice.

Recut off origin/master (294fb30); scripts-only, fenced to scripts/.
…e N/A

Per integrator caveat (UID1666): the dual-path broadcaster gate spans
deployment MODES (P2P for embedded, submitauxblock-RPC for external
daemon), not redundant paths within embedded. Word LEG-1 as deferred to
the external-daemon deployment soak (mainnet .140 path) and still needing
its own on-the-wire verification -- never as N/A/covered -- so the gate
keeps the record that submitauxblock was never proven on the wire.
Three substrate corrections so the PE-2e regtest harness stands up against a
real namecoind v31 (v31.99.0) instead of failing on first contact:

- ports: NMC-distinct, env-overridable defaults (18743/18744/18753/18754)
  outside the 1844x bitcoin-family regtest band, so a co-resident sibling-coin
  regtest daemon (btc/bch on 18443/18444) never collides with this NMC soak.
- wallet: explicit createwallet/loadwallet before getnewaddress -- namecoind
  v23+ descriptor era no longer auto-creates a default wallet.
- template assert: createauxblock returns "bits" + "_target" (underscore),
  not "target"; assert the real field names.

Substrate now green end-to-end: LEG1 aux-RPC live + chainid==1 conforms to
aux_id.hpp SSOT + template well-formed; LEG2 paired-node P2P up (peers=1).
Embedded c2pool won-block standup (drives node A) remains the next slice.
@frstrtr
frstrtr force-pushed the nmc/p1-pe-2e-regtest-aux-soak-harness branch from ab08256 to fcd5104 Compare June 20, 2026 16:58
Won-block correctness now lives in the test-only KAT seam
reconstruct_won_block_from_template (#276 @c525949b7, master 009ac59),
per integrators forced-won-share decision (no --regtest CLI). Drop the
now-stale "next slice: stand up embedded regtest process" framing; this
soak stands as the P2P substrate validator + external-daemon deployment
soak path. Comment-only, scripts-only, NMC-fenced.
@frstrtr

frstrtr commented Jun 20, 2026

Copy link
Copy Markdown
Owner Author

Superseded by #276 (merged @009ac59a). The forced-won-share KAT seam in #276 (reconstruct_won_block_from_template, 19/19 green) was chosen over the regtest-CLI substrate (#275, closed), so there is no embedded regtest substrate for this harness's LEG-2 live path to fire against, and the won-block proof now lives in #276's KATs. Closing as superseded rather than merging speculative soak scaffolding against a cut path. REVIVAL CONDITION: if an embedded regtest substrate (a --regtest BTC-parent CLI or equivalent in-process harness) ever lands, this branch/commits stay referenceable to revive the RPC-fallback + paired-node P2P soak legs.

@frstrtr frstrtr closed this Jun 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant