|
@@ -2342,7 +2342,10 @@ static uint64_t share_diff(const struct work *work)
|
|
|
uint64_t ret;
|
|
uint64_t ret;
|
|
|
|
|
|
|
|
swab256(rhash, work->hash);
|
|
swab256(rhash, work->hash);
|
|
|
- data64 = (uint64_t *)(rhash + 4);
|
|
|
|
|
|
|
+ if (opt_scrypt)
|
|
|
|
|
+ data64 = (uint64_t *)(rhash + 2);
|
|
|
|
|
+ else
|
|
|
|
|
+ data64 = (uint64_t *)(rhash + 4);
|
|
|
d64 = be64toh(*data64);
|
|
d64 = be64toh(*data64);
|
|
|
if (unlikely(!d64))
|
|
if (unlikely(!d64))
|
|
|
d64 = 1;
|
|
d64 = 1;
|
|
@@ -2356,23 +2359,6 @@ static uint64_t share_diff(const struct work *work)
|
|
|
return ret;
|
|
return ret;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static uint64_t scrypt_diff(const struct work *work)
|
|
|
|
|
-{
|
|
|
|
|
- const uint64_t scrypt_diffone = 0x0000ffff00000000ul;
|
|
|
|
|
- uint64_t d64 = work->outputhash, ret;
|
|
|
|
|
-
|
|
|
|
|
- if (unlikely(!d64))
|
|
|
|
|
- d64 = 1;
|
|
|
|
|
- ret = scrypt_diffone / d64;
|
|
|
|
|
- mutex_lock(&control_lock);
|
|
|
|
|
- if (ret > best_diff) {
|
|
|
|
|
- best_diff = ret;
|
|
|
|
|
- suffix_string(best_diff, best_share, 0);
|
|
|
|
|
- }
|
|
|
|
|
- mutex_unlock(&control_lock);
|
|
|
|
|
- return ret;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
static bool submit_upstream_work(struct work *work, CURL *curl, bool resubmit)
|
|
static bool submit_upstream_work(struct work *work, CURL *curl, bool resubmit)
|
|
|
{
|
|
{
|
|
|
char *hexstr = NULL;
|
|
char *hexstr = NULL;
|
|
@@ -2383,7 +2369,6 @@ static bool submit_upstream_work(struct work *work, CURL *curl, bool resubmit)
|
|
|
struct cgpu_info *cgpu = thr_info[thr_id].cgpu;
|
|
struct cgpu_info *cgpu = thr_info[thr_id].cgpu;
|
|
|
struct pool *pool = work->pool;
|
|
struct pool *pool = work->pool;
|
|
|
int rolltime;
|
|
int rolltime;
|
|
|
- uint32_t *hash32;
|
|
|
|
|
struct timeval tv_submit, tv_submit_reply;
|
|
struct timeval tv_submit, tv_submit_reply;
|
|
|
char hashshow[64 + 4] = "";
|
|
char hashshow[64 + 4] = "";
|
|
|
char worktime[200] = "";
|
|
char worktime[200] = "";
|
|
@@ -2464,26 +2449,20 @@ static bool submit_upstream_work(struct work *work, CURL *curl, bool resubmit)
|
|
|
|
|
|
|
|
if (!QUIET) {
|
|
if (!QUIET) {
|
|
|
int intdiff = floor(work->work_difficulty);
|
|
int intdiff = floor(work->work_difficulty);
|
|
|
|
|
+ char diffdisp[16], *outhash;
|
|
|
|
|
+ unsigned char rhash[32];
|
|
|
uint64_t sharediff;
|
|
uint64_t sharediff;
|
|
|
- char diffdisp[16];
|
|
|
|
|
-
|
|
|
|
|
- hash32 = (uint32_t *)(work->hash);
|
|
|
|
|
- if (opt_scrypt) {
|
|
|
|
|
- uint64_t outhash;
|
|
|
|
|
-
|
|
|
|
|
- scrypt_outputhash(work);
|
|
|
|
|
- sharediff = scrypt_diff(work);
|
|
|
|
|
- suffix_string(sharediff, diffdisp, 0);
|
|
|
|
|
|
|
|
|
|
- outhash = work->outputhash >> 16;
|
|
|
|
|
- sprintf(hashshow, "%08lx Diff %s/%d", (unsigned long)outhash, diffdisp, intdiff);
|
|
|
|
|
- } else {
|
|
|
|
|
- sharediff = share_diff(work);
|
|
|
|
|
- suffix_string(sharediff, diffdisp, 0);
|
|
|
|
|
-
|
|
|
|
|
- sprintf(hashshow, "%08lx Diff %s/%d%s", (unsigned long)(hash32[6]), diffdisp, intdiff,
|
|
|
|
|
- work->block? " BLOCK!" : "");
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ swab256(rhash, work->hash);
|
|
|
|
|
+ if (opt_scrypt)
|
|
|
|
|
+ outhash = bin2hex(rhash + 2, 4);
|
|
|
|
|
+ else
|
|
|
|
|
+ outhash = bin2hex(rhash + 4, 4);
|
|
|
|
|
+ sharediff = share_diff(work);
|
|
|
|
|
+ suffix_string(sharediff, diffdisp, 0);
|
|
|
|
|
+ sprintf(hashshow, "%s Diff %s/%d%s", outhash, diffdisp, intdiff,
|
|
|
|
|
+ work->block? " BLOCK!" : "");
|
|
|
|
|
+ free(outhash);
|
|
|
|
|
|
|
|
if (opt_worktime) {
|
|
if (opt_worktime) {
|
|
|
char workclone[20];
|
|
char workclone[20];
|
|
@@ -3095,16 +3074,20 @@ static bool stale_work(struct work *work, bool share)
|
|
|
|
|
|
|
|
static void check_solve(struct work *work)
|
|
static void check_solve(struct work *work)
|
|
|
{
|
|
{
|
|
|
|
|
+ if (opt_scrypt)
|
|
|
|
|
+ scrypt_outputhash(work);
|
|
|
|
|
+ else {
|
|
|
#ifndef MIPSEB
|
|
#ifndef MIPSEB
|
|
|
- /* This segfaults on openwrt */
|
|
|
|
|
- work->block = regeneratehash(work);
|
|
|
|
|
|
|
+ /* This segfaults on openwrt */
|
|
|
|
|
+ work->block = regeneratehash(work);
|
|
|
|
|
+#endif
|
|
|
|
|
+ }
|
|
|
if (unlikely(work->block)) {
|
|
if (unlikely(work->block)) {
|
|
|
work->pool->solved++;
|
|
work->pool->solved++;
|
|
|
found_blocks++;
|
|
found_blocks++;
|
|
|
work->mandatory = true;
|
|
work->mandatory = true;
|
|
|
applog(LOG_NOTICE, "Found block for pool %d!", work->pool->pool_no);
|
|
applog(LOG_NOTICE, "Found block for pool %d!", work->pool->pool_no);
|
|
|
}
|
|
}
|
|
|
-#endif
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void *submit_work_thread(void *userdata)
|
|
static void *submit_work_thread(void *userdata)
|