Repository navigation
Releases
v1.13.0
General release information
Highlights of this release:
This release closes the buffer_sv2, codec_sv2 and framing_sv2 audit trackers with a hardening pass over the buffer pool and the codec, renames Mining and Template Distribution message fields to follow the spec cleanup, and lets channels_sv2 server channels serve application-supplied jobs. Every published crate that changed takes an incompatible version bump, except noise_sv2, which only gains a re-export.
Notable highlights include:
mining_sv2andtemplate_distribution_sv2message fields were renamed to match the spec:SetTarget.maximum_targetis nowtarget,UpdateChannel.maximum_targetismax_target,min_ntimeisntime_startonNewMiningJob,NewExtendedMiningJob,SetNewPrevHashandSetCustomMiningJob, and the TDPSetNewPrevHash/SubmitSolutionheader fields arentime_start,ntimeandnonce. Theinvalid-min-ntimeerror code becameinvalid-ntime-start. Nothing changes on the wire.buffer_sv2received an extensive hardening pass over the pool: slot bookkeeping and mode switches were fixed, pool memory is kept alive while a slice points into it, slices are copied on clone, capacities are checked without overflowing, and the API now separates reserving space from committing written bytes.get_writable,get_data_by_ref,danger_set_start,droppableand theWritetrait were removed. A randomized model test exercises slice lifetimes against the pool.codec_sv2andframing_sv2close their audit trackers: encoders reject frames whose encoded length a header cannot declare,MessageFrame::encode_intoerrors on a payload shorter than its header declares, and the noise decoder decrypts the header and each payload chunk as soon as it is buffered instead of holding up to 16 MiB of ciphertext.Decoded::IncompleteandDecrypted::Incompleteno longer carry a byte count,SerializedFrame::from_partswas removed, and every encoder and decoder gained awith_capacityconstructor.channels_sv2server channels can now serve prebuilt jobs: aPrebuiltJobcarrying theNewExtendedMiningJobwire fields (including its ownntime_start) goes intoon_prebuilt_jobon group, standard and extended channels, andactivate_future_job(job_id, chain_tip)activates a future job without a Template Distribution message. Standard jobs now keep their coinbase bytes and exposeget_origininstead ofget_template.channels_sv2fixed several share and job defects: standard jobs installed from a group channel no longer duplicate the template's coinbase outputs, a reusedjob_idinadd_future_jobnow releases the replaced job's extranonce prefixes and keeps the future-job cap honest,BlockFoundwork credit is capped at the difficulty the hash proved, a block-finding share now counts towardbest_diff,set_targetrefuses a target above the channel'smax_target, andget_job_target(job_id)exposes the per-job target a share is validated against.channels_sv2coinbase handling: the witness reserved value, marker and flag are only added when the template carries a witness commitment, so blocks found on templates without one are no longer rejected asunexpected-witness, andtry_strip_bip141refuses coinbases with more than one input.binary_sv2validatesF32values during serialization (NaN, infinities and negative values returnError::InvalidF32) and bounds theDebugoutput ofSeq0255andSeq064K.parsers_sv2rejects TLV values longer than the length field can declare:Tlv::newreturns aResult, andTlvErrorgainsValueTooLongandLengthMismatch.sv1_apiserializesversion-rolling.min-bit-countinmining.configureas a JSON integer, as BIP 310 requires.noise_sv2re-exports the aeadBuffertrait asAeadBuffer.- Fuzzing: structured generators cover the SV2 data types and every common, job declaration, mining and template distribution message.
Crate changes
stratum-core
crate version was bumped from 0.6.0 to 0.7.0
channels_sv2
crate version was bumped from 8.0.0 to 9.0.0
binary_sv2
crate version was bumped from 7.0.0 to 8.0.0
buffer_sv2
crate version was bumped from 3.0.1 to 4.0.0
codec_sv2
crate version was bumped from 7.0.0 to 8.0.0
framing_sv2
crate version was bumped from 8.0.0 to 9.0.0
noise_sv2
crate version was bumped from 2.0.0 to 2.1.0
sv1_api
crate version was bumped from 6.0.0 to 7.0.0
stratum_translation
crate version was bumped from 0.5.0 to 0.6.0
parsers_sv2
crate version was bumped from 0.6.0 to 0.7.0
handlers_sv2
crate version was bumped from 0.6.0 to 0.7.0
extensions_sv2
crate version was bumped from 0.3.0 to 0.4.0
common_messages_sv2
crate version was bumped from 9.0.0 to 10.0.0
mining_sv2
crate version was bumped from 12.0.0 to 13.0.0
job_declaration_sv2
crate version was bumped from 10.0.0 to 11.0.0
template_distribution_sv2
crate version was bumped from 7.0.0 to 8.0.0
What's Changed
- Patch stratum-core in the sv2-apps workspace root by @bit-aloo in #2401
- rename message fields, aligning with spec cleanup by @plebhash in #2368
- fix(sv1_api): serialize configure min-bit-count as integer by @cfilipescu in #2369
channels_sv2: fix group -> standard job creation by @plebhash in #2411- docs(agents): define a schema for issues triaged from audit findings by @plebhash in #2417
- fix(channels_sv2): handle a reused job_id in add_future_job by @Jolah1 in #2420
- docs(agents): keep the fix out of audit issues by @plebhash in #2423
buffer_sv2hardening by @bit-aloo in #2408- fix(parsers-sv2)!: reject TLV values the length field cannot declare by @Christopherdominic in #2431
- codec-sv2, framing-sv2: bound encoded frames and decrypt noise chunks as they arrive by @bit-aloo in #2427
- fix(binary-sv2): bound sequence Debug output by @Chibey-max in #2428
- add generators to fuzz target by @lucasbalieiro in #2350
- feat(channels_sv2)!: serve prebuilt jobs on server channels by @plebhash in #2445
- fix(channels-sv2): cap BlockFound work credit at proven difficulty by @plebhash in #2406
- fix(mining_sv2, job_declaration_sv2): correct two Display format strings by @amartya1523 in #2449
- docs: point example links at sv2/ and fix the channel_msg bit wording by @amartya1523 in #2450
- feat(channels-sv2): add get_job_target to server channels by @plebhash in #2455
- fix(channels-sv2): refuse set_target above the channel's max_target by @plebhash in #2456
- docs(channels-sv2): clarify version rolling policy by @Christopherdominic in #2429
- fix(channels_sv2): count a block-finding share toward best_diff by @amartya1523 in #2447
- fix(channels_sv2)!: let a prebuilt job carry its own ntime_start by @plebhash in #2452
- fix(channels_sv2)!: coinbase witness handling gaps by @Jolah1 in #2457
- feat(binary-sv2)!: validate F32 values during serialization by @lucasbalieiro in #2436
New Contributors
- @cfilipescu made their first contribution in #2369
- @Jolah1 made their first contribution in #2420
- @Christopherdominic made their first contribution in #2431
- @Chibey-max made their first contribution in #2428
- @amartya1523 made their first contribution in #2449
Full Changelog: v1.12.0...v1.13.0
v1.12.0
General release information
Highlights of this release:
This release is dominated by a deep hardening pass over channels_sv2, a breaking refactor of the codec and framing layer, BIP323 adaptations across the protocol stack, and the removal of AES-256-GCM from noise_sv2. Every published crate that changed takes an incompatible version bump, so downstream consumers should expect to adapt.
Notable highlights include:
channels_sv2received an extensive correctness and hardening pass covering share validation, job lifecycle, and coinbase construction. Share validation now enforcesmin_ntimeandnTimebounds across all channel types, share dedup and extranonce-prefix rotation were hardened, and several coinbase defects that could yield consensus-invalid coinbases were fixed, including undersized BIP141 parts andscriptSigsize/serialization errors.channels_sv2job storage is now bounded on every axis: future templates, past jobs, replaced group jobs, client future jobs,rejected_shares, andseen_shares. The past-jobs cap is configurable per channel with a measured default.channels_sv2fixed several panics and state-machine gaps, including chain-tip transition handling,StandardChannel::on_new_group_channel_jobon malformed upstream coinbases, anExtranoncePrefixallocation released while live jobs still referenced its bytes, and arithmetic hardened against overflow, underflow, and division by zero.- BIP323 adaptations landed across the stack: the subprotocol crates,
sv1_api,stratum_translation, andchannels_sv2, with a supportingEllSwiftPubKeytype alias added tobinary_sv2. codec_sv2andframing_sv2were refactored: theFrame<T, B>enum was removed and split intoMessageFrame<T>andSerializedFrame<B>,HandShakeFramebecameHandshakeMessage, and aSizeHintenum was introduced.binary_sv2split its inner representation into owned and reference variants, addedB032as an encodable field, made merkle-root computation return[u8; 32]without intermediate allocation, and bounded and redacted oversized values in error output.noise_sv2dropped its AES-256-GCM support and theaes-gcmdependency, leaving ChaCha20-Poly1305 as the sole cipher, alongside a broader hardening pass.sv1_apiexposed all message properties, gained an associated error type on its exposed trait, and now supports typed submit errors and extranonce prefix updates together withchannels_sv2.stratum_translationno longer produces rounded Stratum V1 difficulty targets.- New standardized
error_codeconstants were added for protocol version mismatch incommon_messages_sv2and for channel capacity exhaustion inmining_sv2. - CI now enforces version bumps of modified crates against the highest version published on crates.io, integration tests were accelerated, and a false-green skip when no companion PR is present was fixed.
Crate changes
stratum-core
crate version was bumped from 0.5.1 to 0.6.0
channels_sv2
crate version was bumped from 7.0.0 to 8.0.0
binary_sv2
crate version was bumped from 6.0.0 to 7.0.0
derive_codec_sv2
crate version was bumped from 1.1.3 to 2.0.0
codec_sv2
crate version was bumped from 6.0.0 to 7.0.0
framing_sv2
crate version was bumped from 7.0.0 to 8.0.0
noise_sv2
crate version was bumped from 1.4.2 to 2.0.0
sv1_api
crate version was bumped from 5.0.0 to 6.0.0
stratum_translation
crate version was bumped from 0.4.1 to 0.5.0
parsers_sv2
crate version was bumped from 0.5.0 to 0.6.0
handlers_sv2
crate version was bumped from 0.5.0 to 0.6.0
extensions_sv2
crate version was bumped from 0.2.0 to 0.3.0
common_messages_sv2
crate version was bumped from 8.0.0 to 9.0.0
mining_sv2
crate version was bumped from 11.0.0 to 12.0.0
job_declaration_sv2
crate version was bumped from 9.0.0 to 10.0.0
template_distribution_sv2
crate version was bumped from 6.0.0 to 7.0.0
What's Changed
- channels_sv2: keep failed group channel additions atomic by @par1ram in #2234
- channels_sv2: reject undersized BIP141 coinbase parts by @par1ram in #2232
- allow access to all sv1 message props by @coleFD in #2224
CONTRIBUTING.md: anchor dev calls on UTC instead of CET by @plebhash in #2245- split inner to owned and ref variants by @bit-aloo in #2225
channels_sv2: enforcemin_ntimeonvalidate_share(all channel types) by @plebhash in #2241- add BIP323 adaptations to
subprotocolcrates by @plebhash in #2235 - Add assoc error type to sv1 exposed trait by @bit-aloo in #2268
sv1_api+stratum-translation: BIP323 adaptations by @plebhash in #2237channels_sv2: BIP323 adaptations + fix version rolling validation by @plebhash in #2236- add
Sv2string to coinbase tag standard by @plebhash in #2226 channels_sv2: document why coinbasescriptSiglength prefix is always 1 byte by @plebhash in #2244channels_sv2: fix clientset_targetdoes not refresh targets of already-queued future jobs by @plebhash in #2257- Make merkle root from path return [u8; 32] by @bit-aloo in #2285
channels_sv2: drop future job superseded by reusedtemplate_idby @plebhash in #2267- Dont allocate vec for concat in merkle calculation by @bit-aloo in #2286
- binary_sv2: hex encode only the displayed prefix of B016M by @bit-aloo in #2284
- Remove aes256gcm from noise_sv2 by @bit-aloo in #2270
channels_sv2: harden arithmetic against overflow, underflow and division by zero by @plebhash in #2239channels_sv2: bound future-job storage on client channels by @plebhash in #2266channels_sv2: bound clientrejected_sharesmap by @plebhash in #2263channels_sv2: fix chain-tip transition correctness gaps in the job state machine by @plebhash in #2255channels_sv2: fix clientStandardChannel::on_new_group_channel_jobpanics on malformed upstream coinbase by @plebhash in #2259channels_sv2: fixExtranoncePrefixallocation released while live jobs still reference its bytes by @plebhash in #2261channels_sv2: fix coinbasescriptSigsize/serialization defects that yield consensus-invalid coinbases by @plebhash in #2243common_messages_sv2: add protocol-version-mismatchSetupConnectionErrorerror_codeby @plebhash in #2287- speedup integration tests (on companion PRs) by @plebhash in #2293
- fix rounded Sv1 difficulty target by @GitGab19 in #2291
- Remove vec slice encodable binary sv2 by @bit-aloo in #2295
channels_sv2: bound job-storage retention (future templates, past jobs, replaced group jobs) by @plebhash in #2290- add B032 as encodable field by @bit-aloo in #2306
- return unclaimed bytes and not remove them by @bit-aloo in #2305
- Noise sv2 hardening by @bit-aloo in #2283
- add
ERROR_CODE_OPEN_MINING_CHANNEL_CHANNEL_CAPACITY_EXHAUSTEDtomining_sv2by @GitGab19 in #2308 - Add Size hint enum by @bit-aloo in #2294
channels_sv2: enforce sharenTimebounds, boundseen_shares, and fix job-ID/chain-tip/coinbase validation gaps (plustemplate_distribution_sv2docs fix)) by @plebhash in #2303- fix(ci): prevent false green IT skip when no companion is present by @GitGab19 in #2320
- binary-sv2: bound and redact the ValueExceedsMaxSize sample by @bit-aloo in #2316
- Acknowledge field and struct visibility in parser by @bit-aloo in #2328
channels_sv2: make the past-jobs cap configurable w/ a 'good' default value by @gimballock in #2307binary_sv2: add EllSwiftPubKey type alias by @plebhash in #2351- add
AGENTS.mdby @plebhash in #2366 channels_sv2: harden share dedup, extranonce-prefix rotation, BIP141 witness framing, and job/target validation by @plebhash in #2336- Reject non-finite input in hash_rate_to_target by @gimballock in #2221
- Binary_sv2 combined loupe fixes by @bit-aloo...
v1.11.1
General release information
Highlights of this release:
This patch release focuses on improving Stratum V1 difficulty conversion correctness and maintaining crate version consistency.
Notable highlights include:
stratum_translationno longer rounds up Stratum V1 difficulty values during conversion, ensuring more accurate target calculations and better compatibility with existing Stratum V1 implementations.stratum-corereceived a patch version bump to maintain version consistency across the workspace following the bug fix.
Crate changes
stratum-core
crate version was bumped from 0.5.0 to 0.5.1
stratum_translation
crate version was bumped from 0.4.0 to 0.4.1
What's Changed
- Do not round up SV1 difficulties by @ckolivas in #2227
- bump PATCH of
stratum-coreby @GitGab19 in #2230
New Contributors
Full Changelog: v1.11.0...v1.11.1
v1.11.0
General release information
Highlights of this release:
This release focuses on binary_sv2 reliability and cleanup, safer Sv1 parsing and conversion APIs, improved Sv1 difficulty handling, and expanded fuzz-testing coverage.
Notable highlights include:
binary_sv2received several reliability and maintainability improvements, including absolute paths in procedural macro expansions, proper compile-time errors from proc macros, restoredstdbuild support, and broad cleanup of unused code and internal APIs.sv1_apiparsing and conversion paths were made safer by removing severalunwrapcalls, introducing theBadBytesConvertparsing error, and usingbitcoin::hashes::hexfor hexadecimal conversions.HexBytesandHexU32Benow rely on their standard serialization and deserialization implementations instead of customserdeimplementations, simplifying the Sv1 API and reducing duplicated conversion logic.stratum-translationadded integer power-of-two Sv1 difficulty conversion, improving difficulty and target conversion behavior between Stratum V1 and Stratum V2.sv1_apigained dedicated fuzz targets, expanding automated coverage of parsing and protocol-handling edge cases.channels_sv2::server::jobs::job_store::JobStorehas been deprecated as part of the ongoing refinement and simplification of channel-management APIs.- CI execution was accelerated by adopting
cargo binstallfor tool installation.
Crate changes
binary_sv2
crate version was bumped from 5.0.0 to 6.0.0
parsers_sv2
crate version was bumped from 0.4.0 to 0.5.0
sv1_api
crate version was bumped from 4.0.0 to 5.0.0
stratum-core
crate version was bumped from 0.4.0 to 0.5.0
stratum_translation
crate version was bumped from 0.3.0 to 0.4.0
channels_sv2
crate version was bumped from 6.0.0 to 7.0.0
codec_sv2
crate version was bumped from 5.0.0 to 6.0.0
extensions_sv2
crate version was bumped from 0.1.0 to 0.2.0
framing_sv2
crate version was bumped from 6.0.1 to 7.0.0
handlers_sv2
crate version was bumped from 0.4.0 to 0.5.0
common_messages_sv2
crate version was bumped from 7.2.0 to 8.0.0
job_declaration_sv2
crate version was bumped from 8.0.0 to 9.0.0
mining_sv2
crate version was bumped from 10.0.0 to 11.0.0
template_distribution_sv2
crate version was bumped from 5.1.0 to 6.0.0
derive_codec_sv2
crate version was bumped from 1.1.2 to 1.1.3
What's Changed
- Add absolute path in binary sv2 proc macro by @shourya742 in #2185
- Fix binary_sv2 std build by @shourya742 in #2187
- Remove unused entities in
binary_sv2+common_messages_sv2+template_distribution_sv2by @shourya742 in #2189 - Use compile error in proc macro by @shourya742 in #2186
- deprecate
channels_sv2::server::jobs::job_store::JobStoreby @plebhash in #2190 - remove unwrap from
sv1_api::Subscribe::TryFromby @lucasbalieiro in #2198 - adjust hex conversion on sv1 to use
bitcoin::hashes::hexby @lucasbalieiro in #2205 - add
BadBytesConverttoParsingMethodErrorinsv1_apiby @lucasbalieiro in #2207 - add integer power-of-two Sv1 difficulty conversion in
stratum-translationby @GitGab19 in #2210 - accelerate CI via
cargo binstallby @plebhash in #2209 - remove custom impls of
serde::Deserializeandserde::Serializefor HexBytes and HexU32Be by @lucasbalieiro in #2212 - remove
unwrapcalls when usingas_u64by @lucasbalieiro in #2219 - Binary sv2 cleanup by @shourya742 in #2200
- add fuzz targets for sv1 crate by @lucasbalieiro in #2220
Full Changelog: v1.10.0...v1.11.0
v1.10.0
General release information
This release focuses on share accounting improvements, channel-management API refinements, and protocol/specification alignment.
Notable highlights include:
channels_sv2::server::share_accountingnow tracks rejected shares alongside accepted shares, while share-work accounting has been updated to useu64where appropriate for improved correctness and scalability.channels_sv2::serveradded astable_hashrateflag, providing additional control over hashrate stability behavior.- Standardized
error_codeconstants were introduced across the protocol implementation. channels_sv2replaced reference-based getters with accessor APIs, simplifying the public API and improving encapsulation.- Custom-work mining received stability improvements, fixing a share-validation panic after
SetNewPrevHashand correcting chain-tip transition handling for custom mining jobs. - Specification compatibility was improved through protocol-alignment fixes, ensuring closer adherence to the latest Stratum V2 specifications.
Crate changes
stratum-core
crate version was bumped from 0.3.0 to 0.4.0
channels_sv2
crate version was bumped from 5.0.0 to 5.1.0
mining_sv2
crate version was bumped from 9.0.0 to 10.0.0
job_declaration_sv2
crate version was bumped from 7.0.0 to 8.0.0
template_distribution_sv2
crate version was bumped from 5.0.0 to 5.1.0
common_messages_sv2
crate version was bumped from 7.1.0 to 7.2.0
parsers_sv2
crate version was bumped from 0.3.0 to 0.4.0
handlers_sv2
crate version was bumped from 0.3.0 to 0.4.0
stratum_translation
crate version was bumped from 0.2.0 to 0.3.0
What's Changed
- add
stable_hashrateflag tochannels_sv2::serverby @plebhash in #2152 - add
error_codeconstants by @plebhash in #2151 - represent share work as
u64(where appropriate) by @plebhash in #2138 channels_sv2::server::share_accountingkeeps track of rejected shares by @plebhash in #2149- refine
CONTRIBUTING.mdwith versioning exception tostratum-coreby @plebhash in #2158 - fix validate_share panic after on_set_new_prev_hash in custom-work mode by @rx18-eng in #2156
- add
ERROR_CODE_OPEN_MINING_CHANNEL_EXTENDED_CHANNELS_NOT_SUPPORTED_FOR_STANDARD_JOBSby @plebhash in #2162 - Revert "refine
CONTRIBUTING.mdwith versioning exception tostratum-core" by @plebhash in #2160 - fix specs incompatibilities by @GitGab19 in #2165
- Fix custom mining job chain-tip transitions by @0xjc65eth in #2164
channels_sv2: replace ref getters with accessor APIs by @plebhash in #2161
New Contributors
- @rx18-eng made their first contribution in #2156
- @0xjc65eth made their first contribution in #2164
Full Changelog: v1.9.0...v1.10.0
v1.9.0
General release information
Highlights of this release:
This release focuses on channels_sv2 extranonce and target improvements, fallible Sv1 APIs, and stronger framing/codec validation.
Notable highlights include:
channels_sv2now clamps standard and extended channel targets to the declaredmax_targetduring channel creation and vardiff updates, fixing low-hashrate miners getting stuck when vardiff computed an easier target than allowed.channels_sv2addedextranonce_manager, withExtranonceAllocatorand typed prefixes backed by a shared bitmap. It supports pool allocation and proxy sub-allocation from upstream prefixes, prevents standard/extended prefix overlap, and frees slots when prefixes are dropped.- Client share accounting now tracks rejected shares by upstream
error_code, rather than only keeping a single rejected-share count. sv1_apiclient/server trait methods now returnResults across authorization, subscription, submit handling, extranonce/version-rolling state, status updates, and request-id tracking, allowing missing-state errors to propagate.common_messages_sv2addedhas_declare_tx_data(flags)for checking the Job DeclarationDECLARE_TX_DATAsetup flag.- Framing and codec coverage improved with
quickcheckproperties for SV2 headers/frames/handshake framing, plus Criterion benchmarks for encoding, decoding, serialization, Noise paths, and buffer-pool behavior. - Maintenance improved by committing
Cargo.lock, dispatchingstratum/mainupdates tosv2-apps, and documenting crate versioning rules for SemVer and public dependency exposure.
Crate changes
stratum-core
crate version was bumped from 0.2.1 to 0.3.0
channels_sv2
crate version was bumped from 4.0.0 to 5.0.0
mining_sv2
crate version was bumped from 8.0.0 to 9.0.0
common_messages_sv2
crate version was bumped from 7.0.0 to 7.1.0
parsers_sv2
crate version was bumped from 0.2.2 to 0.3.0
handlers_sv2
crate version was bumped from 0.2.2 to 0.3.0
sv1_api
crate version was bumped from 3.0.0 to 4.0.0
stratum_translation
crate version was bumped from 0.1.3 to 0.2.0
What's Changed
- ci: dispatch stratum main updates to sv2-apps by @plebhash in #2121
- Fix CI by @GitGab19 in #2127
- Add prop test to framing by @shourya742 in #2085
- contribution guidelines for crate versioning by @plebhash in #2133
- Make sv1 server trait methods return results by @shourya742 in #2134
- bump sv1-api dependent crate by @shourya742 in #2137
- channels_sv2: clamp target to max_target instead of erroring by @vnprc in #2118
- Add codec benches by @shourya742 in #2058
- Add
extranonce_managermodule inchannels_sv2by @GitGab19 in #2098 - channels_sv2::client::share_accounting keeps track of
error_codefor rejected shares by @plebhash in #2139 - feat(common-messages): add has_declare_tx_data helper function by @wcqy-ye in #2129
- use rust 1.85 in
release-libsworkflow by @GitGab19 in #2144 - add override step to
release-libsworkflow by @GitGab19 in #2145 - update error handling in
release-libs.shby @GitGab19 in #2146
New Contributors
Full Changelog: v1.8.0...v1.9.0
v1.8.0
General release information
Highlights of this release:
This release focuses on protocol correctness, share-accounting fixes, and stronger testing across the Stratum stack.
Notable highlights include:
channels_sv2received the biggest functional improvements in this release: client-side share accounting now defers accepted-share totals to upstream acknowledgements, server-side batch accounting was corrected, duplicate shares are rejected even for block-finding submissions, andblocks_foundmetrics were added.- Several SV2 protocol crates were aligned more closely with the specification, including fixes to
channel_bit/message_typedefinitions, movingCHANNEL_BIT_RECONNECTtocommon_messages_sv2, and renaming the Job Declaration channel-bit constant toCHANNEL_BIT_PUSH_SOLUTION. sv1_apiis safer and more robust: invalid Merkle-node conversions and invalid version-mask lengths now return errors instead of panicking.- Reliability and developer confidence improved with backend-agnostic codec encoding, new framing benchmarks, fuzz targets for SV2 datatypes and
noise_sv2, codec property tests, CI cleanup, and workspace-level dependency consolidation.
Crate changes
stratum-core
crate version was bumped from 0.2.0 to 0.2.1
buffer_sv2
crate version was bumped from 3.0.0 to 3.0.1
handlers_sv2
crate version was bumped from 0.2.1 to 0.2.2
noise_sv2
crate version was bumped from 1.4.1 to 1.4.2
parsers_sv2
crate version was bumped from 0.2.1 to 0.2.2
common_messages_sv2
crate version was bumped from 6.0.2 to 7.0.0
template_distribution_sv2
crate version was bumped from 4.0.2 to 5.0.0
channels_sv2
crate version was bumped from 3.0.0 to 4.0.0
stratum-translation
crate version was bumped from 0.1.2 to 0.1.3
mining_sv2
crate version was bumped from 7.0.0 to 8.0.0
job_declaration_sv2
crate version was bumped from 6.0.0 to 7.0.0
sv1_api
crate version was bumped from 2.1.3 to 3.0.0
codec_sv2
crate version was bumped from 4.0.1 to 5.0.0
What's Changed
- sv1: remove third-party hex crate dependency by @8144225309 in #2054
- Add btrust logo to readme by @pavlenex in #2061
- Add machete to CI by @shourya742 in #2073
- feat(channels): add set_nominal_hashrate to client ExtendedChannel by @gimballock in #2077
- Fix ci by @shourya742 in #2081
- move dependencies to workspace root by @shourya742 in #2082
- Make encoder backend agnostic by @shourya742 in #2052
- Add framing benches by @shourya742 in #2051
- sv1: return errors instead of panicking in MerkleNode TryFrom by @ashishkrshaw in #2084
- defer
channels_sv2::clientshare acceptance to upstream acknowledgement by @plebhash in #2090 - feat(channels): add blocks_found metric to ShareAccounting by @gimballock in #2088
- Check for duplicate share on block found by @GitGab19 in #2097
- fix mismatches in
channel_bitandmessage_typeaccording to the specs by @lucasbalieiro in #2095 - clarify the reporting process in
SECURITY.mdby @lucasbalieiro in #2100 - prevent arithmetic overflow in certificate validity calculation by @lucasbalieiro in #2104
- fix
channels_sv2::server::ShareAccounting::update_share_accountingby @plebhash in #2102 - Fix version mask unvalid len by @exd02 in #2109
- Add fuzz targets for sv2 datatypes by @lucasbalieiro in #2074
- add fuzz target for the
noise_sv2crate. by @lucasbalieiro in #2106 - add codec prop test by @shourya742 in #2087
channels-sv2: refine client share accounting counters by @plebhash in #2114
New Contributors
- @8144225309 made their first contribution in #2054
- @gimballock made their first contribution in #2077
- @ashishkrshaw made their first contribution in #2084
- @exd02 made their first contribution in #2109
Full Changelog: v1.7.0...v1.8.0
v1.7.0
General release information
Highlights of this release:
- updated protocol crates to be aligned with latest breaking GROUP CHANNEL changes in the Sv2 specification (see stratum-mining/sv2-spec#162)
- Extended Channels can now be grouped into Group Channels, bringing them in line with the long-standing behavior of Standard Channels
- fuzzing coverage expanded to all Sv2 messages
- multiple improvements on jobs management in
channels_sv2 - benchmarking fixed on
buffer_sv2, and also added tonoise_sv2, laying the groundwork for more systematic performance analysis
Crate changes
stratum-core
crate version was bumped from 0.1.0 to 0.2.0
channels_sv2
crate version was bumped from 2.0.0 to 3.0.0
codec_sv2
crate version was bumped from 4.0.0 to 4.0.1
handlers_sv2
crate version was bumped from 0.2.0 to 0.2.1
binary_sv2
crate version was bumped from 5.0.0 to 5.0.1
mining_sv2
crate version was bumped from 6.0.0 to 7.0.0
framing_sv2
crate version was bumped from 6.0.0 to 6.0.1
parsers_sv2
crate version was bumped from 0.2.0 to 0.2.1
stratum-translation
crate version was bumped from 0.1.1 to 0.1.2
noise_sv2
crate version was bumped from 1.4.0 to 1.4.1
job_declaration_sv2
crate version was bumped from 5.0.2 to 6.0.0
buffer_sv2
crate version was bumped from 2.0.0 to 3.0.0
sv1_api
crate version was bumped from 2.1.2 to 2.1.3
What's Changed
- update
run-integration-tests.shscripts to patch the sources from crates.io by @lucasbalieiro in #2012 - add
SECURITY.mdby @GitGab19 in #2016 - noise-sv2: add 10s clock skew tolerance to signature verification by @lucasbalieiro in #2017
- Remove deprecated actions-rs from workflow by @shourya742 in #2024
- introduce fuzz coverage for all
subprotocol::common_messages_sv2by @lucasbalieiro in #2020 - avoid calling
mark_past_jobs_as_stale2x by @plebhash in #2025 - fix integration-test script patch by @lucasbalieiro in #2027
- ci: detect companion PR changes and conditionally trigger integration tests by @lucasbalieiro in #2026
JobStoretrait methods return owned types instead of refs by @plebhash in #2011- make
run-integration-tests.shupdate the integration tests Cargo.lock. by @lucasbalieiro in #2031 - rename
DeclareMiningJob.tx_ids_listtowtxid_listby @plebhash in #2029 - associate
TargettoJoband use it for share validation (instead of channelTarget) by @plebhash in #2000 - make SupportedChannelTypes Copy by @coleFD in #2033
- Add miri workflow by @shourya742 in #2023
- Remove profile from workspace toml by @shourya742 in #2036
- Add rust-toolchain.toml by @shourya742 in #2034
- fuzz: refactor SV2 message fuzzing and expand coverage by @lucasbalieiro in #2028
- Avoid recursion when generating keypair by @shourya742 in #2038
- Add context to sv1 handler by @shourya742 in #2047
- add
rust-analyzertorust-toolchain.tomlby @plebhash in #2048 - implements the Display trait for sv1 messages by @lucasbalieiro in #2050
- add Group Channel adaptations on
channels_sv2+mining_sv2by @plebhash in #2044 - Add noise bench by @shourya742 in #2037
- Arrange buffer-sv2 fuzz and bench correctly by @shourya742 in #2035
- bump PATCH of
binary_sv2by @GitGab19 in #2055 - bump sv1_api version by @plebhash in #2056
Full Changelog: v1.6.0...v1.7.0
v1.6.0
General release information
Highlights of this release:
- added support for Sv2 Extensions via the introduction of
extensions_sv2crate, and some adaptations tohandlers_sv2andparsers_sv2 - started actively fuzzing and performing regression tests against the fuzzing corpus
- many crates were deprecated, namely:
binary_codec_sv2, with its functionality incorporated intobinary_sv2roles_logic_sv2, with some of its funcitonality inherited by crates likechannels_sv2,handlers_sv2,parsers_sv2, andstratum-apps(onsv2-appsrepo)network_helpers_sv2, with some of its functionality inherited bystratum-appscrate (onsv2-appsrepo)rpc_sv2, with some of its functionality inherited bystratum-appscrate (onsv2-appsrepo)bip32_derivationerror_handling
Crate changes
channels_sv2
crate version was bumped from 1.0.2 to 2.0.0
codec_sv2
crate version was bumped from 3.0.1 to 4.0.0
handlers_sv2
crate version was bumped from 0.1.0 to 0.2.0
binary_sv2
crate version was bumped from 4.0.0 to 5.0.0
mining_sv2
crate version was bumped from 5.0.1 to 6.0.0
framing_sv2
crate version was bumped from 5.0.2 to 6.0.0
parsers_sv2
crate version was bumped from 0.1.2 to 0.2.0
What's Changed
- Improve display for u32 fields in protocol messages by @lucasbalieiro in #1919
- Enforce upstream channel opening by @shourya742 in #1917
- add readme to handlers_sv2 by @shourya742 in #1920
- chore(IT): remove unused imports in integration test by @shourya742 in #1922
- Fix extranonce size during client side channel initialization by @shourya742 in #1923
- Fix extranonce range calculation in JDC by @shourya742 in #1925
- Disable ascii for file by @shourya742 in #1929
- tProxy: improve Sv1Server messages received in downstream.rs by @GitGab19 in #1930
- ci: migrate from deprecated macos-13 to macos-latest ARM64 runner by @GitGab19 in #1936
channels_sv2::outputs::deserialize_outputsby @plebhash in #1934- Cleanup roles logic sv2 utils by @lucasbalieiro in #1928
- deprecate
mining-device-sv1in favor ofminerdby @plebhash in #1937 - mining-device-sv1 removal from
coverage-roles.shscript by @GitGab19 in #1942 - Make handlers context aware by @shourya742 in #1939
- Fix CI build failure by pinning generic-array to 0.14.7 by @shourya742 in #1945
- Refactor Pool by @shourya742 in #1926
- refine extranonce assumptions by @plebhash in #1944
- Improve crates re-exports by @GitGab19 in #1931
- Save only future template in pool by @shourya742 in #1949
- deprecate
roles_logic_sv2,benches,error_handling,utils::bip32_derivationby @lucasbalieiro in #1947 - remove deprecated crate from coverage script by @lucasbalieiro in #1957
- remove noisy log when downloading the
minerdbinary by @lucasbalieiro in #1954 - update ITF to use TP
v.0.1.19by @GitGab19 in #1955 - Remove binary codec sv2 by @shourya742 in #1952
- migrate
mining_sv2::Targettobitcoin::Targetby @icarusmaximal in #1950 - remove unnecessary files by @lucasbalieiro in #1960
- revert unnecessary version bumps by @plebhash in #1959
- Remove unreachable macro and add share validation error variant in Pool by @shourya742 in #1962
- make roles use
bitcoinfromstratum-apps::stratum-coreby @GitGab19 in #1963 - improve share validation by @plebhash in #1966
- fix how
SubmitShares.Successis being crafted by @plebhash in #1968 - Correct Vardiff insertions by @shourya742 in #1971
- New stratum-core structure by @lucasbalieiro in #1860
- update code coverage workflow by @lucasbalieiro in #1979
- fix channel_msg bit check in sv2 frame header by @vnprc in #1982
- fix potential arithmetic overflows on definition of
impl_into_encodable_field_for_seqofbinary_sv2by @plebhash in #1985 - refactor: improve fuzz test suite with targeted harnesses by @erickcestari in #1973
- Add message variant for mining handler by @shourya742 in #1996
- add boundary checks to decodable proc_macro by @lucasbalieiro in #1989
- add github action to run a fuzz regression test by @lucasbalieiro in #1992
- fuzz: fix wrong
clonewhen callingto_bytesby @lucasbalieiro in #1999 - fix outdated Rust Docs for
ShareValidationResultby @plebhash in #2004 - properly mark past jobs as stale on server channels by @plebhash in #2002
- Add support for extensions negotiations,
TLV, andWorker-Specific Hashrate Trackingextension by @GitGab19 in #1983 - Fix version bumps in
derive_codec_sv2+ remove unused dependencies inextensions_sv2by @GitGab19 in #2005 - remove dev-dependencies from
extensions_sv2by @GitGab19 in #2006 - add
extensions_sv2andstratum-coreto semver-check workflow by @GitGab19 in #2007 - fix
stratum-corepath onrelease-libs.yamlby @plebhash in #2009
New Contributors
- @icarusmaximal made their first contribution in #1950
- @vnprc made their first contribution in #1982
- @erickcestari made their first contribution in #1973
Full Changelog: v1.5.0...v1.6.0
v1.5.0
General release information
Highlights of this release:
-
Translator Proxy was re-written with new functionality, namely:
- aggregated and non-aggregated modes
- optional vardiff
- ability to fallback
-
Job Declarator Client was re-written with new functionality, namely:
- allowing multiple downstream clients at the same time
- allowing downstream clients to establish Standard Channels
-
new
stratum-translationcrate modularizes Sv1 ↔ Sv2 translation logic -
BIP141 fields are now stripped from coinbase on Extended Jobs
-
new APIs added to
network_helpers_sv2, expanding ways it can be used
Crate changes
sv2_ffi
this crate was deprecated
roles_logic_sv2
crate version was bumped from 3.0.0 to 4.0.0
based on interactions with early adopters, some modules of roles_logic_sv2 were isolated into standalone crates, namely:
handlers_sv2parsers_sv2channels_sv2
handlers_sv2
new crate published at version 0.1.0
parsers_sv2
new crate published at version 0.1.1
channels_sv2
new crate published at version 0.1.0 and then bumped to 1.0.2
network_helpers_sv2
crate version was bumped from 4.0.0 to 4.0.1
stratum-common
crate version was bumped from 4.0.0 to 4.0.1
common_messages_sv2
crate version was bumped from 5.0.0 to 6.0.1
binary_codec_sv2
crate version was bumped from 2.0.0 to 3.0.0
binary_sv2
crate version was bumped from 3.0.0 to 4.0.0
framing_sv2
crate version was bumped from 5.0.0 to 5.0.1
codec_sv2
crate version was bumped from 2.1.0 to 3.0.1
mining_sv2
crate version was bumped from 4.0.0 to 5.0.1
job_declaration_sv2
crate version was bumped from 4.0.0 to 5.0.1
template_distribution_sv2
crate version was bumped from 3.0.0 to 4.0.1
sv1_api
crate version was bumped from 2.1.0 to 2.1.1
rpc_sv2
crate version was bumped from 1.1.0 to 1.1.1
PR List
- isolate
channels_sv2andparsers_sv2into standalone crates by @plebhash in #1795 - introduce custom difficulty TP on Integration Tests by @plebhash in #1760
- Fix broken Getting Started link in README by @Cyber-Lord in #1803
- Improve tracing defaults and add download warning log by @lucasbalieiro in #1807
- standardize rewards to pool/solo mining into a single
scriptPubKeyby @lucasbalieiro in #1800 - Rename
config-helperstoconfig_helpers_sv2and remove of unusedroles-logic-sv2by @GitGab19 in #1812 - Update rpc_sv2 version to 1.1.0 in Cargo.toml and Cargo.lock by @GitGab19 in #1815
- ci: add semver checks for config-helpers in workflow by @GitGab19 in #1813
- deprecate
test/scalecrate by @lucasbalieiro in #1809 - bump:
sv1_apiv1.0.1 → v2.0.0 by @GitGab19 in #1820 - add noise stream by @shourya742 in #1792
- Refactor handler by @shourya742 in #1806
- Update roles rust edition to 2021 by @lucasbalieiro in #1818
- remove pool and miner tag from
extranonce_prefixby @plebhash in #1824 - run clippy and fmt across codebase by @lucasbalieiro in #1830
- fix overlooked consequences of
SetupConnection.REQUIRES_WORK_SELECTIONby @plebhash in #1826 - allow updating Standard Channel Server state with Extended Job from Group Channel by @plebhash in #1828
- Disambiguate handler method names for client/server message processing by @shourya742 in #1831
- downgrade
roles_logic_sv2to 4.0.0 by @GitGab19 in #1836 - strip BIP141 from Extended Jobs by @plebhash in #1832
- feat: add stratum-translation library for SV1↔SV2 protocol translation by @GitGab19 in #1833
- Deprecate
sv2-fficrate by @GitGab19 in #1835 - fix sigops calculation for
CoinbaseOutputContraintsby @plebhash in #1838 - feat: add set_chain_tip method to client channels' APIs by @GitGab19 in #1839
- Finishes rust docs for
channel_sv2by @lucasbalieiro in #1817 - Turns
channel_sv2::client::*no_stdcompatible by @lucasbalieiro in #1840 - make
parsers_sv2no_stdcompatible by @lucasbalieiro in #1842 - fix
SetCustomMiningJobedge cases by @plebhash in #1845 channels_sv2adaptations for new JDC by @plebhash in #1846- enforce full allocation of template revenue on
JobFactory::new_coinbase_tx_prefix_and_suffixby @plebhash in #1849 - improve sniffer logging data by @lucasbalieiro in #1855
- fix the divergence of field names in DeclareMiningJob by @lucasbalieiro in #1856
- revert renaming
MAX_EXTRANONCE_LENby @plebhash in #1864 - Fix display trait behavior for
Str0255andB0255by @lucasbalieiro in #1865 - remove unnecessary Cargo.lock and add to .gitignore by @lucasbalieiro in #1868
- fix: remove unwrap in JDS by @GitGab19 in #1879
- chore: Clippy update by @shourya742 in #1888
- Improve handlers by @shourya742 in #1886
- Add close channel method to pool by @shourya742 in #1890
JobStoreas generic by @plebhash in #1884- implements display traits for sv1 messages by @lucasbalieiro in #1891
- Make vardiff pool statically dispatch by @shourya742 in #1896
- improve pool vardiff error logs by @plebhash in #1900
- Speed up (sv2 native) CPU miner by @Sjors in #1901
- New Job Declarator Client by @shourya742 in #1843
- fix: correct typo 'Startum' to 'Stratum' in V1 protocol documentation by @BRIGHTON-ASUMANI in #1893
- New Translator Proxy by @GitGab19 in #1791
- cover
handlers_sv2onrelease-libs.yamlby @plebhash in #1908 - deprecate channel_logic and job_creator modules from
roles_logic_sv2crate by @GitGab19 in #1906 - ci(msrv): enforce locked builds in MSRV workflow by @Sjors in #1905
- bump PATCH of
binary_sv2crate by @GitGab19 in #1909 - specify dependencies versions of
stratum_translationcrate by @GitGab19 in #1910 - Fix
stratum-commonv4.0.0 andrpc_sv2v1.1.0 version conflict by @GitGab19 in #1913 - bump PATCH for
codec_sv2+framing_sv2+parsers_sv2+common_messages_sv2by @plebhash in #1912
New Contributors
- @Cyber-Lord made their first contribution in #1803
- @BRIGHTON-ASUMANI made their first contribution in #1893
Full Changelog: v1.4.0...v1.5.0