{"meta":{"title":"D-Central \u2014 Stratum Share-Rejection \/ Error-Code Reference","description":"Machine-readable reference for 16 Stratum mining-protocol error codes (V1 numeric reject codes 20-25 and V2 string error reasons): message, cause, and fix.","generated":"2026-08-09T16:40:29+00:00","version":"1.0","license":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/","license_name":"CC BY 4.0","source":"https:\/\/d-central.tech\/stratum-error-codes\/","record_count":16,"disclaimer":"Stratum V1 reject codes follow the de-facto Slush\/BIP convention; the exact string a pool returns can vary. Stratum V2 reasons follow the SV2 specification. Verify against your pool and the SV2 spec."},"rows":[{"protocol":"v1","code":"20","message":"Other \/ Unknown","severity":"info","cause":"The pool's generic catch-all reject when no more specific code applies.","fix":"Check the pool dashboard and the miner log for the underlying reason; code 20 is usually a transient or pool-side condition rather than a hardware fault."},{"protocol":"v1","code":"21","message":"Job not found (stale)","severity":"low","cause":"The share referenced a job_id the pool has already retired \u2014 typically a new block or a clean_jobs notify arrived while the miner was still solving the old job, so the work went stale.","fix":"A small percentage of stale rejects is normal. Persistently high rates point to latency between miner and pool \u2014 use a geographically closer stratum endpoint, reduce network hops, and check for an overloaded proxy."},{"protocol":"v1","code":"22","message":"Duplicate share","severity":"low","cause":"The pool already received an identical share (same nonce and parameters); the miner submitted the same solution twice.","fix":"Usually a firmware\/driver quirk or a reconnect replaying work. Update firmware; if it persists, look for a misbehaving stratum proxy or a duplicated worker process."},{"protocol":"v1","code":"23","message":"Low difficulty share","severity":"medium","cause":"The submitted share does not meet the current share-difficulty target the pool set with mining.set_difficulty.","fix":"Confirm the miner honoured the latest set_difficulty. A steady stream of code 23 alongside hardware errors usually means overclock instability or failing ASIC chips\/hashboards \u2014 back off the overclock and run a diagnostics pass."},{"protocol":"v1","code":"24","message":"Unauthorized worker","severity":"high","cause":"The worker was not authorized \u2014 mining.authorize failed or was skipped for this username.","fix":"Check the worker\/username and password fields exactly match the pool account; many pools want the BTC payout address or an account.worker format. Nothing will be credited until this clears."},{"protocol":"v1","code":"25","message":"Not subscribed","severity":"high","cause":"The miner sent mining.submit before completing mining.subscribe \u2014 a protocol-sequence violation.","fix":"The client must subscribe (and usually authorize) before submitting shares. Update or repair the firmware or the proxy implementing Stratum."},{"protocol":"v2","code":"unknown-user","message":"Unknown user","severity":"high","cause":"The upstream does not recognise the supplied mining-account identity (the SV2 analogue of V1 code 24).","fix":"Verify the configured account\/username on the Stratum V2 connection or job-declaration channel."},{"protocol":"v2","code":"too-low-difficulty","message":"Too low difficulty","severity":"medium","cause":"The submitted share is below the channel's current target (the SV2 analogue of V1 code 23).","fix":"Check overclock stability and hardware-error rate, and confirm the miner is tracking target updates on the channel."},{"protocol":"v2","code":"stale-share","message":"Stale share","severity":"low","cause":"The share is for work that is no longer valid because a newer template or prevhash superseded it.","fix":"Normal at a low rate during block changes; high rates indicate latency between the miner and the job source."},{"protocol":"v2","code":"unsupported-feature-flags","message":"Unsupported feature flags","severity":"medium","cause":"During setup, a peer requested feature flags the other side does not support.","fix":"Align the SV2 feature flags or update the software on both ends so a common set is negotiated."},{"protocol":"v2","code":"unsupported-protocol","message":"Unsupported protocol","severity":"medium","cause":"The requested SV2 sub-protocol is not supported by the peer.","fix":"Use a supported sub-protocol (Mining, Job Declaration, or Template Distribution) on both endpoints."},{"protocol":"v2","code":"protocol-version-mismatch","message":"Protocol version mismatch","severity":"high","cause":"The SV2 protocol versions advertised by the two peers do not overlap.","fix":"Update the miner, proxy, or pool so a common protocol version is available to negotiate."},{"protocol":"v2","code":"invalid-mining-job-token","message":"Invalid mining job token","severity":"medium","cause":"The job token presented with a submit is not valid or known to the upstream.","fix":"Indicates a desync between job declaration and submission; reconnect or update the job-declaring proxy."},{"protocol":"v2","code":"invalid-job-param-value-{field}","message":"Invalid job parameter value","severity":"medium","cause":"A specific job parameter value was invalid; the {field} placeholder is replaced with the offending field name.","fix":"Inspect the named field in the job declaration \u2014 almost always a bug in the job declarator software."},{"protocol":"v2","code":"template-id-not-found","message":"Template id not found","severity":"low","cause":"The referenced block-template id is unknown to the upstream (Template Distribution Protocol).","fix":"The template expired or the connection desynced; the template provider should re-send current templates."},{"protocol":"v2","code":"stale-template-id","message":"Stale template id","severity":"low","cause":"The block template referenced has been superseded by a newer one.","fix":"Normal during block changes; persistent occurrences indicate latency in template distribution."}]}