Resolve open node issues with bounded, evidence-backed changes

Closed
ME
2d ago
+98103-6628

Scope

This draft publishes the complete feat/resolve-node-issues branch: 100 commits, 388 files, +97,284/-7,254 against origin/main at f024fc377. It covers the 25 in-scope open issues, excluding post-quantum research #1625. All committed changes and refactors are included. Untracked local .worktrees/, local/, and plans/ artifacts are excluded.

Major changes

  • Repairs synchronization, chainstate, mempool, RPC, compact-block, and node-composition ownership.
  • Adds scoped CPFP submission, BIP331 ancestor packages, BIP332 stale tips, BIP337 compressed transactions, and BIP434 negotiation.
  • Adds bounded descriptor scans, JSON-RPC envelope fixes, and public/management RPC separation.
  • Adds opt-in Tor/I2P transports and native Stratum V1/V2 mining with durable PPLNS accounting.
  • Unifies exact block payload ownership and adds typed historical-prefix queries.
  • Adds verified snapshot seeding, Core v2 snapshot export, portable index bundles, and sealed AssumeUTXO activation.
  • Adds indexed Core-file corpus custody and a foreground offline importer through the production settlement owner.
  • Records performance, Lightning, Erlay, storage, and upstream dispositions without adopting unqualified candidates.

Synchronization impact

This branch touches authoritative sync, validation, and commit paths. Relevant contract clauses are SYNC-01 through SYNC-07, with the per-unit boundaries and evidence map in docs/contracts/synchronization.md. The smallest proofs are the existing chainstate, node recovery, index watermark, P2P, RPC-notification, and process-level acceptance suites. Portable restore additionally passed all five process cases with 77 checks.

Native pool module consolidation (42307c52e)

Stratum V1/V2 and the durable PPLNS ledger now live under bitcoin_rs_mining::pool; the three standalone workspace crates were removed. The shared PoolCore was extracted from the SV1 session. Existing pool/pool-sv2 feature switches, ledger model/codecs/keyspace, accounting policy, and protocol behavior are preserved.

This consolidation moves the mining caller but does not edit the authoritative synchronization, validation, or commit implementations. Both protocols still submit through MiningControl; chain observation and lifecycle composition remain node-owned. Relevant preserved obligations are SYNC-03 (bounded pool locks/queues), SYNC-04 (submission/settlement failure classification), SYNC-05 (commit-before-success boundary), and SYNC-06 (existing refresh/drain drivers). The smallest evidence-map proof, chain_effects::tests::mining_reports_a_committed_settlement_failure_as_accepted, passed; the pool SV2 host proof also passed.

Validation on Windows: 242 mining/pool tests, 26 node pool/configuration/settlement tests, 7 pool RPC tests, the single settlement proof above, and the workspace dependency-direction gate passed (277 total). Pool-off and SV1-only binary checks, the SV2-enabled binary/test build, formatting, and strict all-targets mining Clippy passed. The normal dependency graph excludes pool storage and Noise when pool is off, and excludes SV2/Noise with SV1 only. Unix authority-file/process-crash and external interoperability campaigns were not rerun; those existing platform/deep lanes remain the evidence boundary.

Main merge reconciliation (69626f0a3)

Merged main at f024fc377. Conflicting public HTTP implementations now use main's RpcSurface, public_bind / --public-bind, independently configurable connection budgets, REST placement on the public listener, and rpc.* metrics. The superseded ListenerRole implementation and draft rpc_public_bind configuration were removed. Pool-aware Context construction, the mining::pool consolidation, the branch's JSON-RPC envelope behavior, and extracted transport proofs remain.

The merge does not edit authoritative synchronization, validation, or commit implementations. It reconciles listener binding, cancellation and worker ownership at node startup/teardown (SYNC-03, SYNC-04, SYNC-06); both listeners bind before workers start, and pool admission starts afterward. Existing lifecycle rollback/shutdown tests and the evidence-map event-loop proof event_loop::tests::telemetry_uses_elapsed_time_not_wake_count passed.

Windows verification: 56 RPC transport tests, 21 lifecycle tests, 21 auth integration tests, 2 public-listener configuration tests, 1 CLI test, 1 overlap-refusal unit test, and 1 event-loop test passed (103 total). Formatting and strict RPC library/test Clippy with --no-deps passed. Full-dependency Clippy is still blocked by the pre-existing non-Unix index::portable::sync_dir unnecessary-wraps lint; unrelated source was left intact. Unix/deep campaigns were not rerun.

Verification status

Draft created before final publication gates, as requested.

Passed on the final source-bound binary:

  • All five portable bundle process cases: 77 checks, 0 failures.
  • Feature-enabled portable unit suite: 8 passed.
  • Real two-block mainnet offline import and idempotent reopen.
  • Integrated AssumeUTXO focused suites and strict targeted Clippy.
  • Offline importer and relocated query/API ownership tests.

The complete all-profile gate and final native pool-feature gate must be read before merge. No better-than-Core or mainnet qualification claim is made.

Remaining external limits

  • Cmodern corpus qualification lacks the required archive and storage envelope.
  • Same-key I2P restart remains unresolved in the official-provider control.
  • Physical per-family device attribution is unavailable on shared ZFS.
  • ScriptHistory v6 promotion still needs representative storage evidence.
  • Unprovisioned Lightning targets remain unexercised.

RetriggerView in GreptileConfidence Score: 3/5

Do not merge until the overlay callers are updated and offline-import retries verify the archive before certifying success.

Findings

  1. P1 Overlay checks cannot start ▶
  2. P1 Retries certify unchecked archives ▶

Summary

This revision tightens overlay configuration, repairs amount parsing, and adds producer-manifest support.

  • Operators can export and restore portable transaction-index bundles.
  • Block sync and chain updates share clearer ownership of block data and displaced tips.
  • The index worker can seed live-script data from a verified snapshot artifact.
  • Index callers can request typed historical-prefix and bounded scan results.

Reviews (6) · Last reviewed commit: "Merge remote integration branch into fea..." · Reviewed by Greptile