Browse Source

Display correct share hash and share difficulty with scrypt mining.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
7adb7a30e6
  1. 27
      cgminer.c
  2. 4
      miner.h
  3. 12
      scrypt.c
  4. 8
      scrypt.h

27
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) if (opt_scrypt) {
sprintf(hashshow, "%08lx Diff %d", (unsigned long)(hash32[7]), intdiff); uint32_t sharediff;
else {
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);

4
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
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
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 */

Loading…
Cancel
Save