Skip to content

dash(s8): broadcaster_full won-block keystone — dual-arm relay (#83) [fresh base, supersedes #456] - #465

Merged
frstrtr merged 2 commits into
masterfrom
dash-broadcaster-keystone-clean
Jun 25, 2026
Merged

dash(s8): broadcaster_full won-block keystone — dual-arm relay (#83) [fresh base, supersedes #456]#465
frstrtr merged 2 commits into
masterfrom
dash-broadcaster-keystone-clean

Conversation

@frstrtr

@frstrtr frstrtr commented Jun 25, 2026

Copy link
Copy Markdown
Owner

Fresh-branch re-cut of the broadcaster_full keystone onto CURRENT master (198e743). Supersedes #456, whose stale multi-coin merge-base (790d69a) would have REVERTED landed btc/dgb/web work on merge despite GitHub showing mergeStateStatus=CLEAN (git auto-3-way + own-tree-compiles green = false clean).

Diff is dash-lane-only — git diff --name-only master..HEAD == exactly:

  • src/impl/dash/broadcaster_full.hpp (embedded-P2P + dashd submitblock dual-arm won-block broadcaster)
  • test/test_dash_broadcaster_full.cpp (7/7 won-block KATs)
  • test/CMakeLists.txt (test target registration)
  • .github/workflows/build.yml (CI allowlist: test_dash_broadcaster_full — hand-merged onto current master, NOT checked-out from old branch)

No main_btc.cpp / main_dgb.cpp / web_server.cpp / impl/btc / impl/dgb in the diff.

Verified Linux x86_64: configure + build rc=0; ctest DashBroadcasterFull 7/7 PASSED, non-hollow (real won-block relay logs, dual-arm independence + RPC-alone + no-arm-not-reached cases). Commit 9877581 GPG-signed.

Closes #456 (poison base).


Stacked fixup (2026-06-25, @b9e8df09): dual-path won-block leg-guard rode in on this branch — on_block_found now wraps each arm (ARM A embedded P2P fan-out, ARM B submitblock RPC) in its own try/catch so a throwing leg never silently drops a won block or skips its safety net. Mirror of NMC #468 / DGB #469 / BCH #471. Dash-only, +2 KATs, ctest 9/9 green. Merge-tap reviewer: this fixup is part of the #465 tap.

frstrtr added 2 commits June 25, 2026 06:50
Fresh-branch re-cut of the broadcaster_full keystone onto current master
(supersedes #456, whose stale multi-coin base would revert landed
btc/dgb/web work on merge). Dash-lane-only: embedded-P2P + dashd
submitblock dual-arm won-block broadcaster, 7/7 KATs.

src/impl/dash/broadcaster_full.hpp        — dual-arm keystone
test/test_dash_broadcaster_full.cpp       — 7/7 won-block KATs
test/CMakeLists.txt                       — test target registration
.github/workflows/build.yml               — CI allowlist (test_dash_broadcaster_full)
… won block

on_block_found wraps each arm of the dual-path relay in its own try/catch so a
fault in one leg can never silently drop a won block AND skip its safety net:

  ARM A (embedded P2P fan-out): a throwing per-slot relay falls through to the
  ARM B submitblock RPC fallback; peers_reached stays 0 (fan-out never
  completed) so reached_network() reflects only the arm that actually landed.

  ARM B (submitblock RPC): a throwing RPC sink is treated as no-ack and does not
  mask an ARM A win already recorded (peers_reached stands).

Mirror of NMC #468 / DGB #469 / BCH #471. Dash-only, header+test; no master or
other-coin tree touched. +2 KATs (ThrowingEmbeddedArmStillFiresRpcFallback,
ThrowingRpcDoesNotMaskEmbeddedWin); ctest 9/9 green Linux x86_64.
@frstrtr
frstrtr force-pushed the dash-broadcaster-keystone-clean branch from b9e8df0 to 1334f73 Compare June 25, 2026 06:51
@frstrtr
frstrtr merged commit 35693c5 into master Jun 25, 2026
22 checks passed
frstrtr added a commit that referenced this pull request Jun 25, 2026
Re-author of the stale-base #447 onto the current relay-binding head
(3138b2d). The genuine net-new is the pure DualArmPlanner
(block_relay_dual_arm.hpp) + its socket-free KAT: it layers the P2P
fan-out arm and the submitblock-RPC fallback arm over the landed
block_relay_binding/block_relay_plan leaves and reports a DeliveryVerdict
whose reached_network() is the OR of the two arms.

Dropped as pure stale-base artifacts (would regress merged work):
 - broadcaster_full.hpp un-guarding of ARM A/ARM B (clobbers the #465
   keystone exception guards) — keystone preserved untouched.
 - block_relay_plan.hpp re-introduction of the folded block_relay_dispatch
   dependency (absent on master) — master inlined decoder preserved.
 - all cross-coin (btc/bch/dgb/web-static) deletions and the script/tool
   reverts.

build.yml allowlist = UNION: keeps test_dash_broadcaster_full +
test_dash_embedded_relay_e2e and appends test_dash_block_relay_dual_arm
to both target lists. Linux x86_64 ctest 6/6 DashDualArm green non-hollow.
frstrtr added a commit that referenced this pull request Jun 25, 2026
Re-author of the stale-base #447 onto the current relay-binding head
(3138b2d). The genuine net-new is the pure DualArmPlanner
(block_relay_dual_arm.hpp) + its socket-free KAT: it layers the P2P
fan-out arm and the submitblock-RPC fallback arm over the landed
block_relay_binding/block_relay_plan leaves and reports a DeliveryVerdict
whose reached_network() is the OR of the two arms.

Dropped as pure stale-base artifacts (would regress merged work):
 - broadcaster_full.hpp un-guarding of ARM A/ARM B (clobbers the #465
   keystone exception guards) — keystone preserved untouched.
 - block_relay_plan.hpp re-introduction of the folded block_relay_dispatch
   dependency (absent on master) — master inlined decoder preserved.
 - all cross-coin (btc/bch/dgb/web-static) deletions and the script/tool
   reverts.

build.yml allowlist = UNION: keeps test_dash_broadcaster_full +
test_dash_embedded_relay_e2e and appends test_dash_block_relay_dual_arm
to both target lists. Linux x86_64 ctest 6/6 DashDualArm green non-hollow.
frstrtr added a commit that referenced this pull request Jun 25, 2026
Re-author of the stale-base #447 onto the current relay-binding head
(3138b2d). The genuine net-new is the pure DualArmPlanner
(block_relay_dual_arm.hpp) + its socket-free KAT: it layers the P2P
fan-out arm and the submitblock-RPC fallback arm over the landed
block_relay_binding/block_relay_plan leaves and reports a DeliveryVerdict
whose reached_network() is the OR of the two arms.

Dropped as pure stale-base artifacts (would regress merged work):
 - broadcaster_full.hpp un-guarding of ARM A/ARM B (clobbers the #465
   keystone exception guards) — keystone preserved untouched.
 - block_relay_plan.hpp re-introduction of the folded block_relay_dispatch
   dependency (absent on master) — master inlined decoder preserved.
 - all cross-coin (btc/bch/dgb/web-static) deletions and the script/tool
   reverts.

build.yml allowlist = UNION: keeps test_dash_broadcaster_full +
test_dash_embedded_relay_e2e and appends test_dash_block_relay_dual_arm
to both target lists. Linux x86_64 ctest 6/6 DashDualArm green non-hollow.
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