Browse Source

Display correct share hash and share difficulty with scrypt mining.

Con Kolivas 13 years ago
parent
commit
7adb7a30e6
4 changed files with 44 additions and 7 deletions
  1. 22 5
      cgminer.c
  2. 2 2
      miner.h
  3. 12 0
      scrypt.c
  4. 8 0
      scrypt.h

+ 22 - 5
cgminer.c

@@ -47,6 +47,7 @@
 #include "driver-cpu.h"
 #include "driver-cpu.h"
 #include "driver-opencl.h"
 #include "driver-opencl.h"
 #include "bench_block.h"
 #include "bench_block.h"
+#include "scrypt.h"
 
 
 #if defined(unix)
 #if defined(unix)
 	#include <errno.h>
 	#include <errno.h>
@@ -1988,7 +1989,17 @@ static uint64_t share_diff(const struct work *work)
 	return ret;
 	return ret;
 }
 }
 
 
-static bool submit_upstream_work(const struct work *work, CURL *curl, bool resubmit)
+static uint32_t scrypt_diff(const struct work *work)
+{
+	const uint32_t scrypt_diffone = 0x0000fffful;
+	uint32_t d32 = work->outputhash;
+
+	if (unlikely(!d32))
+		d32 = 1;
+	return scrypt_diffone / d32;
+}
+
+static bool submit_upstream_work(struct work *work, CURL *curl, bool resubmit)
 {
 {
 	char *hexstr = NULL;
 	char *hexstr = NULL;
 	json_t *val, *res, *err;
 	json_t *val, *res, *err;
@@ -2046,13 +2057,19 @@ static bool submit_upstream_work(const struct work *work, CURL *curl, bool resub
 
 
 	if (!QUIET) {
 	if (!QUIET) {
 		int intdiff = floor(work->work_difficulty);
 		int intdiff = floor(work->work_difficulty);
+		char diffdisp[16];
 
 
 		hash32 = (uint32_t *)(work->hash);
 		hash32 = (uint32_t *)(work->hash);
-		if (opt_scrypt)
-			sprintf(hashshow, "%08lx Diff %d", (unsigned long)(hash32[7]), intdiff);
-		else {
+		if (opt_scrypt) {
+			uint32_t sharediff;
+
+			scrypt_outputhash(work);
+			sharediff = scrypt_diff(work);
+			suffix_string(sharediff, diffdisp, 0);
+
+			sprintf(hashshow, "%08lx Diff %s/%d", (unsigned long)work->outputhash, diffdisp, intdiff);
+		} else {
 			uint64_t sharediff = share_diff(work);
 			uint64_t sharediff = share_diff(work);
-			char diffdisp[16];
 
 
 			suffix_string(sharediff, diffdisp, 0);
 			suffix_string(sharediff, diffdisp, 0);
 
 

+ 2 - 2
miner.h

@@ -897,10 +897,10 @@ struct work {
 	unsigned char	target[32];
 	unsigned char	target[32];
 	unsigned char	hash[32];
 	unsigned char	hash[32];
 
 
+	uint32_t	outputhash;
+
 	int		rolls;
 	int		rolls;
 
 
-	uint32_t	output[1];
-	uint32_t	valid;
 	dev_blk_ctx	blk;
 	dev_blk_ctx	blk;
 
 
 	struct thr_info	*thr;
 	struct thr_info	*thr;

+ 12 - 0
scrypt.c

@@ -405,6 +405,18 @@ static uint32_t scrypt_1024_1_1_256_sp(const uint32_t* input, char* scratchpad)
 	return PBKDF2_SHA256_80_128_32(input, X);
 	return PBKDF2_SHA256_80_128_32(input, X);
 }
 }
 
 
+void scrypt_outputhash(struct work *work)
+{
+	uint32_t data[20];
+	char *scratchbuf;
+	uint32_t *nonce = (uint32_t *)(work->data + 76);
+
+	be32enc_vect(data, (const uint32_t *)work->data, 19);
+	data[19] = htobe32(*nonce);
+	scratchbuf = alloca(131584);
+	work->outputhash = scrypt_1024_1_1_256_sp(data, scratchbuf);
+}
+
 /* Used externally as confirmation of correct OCL code */
 /* Used externally as confirmation of correct OCL code */
 bool scrypt_test(unsigned char *pdata, const unsigned char *ptarget, uint32_t nonce)
 bool scrypt_test(unsigned char *pdata, const unsigned char *ptarget, uint32_t nonce)
 {
 {

+ 8 - 0
scrypt.h

@@ -1,9 +1,13 @@
 #ifndef SCRYPT_H
 #ifndef SCRYPT_H
 #define SCRYPT_H
 #define SCRYPT_H
 
 
+#include "miner.h"
+
 #ifdef USE_SCRYPT
 #ifdef USE_SCRYPT
 extern bool scrypt_test(unsigned char *pdata, const unsigned char *ptarget,
 extern bool scrypt_test(unsigned char *pdata, const unsigned char *ptarget,
 			uint32_t nonce);
 			uint32_t nonce);
+extern void scrypt_outputhash(struct work *work);
+
 #else /* USE_SCRYPT */
 #else /* USE_SCRYPT */
 static inline bool scrypt_test(__maybe_unused unsigned char *pdata,
 static inline bool scrypt_test(__maybe_unused unsigned char *pdata,
 			       __maybe_unused const unsigned char *ptarget,
 			       __maybe_unused const unsigned char *ptarget,
@@ -11,6 +15,10 @@ static inline bool scrypt_test(__maybe_unused unsigned char *pdata,
 {
 {
 	return false;
 	return false;
 }
 }
+
+static inline void scrypt_outputhash(struct work *work)
+{
+}
 #endif /* USE_SCRYPT */
 #endif /* USE_SCRYPT */
 
 
 #endif /* SCRYPT_H */
 #endif /* SCRYPT_H */