private void HandleValidShare(IShare share) { var miner = (IStratumMiner)share.Miner; miner.ValidShares++; _storage.AddShare(share); // commit the share. _logger.Debug("Share accepted at {0:0.00}/{1} by miner {2:l}", share.Difficulty, miner.Difficulty, miner.Username); // check if share is a block candidate if (!share.IsBlockCandidate) { return; } // submit block candidate to daemon. var accepted = SubmitBlock(share); // log about the acceptance status of the block. _logger.Information( accepted ? "Found block [{0}] with hash: {1:l}" : "Submit block [{0}] failed with hash: {1:l}", share.Height, share.BlockHash.ToHexString()); if (!accepted) // if block wasn't accepted { return; // just return as we don't need to notify about it and store it. } OnBlockFound(EventArgs.Empty); // notify the listeners about the new block. _storage.AddBlock(share); // commit the block details to storage. }