diff --git a/servers/src/mining/stratumserver.rs b/servers/src/mining/stratumserver.rs index 33518f36b..2af4ca419 100644 --- a/servers/src/mining/stratumserver.rs +++ b/servers/src/mining/stratumserver.rs @@ -314,8 +314,10 @@ impl StratumServer { &mut stratum_stats.worker_stats[worker_stats_id], ); // this key_id has been used now, reset - self.current_key_id = None; - res + if let Ok((_, true)) = res { + self.current_key_id = None; + } + res.map(|(v, _)| v) } "keepalive" => self.handle_keepalive(), "getjobtemplate" => { @@ -433,7 +435,7 @@ impl StratumServer { params: Option, worker: &mut Worker, worker_stats: &mut WorkerStats, - ) -> Result { + ) -> Result<(Value, bool), Value> { // Validate parameters let params: SubmitParams = match params { Some(val) => serde_json::from_value(val).unwrap(), @@ -448,6 +450,7 @@ impl StratumServer { let mut b: Block; let share_difficulty: u64; + let mut share_is_block = false; if params.height == self.current_block.header.height { // Reconstruct the block header with this nonce and pow added b = self.current_block.clone(); @@ -490,6 +493,8 @@ impl StratumServer { message: "Failed to validate solution".to_string(), }; return Err(serde_json::to_value(e).unwrap()); + } else { + share_is_block = true; } // Success case falls through to be logged } else { @@ -542,7 +547,7 @@ impl StratumServer { submitted_by, ); worker_stats.num_accepted += 1; - return Ok(serde_json::to_value("ok".to_string()).unwrap()); + return Ok((serde_json::to_value("ok".to_string()).unwrap(), share_is_block)); } // handle submit a solution // Purge dead/sick workers - remove all workers marked in error state