docs(readme): DASH full-payment-height block milestone (#2508254)#782
Merged
Conversation
…ghten DASH block entries
frstrtr
pushed a commit
that referenced
this pull request
Jul 21, 2026
…reward-safe --embedded-mainnet (default OFF) Rebased onto master (#781 io-decouple + #773/#777/#775/#782). Integrates the embedded DASH template arm into the decoupled tip-poll/rpc_pool architecture WHILE preserving both: #781's refresh_executor/resource_template_now split AND every v0.2.4 embedded guard. Default behaviour is UNCHANGED and reward-safe — with --embedded-mainnet OFF (the default) the template stays arm=dashd-fallback, the path the hotel runs, byte-for-byte. Wires the vendored SML/QuorumManager/CCbTx machinery into the live embedded template so the daemonless arm assembles a real DIP-0004 type-5 CCbTx, proven byte-identical to a real dashd getblocktemplate from the raw mnlistdiff wire (merkleRootMNList + merkleRootQuorums recomputed from wire; bestCL; creditPool accrual). The mainnet gate lifts behind the explicit --embedded-mainnet opt-in. Consensus guards (all fail-closed to the reward-safe dashd fallback): - merkleRootQuorums: hash ALL active commitments (no rotated per-index dedup) — byte-identical to dashd (109-quorum from-wire KAT). - H-1: a malformed quorum tail wipes + full-resyncs (never papered over by a later incremental; base-continuity tightened). - DKG mining-phase heights (is_dkg_commitment_window over every enabled llmqType) and superblock heights: refuse embedded. - bestCL freshness: committed ChainLock must be within one block of the tip. - creditPool: INDEPENDENT seed-height gate (the seed cbTx's own nHeight must equal the tip) — catches a seed one block behind that value/hash self-checks miss; pre-emit value re-check + serve-time cache re-validation for the build-vs-serve skew; GBT-xcheck backstop cross-checks the embedded creditPool vs dashd. - C-3: the embedded block excludes all DIP special txs (1-4,6,8,9) — their own-block state effects are not modelled in the committed CbTx (Phase-2). - pre-emit HARD GATE re-validates the built CbTx (both roots + all height-class + bestCL + creditPool checks) before serve; discards to fallback on any failure. Reward-safety posture: --embedded-mainnet is default OFF (unconfigured mainnet nodes are byte-unchanged dashd-fallback). The embedded-ON daemonless seed-lag (arm falls back rather than serving stale at some heights) is deferred as a separate goal; ON is reward-safe (worst case = fallback, never a bad block). Tests (dash embedded suite): node_coin_state 15, coin_state_maintainer 11, stratum_work_source 38, embedded_gbt 10, mnlistdiff_root_parity 4, byte_parity 4, quorum_root 11, mempool 19, node_reception_wire 21, header_chain 8. c2pool-dash builds+links against the #781 io-decoupled main_dash.
frstrtr
pushed a commit
that referenced
this pull request
Jul 21, 2026
…reward-safe --embedded-mainnet (default OFF) Rebased onto master (#781 io-decouple + #773/#777/#775/#782). Integrates the embedded DASH template arm into the decoupled tip-poll/rpc_pool architecture WHILE preserving both: #781's refresh_executor/resource_template_now split AND every v0.2.4 embedded guard. Default behaviour is UNCHANGED and reward-safe — with --embedded-mainnet OFF (the default) the template stays arm=dashd-fallback, the path the hotel runs, byte-for-byte. Wires the vendored SML/QuorumManager/CCbTx machinery into the live embedded template so the daemonless arm assembles a real DIP-0004 type-5 CCbTx, proven byte-identical to a real dashd getblocktemplate from the raw mnlistdiff wire (merkleRootMNList + merkleRootQuorums recomputed from wire; bestCL; creditPool accrual). The mainnet gate lifts behind the explicit --embedded-mainnet opt-in. Consensus guards (all fail-closed to the reward-safe dashd fallback): - merkleRootQuorums: hash ALL active commitments (no rotated per-index dedup) — byte-identical to dashd (109-quorum from-wire KAT). - H-1: a malformed quorum tail wipes + full-resyncs (never papered over by a later incremental; base-continuity tightened). - DKG mining-phase heights (is_dkg_commitment_window over every enabled llmqType) and superblock heights: refuse embedded. - bestCL freshness: committed ChainLock must be within one block of the tip. - creditPool: INDEPENDENT seed-height gate (the seed cbTx's own nHeight must equal the tip) — catches a seed one block behind that value/hash self-checks miss; pre-emit value re-check + serve-time cache re-validation for the build-vs-serve skew; GBT-xcheck backstop cross-checks the embedded creditPool vs dashd. - C-3: the embedded block excludes all DIP special txs (1-4,6,8,9) — their own-block state effects are not modelled in the committed CbTx (Phase-2). - pre-emit HARD GATE re-validates the built CbTx (both roots + all height-class + bestCL + creditPool checks) before serve; discards to fallback on any failure. Reward-safety posture: --embedded-mainnet is default OFF (unconfigured mainnet nodes are byte-unchanged dashd-fallback). The embedded-ON daemonless seed-lag (arm falls back rather than serving stale at some heights) is deferred as a separate goal; ON is reward-safe (worst case = fallback, never a bad block). Tests (dash embedded suite): node_coin_state 15, coin_state_maintainer 11, stratum_work_source 38, embedded_gbt 10, mnlistdiff_root_parity 4, byte_parity 4, quorum_root 11, mempool 19, node_reception_wire 21, header_chain 8. c2pool-dash builds+links against the #781 io-decoupled main_dash. CI-fold: build.yml "Build tests" allowlists test_dash_embedded_gbt but not the two byte-parity executables, so CTest registered them (gtest_add_tests AUTO) while CI never built them -> ctest "Not Run" exit 8 (Linux x86_64 red), and the from-wire merkleRoot + real-dashd CbTx round-trip proofs ran in NO CI job. Folded test_dash_embedded_cbtx_byte_parity.cpp + test_dash_mnlistdiff_root_parity.cpp INTO the test_dash_embedded_gbt executable (distinct TEST suites; DASH_FIXTURE_DIR moved to that target) and removed the standalone add_executable/gtest_add_tests registrations. test_dash_embedded_gbt 10 -> 18 cases (byte-parity 4 + from-wire 4), all green; no unbuilt-executable CTest registrations remain.
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.
Adds a milestone for DASH block #2508254 (2026-07-20 23:25:32 UTC) — a full-payment height carrying three consensus-mandated coinbase payments across six transactions; the complete payee set was verified against the template before submission and accepted by dashd. Also tightens the first-DASH-block entry.
No personal/operational data (no addresses, hosts, or operator identities). Docs-only; no code paths touched.