Skip to content

chore: update seeds, checkpoints, minimum chain work, assumevalid and tx stats for v24 - #7980

Merged
PastaPastaPasta merged 3 commits into
dashpay:developfrom
PastaPastaPasta:chore/v24.0.0-chainparams-seeds-develop
Oct 30, 2026
Merged

PastaPastaPasta merged 3 commits into
dashpay:developfrom
PastaPastaPasta:chore/v24.0.0-chainparams-seeds-develop

Conversation

@PastaPastaPasta

@PastaPastaPasta PastaPastaPasta commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

Issue being fixed or feature implemented

Before every major release, doc/release-process.md asks for fresh seeds, checkpoints, nMinimumChainWork, defaultAssumeValid, chainTxData and assumed sizes for mainnet and testnet. The current values date from v23.x: mainnet block 2487500, testnet block 1400000. This PR updates them for v24.0.0. As with #6920 for v23, it goes to develop first, then to v24.0.x as a backport.

What was done?

Seeds (contrib/seeds/*, src/chainparamsseeds.h)

  • Mainnet: 239 IPv4 seeds and 10 onion seeds, generated from protx list valid true 2563000 with makeseeds.py -a asmap-filled.dat (asmap from bitcoin.sipa.be, sha256 eab9c6e00769b461bf5c0cd02c7b5e991739ebbbff3ce568846377031f4b5fcf). makeseeds reported 2252 masternodes, 2207 with at least 10000 confirmations, and 1507 after deduplication. The per-ASN limit then reduced that to 239.
  • Testnet: 25 seeds from protx list valid true 1581000. As in chore: update minimum chain work, tx stats, checkpoints, seeds and SECURITY.md for v23 #6920, operator deduplication was commented out and the IPv4 per-ASN limit raised to 10. These are local edits and are not committed.
  • onion_seeds.txt: removed the 15 onion addresses that failed two nc -z attempts through Tor. The remaining 10 all answered.
  • contrib/seeds/README.md: the example now uses protx list valid true <height>. v24 rejects 1 for detailed unless -deprecatedrpc=permissive_bool is set.

Chain parameters (src/kernel/chainparams.cpp)

Mainnet Testnet
Block 2563000 1550000 (about 32k blocks behind the tip, as release-process.md asks)
Hash (new checkpoint, defaultAssumeValid) 000000000000000346a1804da4832b0b69dd9a7f96b14c7cb54585a9ac6ae98f 000000116cd3c11d44c88cbc0a26804bd277a5d790f684ec3a8aaa820690318c
nMinimumChainWork 0x…c15981a81af44a6abe1a 0x…03ed573a939487fc
chainTxData (getchaintxstats 17280 <hash>) 1793218693 / 71411418 / 0.1306891420721072 1788899589 / 8494561 / 0.0139463532250889
m_assumed_blockchain_size 57 → 62 10 (unchanged)
m_assumed_chain_state_size 1 (unchanged) 1 (unchanged)

Sizes:

  • Mainnet: a synced v24.0.0-rc.4 datadir is 56G. With 10% headroom that gives 62. The chainstate is 258M, so the chain state size stays at 1.
  • Testnet: the synced datadir is 6.3G, below the current value of 10, so that value is kept. The chainstate is 111M.

m_assumeutxo_data is still empty on mainnet and testnet. There is no published snapshot to commit to yet.

Reviewers can reproduce every value with getblockhash, getblockheader and getchaintxstats 17280 <hash> at the heights above, and the seed lists with the README commands at the stated heights.

How Has This Been Tested?

  • All values were read from fully synced v24.0.0-rc.4 mainnet and testnet nodes: block 2563000 had 586 confirmations, the mainnet tip was 2563584, and the testnet tip was 1581864.
  • Built this branch and ran the versionbits_tests, validation_tests, validation_chainstatemanager_tests, net_tests and checkqueue_tests unit tests: no errors.
  • Started this branch's dashd on empty mainnet and testnet datadirs with -dnsseed=0, so it could only bootstrap from the new fixed seeds.
    • Mainnet: logged "Added 239 fixed seeds", reached 10 peers, and synced headers to 2563592.
    • Testnet: logged "Added 25 fixed seeds", reached 10 peers, and synced headers to 1581891.
    • Both header syncs passed the new checkpoints with no checkpoint or bad-fork errors. The onion seeds were not used in this run because Tor was off.
  • Mainnet EHF check, done on a fully synced v24.0.0-rc.4 node at tip 2563584: a scan of every block from V20 activation (1987776) to the tip, 575810 blocks, found exactly three MNHF_SIGNAL transactions. They are bit 10 at 2119135 (MN_RR), bit 11 at 2192864 (WITHDRAWALS), and bit 12 at 2400222. The bit-12 signal is the one v23's numbering mined for V24, and is why V24 moved to bit 13. None is for bit 13 or 14, and no block in the last 4032 sets version bit 12, 13 or 14. v24 has no deployment on bit 12, so v24 nodes see that old signal as an unknown bit. The Nov 9 signal is therefore the first bit-13 signal for v23 and v24 nodes alike, with no duplicate or expired-signal mismatch. rc.4's getdeploymentinfo omits NEVER_ACTIVE deployments, so the chain was checked directly instead.

Breaking Changes

None.

Checklist:

  • I have performed a self-review of my own code
  • I have made corresponding changes to the documentation
  • I have assigned this pull request to a milestone

🤖 Generated with Claude Code

PastaPastaPasta and others added 2 commits October 29, 2026 21:48
Mainnet seeds come from `protx list valid true 2563000`, and testnet
seeds from `protx list valid true 1581000`. Both were run through
contrib/seeds/makeseeds.py with asmap-filled.dat from
bitcoin.sipa.be (sha256 eab9c6e0...4b5fcf). As for v23, the testnet
run disabled operator deduplication and raised the IPv4 per-ASN limit
to 10; that local change is not committed.

The 15 onion seeds that did not answer two connection attempts over
Tor were removed; the remaining 10 do answer.

The README example now passes `true`: v24 rejects `1` for the
`detailed` argument unless -deprecatedrpc=permissive_bool is set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ts for v24

Mainnet: block 2563000
(000000000000000346a1804da4832b0b69dd9a7f96b14c7cb54585a9ac6ae98f).
m_assumed_blockchain_size goes from 57 to 62: a synced v24.0.0-rc.4
datadir is 56G, plus 10%. The 258M chainstate keeps
m_assumed_chain_state_size at 1.

Testnet: block 1550000
(000000116cd3c11d44c88cbc0a26804bd277a5d790f684ec3a8aaa820690318c),
about 32k blocks behind the tip. The synced testnet datadir is 6.3G,
which is under the current assumed size of 10, so that value is kept.

chainTxData comes from `getchaintxstats 17280 <hash>` at those blocks,
as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Walkthrough

The documented seed-generation command and the mainnet, testnet, and onion seed inventories were updated. The serialized mainnet and testnet seed arrays were refreshed. Mainnet and testnet chain-work, assume-valid, checkpoint, and transaction-statistics values were advanced. The assumed mainnet blockchain size also increased.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~12 minutes

Possibly related PRs

Merge Risk: Low · up to bcf12

The release metadata does not follow the documented transaction-statistics procedure; align the values with the 4096-block window or document and justify the exception before release.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title names the main change: updates to seeds, checkpoints, minimum chain work, assumevalid and tx stats for v24. The changeset matches this. The diff updates contrib/seeds files, src/chainparamss…
Description check Passed The description matches the changeset. It explains the release-driven refresh of seeds, checkpoints, nMinimumChainWork, defaultAssumeValid, chainTxData and assumed sizes for mainnet and testnet. It li…
Docstring Coverage Passed No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title names the main change: updates to seeds, checkpoints, minimum chain work, assumevalid and tx stats for v24. The changeset matches this. The diff updates contrib/seeds files, src/chainparamsseeds.h, and src/kernel/chainparams.cpp with the new mainnet and testnet values. The title uses the 'chore:' prefix and is 86 characters long, which is somewhat long but still clear.

Full details: Description check

Explanation

The description matches the changeset. It explains the release-driven refresh of seeds, checkpoints, nMinimumChainWork, defaultAssumeValid, chainTxData and assumed sizes for mainnet and testnet. It lists the affected files (contrib/seeds/*, src/chainparamsseeds.h, src/kernel/chainparams.cpp), the new block heights and hashes, the onion seed pruning, the README command change, and the testing performed.

Full details: Docstring Coverage

Explanation

No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 2 files. (4 skipped: 4 unsupported.)

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-10-29T22:02:13.851697Z
We couldn’t complete this review. Comment @codex review to try again.
b34f8c7 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@thepastaclaw

thepastaclaw commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

🕓 Review not started yet because the new head is waiting for the 30-minute push debounce.

  • Request normal review — click when the PR is ready for review.
  • Request priority review — click to move this review to the front of the queue.

Commit bcf1202. Normal review starts when eligible; priority review starts as soon as a slot is available.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Final validation — Phase 1 + Phase 2

The release metadata and generated seed data are internally consistent, but the reproducibility documentation is incomplete. The transaction-statistics values use a 17280-block window even though the release process requires 4096, and the seed-generation instructions omit the special testnet procedure and leave stale RPC examples in makeseeds.py. CI formatting and lint checks passed; platform build checks were still queued in the supplied snapshot.

🟡 3 suggestion(s)

2 finding(s) not shown inline (the lines are not part of this PR's diff)

🟡 Suggestion: Document the non-default testnet seed-generation procedure
contrib/seeds/README.md:6-22

The README documents only the mainnet command at height 2563000, but the PR generates testnet seeds at height 1581000 using local, uncommitted changes that disable operator deduplication and raise the IPv4 per-ASN limit to 10. The committed nodes_test.txt contains ten entries from each of AS205581 and AS16610, whereas the checked-in makeseeds.py defaults to four IPv4 seeds per ASN. Add a reproducible testnet command and document the required settings, or provide a supported command-line option for them.

source: gpt-6-astra (phase2-reviewer: general)

🟡 Suggestion: Update stale RPC examples in makeseeds.py
contrib/seeds/makeseeds.py:6-7

The README now correctly uses protx list valid true <height> because v24 rejects the numeric 1 for the detailed argument without the permissive_bool compatibility option, but makeseeds.py still documents protx list valid 1 in its header, argparse help text at line 157, and explanatory comment at line 169. Maintainers following the script's own documentation will use a rejected RPC form and cannot reproduce the seed list under v24 defaults. Update all three occurrences to the boolean form.

source: muse-spark-1.3-contributor (phase1-reviewer: general)

Review provenance

Source: reviewer 1: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 2: gpt-6.1-sol (agent: phase2-reviewer, role: dash-core-commit-history); reviewer 3: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 4: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 5: gpt-6-astra (agent: phase2-reviewer, role: dash-core-commit-history); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)

  • Triage: critical by gpt-6.1-sol (effort low) — The large update changes consensus-sensitive validation and chain-selection parameters in src/kernel/chainparams.cpp, including checkpoints, nMinimumChainWork, and defaultAssumeValid, as well as peer bootstrap seed data.
  • Phase 1 reviewers: muse-spark-1.3-contributor — general (completed, effort xhigh); agent phase1-reviewer
  • Phase 1 model: muse-spark-1.3-contributor — not quota-gated; passed over gemini-3.8-flash-high (antigravity quota lookup failed), glm-5.3-flash (not used above high effort; tier asks max)
  • Single stage: Phase 1 and Phase 2 reviewed this head side by side, with no blocker gate between them (triage tier)
  • Fresh verifier: gpt-6.1-sol — final-verifier; agent sol-verifier
  • Phase 2 reviewers: gpt-6.1-sol — general (completed, effort xhigh); agent phase2-reviewer, gpt-6.1-sol — dash-core-commit-history (completed, effort xhigh); agent phase2-reviewer, gpt-6-astra — general (completed, effort xhigh); agent phase2-reviewer, gpt-6-astra — dash-core-commit-history (completed, effort xhigh); agent phase2-reviewer
  • Model comparison: every Phase-2 reviewer also ran on gpt-6-astra; the verifier weighed both sets without knowing which model wrote which
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `src/kernel/chainparams.cpp`:
- [SUGGESTION] src/kernel/chainparams.cpp:368-373: Use the documented transaction-statistics window
  Both updated chainTxData entries are documented as `getchaintxstats 17280`, while doc/release-process.md explicitly requires a 4096-block window for major releases. The resulting dTxRate feeds GuessVerificationProgress, so this changes the synchronization-progress estimate and prevents reviewers from reproducing the values using the documented procedure. Recalculate both entries with the required window, or update the release process to document and justify the Dash-specific 17280-block convention.

In `contrib/seeds/README.md`:
- [SUGGESTION] contrib/seeds/README.md:6-22: Document the non-default testnet seed-generation procedure
  The README documents only the mainnet command at height 2563000, but the PR generates testnet seeds at height 1581000 using local, uncommitted changes that disable operator deduplication and raise the IPv4 per-ASN limit to 10. The committed nodes_test.txt contains ten entries from each of AS205581 and AS16610, whereas the checked-in makeseeds.py defaults to four IPv4 seeds per ASN. Add a reproducible testnet command and document the required settings, or provide a supported command-line option for them.

In `contrib/seeds/makeseeds.py`:
- [SUGGESTION] contrib/seeds/makeseeds.py:6-7: Update stale RPC examples in makeseeds.py
  The README now correctly uses `protx list valid true <height>` because v24 rejects the numeric `1` for the detailed argument without the permissive_bool compatibility option, but makeseeds.py still documents `protx list valid 1` in its header, argparse help text at line 157, and explanatory comment at line 169. Maintainers following the script's own documentation will use a rejected RPC form and cannot reproduce the seed list under v24 defaults. Update all three occurrences to the boolean form.

Comment on lines +368 to +373
// getchaintxstats 17280 000000000000000346a1804da4832b0b69dd9a7f96b14c7cb54585a9ac6ae98f
chainTxData = ChainTxData{
1781318234, // * UNIX timestamp of last known number of transactions (Block 2487500)
69770814, // * total number of transactions between genesis and that timestamp
1793218693, // * UNIX timestamp of last known number of transactions (Block 2563000)
71411418, // * total number of transactions between genesis and that timestamp
// (the tx=... number in the ChainStateFlushed debug.log lines)
0.1569520632249578, // * estimated number of transactions per second after that timestamp
0.1306891420721072, // * estimated number of transactions per second after that timestamp

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Suggestion: Use the documented transaction-statistics window

Both updated chainTxData entries are documented as getchaintxstats 17280, while doc/release-process.md explicitly requires a 4096-block window for major releases. The resulting dTxRate feeds GuessVerificationProgress, so this changes the synchronization-progress estimate and prevents reviewers from reproducing the values using the documented procedure. Recalculate both entries with the required window, or update the release process to document and justify the Dash-specific 17280-block convention.

source: gpt-6-astra (phase2-reviewer: general)

The previous seed commit only pruned onion_seeds.txt, leaving 10 onion
seeds. As in earlier releases, refresh it from the onion addresses known
to a long-running, onion-enabled mainnet node (`getnodeaddresses 0
onion`, see doc/tor.md). The node used is a v23.1.8 masternode with
108 onion addresses in addrman.

Each candidate was sent a Dash mainnet `version` message over Tor in
two separate passes, and the ones that answered once were retried
twice more. The 27 kept answered at least 3 of 4 times, listen on
9999 and advertise NODE_NETWORK. All of them report 23.1.7 to 23.1.9
at the chain tip and pass the README `nc -z` check. Pruned
(NODE_NETWORK_LIMITED) peers are left out. Nine of the previous 10 are
kept; lqg6nfbe...onion answered 1 of 4 attempts and is dropped.

nodes_main.txt and chainparamsseeds.h are regenerated from the same
`protx list valid true 2563000` and asmap-filled.dat (sha256
eab9c6e0...4b5fcf) as before. The 239 IPv4 seeds are unchanged; only
onion entries differ. nodes_test.txt regenerates unchanged from
`protx list valid true 1581000`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thepastaclaw thepastaclaw removed the pastaclaw:commented thepastaclaw's latest review was comment-only label Oct 30, 2026

@PastaPastaPasta PastaPastaPasta left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

approved

@PastaPastaPasta
PastaPastaPasta merged commit 61d4333 into dashpay:develop Oct 30, 2026
38 checks passed
PastaPastaPasta added a commit to PastaPastaPasta/dash that referenced this pull request Oct 30, 2026
…ork, assumevalid and tx stats for v24

bcf1202 chore: refresh onion seeds for v24 (pasta)
b34f8c7 chore: update minimum chain work, assumevalid, checkpoints and tx stats for v24 (pasta)
ffb3c16 chore: update seeds for v24 (pasta)

Pull request description:

  ## Issue being fixed or feature implemented

  Before every major release, `doc/release-process.md` asks for fresh seeds, checkpoints, `nMinimumChainWork`, `defaultAssumeValid`, `chainTxData` and assumed sizes for mainnet and testnet. The current values date from v23.x: mainnet block 2487500, testnet block 1400000. This PR updates them for v24.0.0. As with dashpay#6920 for v23, it goes to develop first, then to `v24.0.x` as a backport.

  ## What was done?

  **Seeds** (`contrib/seeds/*`, `src/chainparamsseeds.h`)

  - Mainnet: 239 IPv4 seeds and 10 onion seeds, generated from `protx list valid true 2563000` with `makeseeds.py -a asmap-filled.dat` (asmap from bitcoin.sipa.be, sha256 `eab9c6e00769b461bf5c0cd02c7b5e991739ebbbff3ce568846377031f4b5fcf`). makeseeds reported 2252 masternodes, 2207 with at least 10000 confirmations, and 1507 after deduplication. The per-ASN limit then reduced that to 239.
  - Testnet: 25 seeds from `protx list valid true 1581000`. As in dashpay#6920, operator deduplication was commented out and the IPv4 per-ASN limit raised to 10. These are local edits and are not committed.
  - `onion_seeds.txt`: removed the 15 onion addresses that failed two `nc -z` attempts through Tor. The remaining 10 all answered.
  - `contrib/seeds/README.md`: the example now uses `protx list valid true <height>`. v24 rejects `1` for `detailed` unless `-deprecatedrpc=permissive_bool` is set.

  **Chain parameters** (`src/kernel/chainparams.cpp`)

  | | Mainnet | Testnet |
  |---|---|---|
  | Block | 2563000 | 1550000 (about 32k blocks behind the tip, as release-process.md asks) |
  | Hash (new checkpoint, `defaultAssumeValid`) | `000000000000000346a1804da4832b0b69dd9a7f96b14c7cb54585a9ac6ae98f` | `000000116cd3c11d44c88cbc0a26804bd277a5d790f684ec3a8aaa820690318c` |
  | `nMinimumChainWork` | `0x…c15981a81af44a6abe1a` | `0x…03ed573a939487fc` |
  | `chainTxData` (`getchaintxstats 17280 <hash>`) | 1793218693 / 71411418 / 0.1306891420721072 | 1788899589 / 8494561 / 0.0139463532250889 |
  | `m_assumed_blockchain_size` | 57 → 62 | 10 (unchanged) |
  | `m_assumed_chain_state_size` | 1 (unchanged) | 1 (unchanged) |

  Sizes:
  - Mainnet: a synced v24.0.0-rc.4 datadir is 56G. With 10% headroom that gives 62. The chainstate is 258M, so the chain state size stays at 1.
  - Testnet: the synced datadir is 6.3G, below the current value of 10, so that value is kept. The chainstate is 111M.

  `m_assumeutxo_data` is still empty on mainnet and testnet. There is no published snapshot to commit to yet.

  Reviewers can reproduce every value with `getblockhash`, `getblockheader` and `getchaintxstats 17280 <hash>` at the heights above, and the seed lists with the README commands at the stated heights.

  ## How Has This Been Tested?

  - All values were read from fully synced v24.0.0-rc.4 mainnet and testnet nodes: block 2563000 had 586 confirmations, the mainnet tip was 2563584, and the testnet tip was 1581864.
  - Built this branch and ran the `versionbits_tests`, `validation_tests`, `validation_chainstatemanager_tests`, `net_tests` and `checkqueue_tests` unit tests: no errors.
  - Started this branch's `dashd` on empty mainnet and testnet datadirs with `-dnsseed=0`, so it could only bootstrap from the new fixed seeds.
    - Mainnet: logged "Added 239 fixed seeds", reached 10 peers, and synced headers to 2563592.
    - Testnet: logged "Added 25 fixed seeds", reached 10 peers, and synced headers to 1581891.
    - Both header syncs passed the new checkpoints with no checkpoint or bad-fork errors. The onion seeds were not used in this run because Tor was off.
  - Mainnet EHF check, done on a fully synced v24.0.0-rc.4 node at tip 2563584: a scan of every block from V20 activation (1987776) to the tip, 575810 blocks, found exactly three `MNHF_SIGNAL` transactions. They are bit 10 at 2119135 (MN_RR), bit 11 at 2192864 (WITHDRAWALS), and bit 12 at 2400222. The bit-12 signal is the one v23's numbering mined for V24, and is why V24 moved to bit 13. None is for bit 13 or 14, and no block in the last 4032 sets version bit 12, 13 or 14. v24 has no deployment on bit 12, so v24 nodes see that old signal as an unknown bit. The Nov 9 signal is therefore the first bit-13 signal for v23 and v24 nodes alike, with no duplicate or expired-signal mismatch. rc.4's `getdeploymentinfo` omits `NEVER_ACTIVE` deployments, so the chain was checked directly instead.

  ## Breaking Changes

  None.

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [x] I have made corresponding changes to the documentation
  - [ ] I have assigned this pull request to a milestone

  🤖 Generated with [Claude Code](https://claude.com/claude-code)

Top commit has no ACKs.

Tree-SHA512: 3e5c94e5decbd933a7510033b86d237bf3e88473e689504e841eb802f34848f9fa4540ce318877e9fbb29c6df7da6388fed7762a0bb8476a816683bf65e390c3
(cherry picked from commit 61d4333)
PastaPastaPasta added a commit that referenced this pull request Oct 30, 2026
… assumevalid and tx stats for v24 (#7980)

129a1fc Merge #7980: chore: update seeds, checkpoints, minimum chain work, assumevalid and tx stats for v24 (pasta)

Pull request description:

  ## Issue being fixed or feature implemented

  Backport of #7980 (develop) to `v24.0.x`, so v24.0.0-rc.5 ships with fresh seeds, checkpoints, `nMinimumChainWork`, `defaultAssumeValid`, `chainTxData` and assumed sizes. These are the per-release chain parameter updates from `doc/release-process.md`. The pattern matches #6920 for v23: develop first, then the release branch.

  ## What was done?

  Both #7980 commits were cherry-picked with `-x` onto the `v24.0.x` tip (47814b0). Two adaptations were needed:
  - `src/chainparams.cpp`: develop moved this file to `src/kernel/chainparams.cpp`, so the same hunks were applied here. The changed lines are identical to #7980's.
  - `contrib/seeds/README.md`: this branch still has the pre-asmap README. Only the `protx list valid true 2563000` fix is carried over. The seed lists and `src/chainparamsseeds.h` were generated with develop's tooling (asmap-based ASN lookup) and are byte-identical to #7980's. The input files on both branches were identical before the change.

  Values, all read from fully synced v24.0.0-rc.4 nodes:

  | | Mainnet | Testnet |
  |---|---|---|
  | Block | 2563000 | 1550000 |
  | Hash (new checkpoint, `defaultAssumeValid`) | `000000000000000346a1804da4832b0b69dd9a7f96b14c7cb54585a9ac6ae98f` | `000000116cd3c11d44c88cbc0a26804bd277a5d790f684ec3a8aaa820690318c` |
  | `nMinimumChainWork` | `0x…c15981a81af44a6abe1a` | `0x…03ed573a939487fc` |
  | `chainTxData` (`getchaintxstats 17280 <hash>`) | 1793218693 / 71411418 / 0.1306891420721072 | 1788899589 / 8494561 / 0.0139463532250889 |
  | `m_assumed_blockchain_size` | 57 → 62 (synced datadir 56G, plus 10%) | 10 (unchanged; synced datadir 6.3G) |

  Seeds:
  - Mainnet: 239 IPv4 and 10 onion seeds from `protx list valid true 2563000`.
  - Testnet: 25 seeds from `protx list valid true 1581000`.
  - The 15 onion seeds that failed two Tor connection attempts were removed.

  See #7980 for the full method.

  ## How Has This Been Tested?

  - Re-checked just before this PR on the synced nodes, read-only:
    - `getblockheader` at 2563000 (612 confirmations) and at 1550000 returns exactly the hashes and chainwork above.
  - On #7980 (develop), with the same values and seed data:
    - The unit tests that read chain parameters pass.
    - A node on empty mainnet and testnet datadirs with `-dnsseed=0`, bootstrapping only from the new fixed seeds, synced headers past both new checkpoints. Mainnet reached 2563592 from 239 seeds and testnet reached 1581891 from 25 seeds. There were no checkpoint or bad-fork errors.
  - On this branch: built `dashd` and `test_dash` at da6c192 (Linux x86_64, depends). The unit tests `versionbits_tests`, `validation_tests`, `validation_chainstatemanager_tests`, `net_tests` and `checkqueue_tests` pass with `*** No errors detected`.
  - Follow-up check, not run: release-process.md's `-reindex-chainstate -assumevalid=0` pass over mainnet history.
  - Mainnet EHF state at the tip: from V20 activation to 2563584 there are no `MNHF_SIGNAL` transactions for bit 13 or 14, and no block in the last 4032 signals them.

  ## Breaking Changes

  None.

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [x] I have made corresponding changes to the documentation
  - [ ] I have assigned this pull request to a milestone

  🤖 Generated with [Claude Code](https://claude.com/claude-code)

Top commit has no ACKs.

Tree-SHA512: 58e526a2a937469780f7b7df0734c70372c258b314c7e5100cf49360bc95ed85801a0252bade50d5c4a2f5a10eb9d8ff3b442b98df06d228a80c6bd4d1a7135a
@PastaPastaPasta PastaPastaPasta added this to the 24 milestone Oct 30, 2026
PastaPastaPasta added a commit to PastaPastaPasta/base-sdk that referenced this pull request Oct 31, 2026
Mainnet and testnet get the new minimum chain work, assumed-valid block,
checkpoint and transaction statistics; the assumed mainnet size is 62 GB.
PastaPastaPasta added a commit to PastaPastaPasta/base-sdk that referenced this pull request Nov 1, 2026
Mainnet and testnet get the new minimum chain work, assumed-valid block,
checkpoint and transaction statistics.
kwvg added a commit to dashpay/base-sdk that referenced this pull request Nov 1, 2026
…v24.0.0-rc.5 (#100)

* [700afdd] params%feat!: drop runtime-policy fields from `ChainParams` (pasta)
* [addb7ce] params%feat: schedule mainnet `v24`, `evo_shares` per dashpay/dash#7973 (pasta)
* [fb236ea] params%feat: sync params with dashpay/dash#7980 (pasta)

Description:

`````
## Motivation

The network tables in `dash-params` follow the reference implementation at `v24.0.0-rc.3`. [`v24.0.0-rc.5`](https://github.com/dashpay/dash/tree/8163290aa0307ed4bc2fc0ba15b78c20d61dfa88) schedules the `v24` and `evo_shares` deployments on mainnet from 9 November 2026, and refreshes the mainnet and testnet sync data.

This pull request moves the tables to rc.5, with one commit per reference pull request. It first drops the fields that are a node's runtime policy rather than parameters of the chain, so the rc.5 changes to pruning and to the assumed chain size do not apply.

## Additional Information

| Description | Notes | Reference implementation | Corpus |
| ----------- | ----- | ------------------------ | ------ |
| Drop the runtime-policy fields of `ChainParams` | `prune_after_height`, `assumed_blockchain_size_gb`, `assumed_chain_state_size_gb`, `default_consistency_checks` and `is_mockable_chain` set how a node prunes, sizes its disk and checks or mocks its own state. The stateless SDK has no use for them. | none | none |
| Schedule `v24` and `evo_shares` on mainnet per [dashpay/dash#7973](dashpay/dash#7973) | Both start at 1794182400 (9 November 2026) and time out at 1857340800 (9 November 2028). Bits, window, thresholds and falloff are unchanged. | [deployments](https://github.com/dashpay/dash/blob/8163290aa0307ed4bc2fc0ba15b78c20d61dfa88/src/chainparams.cpp#L210-L226) | `chainparams.json5` `deployments.main` |
| Mainnet sync data per [dashpay/dash#7980](dashpay/dash#7980) | The minimum chain work, the assumed-valid block and a new checkpoint, all at height 2563000. Also the transaction statistics. | [chain work](https://github.com/dashpay/dash/blob/8163290aa0307ed4bc2fc0ba15b78c20d61dfa88/src/chainparams.cpp#L230-L231), [checkpoint](https://github.com/dashpay/dash/blob/8163290aa0307ed4bc2fc0ba15b78c20d61dfa88/src/chainparams.cpp#L348), [statistics](https://github.com/dashpay/dash/blob/8163290aa0307ed4bc2fc0ba15b78c20d61dfa88/src/chainparams.cpp#L357-L362) | none |
| Testnet sync data per [dashpay/dash#7980](dashpay/dash#7980) | The same fields at height 1550000. | [chain work](https://github.com/dashpay/dash/blob/8163290aa0307ed4bc2fc0ba15b78c20d61dfa88/src/chainparams.cpp#L441-L442), [checkpoint](https://github.com/dashpay/dash/blob/8163290aa0307ed4bc2fc0ba15b78c20d61dfa88/src/chainparams.cpp#L533), [statistics](https://github.com/dashpay/dash/blob/8163290aa0307ed4bc2fc0ba15b78c20d61dfa88/src/chainparams.cpp#L542-L547) | none |

`chainparams.json5` was regenerated with the recipe in its header: `dashd` and `dash-cli` from the official `v24.0.0-rc.5` release, each chain on an empty data directory with no connections. Only the header line and the mainnet `v24` and `evo_shares` entries change, so the corpus moves in the second commit. The values without a corpus come from the reference implementation's chain parameters at the lines linked above.

## Breaking Changes

- `dash-params`: `ChainParams` drops `prune_after_height`, `assumed_blockchain_size_gb`, `assumed_chain_state_size_gb`, `default_consistency_checks` and `is_mockable_chain`, so struct literals and patterns that name them must drop them.

CI (`just test lint fuzz::test`, CodeQL included) is green on each commit.

## Checklist

- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [x] I have added or updated relevant unit/integration/functional tests
- [x] I have made corresponding changes to the documentation
- [ ] I did not use agentic assistance (i.e. LLMs, AI) except as [disclosed](#agent-disclosure) and can answer questions,
      comments and concerns without said assistance. I assume authorship of the code submitted.
- [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

### Agent disclosure

Code, commit messages and this description were generated with Claude Code using Claude Opus 5.5, running autonomously as an agent on behalf of the author. The agent also regenerated `chainparams.json5` from the official `v24.0.0-rc.5` release. The change was reviewed by a Claude Code agent using Opus 5.5 and a Codex agent using GPT-6.1.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
`````
PastaPastaPasta added a commit that referenced this pull request Nov 2, 2026
Generated with contrib/devtools/gen-manpages.py from a build of this
branch with CLIENT_VERSION_IS_RELEASE set temporarily (not committed),
so every page reads v24.0.0. They pick up the -whitelist,
-whitelistrelay, -whitelistforcerelay and -blocksonly help changes from
#8005, and the -assumevalid defaults from #7980, which merged after the
v24.0.0 man pages were generated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PastaPastaPasta added a commit that referenced this pull request Nov 2, 2026
914c052 docs: add #8003 to the v24.0.0 release notes and man pages (pasta)
e81c511 Merge #8003: fix(net): don't refuse to start over the automatic onion service unless -listenonion=1 (merge-script)
41b4578 ci: run cppcheck as test/lint/cppcheck-dash.py, as develop does since #7966 (pasta)
c97f3b3 docs: regenerate man pages for v24.0.0-rc.6 (pasta)
784312c docs: add the v24.0.0-rc.6 changes to the v24.0.0 release notes (pasta)
f15a53a Merge #7991: fix(qt): shared masternode wizard fixes for taken shares, unconfirmed funding and reply handling (merge-script)
1c46224 Merge #7995: fix(wallet): don't let a waiting CoinJoin promotion/demotion queue block standard mixing (merge-script)
546db2f Merge #7996: fix(wallet): fill a CoinJoin promotion with sibling coins when needed (merge-script)
349859f Merge #7957: fix(qt): validate shared-masternode shares with the consensus rules (merge-script)
9091f0b Merge #8005: backport: bitcoin#27114, bitcoin#33395 (merge-script)
e915ab5 Merge #7990: fix(wallet): pay for 3 byte input and output counts so 253+ input sends work (merge-script)

Pull request description:

  ## Issue being fixed or feature implemented

  Backports and release prep for v24.0.0-rc.6, on top of `v24.0.x` at d693c69 (the v24.0.0-rc.5 tag 8163290 plus the 2026-10 translations, #7989). After this PR, rc.6 only needs tagging and building.

  ## What was done?

  Cherry-picked (`git cherry-pick -m1 -x`) every develop merge since rc.5 that carries `backport-candidate-24.0.x`, in develop merge order:

  - #7990 fix(wallet): pay for 3 byte input and output counts so 253+ input sends work
  - #8005 backport: bitcoin#27114, bitcoin#33395
  - #7957 fix(qt): validate shared-masternode shares with the consensus rules
  - #7996 fix(wallet): fill a CoinJoin promotion with sibling coins when needed
  - #7995 fix(wallet): don't let a waiting CoinJoin promotion/demotion queue block standard mixing
  - #7991 fix(qt): shared masternode wizard fixes for taken shares, unconfirmed funding and reply handling (labeled for 24.0.x, milestone 24.1)
  - #8003 fix(net): don't refuse to start over the automatic onion service unless -listenonion=1 (picked after the CI commit below, once it merged)

  Every pick changes exactly the same lines as its develop merge, except for one test-only adaptation in #8005, described in its commit message, and #8003's `doc/release-notes-7300.md` hunk, which lands in `doc/release-notes.md` (that file was folded in for v24.0.0 by #7970). bitcoin#27114 makes `wallet_import_rescan.py` restart its pruned nodes with their real `-prune` arguments; before, the restart passed only `-whitelist`, so they never actually ran pruned. On develop, #7860 removed the governance-disabled warning that pruned nodes print to stderr. This branch doesn't have #7860, so the test failed at shutdown on the unexpected stderr. The pick now stops the pruned nodes at the end of `run_test` with `EXPECTED_STDERR_NO_GOV_PRUNE`, the way `feature_pruning.py` does.

  Release prep, in commits after the picks:

  - `doc/release-notes.md`: `doc/release-notes-27114.md` is folded in and removed, as rc.5 did with the other individual notes (#7970). Also added: #8005's change that address-based `-whitelist` permissions no longer apply to onion inbound peers, and the CoinJoin conversion behaviour from #7995 and #7996. #7990, #7957 and #7991 fix code that is new in v24, so they get no release note.
  - #8003's release-note change replaces the v24 bullet that said nodes with `-bind` and no onion bind "refuse to start", in a separate docs commit after the #8003 pick that also regenerates `dashd.1` and `dash-qt.1` for its `-bind`/`-listenonion` help.
  - `doc/man/*.1`: regenerated with `contrib/devtools/gen-manpages.py` from a build of this branch with `CLIENT_VERSION_IS_RELEASE` set temporarily (not committed), as in #7974. Every page reads `v24.0.0`. They pick up #8005's `-whitelist`, `-whitelistrelay`, `-whitelistforcerelay` and `-blocksonly` help changes, and the `-assumevalid` defaults from #7980, which merged after the v24.0.0 man pages were generated.

  One CI-only commit follows the first six picks. Pull requests into `v24.0.x` run develop's workflow files (`pull_request_target`), and since #7966 develop runs cppcheck in its own job as `test/lint/cppcheck-dash.py`. This branch still had `test/lint/lint-cppcheck-dash.py`, so that job failed with "No such file or directory". The commit takes only #7966's rename (the script is unchanged), which also keeps develop's lint job from running cppcheck a second time through `all-lint.py`. This branch's own `lint.yml` now calls the renamed script after `ci/dash/lint.sh`, so its push CI still runs cppcheck. The rest of #7966 (the ci-slim cppcheck build and the separate job) is left out.

  Nothing else needs to change for the tag:
  - `configure.ac` is already 24.0.0 with `CLIENT_VERSION_IS_RELEASE` false, so the build takes its version string from the `v24.0.0-rc.6` tag.
  - The 2026-10 translations are already on the branch (#7989).
  - `SECURITY.md` and the flatpak entry were done in #7972.

  ## How Has This Been Tested?

  Linux x86_64 against depends, `--enable-debug --enable-werror --disable-hardening`. `dashd`, `dash-qt`, `test_dash` and `test_dash-qt` build cleanly.

  - `make check`: all unit suites pass, and `test_dash-qt` passes (run with `QT_QPA_PLATFORM=minimal`).
  - Functional tests, all passing: every test #8005 touches that the runner lists (`feature_cltv.py`, `feature_csv_activation.py`, `feature_dersig.py`, `feature_fee_estimation.py`, `interface_rest.py`, `interface_zmq.py`, `mempool_packages.py`, `p2p_filter.py`, `p2p_invalid_block.py`, `p2p_permissions.py`, `rpc_packages.py`, `rpc_rawtransaction.py`, `wallet_abandonconflict.py`, `wallet_avoidreuse.py`, `wallet_backup.py`, `wallet_balance.py`, `wallet_basic.py`, `wallet_create_tx.py`, `wallet_fundrawtransaction.py`, `wallet_groups.py`, `wallet_hd.py`, `wallet_import_rescan.py`, `wallet_importdescriptors.py`, `wallet_listreceivedby.py`, `wallet_listsinceblock.py`, `wallet_listtransactions.py`, `wallet_send.py`), plus `feature_bind_extra.py`, `feature_masternode_shares.py` and `rpc_coinjoin.py`.
  - After the #8003 pick: `feature_bind_extra.py`, `feature_proxy.py`, `interface_zmq.py`, `p2p_permissions.py` and `torcontrol_tests` pass. #8003 changes the framework's port allocation, so the full non-extended functional suite was run as well: 313 passed, 12 skipped, 0 failed (`test_runner.py -j12` on a RAM disk).
  - `wallet_import_rescan.py --legacy-wallet` failed before the adaptation above and passes with it.
  - Each pick's changed lines were compared with its develop merge.
  - Checked that every `doc/man/*.1` reads `v24.0.0` with no rc, git hash or `-dirty` suffix.

  ## Breaking Changes

  Carried over from the picked PRs:

  - #8005: address-based `-whitelist` permissions no longer apply to peers that connect through the onion service. Before, an entry such as `-whitelist=noban@127.0.0.1` gave every Tor peer its permissions. `-whitelist` also accepts `in`/`out` flags, so its permissions can apply to manual outbound connections; the default is still incoming only.
  - #8003, relative to rc.5: nodes with `-bind` and no `=onion` bind start again, as on v23, and get the default onion bind unless `-listenonion=0` is set. If the default onion bind fails, the node starts without an onion service, unless `-listenonion=1` was set explicitly. A wildcard `=onion` bind is still an error while `-listenonion` is enabled; v23 accepted it.
  - #7990: in wallets with 253 or more spendable coins, changeless transactions pay for 2 more bytes of fee.
  - #7995: while a wallet still has coins to mix, it joins promotion/demotion queues that others opened, but opens its own only when it has no standard mixing session to join or start.

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [x] I have made corresponding changes to the documentation
  - [x] I have assigned this pull request to a milestone

  🤖 Generated with [Claude Code](https://claude.com/claude-code)

Top commit has no ACKs.

Tree-SHA512: 2dfc830eb45d7fbd5d39066fcd9cdb783340b28f15ac5e78c85aedfb2d8eae7d42a1c291811a5ce8e899a675e1144324eda9dca8824108e236a514dbe0297a7e
PastaPastaPasta added a commit that referenced this pull request Nov 6, 2026
d6c066f chore: add v23.1.10 to the flatpak release history (pasta)
202632c chore: release v24.0.0 (pasta)
2bf133c docs: cite #8042 for the index fixes in the v24.0.0 release notes (pasta)
8aa11f6 docs: add the v24.0.0-rc.7 picks and index fixes to the v24.0.0 release notes (pasta)
ad4e5d6 docs: drop the index caveat from the -reindex-chainstate man page entry (pasta)
19a90bb test: blocks orphaned while the address index is disabled are removed from it (pasta)
d2f2a1f fix(index): don't adopt an empty or rebuilt async index as migrated legacy data (pasta)
e3bafdb fix(index): reject an uncommitted tip the block index lost (pasta)
9198962 fix(index): check the blocks governance resumes from at startup (pasta)
baff347 fix(index): resume from the tip a skipped commit leaves behind (pasta)
2dbf5ca fix(index): write a rewound block's erasures in one batch with its locator (pasta)
252acbe fix(index): move the committed locator below the entries a rewind erases (Konstantin Akimov)
e9f9c8a Merge bitcoin#36150: indexes: set prune lock to genesis before first block (Konstantin Akimov)
2edeb98 partial Merge bitcoin#34897: indexes: Don't commit ahead of the flushed chainstate (Konstantin Akimov)
3eba84c Merge bitcoin#32875: index: handle case where pindex_prev equals chain tip in NextSyncBlock() (Konstantin Akimov)
399125c Merge bitcoin#32882: index: remove unnecessary locator cleaning in BaseIndex::Init() (Konstantin Akimov)
bb724c6 Merge bitcoin#33212: index: Don't commit state in BaseIndex::Rewind (Konstantin Akimov)
d5ff431 Merge bitcoin#32878: index: fix wrong assert of current_tip == m_best_block_index (Konstantin Akimov)
31c7d8f partial Merge bitcoin#32580: wallet, test: best block locator matches scan state follow-ups (Konstantin Akimov)
94f5c58 partial Merge bitcoin#30221: wallet: Ensure best block matches wallet scan state (Konstantin Akimov)
8e0b1e8 partial Merge bitcoin#32069: test: fix intermittent failure in wallet_reorgsrestore.py (Konstantin Akimov)
4d17947 Merge bitcoin#25193: indexes: Read the locator's top block during init, allow interaction with reindex-chainstate (Konstantin Akimov)
0127df8 Merge #8045: test: scale the mempool-loaded wait by timeout_factor so TSAN reindex restarts stop timing out (pasta)
62d0cef Merge #8036: fix(qt): let a shared masternode participant follow a revised invitation that keeps their share (merge-script)
775d31c Merge #8018: fix(consensus): require IPv4 masternode primaries until IPv4 is optional, pin mainnet ports (merge-script)
e1b826e Merge #8026: fix(qt): keep shared masternode contribution fields locked while coins are reserved (merge-script)
9fa3df3 Merge #8020: fix(rpc): make protx shared_sign sign only dissolutions that return every principal (merge-script)
246a465 Merge #8024: fix(qt): keep the shared masternode dissolve dialog consistent with what it will send (merge-script)
590ad0a Merge #8021: fix(qt): don't load a newer shared masternode session copy that changes your own share (merge-script)
974aaa3 Merge #8034: fix(qt): check a shared masternode's service and refund addresses before coins are reserved (merge-script)
0026e3e Merge #8027: fix(qt): fund a shared masternode's service update from this wallet by default (merge-script)
6a5d2dc Merge #8035: fix(qt): don't strand coins reserved for a shared masternode session (merge-script)
df6083a Merge #8032: fix(qt): don't offer a new operator key when reopening a shared masternode session (merge-script)
2b5bf30 Merge #8029: fix: let dashd -version, -help and first start work without an existing data directory (merge-script)
e33d9b1 Merge #8037: docs: list the config file path each Linux init system uses (merge-script)
6030ea0 docs: add the #8014 migratewallet fixes to the v24.0.0 release notes (pasta)
1b1ea95 Merge #8014: backport: bitcoin#28609, bitcoin#34215, bitcoin#34226, bitcoin#34370, partials bitcoin#31423, bitcoin#34156 (migratewallet fixes from 28.x) (merge-script)
608ff63 Merge bitcoin#28542: wallet: Check for uninitialized last processed and conflicting heights in MarkConflicted (DCG-Claude)
3af6f63 Merge bitcoin#28038: wallet: address book migration bug fixes (DCG-Claude)
2fe41fb docs: add ecosystem notes on Asset Unlock txids, coinbase payees and RPC errors (pasta)
0e3f653 docs: correct operator guidance in the v24.0.0 release notes for rc.7 (pasta)
11c8140 Merge #8019: fix(qt): stop reporting refused shared masternode broadcasts as sent (merge-script)
cdb250c doc: note operator-relevant v23.1.x patch-release changes for v24.0.0 (pasta)
fcd332b doc: state the provider-transaction InstantSend change on its own (pasta)
e6f3ad4 fix(bls): stop weighted contribution batch verification on an invalid partial aggregate (pasta)
e04acba fix(llmq): weight batched DKG contribution verification (UdjinM6)
ed96227 fix(bls): weight batch-verified signatures so complementary errors cannot cancel (UdjinM6)
b5c7985 fix(governance): don't vote on triggers while not synced (pasta)
a79f432 fix(governance): don't vote NO-FUNDING on triggers before their maturity window (pasta)
8615244 fix(llmq): accept equal DKG secret key shares when aggregating a member's share (pasta)
1c356f4 test: cover DKG members dealing identical contributions (UdjinM6)
f23f748 fix(llmq): drop DKG members whose verification vectors share coefficients (UdjinM6)
914c052 docs: add #8003 to the v24.0.0 release notes and man pages (pasta)
e81c511 Merge #8003: fix(net): don't refuse to start over the automatic onion service unless -listenonion=1 (merge-script)
41b4578 ci: run cppcheck as test/lint/cppcheck-dash.py, as develop does since #7966 (pasta)
c97f3b3 docs: regenerate man pages for v24.0.0-rc.6 (pasta)
784312c docs: add the v24.0.0-rc.6 changes to the v24.0.0 release notes (pasta)
f15a53a Merge #7991: fix(qt): shared masternode wizard fixes for taken shares, unconfirmed funding and reply handling (merge-script)
1c46224 Merge #7995: fix(wallet): don't let a waiting CoinJoin promotion/demotion queue block standard mixing (merge-script)
546db2f Merge #7996: fix(wallet): fill a CoinJoin promotion with sibling coins when needed (merge-script)
349859f Merge #7957: fix(qt): validate shared-masternode shares with the consensus rules (merge-script)
9091f0b Merge #8005: backport: bitcoin#27114, bitcoin#33395 (merge-script)
e915ab5 Merge #7990: fix(wallet): pay for 3 byte input and output counts so 253+ input sends work (merge-script)
4f4d188 Merge #7984: chore: Translations 2026-10 (pasta)
129a1fc Merge #7980: chore: update seeds, checkpoints, minimum chain work, assumevalid and tx stats for v24 (pasta)
5800e5d docs: state that SPORK_3/SPORK_9 were already hardened on mainnet (pasta)
ddc82a8 docs: separate extended addresses from shared masternodes in v24 notes (pasta)
8660e54 docs: complete the v24.0.0 release notes against the full v24 changeset (pasta)
11ea306 Merge #7947: fix: stop quorum key warming from stalling DKG on 2-core masternodes (pasta)
25d7c85 Merge #7826: fix: skip repeated authenticated Platform bans (pasta)
18073dd Merge #7850: perf: let CHECKDATASIG use the signature cache (pasta)
3759397 Merge #7833: fix: gate signing intake before quorum retrieval (pasta)
db98ee2 fix: keep flat-file positions 64-bit clean at the remaining raw seek/tell sites (Konstantin Akimov)
54c9738 Merge bitcoin#36667: net: enforce timeout interval for paused send peers (Konstantin Akimov)
f1adb2c Merge bitcoin#36665: sock: align exception monitoring between poll() and select() backends (Konstantin Akimov)
8becf6a Merge bitcoin#36669: refactor: store positions as a 64 bits integer in flatfiles (Konstantin Akimov)
4c0cbd6 fix(llmq): judge every sig-share sender by its own verified shares (pasta)
649259f fix(governance): cap the orphan parent objects re-requested per tick (pasta)
418f5ee fix(llmq): verify DKG contributions individually when a batch vvec check fails (pasta)
abf2eb0 fix(llmq): reject invalid decrypted DKG shares before aggregation (pasta)
39bda8f fix(consensus): reject negative transaction nVersion after DIP3 (pasta)
1ba2609 Merge #7951: fix(net): stop peers lingering after disconnect under edge-triggered epoll (pasta)
696d45f Merge #7861: feat: keep at least 4-days worth blocks after pruning (merge-script)
9cd1c72 Merge #7869: fix: let startup block replay handle quorum commitments and asset unlocks (pasta)
73e7254 Merge #7682: build: finish relic_conf.h regeneration before compiling BLS consumers (pasta)
7312925 ci: bake the macOS SDK into the CI runner image (pasta)
d885ecd Merge #7916: backport: bitcoin#27800, bitcoin#28125, bitcoin#28232, bitcoin#27695 (merge-script)
f55ad1d Merge bitcoin#28139: test: create wallet specific for test_locked_wallet case (DCG-Claude)
80f6cbe chore: add the v23.1.9 release entry to flatpak metainfo (pasta)
5ba801f chore: use translation source strings generated from v24.0.x (pasta)
a3b9e30 Merge #7974: chore: update man pages, translation strings, SECURITY.md and flatpak for v24.0.0 (pasta)
b5d26bd feat(consensus): schedule V24 and evo_shares on mainnet for November 9, 2026 (pasta)
fe78211 docs: state the earliest v24 activation height and the v23.1.9 fixes (pasta)
3bbe3e2 docs: address review of v24.0.0 release notes (pasta)
28c39fc docs: add v24.0.0 release notes and remove individual release notes files (pasta)
e8cbfaf docs: archive v23.1.8 and v23.1.9 release notes (pasta)
6c02b2b ci: let DEPENDS_ARCH override the machine arch for multiprocess and tsan (pasta)
ce5dbf3 Merge #7888: fix(consensus): canonical ExtNetInfo encoding and strict netInfo decoding (pasta)
54cba5c Merge #7537: fix: data races and check-then-act races in the CoinJoin server (pasta)
08d8bca Merge #7909: feat(mining): build the masternode list incrementally during block assembly (pasta)
5633761 Merge #7895: test: cover retroactive provider tx refusal, fix wording (pasta)
cbb9500 Merge #7846: fix: treat pending owner keys and Platform node IDs as one conflict namespace (pasta)
8efdf5e Merge #7857: fix: mine a pending ProUpServTx before a key change of its masternode (pasta)
e56e6ae Merge #7842: fix(wallet): reject mnemonic passphrases that seed derivation truncates (pasta)
79480ff test: follow-up for #7821: check if wallet is locked after failed upgrade instead creating brand-new scenario (Konstantin Akimov)
a56ed47 fix(net): announce sporks to new peers instead of requesting them during mnsync (pasta)
cdaea5f Merge #7894: fix: due to logical conflicts feature_pruning.py had been broken while (pasta)
98d92f6 Merge #7817: backport: partial bitcoin#34156 restore cleanup ownership (pasta)
35e6d18 Merge #7858: fix: do not InstantSend-lock provider transactions (pasta)
904d73d Merge #7881: fix: refuse to sign shared registrar updates that move the funder's coins (pasta)
95982f5 Merge #7782: fix(wallet): persist pending-observation coin locks once the record becomes readable (pasta)
cdf65d0 Merge #7836: backport: partial bitcoin#25812, bitcoin#29855 (pasta)
cc5716f Merge #7824: fix: retain initialized DKG sessions during inventory reads (pasta)
588e458 Merge #7827: backport: partial bitcoin#35984 (pasta)
795c6f1 Merge #7839: fix: release InstantSend tracking after mempool eviction (pasta)
dc1a6b2 Merge #7875: docs(rpc): clarify getchainlockbyheight availability (pasta)
e4798ff Merge #7876: fix(consensus): capture operator key scheme changes with unchanged bytes in state diffs (pasta)
fe68ecb Merge #7871: backport!: Merge bitcoin#27217: wallet: Replace use of purpose strings with an enum (pasta)
8348d22 Merge #7867: fix: refuse masternode list RPCs for blocks outside the active chain (pasta)
861a579 Merge #7866: fix: stop `masternode payments` at the genesis block (pasta)
efcef71 Merge #7521: fix: update masternode rate limit on failed governance trigger path (pasta)
0623182 Merge #7831: fix: bound governance object signatures and reset the governance cache (pasta)
b230657 Merge #7841: fix: authenticate cached InstantSend proof bytes (pasta)
a1f37ea Merge #7820: fix: hold chainstate lock during CoinJoin input validation (pasta)
50a5617 Merge #7829: fix: preserve wallet permissions when changing passphrases (pasta)
2ff0103 Merge #7818: fix: return REST errors for unavailable deployment data (pasta)
cb39369 Merge #7834: fix: validate Electrum import input boundaries (pasta)
e7e3daa Merge #7821: fix: relock encrypted wallets after HD upgrade failures (pasta)
2fea45f Merge #7792: fix: treat missing snapshots during evodb repair as repair errors (pasta)
3c5c039 Merge #7838: fix(wallet): authenticate unlock deadline extensions (pasta)
0bf80f8 Merge #7810: fix(rpc): handle unavailable masternode payment inputs (pasta)
bcefee4 Merge #7822: fix: reject malformed detached quorum share batches (pasta)
86a7737 Merge #7828: fix: omit recovery words from invalid mnemonic errors (pasta)
886d5c4 Merge #7816: fix: check credit pool amount accumulation (pasta)
00fc3b9 Merge #7851: fix(rpc): correct masternode status help for top-level service field (pasta)
0e75c22 Merge #7814: fix(qt): restore HTML escaping of send confirmation recipients (pasta)
fbe6526 Merge #7807: feat(consensus): hold EvoNode shares and multiple payouts behind a new evo_shares deployment (pasta)
57fd2d9 Merge #7776: fix: keep a pending ProUpServTx across a registrar update that keeps the operator key (pasta)
ca69801 Merge #7803: fix: return non-zero amount of accounts after sethdseed (pasta)
57a8f07 Merge #7796: backport: bitcoin#26720 (remaining), partial bitcoin#29523: weight-check the knapsack exact-match selection (pasta)
4eb82f6 Merge #7786: fix(net): keep a dedicated onion listener when -bind is given and correct the bind release note (pasta)
70626a0 Merge #7793: backport: partial bitcoin#28868 (wallet: reload wallet if migration exited early, keep mixed watchonly txs) (pasta)
250a3cd Merge #7790: fix: guard cached governance object flags with the object lock (pasta)
700c195 Merge #7787: fix: only sign EHF signals inside the deployment's start/timeout window (pasta)
a3b0f3c Merge #7785: fix: restore the txindex requirement when governance validation is enabled (pasta)
2d1735d Merge #7794: fix(wallet): floor the denomination gap threshold so rebalancing cannot oscillate (pasta)
d9f6592 Merge #7783: fix: stop fish completion from re-running the typed dash-cli command (pasta)
89d44c8 Merge #7795: backport: bitcoin#34272, partial bitcoin#31650 (pass PSBT by const reference in PSBTInputSignedAndVerified) (pasta)
a1d7411 Merge #7779: fix!: report legacy evonode Platform addresses when listdiff changes its address (pasta)
73f6ea2 Merge #7789: fix(qt): report malformed lang/font settings instead of aborting at startup (pasta)
40de493 Merge #7781: fix(rpc): use a consistent tip height in quorum dkgstatus (pasta)
7d1a90d Merge #7791: fix(net): request object votes from nPeersPerHashMax peers (pasta)
51b145c Merge #7778: test: use single-member in functional tests: feature_mnehf, feature_notifications, p2p_instantsend (pasta)

Pull request description:

  ## Issue being fixed or feature implemented
  Merges the v24.0.0 release back into develop, as the release process asks once `master` is fast-forwarded. `master`, `v24.0.x` and the signed `v24.0.0` tag all point to the same commit (938fba5).

  ## What was done?
  One merge commit of `master` into develop.

  `v24.0.x` was cut from develop, so all of its code is already here. Every commit on it that develop lacks by patch is one of these:
  - a `cherry-pick -x` of a develop commit;
  - covered by a develop PR: the index fixes by #8042, the mainnet V24 schedule by #7973, the cppcheck CI move by #7966;
  - release bookkeeping.

  Git reports conflicts in many files, because `v24.0.x` carries adapted copies of develop's changes. All of them resolve to develop's side, which keeps develop's code, translations and version (`configure.ac` stays at 24.1.0, `CLIENT_VERSION_IS_RELEASE` false).

  Taken from v24.0.0:
  - `doc/release-notes.md`: the v24.0.0 release notes. The v23.1.10 notes move to `doc/release-notes/dash/`.
  - The man pages regenerated for v24.0.0, replacing develop's older v24.0.0 pages. A few entries (`-prune`, `-par`, `-parbls`, `-maxconnections`) still trail develop's help text, as they did before, until the next regeneration.
  - `feature_addressindex.py`: the v24.0.x test that blocks orphaned while the address index is disabled are removed from it once it is re-enabled.

  Release notes:
  - Individual `doc/release-notes-*.md` files whose content is in the v24.0.0 notes are removed. This includes `release-notes-8018.md`, `release-notes-8029.md` and `release-notes-27114.md`, whose changes shipped in v24.0.0 without the files.
  - `release-notes-28113.md` and `release-notes-28414.md` also covered `descriptorprocesspsbt`, which only develop has. They are trimmed to that RPC instead of removed.
  - Notes for changes v24.0.0 doesn't include stay: #7812, #7847, #7860, #7862, bitcoin#25943, bitcoin#26485 and bitcoin#27501.

  ## How Has This Been Tested?
  macOS arm64 against depends, `--enable-debug --enable-werror --disable-hardening --without-gui`. `dashd`, `dash-cli` and `test_dash` build cleanly.

  - `src/` is byte-identical to develop's. The only non-doc change is the new `feature_addressindex.py` case.
  - Functional tests, all passing: `feature_addressindex.py` (with the new case) and `feature_spentindex.py`.
  - Unit suites, all passing: `txindex_tests`, `blockfilter_index_tests`, `coinstatsindex_tests`, `index_migration_tests`, `baseindex_tests`.
  - `lint-python.py`, `lint-whitespace.py`, `lint-includes.py` and `lint-circular-dependencies.py` pass.
  - An independent review checked every non-merge commit in `develop..master` against develop (by patch, by cherry-pick source, and line by line for the rest), re-merged each `v24.0.x` merge commit to look for content added in a merge, and checked each release-note file decision.

  I did not run the full functional suite locally; CI covers it.

  ## Breaking Changes
  None. Develop's code is unchanged; the only non-doc change is the new functional test case.

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [x] I have added or updated relevant unit/integration/functional/e2e tests
  - [x] I have made corresponding changes to the documentation
  - [x] I have assigned this pull request to a milestone _(if you have permission to set one)_

  🤖 Generated with [Claude Code](https://claude.com/claude-code)

Top commit has no ACKs.

Tree-SHA512: 3c2d1b7d2885f983f1457a18920f42907009c8ca77522a6116739d387b011d8d5583da6a4b6a1227bcaa21fa07a7ef635aae58fb8b19e4f31a95582ee1ce2318
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.

2 participants