Try to reconnect on pool duplicates
reduce log announces and define uchar in miner.h
This commit is contained in:
parent
5e8ff5226b
commit
12fafd5687
@ -1,5 +1,5 @@
|
||||
|
||||
ccMiner release 1.4.6-tpruvot (Oct 26th 2014) - "S3"
|
||||
ccMiner release 1.4.7-tpruvot (Nov 2014) - "Blake update"
|
||||
---------------------------------------------------------------
|
||||
|
||||
***************************************************************
|
||||
@ -153,6 +153,10 @@ features.
|
||||
|
||||
>>> RELEASE HISTORY <<<
|
||||
|
||||
Nov 2014 v1.4.7
|
||||
Rewrite blake algo
|
||||
Update windows prebuilt curl to 7.38.0
|
||||
|
||||
Oct. 26th 2014 v1.4.6
|
||||
Add S3 algo reusing existing code (onecoin)
|
||||
Small X11 (simd512) enhancement
|
||||
|
@ -8,8 +8,6 @@
|
||||
|
||||
#include "miner.h"
|
||||
|
||||
typedef unsigned char uchar;
|
||||
|
||||
extern "C" {
|
||||
#include "sph/sph_blake.h"
|
||||
#include <stdint.h>
|
||||
|
86
cpu-miner.c
86
cpu-miner.c
@ -225,6 +225,7 @@ struct thr_info *thr_info;
|
||||
static int work_thr_id;
|
||||
int longpoll_thr_id = -1;
|
||||
int stratum_thr_id = -1;
|
||||
bool stratum_need_reset = false;
|
||||
struct work_restart *work_restart = NULL;
|
||||
static struct stratum_ctx stratum;
|
||||
|
||||
@ -370,7 +371,7 @@ struct work {
|
||||
|
||||
char job_id[128];
|
||||
size_t xnonce2_len;
|
||||
unsigned char xnonce2[32];
|
||||
uchar xnonce2[32];
|
||||
|
||||
union {
|
||||
uint32_t u32[2];
|
||||
@ -411,7 +412,7 @@ static bool jobj_binary(const json_t *obj, const char *key,
|
||||
applog(LOG_ERR, "JSON key '%s' is not a string", key);
|
||||
return false;
|
||||
}
|
||||
if (!hex2bin((unsigned char*)buf, hexstr, buflen))
|
||||
if (!hex2bin((uchar*)buf, hexstr, buflen))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@ -445,7 +446,7 @@ static bool work_decode(const json_t *val, struct work *work)
|
||||
const char * hexstr = json_string_value(jr);
|
||||
if (likely(hexstr)) {
|
||||
// never seen yet...
|
||||
hex2bin((unsigned char*)work->noncerange.u64, hexstr, 8);
|
||||
hex2bin((uchar*)work->noncerange.u64, hexstr, 8);
|
||||
applog(LOG_DEBUG, "received noncerange: %08x-%08x", work->noncerange.u32[0], work->noncerange.u32[1]);
|
||||
}
|
||||
}
|
||||
@ -517,7 +518,6 @@ static int share_result(int result, const char *reason)
|
||||
|
||||
static bool submit_upstream_work(CURL *curl, struct work *work)
|
||||
{
|
||||
char *str = NULL;
|
||||
json_t *val, *res, *reason;
|
||||
char s[345];
|
||||
int i;
|
||||
@ -528,7 +528,7 @@ static bool submit_upstream_work(CURL *curl, struct work *work)
|
||||
if (memcmp(work->data + 1, g_work.data + 1, 32)) {
|
||||
pthread_mutex_unlock(&g_work_lock);
|
||||
if (opt_debug)
|
||||
applog(LOG_DEBUG, "DEBUG: stale work detected, discarding");
|
||||
applog(LOG_DEBUG, "stale work detected, discarding");
|
||||
return true;
|
||||
}
|
||||
calc_diff(work, 0);
|
||||
@ -544,39 +544,44 @@ static bool submit_upstream_work(CURL *curl, struct work *work)
|
||||
le32enc(&nonce, work->data[19]);
|
||||
be16enc(&nvote, *((uint16_t*)&work->data[20]));
|
||||
|
||||
ntimestr = bin2hex((const unsigned char *)(&ntime), 4);
|
||||
noncestr = bin2hex((const unsigned char *)(&nonce), 4);
|
||||
xnonce2str = bin2hex(work->xnonce2, work->xnonce2_len);
|
||||
nvotestr = bin2hex((const unsigned char *)(&nvote), 2);
|
||||
noncestr = bin2hex((const uchar*)(&nonce), 4);
|
||||
|
||||
sent = hashlog_already_submittted(work->job_id, nonce);
|
||||
if (sent > 0) {
|
||||
sent = (uint32_t) time(NULL) - sent;
|
||||
if (!opt_quiet) {
|
||||
applog(LOG_WARNING, "skip submit, nonce %s was already sent %u seconds ago", noncestr, sent);
|
||||
applog(LOG_WARNING, "nonce %s was already sent %u seconds ago", noncestr, sent);
|
||||
hashlog_dump_job(work->job_id);
|
||||
}
|
||||
rc = true;
|
||||
goto out;
|
||||
free(noncestr);
|
||||
// prevent useless computing on some pools
|
||||
stratum_need_reset = true;
|
||||
for (int i = 0; i < opt_n_threads; i++)
|
||||
work_restart[i].restart = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
ntimestr = bin2hex((const uchar*)(&ntime), 4);
|
||||
xnonce2str = bin2hex(work->xnonce2, work->xnonce2_len);
|
||||
|
||||
if (opt_algo == ALGO_HEAVY) {
|
||||
nvotestr = bin2hex((const uchar*)(&nvote), 2);
|
||||
sprintf(s,
|
||||
"{\"method\": \"mining.submit\", \"params\": [\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\"], \"id\":4}",
|
||||
rpc_user, work->job_id + 8, xnonce2str, ntimestr, noncestr, nvotestr);
|
||||
free(nvotestr);
|
||||
} else {
|
||||
sprintf(s,
|
||||
"{\"method\": \"mining.submit\", \"params\": [\"%s\", \"%s\", \"%s\", \"%s\", \"%s\"], \"id\":4}",
|
||||
rpc_user, work->job_id + 8, xnonce2str, ntimestr, noncestr);
|
||||
}
|
||||
free(xnonce2str);
|
||||
free(ntimestr);
|
||||
free(noncestr);
|
||||
free(xnonce2str);
|
||||
free(nvotestr);
|
||||
|
||||
if (unlikely(!stratum_send_line(&stratum, s))) {
|
||||
applog(LOG_ERR, "submit_upstream_work stratum_send_line failed");
|
||||
goto out;
|
||||
return false;
|
||||
}
|
||||
|
||||
hashlog_remember_submit(work->job_id, nonce, work->scanned_from);
|
||||
@ -584,15 +589,16 @@ static bool submit_upstream_work(CURL *curl, struct work *work)
|
||||
} else {
|
||||
|
||||
/* build hex string */
|
||||
char *str = NULL;
|
||||
|
||||
if (opt_algo != ALGO_HEAVY && opt_algo != ALGO_MJOLLNIR) {
|
||||
for (i = 0; i < ARRAY_SIZE(work->data); i++)
|
||||
le32enc(work->data + i, work->data[i]);
|
||||
}
|
||||
str = bin2hex((unsigned char *)work->data, sizeof(work->data));
|
||||
if (unlikely(!str)) {
|
||||
applog(LOG_ERR, "submit_upstream_work OOM");
|
||||
goto out;
|
||||
}
|
||||
str = bin2hex((uchar*)work->data, sizeof(work->data));
|
||||
if (unlikely(!str)) {
|
||||
applog(LOG_ERR, "submit_upstream_work OOM");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* build JSON-RPC request */
|
||||
@ -604,7 +610,7 @@ static bool submit_upstream_work(CURL *curl, struct work *work)
|
||||
val = json_rpc_call(curl, rpc_url, rpc_userpass, s, false, false, NULL);
|
||||
if (unlikely(!val)) {
|
||||
applog(LOG_ERR, "submit_upstream_work json_rpc_call failed");
|
||||
goto out;
|
||||
return false;
|
||||
}
|
||||
|
||||
res = json_object_get(val, "result");
|
||||
@ -613,13 +619,11 @@ static bool submit_upstream_work(CURL *curl, struct work *work)
|
||||
hashlog_purge_job(work->job_id);
|
||||
|
||||
json_decref(val);
|
||||
|
||||
free(str);
|
||||
}
|
||||
|
||||
rc = true;
|
||||
|
||||
out:
|
||||
free(str);
|
||||
return rc;
|
||||
return true;
|
||||
}
|
||||
|
||||
static const char *rpc_req =
|
||||
@ -842,7 +846,7 @@ err_out:
|
||||
|
||||
static void stratum_gen_work(struct stratum_ctx *sctx, struct work *work)
|
||||
{
|
||||
unsigned char merkle_root[64];
|
||||
uchar merkle_root[64];
|
||||
int i;
|
||||
|
||||
if (!sctx->job.job_id) {
|
||||
@ -1475,6 +1479,12 @@ static void *stratum_thread(void *userdata)
|
||||
while (1) {
|
||||
int failures = 0;
|
||||
|
||||
if (stratum_need_reset) {
|
||||
stratum_need_reset = false;
|
||||
stratum_disconnect(&stratum);
|
||||
applog(LOG_DEBUG, "stratum connection reset");
|
||||
}
|
||||
|
||||
while (!stratum.curl) {
|
||||
pthread_mutex_lock(&g_work_lock);
|
||||
g_work_time = 0;
|
||||
@ -1503,11 +1513,11 @@ static void *stratum_thread(void *userdata)
|
||||
time(&g_work_time);
|
||||
if (stratum.job.clean) {
|
||||
if (!opt_quiet)
|
||||
applog(LOG_BLUE, "%s sent %s block %d", short_url, algo_names[opt_algo],
|
||||
applog(LOG_BLUE, "%s %s block %d", short_url, algo_names[opt_algo],
|
||||
stratum.bloc_height);
|
||||
restart_threads();
|
||||
hashlog_purge_old();
|
||||
} else if (!opt_quiet) {
|
||||
} else if (opt_debug && !opt_quiet) {
|
||||
applog(LOG_BLUE, "%s asks job %d for block %d", short_url,
|
||||
strtoul(stratum.job.job_id, NULL, 16), stratum.bloc_height);
|
||||
}
|
||||
@ -1902,18 +1912,17 @@ int main(int argc, char *argv[])
|
||||
long flags;
|
||||
int i;
|
||||
|
||||
printf("*** ccMiner for nVidia GPUs by Christian Buchner and Christian H. ***\n");
|
||||
printf("\t This is the forked version "PROGRAM_VERSION" (tpruvot@github)\n");
|
||||
printf("*** ccminer " PROGRAM_VERSION " for nVidia GPUs by tpruvot@github ***\n");
|
||||
#ifdef WIN32
|
||||
printf("\t Built with VC++ 2013 and nVidia CUDA SDK 6.5\n\n");
|
||||
printf("\tBuilt with VC++ 2013 and nVidia CUDA SDK 6.5\n\n");
|
||||
#else
|
||||
printf("\t Built with the nVidia CUDA SDK 6.5\n\n");
|
||||
printf("\tBuilt with the nVidia CUDA SDK 6.5\n\n");
|
||||
#endif
|
||||
printf("\t based on pooler-cpuminer 2.3.2 (c) 2010 Jeff Garzik, 2012 pooler\n");
|
||||
printf("\t and HVC extension from http://hvc.1gh.com/" "\n\n");
|
||||
printf("\tCuda additions Copyright 2014 Christian Buchner, Christian H.\n\n");
|
||||
printf("\tInclude some of djm34 additions, cleaned by Tanguy Pruvot\n");
|
||||
printf("\t BTC donation address: 1AJdfCpLWPNoAMDfHF1wD5y8VgKSSTHxPo\n\n");
|
||||
printf(" Based on pooler cpuminer 2.3.2\n");
|
||||
printf(" CUDA support by Christian Buchner and Christian H.\n");
|
||||
printf(" Include some of djm34 additions\n\n");
|
||||
|
||||
printf("BTC donation address: 1AJdfCpLWPNoAMDfHF1wD5y8VgKSSTHxPo\n\n");
|
||||
|
||||
rpc_user = strdup("");
|
||||
rpc_pass = strdup("");
|
||||
@ -2028,6 +2037,7 @@ int main(int argc, char *argv[])
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (want_stratum) {
|
||||
/* init stratum thread info */
|
||||
stratum_thr_id = opt_n_threads + 2;
|
||||
|
2
miner.h
2
miner.h
@ -74,6 +74,8 @@ enum {
|
||||
};
|
||||
#endif
|
||||
|
||||
typedef unsigned char uchar;
|
||||
|
||||
#undef unlikely
|
||||
#undef likely
|
||||
#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
|
||||
|
46
util.c
46
util.c
@ -163,7 +163,7 @@ static size_t all_data_cb(const void *ptr, size_t size, size_t nmemb,
|
||||
size_t len = size * nmemb;
|
||||
size_t oldlen, newlen;
|
||||
void *newmem;
|
||||
static const unsigned char zero = 0;
|
||||
static const uchar zero = 0;
|
||||
|
||||
oldlen = db->len;
|
||||
newlen = oldlen + len;
|
||||
@ -517,7 +517,7 @@ void cbin2hex(char *out, const char *in, size_t len)
|
||||
}
|
||||
}
|
||||
|
||||
char *bin2hex(const unsigned char *in, size_t len)
|
||||
char *bin2hex(const uchar *in, size_t len)
|
||||
{
|
||||
char *s = (char*)malloc((len * 2) + 1);
|
||||
if (!s)
|
||||
@ -528,7 +528,7 @@ char *bin2hex(const unsigned char *in, size_t len)
|
||||
return s;
|
||||
}
|
||||
|
||||
bool hex2bin(unsigned char *p, const char *hexstr, size_t len)
|
||||
bool hex2bin(uchar *p, const char *hexstr, size_t len)
|
||||
{
|
||||
char hex_byte[3];
|
||||
char *ep;
|
||||
@ -542,7 +542,7 @@ bool hex2bin(unsigned char *p, const char *hexstr, size_t len)
|
||||
}
|
||||
hex_byte[0] = hexstr[0];
|
||||
hex_byte[1] = hexstr[1];
|
||||
*p = (unsigned char) strtol(hex_byte, &ep, 16);
|
||||
*p = (uchar) strtol(hex_byte, &ep, 16);
|
||||
if (*ep) {
|
||||
applog(LOG_ERR, "hex2bin failed on '%s'", hex_byte);
|
||||
return false;
|
||||
@ -609,8 +609,8 @@ bool fulltest(const uint32_t *hash, const uint32_t *target)
|
||||
be32enc(hash_be + i, hash[7 - i]);
|
||||
be32enc(target_be + i, target[7 - i]);
|
||||
}
|
||||
hash_str = bin2hex((unsigned char *)hash_be, 32);
|
||||
target_str = bin2hex((unsigned char *)target_be, 32);
|
||||
hash_str = bin2hex((uchar *)hash_be, 32);
|
||||
target_str = bin2hex((uchar *)target_be, 32);
|
||||
|
||||
applog(LOG_DEBUG, "DEBUG: %s\nHash: %s\nTarget: %s",
|
||||
rc ? "hash <= target"
|
||||
@ -976,7 +976,7 @@ start:
|
||||
free(sctx->xnonce1);
|
||||
sctx->session_id = sid ? strdup(sid) : NULL;
|
||||
sctx->xnonce1_size = strlen(xnonce1) / 2;
|
||||
sctx->xnonce1 = (unsigned char*)malloc(sctx->xnonce1_size);
|
||||
sctx->xnonce1 = (uchar*) malloc(sctx->xnonce1_size);
|
||||
hex2bin(sctx->xnonce1, xnonce1, sctx->xnonce1_size);
|
||||
sctx->xnonce2_size = xn2_size;
|
||||
sctx->next_diff = 1.0;
|
||||
@ -1088,7 +1088,7 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
bool clean, ret = false;
|
||||
int merkle_count, i;
|
||||
json_t *merkle_arr;
|
||||
unsigned char **merkle;
|
||||
uchar **merkle;
|
||||
int ntime;
|
||||
|
||||
job_id = json_string_value(json_array_get(params, 0));
|
||||
@ -1113,15 +1113,15 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
}
|
||||
|
||||
/* store stratum server time diff */
|
||||
hex2bin((unsigned char *)&ntime, stime, 4);
|
||||
hex2bin((uchar *)&ntime, stime, 4);
|
||||
ntime = swab32(ntime) - (uint32_t) time(0);
|
||||
if (ntime > sctx->srvtime_diff) {
|
||||
sctx->srvtime_diff = ntime;
|
||||
if (!opt_quiet)
|
||||
if (!opt_quiet && ntime > 20)
|
||||
applog(LOG_DEBUG, "stratum time is at least %ds in the future", ntime);
|
||||
}
|
||||
|
||||
merkle = (unsigned char**)malloc(merkle_count * sizeof(char *));
|
||||
merkle = (uchar**) malloc(merkle_count * sizeof(char *));
|
||||
for (i = 0; i < merkle_count; i++) {
|
||||
const char *s = json_string_value(json_array_get(merkle_arr, i));
|
||||
if (!s || strlen(s) != 64) {
|
||||
@ -1131,7 +1131,7 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
applog(LOG_ERR, "Stratum notify: invalid Merkle branch");
|
||||
goto out;
|
||||
}
|
||||
merkle[i] = (unsigned char*)malloc(32);
|
||||
merkle[i] = (uchar*) malloc(32);
|
||||
hex2bin(merkle[i], s, 32);
|
||||
}
|
||||
|
||||
@ -1142,7 +1142,7 @@ static bool stratum_notify(struct stratum_ctx *sctx, json_t *params)
|
||||
sctx->job.coinbase_size = coinb1_size + sctx->xnonce1_size +
|
||||
sctx->xnonce2_size + coinb2_size;
|
||||
|
||||
sctx->job.coinbase = (unsigned char*)realloc(sctx->job.coinbase, sctx->job.coinbase_size);
|
||||
sctx->job.coinbase = (uchar*) realloc(sctx->job.coinbase, sctx->job.coinbase_size);
|
||||
sctx->job.xnonce2 = sctx->job.coinbase + coinb1_size + sctx->xnonce1_size;
|
||||
hex2bin(sctx->job.coinbase, coinb1, coinb1_size);
|
||||
memcpy(sctx->job.coinbase + coinb1_size, sctx->xnonce1, sctx->xnonce1_size);
|
||||
@ -1456,7 +1456,7 @@ char* atime2str(time_t timer)
|
||||
}
|
||||
|
||||
/* sprintf can be used in applog */
|
||||
static char* format_hash(char* buf, unsigned char *hash)
|
||||
static char* format_hash(char* buf, uchar *hash)
|
||||
{
|
||||
int len = 0;
|
||||
for (int i=0; i < 32; i += 4) {
|
||||
@ -1467,7 +1467,7 @@ static char* format_hash(char* buf, unsigned char *hash)
|
||||
}
|
||||
|
||||
/* to debug diff in data */
|
||||
extern void applog_compare_hash(unsigned char *hash, unsigned char *hash2)
|
||||
extern void applog_compare_hash(uchar *hash, uchar *hash2)
|
||||
{
|
||||
char s[256] = "";
|
||||
int len = 0;
|
||||
@ -1480,7 +1480,7 @@ extern void applog_compare_hash(unsigned char *hash, unsigned char *hash2)
|
||||
applog(LOG_DEBUG, "%s", s);
|
||||
}
|
||||
|
||||
extern void applog_hash(unsigned char *hash)
|
||||
extern void applog_hash(uchar *hash)
|
||||
{
|
||||
char s[128] = {'\0'};
|
||||
applog(LOG_DEBUG, "%s", format_hash(s, hash));
|
||||
@ -1495,15 +1495,19 @@ void do_gpu_tests(void)
|
||||
#ifdef _DEBUG
|
||||
unsigned long done;
|
||||
char s[128] = { '\0' };
|
||||
unsigned char buf[128], hash[128];
|
||||
uchar buf[128], hash[128];
|
||||
uint32_t tgt[8] = { 0 };
|
||||
|
||||
memset(buf, 0, sizeof buf);
|
||||
buf[0] = 1; buf[64] = 2;
|
||||
|
||||
opt_tracegpu = true;
|
||||
work_restart = (struct work_restart*) malloc(sizeof(struct work_restart));
|
||||
work_restart[0].restart = 1;
|
||||
tgt[6] = 0xffff;
|
||||
|
||||
scanhash_blake256(0, (uint32_t*)buf, tgt, 1, &done, 14);
|
||||
|
||||
free(work_restart);
|
||||
work_restart = NULL;
|
||||
opt_tracegpu = false;
|
||||
@ -1513,9 +1517,9 @@ void do_gpu_tests(void)
|
||||
void print_hash_tests(void)
|
||||
{
|
||||
char s[128] = {'\0'};
|
||||
unsigned char buf[128], hash[128];
|
||||
uchar buf[128], hash[128];
|
||||
memset(buf, 0, sizeof buf);
|
||||
// buf[0] = 1; buf[64] = 2;
|
||||
// buf[0] = 1; buf[64] = 2; // for endian tests
|
||||
|
||||
printf(CL_WHT "CPU HASH ON EMPTY BUFFER RESULTS:" CL_N "\n");
|
||||
|
||||
@ -1531,8 +1535,6 @@ void print_hash_tests(void)
|
||||
blake256hash(&hash[0], &buf[0], 14);
|
||||
printpfx("blake", hash);
|
||||
|
||||
do_gpu_tests();
|
||||
|
||||
memset(hash, 0, sizeof hash);
|
||||
deephash(&hash[0], &buf[0]);
|
||||
printpfx("deep", hash);
|
||||
@ -1614,4 +1616,6 @@ void print_hash_tests(void)
|
||||
printpfx("X17", hash);
|
||||
|
||||
printf("\n");
|
||||
|
||||
do_gpu_tests();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user