Skip to content

dash(s8): wire version-gate into a real accept entry (close enforcement hole) - #568

Merged
frstrtr merged 1 commit into
masterfrom
dash/s8-version-gate-wiring
Jun 27, 2026
Merged

dash(s8): wire version-gate into a real accept entry (close enforcement hole)#568
frstrtr merged 1 commit into
masterfrom
dash/s8-version-gate-wiring

Conversation

@frstrtr

@frstrtr frstrtr commented Jun 27, 2026

Copy link
Copy Markdown
Owner

What

dash::verify_version_transition (the v36 obsolescence + successor version-boundary gate) was KAT-proven in isolation but had ZERO src/ consumers — it never ran on any admission path. This adds dash::verify_share, the combined accept entry (mirroring btc::verify_share), which composes:

  • Phase 1share_init_verify (X11 PoW / hash_link / merkle / target; thread-pool-offloadable via verify_init=false, cf. dgb node.cpp two-phase)
  • Phase 2verify_version_transition, now a wired chain-context gate

Verify bar (per integrator UID2882)

  1. 7-case KAT on the WIRED path — the 6 version-boundary cases retargeted from the orphan primitive to verify_share, plus a 7th proving Phase-1 init rejects a structurally invalid share before the gate. Rejects obsolete (v<36 @95% weighted) + sub-floor (upgrade without 60% weighted successor) shares. Not an 85% byte-match.
  2. Oracle parity — gate semantics unchanged vs frstrtr/p2pool-dash @9a0a609 (standardized 85%→60/95 weighted per Bucket-2, as already pinned).
  3. CI — 7/7 wired + 51/51 full test_dash_conformance green on Linux x86_64.
  4. dashd-RPC submitblock fallback untouched — this gates SHARE admission, not block submission.

Scope

dash-fenced (src/impl/dash/ + test only), additive, no shared-layer or cross-coin touch → single-coin isolation invariant. Bucket-2 structural standardization (same compose shape as btc) for a clean v37 migration.

No self-merge — held for integrator verify → operator tap.

…ose enforcement hole)

dash::verify_version_transition was KAT-proven in isolation but had ZERO
src/ consumers -- the v36 obsolescence (95% weighted) + successor (60%
weighted) version-boundary guards never ran on any admission path. Add
dash::verify_share, the combined accept entry mirroring btc verify_share:
Phase 1 share_init_verify (X11 PoW/hash_link/merkle/target, thread-pool
offloadable via verify_init=false) then Phase 2 verify_version_transition
(the now-wired chain-context gate). dashd-RPC submitblock fallback is
untouched -- this gates SHARE admission, not block submission.

Retarget the 7-case version-wiring KAT to drive the gate through
verify_share (the wired path), not the orphan primitive, and add an
init-composition case proving Phase 1 rejects a structurally invalid
share before the gate is consulted. 7/7 wired cases + 51/51 full
test_dash_conformance green on Linux x86_64.

Bucket-2 structural standardization: same compose shape as btc
verify_share, so the v37 unification is a clean migration rather than a
per-coin v36 dialect. dash-fenced (src/impl/dash/ + test only), additive,
no shared-layer or cross-coin touch.
@frstrtr
frstrtr merged commit d290f75 into master Jun 27, 2026
21 checks passed
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