Qbit Mining Bootstrap v1.1.0
Release notes
qbit-mining-bootstrap 1.1.0 Release Notes
Release date: 2026-08-17
Highlights
- Hardens the found-block landing path end to end: found blocks are submitted
to the node before pool accounting, a node-accepted block is never
terminally abandoned over a stale append epoch or a lost
submitblockacknowledgement, carry-forward balances are maintained in O(recipients) instead of O(ledger history), and landing work runs under landing-class deadlines behind a degradable barrier. - Makes the PRISM ledger writer lease fail closed under contention. Heartbeats no longer self-fence during accepted-block persistence, heartbeat staleness is measured from verification activity, and a lock-blocked renewal that races an expiry claim now fails closed instead of proceeding.
- Scales the PRISM tip-refresh and share-ingest pipeline for production hash rates: pay-once-per-generation ledger and serialization costs, epoch-scoped refresh fanout, converged latest-tip publication, bounded reconcile prefetch, and single-flight job builds that resolve or evict abandoned promises.
- Makes payout-artifact builds incremental and debounced, and re-lands
event-driven artifact reuse behind the
PRISM_PAYOUT_ARTIFACT_REUSEkill switch after the earlier anchor-scoped attempt was reverted. - Adds the reward-window leaderboard to the public dashboard API.
window=rewardranks the canonical live PRISM work window using counted share difficulty from the latest 8x permissionless-difficulty window and supports exactrecipient_idlookup, while the legacywindow=3hranking is preserved. - Adds an opt-in pool-fee-first coinbase output policy
(
PRISM_COINBASE_OUTPUT_POLICY=pool-fee-first), which requires an enabled pool fee, keeps that fee out of CTV fanout, and emits a positive fee output at coinbase vout 0. - Adds per-worker rejects observability to the ckpool lane, native-crash diagnosability for the PRISM coordinator, progress-aware health checks, and watchdog restart recovery in roughly one second instead of 60s or more.
- Expands CI with Postgres production-scale fixture tests, a native Postgres client ledger suite, and a live ckpool rejects observability suite.
Mainnet Compatibility
This release continues to pair with qbit v1.0.0 at
7ebcddb622d6e639041f005a189b048ec2a221fe. The QBIT_GIT_REF and
QBIT_GIT_COMMIT defaults are unchanged, so operators on 1.0.0 keep the same
qbit source pin across this upgrade.
The documented AuxPoW chain IDs are unchanged:
- Mainnet:
47 - Public testnet4:
31430
The qbit mainnet genesis hash for this release line is unchanged:
0000000000004d60aa5d46013991d0a0e2995d89ee98e53068ae196d763e79f2
Upgrade Notes
- Configuration is additive. No
.env.examplekey was removed or renamed since 1.0.0. The two new behaviour switches arePRISM_COINBASE_OUTPUT_POLICY, which defaults tocanonicaland preserves the 1.0.0 coinbase ordering, andPRISM_PAYOUT_ARTIFACT_REUSE, which defaults to1and can be set to0to fall back to full artifact builds. - The remaining new keys are PRISM tuning and capacity knobs covering block
submit and landing timeouts, writer-lease TTL, tip-refresh fanout and worker
pools, Stratum connection and initial-job limits, coordinator file-descriptor
limits, payout-artifact cadence, CTV broadcaster batching, public read-model
caching, and health staleness thresholds. They ship with production-facing
defaults; review
.env.examplebefore overriding them. - The share-ledger schema bundle in
crates/qbit-prism/sql/001_share_ledger.sqlis applied at coordinator startup. This release adds aqbit_payout_carry_forward_currentsummary table with maintenance triggers. A database that already holds active carry history is seeded exactly once during that first apply, so expect a one-time backfill proportional to the existing carry rows before the coordinator finishes starting. - Review
.env.exampleanddocs/mainnet-deployment.mdbefore upgrading a production or mainnet stack. - Keep production images digest-qualified.
scripts/check-env.shis expected to reject mutable image references, missing qbit source provenance, and missing final chain-state pins in production mode. - Run
make doctorbefore starting the stack. For PRISM deployments, runmake prism-self-checkafter startup and keep private RPC, Postgres, metrics, audit, health, volume, and signing-key surfaces off the public internet unless intentionally protected by access controls.
Changes Since v1.0.0
This release rolls up every change merged to main after v1.0.0 (#28 through
#35) together with the 1.x.x hardening line (#36 through #120).
Block landing, submission, and accounting
- Fix the found-block landing livelock with O(recipients) carry-forward balances, landing-class deadlines, a degradable barrier, and replay hardening (#120).
- Submit found blocks to the node before accounting and keep the submitter alive under database saturation (#113).
- Never terminally abandon a node-accepted block over a stale append epoch (#119), and fix the earlier stale abandon of accepted blocks (#89).
- Close the accepted-block blind spot behind lost
submitblockacknowledgements (#93) and carry the post-merge review hardening for that fix (#94). - Skip replay window revalidation once the node offer is out.
- Reconcile accepted-share stats in the background and heartbeat block dispositions (#110).
- Avoid reconcile single-flight under the accepted-block payout lock (#96) and reduce accepted-block payout gate locking (#50).
- Judge ledger confirmation on settlement balances rather than identity labels (#87).
Writer lease, share ledger, and audit
- Stop lease heartbeat self-fencing during accepted-block persistence (#114).
- Fail closed when a lock-blocked lease renewal races an expiry claim (#116).
- Measure lease heartbeat staleness from verification activity (#118).
- Release the writer lease before slow shutdown drains (#47).
- Make share-window reads scale with the window rather than ledger history (#115) and isolate share hot-path locking (#83).
- Recover gaps in audit share segments (#88) and fix audit-bundle memory amplification (#48).
Tip refresh, job delivery, and Stratum
- Make tip-refresh ledger and serialization costs pay-once-per-generation (#99), converge refreshes on latest epochs (#101), and cut hashrate-weighted staleness in refresh fanout (#98).
- Scale tip refresh, block finalization, and share ingest for the whale ramp (#100) and for same-tip job retention (#31).
- Bound the tip-refresh reconcile prefetch join (#109), resolve or evict abandoned single-flight job-build promises (#108), and remove the redundant payout-ledger-artifact build from the reconcile path (#95).
- Prevent tip publication starvation (#66) and latest-tip publication livelock between concurrent refresh paths (#67); prioritize latest-tip bundle builds (#69) and reduce shared bundle latency (#58).
- Delay tip authority until replacement work is ready (#55), supersede obsolete refreshes promptly (#42), bound refresh build supersession (#57), and preempt obsolete fanout waiters (#43).
- Throttle tip-refresh retries and candidate finalize replays (#71), retry failed blockwait refreshes (#41), start the refresh failure budget on first failure (#51), and exclude coordination-blocked refreshes from the template failure budget (#56).
- Remove coordinator hot-path bottlenecks behind mainnet stale-job rejects (#40) and reduce tip-refresh latency under concurrent maintenance (#37).
- Flatten the first-job latency tail for new connections (#92), decouple ready bundles from representative clients (#46), reclaim cancelled initial-job queue capacity (#68), and bound reconnect storms during job startup (#45).
- Fix build cancellation and refresh races (#64) and the client cleanup lock leak (#52); keep Stratum ports open across fast restarts (#63); harden Stratum against descriptor exhaustion (#30); bound vardiff idle sweeps (#53).
Payouts, artifacts, and CTV fanout
- Make payout-artifact builds incremental and debounced (#112).
- Re-land payout-artifact reuse with event-driven validity and a kill switch (#107), after the anchor-scoped reuse line (#102, #103) was reverted (#104).
- Shorten payout delivery gate critical sections (#49) and skip payout republish on covered block replays (#59).
- Add an explicit pool-fee-first coinbase output policy (#106).
- Skip no-op CTV fanout status writes and immature-row probes (#60) and prevent false CTV broadcaster watchdog exits (#35).
Public dashboard API
- Expose the PRISM reward-window leaderboard (#36) and the pending maturity total (#28).
- Label CTV fanout payouts correctly in the public payout read model (#29).
- Smooth public hashrate-series points with a trailing window (#65) and reduce public dashboard load on the shared Postgres (#72).
Observability, health, and diagnostics
- Add per-worker rejects observability to the ckpool lane (#97).
- Add native-crash diagnosability to the PRISM coordinator (#91).
- Recover watchdog restarts in roughly one second instead of 60s or more (#111) and bound the coordination-blocked template refresh watchdog (#90).
- Add progress-aware health checks (#54) and fix delivery health grace (#82).
Operator Notes
- The historical 0.1.x and 1.0.0 release notes remain in
doc/so public release history stays inspectable from the repository. docs/prism-payout-artifact-measurement.mddocuments how to measure payout-artifact build cost before tuning the reuse and cadence knobs.- New Make targets in this release:
make test-prism-postgres-scale,make test-prism-postgres-native-ledger, andmake test-ckpool-rejects-observability.