dash(s8): broadcaster_full won-block keystone — dual-arm relay (#83) [fresh base, supersedes #456] - #465
Merged
Merged
Conversation
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
force-pushed
the
dash-broadcaster-keystone-clean
branch
from
June 25, 2026 06:51
b9e8df0 to
1334f73
Compare
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
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.