Repository navigation
v0.9.0
General release information
Highlights of this release:
This release aligns the application stack with stratum-core 0.7.0 (stratum v1.13.0), closes the four-part Job Declarator Client hardening plan tracked in #38, adds Bitcoin Core v32 support to bitcoin_core_sv2 together with block submission over IPC, and continues the Loupe audit hardening across Pool, JDS, JDC and tProxy. The repository also moved to a single Cargo workspace with one lockfile.
Notable highlights include:
- The Job Declarator Client (JDC) job declaration flow was reworked in four steps: a mining job token is spent exactly once and only on work sent upstream, work that finds no token waits for one, and templates are kept only while JDC can still use them (#930); JDS token answers are acted on once and checked whole before any of them is kept, and coinbase constraints are computed with checked arithmetic so an output that does not fit stops JDC at startup instead of reserving a wrapped-around number (#939); a Pool/JDS pair whose setup JDC cannot use is skipped instead of started without, only the upstream channel open JDC is waiting for is accepted, and a Pool assigning a target above
max_targetor an unusable extranonce layout triggers fallback (#947); every declaration and custom job moves through its stages (Undeclared,Declared,Proposed,Acknowledged) once, and what a job, a chain tip or a downstream channel owned is released when it ends (#949). - JDC and tProxy keep invalid hashrates and targets away from the upstream: a downstream
nominal_hash_rateormax_targetthe channel constructor refuses is answered with the constructor's error code instead of being forwarded, and the aggregated hashrate in the upstreamUpdateChannelsaturates atHashrate::MAXinstead of overflowing. bitcoin_core_sv2gained av32xruntime targeting Bitcoin Core 32.x, andjd-servernow submits solved blocks to Bitcoin Core through the newMining.submitBlockIPC method, which makesPushSolutionpropagate. The JDP path was hardened: supplied transactions that do not match the declaration are rejected withinvalid-job, and declared wtxid lists, resolved transaction data and the mempool mirror are bounded in block weight.- Pool payout policy is bound per connection: the first successful channel open binds it, a later open resolving to different coinbase outputs is rejected with
incompatible-payout-mode, and a rejected open can no longer redirect the coinbase of channels already on the connection. - JDS binds each allocated mining job token to the
user_identifierthat requested it, and the Pool answersinvalid-mining-job-tokenon aSetCustomMiningJobwhose channel identity does not match. - tProxy channel state no longer leaks under channel churn: share sequence counters, emptied client groups and per-channel job state are released when a channel closes in either direction, with churn tests asserting the collections return to baseline.
- Fallback coordination in JDC and tProxy is now a
CancellationTokenplus aTaskTracker: tracked work counts from the moment the future exists until it is dropped, so there is no acknowledgement to forget and no wakeup mistaken for completion. - Every application paces
accept()retries by 100 ms after a failed accept, so file descriptor or buffer exhaustion no longer spins a core and floods the log. stratum-appshandlesSIGTERMas well asSIGINTfor graceful shutdown, and itsconfigfeature now gates theconfigcrate so minimal builds pull in about 45 fewer crates.- Mainnet example configs for Pool, JDS and JDC pay the coinbase reward to the SRI community multisig instead of individual contributors' addresses.
- Development workflow: all crates live in one Cargo workspace with a single
Cargo.lock; CI lints every app crate with default features disabled;AGENTS.mddocuments attribute and comment placement, audit-finding triage and outcome-based reviews;SECURITY.mdwas added. - The application stack is aligned with the latest
stratum-core0.7.0release, picking up thebuffer_sv2,codec_sv2/framing_sv2andchannels_sv2hardening, the spec field renames (ntime_start,target,max_target) and F32 validation.
What's Changed
- pool payout policy isolation for solo mining by @lucasbalieiro in #857
- Merge all crates into a single cargo workspace by @bit-aloo in #875
- chore(deps): update stratum-core to 28149a8 by @SV2-bot in #900
- docs(agents): warn against stealing comments when inserting items by @plebhash in #907
- rename target message fields, aligning with spec cleanup by @plebhash in #845
- feat(jds): bind mining job tokens to user_identity and check it on SetCustomMiningJob by @nulllpc in #839
- docs(agents): define a schema for issues triaged from audit findings by @GitGab19 in #912
- chore(deps): update stratum-core to 9566663 by @SV2-bot in #916
- pay mainnet coinbase reward to SRI community multisig in config examples by @plebhash in #883
- chore(deps): update stratum-core to c31ed53 by @SV2-bot in #918
- chore(deps): update stratum-core to b1f678c by @SV2-bot in #919
- catch attributes stolen by inserted items, in
AGENTS.mdand in CI by @plebhash in #917 - build(stratum-apps): gate config crate on feature by @rkuester in #922
- chore(deps): update stratum-core to 7e1c61a by @SV2-bot in #924
stratum-apps: refine shutdown signal handling (supportSIGTERM) by @plebhash in #915bitcoin_core_sv2hardening by @plebhash in #856- chore(deps): update stratum-core to 31f8074 by @SV2-bot in #927
- docs(agents): keep the fix suggestions out of audit issues by @plebhash in #925
- ci: serve the yanked zip 3.0.0 to semver checks from git by @GitGab19 in #928
- harden tProxy channel state, difficulty targets and upstream endpoint changes by @GitGab19 in #909
buffer_sv2hardening companion by @bit-aloo in #903- refactor: track fallback work by future lifetime by @plebhash in #936
- chore(deps): update stratum-core to 4a716fa by @SV2-bot in #940
- fix JDC coinbase-only custom jobs, template retention and work waiting for job tokens by @GitGab19 in #930
codec_sv2andframing_sv2hardening companion by @bit-aloo in #938- chore(deps): update stratum-core to aee52d3 by @SV2-bot in #954
- chore(deps): update stratum-core to fe69910 by @SV2-bot in #956
- docs: add
SECURITY.mdby @plebhash in #959 - fix JDC handling of JDS token answers and changing coinbase outputs by @GitGab19 in #939
- fix: pace
accept()retries after a failed accept by @plebhash in #955 - fix JDC upstream setup, channel opening and refused downstream requests by @GitGab19 in #947
- chore(deps): update stratum-core to d1d30f3 by @SV2-bot in #962
bitcoin_core_sv2: Bitcoin Core v32 by @plebhash in #911- chore(deps): update stratum-core to 73c7803 by @SV2-bot in #964
- chore(deps): update stratum-core to d4244eb by @SV2-bot in #965
- chore(deps): update stratum-core to a9f886d by @SV2-bot in #966
- chore(deps): update stratum-core to 7067d56 by @SV2-bot in #967
- chore(deps): update stratum-core to bb0bae0 by @SV2-bot in #969
- chore(deps): update stratum-core to a86d5af by @SV2-bot in #970
- fix JDC custom job stages and the state they leave behind by @GitGab19 in #949
- chore(deps): update stratum-core to 7b85f90 by @SV2-bot in #972
- chore(deps): update stratum-core to 59ba5d2 by @SV2-bot in #973
- fix: keep invalid hashrates and targets away from the upstream by @lucasbalieiro in #957
New Contributors
Full Changelog: v0.8.0...v0.9.0