Skip to content

dash: S8 node slice-B version-handshake reception (fires #646 min-proto gate) - #649

Merged
frstrtr merged 3 commits into
masterfrom
dash/s8-node-reception-sliceB
Jul 7, 2026
Merged

dash: S8 node slice-B version-handshake reception (fires #646 min-proto gate)#649
frstrtr merged 3 commits into
masterfrom
dash/s8-node-reception-sliceB

Conversation

@frstrtr

@frstrtr frstrtr commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Slice B of the DASH S8 pool-node plan. Replaces the slice-A no-op handle_version stub in dash::NodeImpl with the real version-handshake reception.

What it does:

  • Parses message_version; guards self-connection and duplicate-nonce connections.
  • Fires the dash: parameterized min-protocol-version ratchet gate + KAT (#643, option a) #646 min-protocol ratchet gate (dash::MinProtocolGate) as a LIVE per-instance discrimination. Default floor 1700 = oracle accept-all no-op; operator lifts min_version at G2-migration and this reception then rejects sub-floor peers.
  • Registers the peer in m_peers and returns the negotiated legacy/actual connection type for the G2 dual-pool.

This flips the G2 dual-pool from a dormant seam to a live cross-peer reception.

Scope note: DASH s header-only node does not yet carry the share-download / getaddrs machinery the ltc reference drives here; that rides a later slice. Acceptance for slice-B is live cross-peer on VM200 (legacy:5150 / v36:5151) -- this PR is the reception TU; the live two-instance cross-peer verification is the follow-through.

Verify: cmake --build build --target test_dash_node (EXIT=0), ctest -R ^test_dash_node$ -> 9/9. GPG-signed 86098e5.

frstrtr added 3 commits July 6, 2026 13:07
Add dash::MinProtocolGate, a per-instance reject-if-proto<floor policy for
the version handshake. Floor defaults to SharechainConfig::MINIMUM_PROTOCOL_VERSION
(1700, oracle accept-all) so the leaf is a NO-OP at default and commits no
premature v36 constant; the ratchet value stays a one-line operator knob set at
G2-migration time. Fenced to src/impl/dash/ (no shared bitcoin_family/core
handshake types touched). Live wiring into handle_version rides reception slice B.

KAT (test_dash_min_protocol_gate, 3/3) pins: peer at floor=1700 MUST be accepted
(no-op), below-floor rejected at the >= boundary, and the floor is a settable
per-instance member (ratchet mechanism works while default stays inert).
…to gate)

Replace the slice-A no-op handle_version stub in dash::NodeImpl with the real
version-handshake reception, mirroring the ltc::NodeImpl reference reconciled to
DASH s header-only pool node. Parses message_version, guards self- and duplicate
connections, and fires the #646 min-protocol ratchet gate as a LIVE per-instance
discrimination (default floor 1700 = oracle accept-all no-op; operator lifts it
at G2-migration). Registers the peer and returns the negotiated legacy/actual
connection type for the G2 dual-pool. This flips the G2 dual-pool from a dormant
seam to a live cross-peer reception. test_dash_node 9/9.
… reachable

The slice-A handle() was a no-op that dropped all inbound messages, leaving the
new handle_version() reception (and its live #646 min-protocol gate) unreachable
-- a dormant seam. Route the unknown-peer version handshake into handle_version()
(mirrors pool::NodeBridge), close on self/dup, and mark the peer stable on the
negotiated type. Full Legacy/Actual established-peer dispatch rides a later
slice. This makes the #646 discrimination genuinely live on the handshake path.
test_dash_node 9/9.
@frstrtr
frstrtr merged commit c8ae9b2 into master Jul 7, 2026
25 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