diff --git a/sql/2016-02-23-shares_diff.sql b/sql/2016-02-23-shares_diff.sql new file mode 100644 index 0000000..5db54fd --- /dev/null +++ b/sql/2016-02-23-shares_diff.sql @@ -0,0 +1,9 @@ +-- Recent additions to add after db init (.gz) +-- mysql yaamp -p < file.sql + +-- NOT NULL +ALTER TABLE `shares` CHANGE COLUMN `difficulty` `difficulty` DOUBLE NOT NULL DEFAULT '0'; + +ALTER TABLE `shares` ADD `share_diff` DOUBLE NOT NULL DEFAULT '0' AFTER `difficulty`; + + diff --git a/stratum/client_submit.cpp b/stratum/client_submit.cpp index 98e1855..2795e16 100644 --- a/stratum/client_submit.cpp +++ b/stratum/client_submit.cpp @@ -294,7 +294,7 @@ void client_submit_error(YAAMP_CLIENT *client, YAAMP_JOB *job, int id, const cha else { client_send_error(client, id, message); - share_add(client, job, false, extranonce2, ntime, nonce, id); + share_add(client, job, false, extranonce2, ntime, nonce, 0, id); client->submit_bad++; #ifdef HASH_DEBUGLOG_ @@ -333,8 +333,7 @@ bool client_submit(YAAMP_CLIENT *client, json_value *json_params) strncpy(vote, json_params->u.array.values[5]->u.string.ptr, 7); #ifdef HASH_DEBUGLOG_ - debuglog("submit %s (uid %d) %d, %s, t=%s, n=%s, vote=%s\n", client->sock->ip, client->userid, - jobid, extranonce2, ntime, nonce, vote); + debuglog("submit %s (uid %d) %d, %s, %s, %s\n", client->sock->ip, client->userid, jobid, extranonce2, ntime, nonce); #endif string_lower(extranonce2); @@ -468,8 +467,16 @@ bool client_submit(YAAMP_CLIENT *client, json_value *json_params) client_record_difficulty(client); client->submit_bad = 0; - share_add(client, job, true, extranonce2, ntime, nonce, 0); + double share_diff = diff_to_target(hash_int); +#ifndef HASH_DEBUGLOG_ + // only log a few... + if (share_diff > (client->difficulty_actual * 16)) + debuglog("submit %s (uid %d) %d, %s, %s, %s, %.3f/%.3f\n", client->sock->ip, client->userid, + jobid, extranonce2, ntime, nonce, share_diff, client->difficulty_actual); +#endif + + share_add(client, job, true, extranonce2, ntime, nonce, share_diff, 0); object_unlock(job); return true; diff --git a/stratum/share.cpp b/stratum/share.cpp index c8ea49f..1a764f8 100644 --- a/stratum/share.cpp +++ b/stratum/share.cpp @@ -35,7 +35,7 @@ static YAAMP_WORKER *share_find_worker(YAAMP_CLIENT *client, YAAMP_JOB *job, boo return NULL; } -static void share_add_worker(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, int error_number) +static void share_add_worker(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, char *ntime, double share_diff, int error_number) { // check_job(job); g_list_worker.Enter(); @@ -52,6 +52,8 @@ static void share_add_worker(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, i worker->remoteid = job? (job->remote? job->remote->id: 0): 0; worker->valid = valid; worker->error_number = error_number; + sscanf(ntime, "%x", &worker->ntime); + worker->share_diff = share_diff; if(g_stratum_reconnect) worker->extranonce1 = !client->reconnecting && (client->reconnectable || client->extranonce_subscribe); @@ -73,10 +75,10 @@ static void share_add_worker(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, i ///////////////////////////////////////////////////////////////////////// -void share_add(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, char *extranonce2, char *ntime, char *nonce, int error_number) +void share_add(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, char *extranonce2, char *ntime, char *nonce, double share_diff, int error_number) { // check_job(job); - share_add_worker(client, job, valid, error_number); + share_add_worker(client, job, valid, ntime, share_diff, error_number); YAAMP_SHARE *share = new YAAMP_SHARE; memset(share, 0, sizeof(YAAMP_SHARE)); @@ -117,7 +119,7 @@ void share_write(YAAMP_DB *db) int count = 0; int now = time(NULL); - char buffer[1024*1024] = "insert into shares (userid, workerid, coinid, jobid, pid, valid, extranonce1, difficulty, time, algo, error) values "; + char buffer[1024*1024] = "insert into shares (userid, workerid, coinid, jobid, pid, valid, extranonce1, difficulty, share_diff, time, algo, error) values "; g_list_worker.Enter(); for(CLI li = g_list_worker.first; li; li = li->next) @@ -126,15 +128,20 @@ void share_write(YAAMP_DB *db) if(worker->deleted) continue; if(count) strcat(buffer, ","); - sprintf(buffer+strlen(buffer), "(%d, %d, %d, %d, %d, %d, %d, %f, %d, '%s', %d)", + sprintf(buffer+strlen(buffer), "(%d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '%s', %d)", worker->userid, worker->workerid, worker->coinid, worker->remoteid, pid, - worker->valid, worker->extranonce1, worker->difficulty, now, g_stratum_algo, worker->error_number); + worker->valid, worker->extranonce1, worker->difficulty, worker->share_diff, now, g_stratum_algo, worker->error_number); + + // todo: link max_ttf ? + if((now - worker->ntime) > 15*60 || worker->ntime > now) { + debuglog("ntime warning: value %d (%08x) offset %d secs from uid %d\n", worker->ntime, worker->ntime, (now - worker->ntime), worker->userid); + } if(++count >= 1000) { db_query(db, buffer); - strcpy(buffer, "insert into shares (userid, workerid, coinid, jobid, pid, valid, extranonce1, difficulty, time, algo, error) values "); + strcpy(buffer, "insert into shares (userid, workerid, coinid, jobid, pid, valid, extranonce1, difficulty, share_diff, time, algo, error) values "); count = 0; } diff --git a/stratum/share.h b/stratum/share.h index bf01107..5305d2d 100644 --- a/stratum/share.h +++ b/stratum/share.h @@ -9,9 +9,11 @@ public: bool valid; bool extranonce1; - int error_number; + + uint32_t ntime; double difficulty; + double share_diff; /* submitted hash diff */ }; inline void worker_delete(YAAMP_OBJECT *object) @@ -44,7 +46,7 @@ inline void share_delete(YAAMP_OBJECT *object) /////////// YAAMP_SHARE *share_find(int jobid, char *extranonce2, char *ntime, char *nonce, char *nonce1); -void share_add(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, char *extranonce2, char *ntime, char *nonce, int error_number); +void share_add(YAAMP_CLIENT *client, YAAMP_JOB *job, bool valid, char *extranonce2, char *ntime, char *nonce, double share_diff, int error_number); void share_write(YAAMP_DB *db); void share_prune(YAAMP_DB *db);