mirror of
https://github.com/GOSTSec/sgminer
synced 2025-03-13 06:01:03 +00:00
Use cpu scrypt code to check if an scrypt share is below target before submitting it.
This commit is contained in:
parent
537b28d53e
commit
808f403a14
@ -45,6 +45,10 @@ cgminer_SOURCES += ocl.c ocl.h findnonce.c findnonce.h
|
||||
cgminer_SOURCES += adl.c adl.h adl_functions.h
|
||||
cgminer_SOURCES += *.cl
|
||||
|
||||
if HAS_SCRYPT
|
||||
cgminer_SOURCES += scrypt.c
|
||||
endif
|
||||
|
||||
if HAS_CPUMINE
|
||||
# original CPU related sources, unchanged
|
||||
cgminer_SOURCES += \
|
||||
@ -56,10 +60,6 @@ cgminer_SOURCES += \
|
||||
# the CPU portion extracted from original main.c
|
||||
cgminer_SOURCES += driver-cpu.h driver-cpu.c
|
||||
|
||||
if HAS_SCRYPT
|
||||
cgminer_SOURCES += scrypt.c
|
||||
endif
|
||||
|
||||
if HAS_YASM
|
||||
AM_CFLAGS = -DHAS_YASM
|
||||
if HAVE_x86_64
|
||||
|
@ -4012,7 +4012,7 @@ bool submit_nonce(struct thr_info *thr, struct work *work, uint32_t nonce)
|
||||
/* Do one last check before attempting to submit the work */
|
||||
/* Side effect: sets work->data for us */
|
||||
if (!test_nonce(work, nonce)) {
|
||||
applog(LOG_INFO, "Share below target");
|
||||
applog(LOG_INFO, "Pool %d share below target", work->pool->pool_no);
|
||||
return true;
|
||||
}
|
||||
return submit_work_sync(thr, work);
|
||||
|
12
findnonce.c
12
findnonce.c
@ -220,6 +220,8 @@ static void send_nonce(struct pc_data *pcd, cl_uint nonce)
|
||||
}
|
||||
}
|
||||
|
||||
extern bool scrypt_scan_nonce(unsigned char *pdata, uint32_t nonce);
|
||||
|
||||
static void *postcalc_hash(void *userdata)
|
||||
{
|
||||
struct pc_data *pcd = (struct pc_data *)userdata;
|
||||
@ -234,9 +236,13 @@ static void *postcalc_hash(void *userdata)
|
||||
if (nonce) {
|
||||
applog(LOG_DEBUG, "OCL NONCE %u", nonce);
|
||||
#ifdef USE_SCRYPT
|
||||
if (opt_scrypt)
|
||||
submit_nonce(thr, pcd->work, nonce);
|
||||
else
|
||||
if (opt_scrypt) {
|
||||
struct work *work = pcd->work;
|
||||
if (scrypt_scan_nonce(work, nonce))
|
||||
submit_nonce(thr, work, nonce);
|
||||
else
|
||||
applog(LOG_INFO, "Pool %d share below target", work->pool->pool_no);
|
||||
} else
|
||||
#endif
|
||||
send_nonce(pcd, nonce);
|
||||
nonces++;
|
||||
|
16
scrypt.c
16
scrypt.c
@ -407,6 +407,20 @@ static uint32_t scrypt_1024_1_1_256_sp(const uint32_t* input, char* scratchpad)
|
||||
return PBKDF2_SHA256_80_128_32(input, X);
|
||||
}
|
||||
|
||||
bool scrypt_scan_nonce(struct work *work, uint32_t nonce)
|
||||
{
|
||||
uint32_t Htarg, tmp_hash7, data[20];
|
||||
unsigned char *scratchbuf;
|
||||
|
||||
be32enc_vect(data, (const uint32_t *)work->data, 19);
|
||||
data[19] = htobe32(nonce);
|
||||
|
||||
Htarg = ((const uint32_t *)work->target)[7];
|
||||
scratchbuf = alloca(131584);
|
||||
tmp_hash7 = scrypt_1024_1_1_256_sp(data, scratchbuf);
|
||||
return (tmp_hash7 <= Htarg);
|
||||
}
|
||||
|
||||
bool scanhash_scrypt(struct thr_info *thr, const unsigned char *pmidstate, unsigned char *pdata,
|
||||
unsigned char *phash1, unsigned char *phash,
|
||||
const unsigned char *ptarget,
|
||||
@ -423,7 +437,7 @@ bool scanhash_scrypt(struct thr_info *thr, const unsigned char *pmidstate, unsig
|
||||
|
||||
be32enc_vect(data, (const uint32_t *)pdata, 19);
|
||||
|
||||
scratchbuf = malloc(131583);
|
||||
scratchbuf = malloc(131584);
|
||||
if (unlikely(!scratchbuf)) {
|
||||
applog(LOG_ERR, "Failed to malloc scratchbuf in scanhash_scrypt");
|
||||
return ret;
|
||||
|
Loading…
x
Reference in New Issue
Block a user