{
    "meta": {
        "title": "D-Central — 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-06-20T01:11:28+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 — 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 — 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 — back off the overclock and run a diagnostics pass."
        },
        {
            "protocol": "v1",
            "code": "24",
            "message": "Unauthorized worker",
            "severity": "high",
            "cause": "The worker was not authorized — 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 — 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 — 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."
        }
    ]
}