shares: store (temporary) submitted work diff for future stats...

PS: this table is only used for current round (until a bloc is found)

also log a part of the submitted shares by default, to show activity
This commit is contained in:
Tanguy Pruvot 2016-02-23 21:12:15 +01:00
parent 6950057b17
commit 553c920cab
4 changed files with 38 additions and 13 deletions

View file

@ -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`;

View file

@ -294,7 +294,7 @@ void client_submit_error(YAAMP_CLIENT *client, YAAMP_JOB *job, int id, const cha
else else
{ {
client_send_error(client, id, message); 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++; client->submit_bad++;
#ifdef HASH_DEBUGLOG_ #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); strncpy(vote, json_params->u.array.values[5]->u.string.ptr, 7);
#ifdef HASH_DEBUGLOG_ #ifdef HASH_DEBUGLOG_
debuglog("submit %s (uid %d) %d, %s, t=%s, n=%s, vote=%s\n", client->sock->ip, client->userid, debuglog("submit %s (uid %d) %d, %s, %s, %s\n", client->sock->ip, client->userid, jobid, extranonce2, ntime, nonce);
jobid, extranonce2, ntime, nonce, vote);
#endif #endif
string_lower(extranonce2); string_lower(extranonce2);
@ -468,8 +467,16 @@ bool client_submit(YAAMP_CLIENT *client, json_value *json_params)
client_record_difficulty(client); client_record_difficulty(client);
client->submit_bad = 0; 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); object_unlock(job);
return true; return true;

View file

@ -35,7 +35,7 @@ static YAAMP_WORKER *share_find_worker(YAAMP_CLIENT *client, YAAMP_JOB *job, boo
return NULL; 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); // check_job(job);
g_list_worker.Enter(); 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->remoteid = job? (job->remote? job->remote->id: 0): 0;
worker->valid = valid; worker->valid = valid;
worker->error_number = error_number; worker->error_number = error_number;
sscanf(ntime, "%x", &worker->ntime);
worker->share_diff = share_diff;
if(g_stratum_reconnect) if(g_stratum_reconnect)
worker->extranonce1 = !client->reconnecting && (client->reconnectable || client->extranonce_subscribe); 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); // 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; YAAMP_SHARE *share = new YAAMP_SHARE;
memset(share, 0, sizeof(YAAMP_SHARE)); memset(share, 0, sizeof(YAAMP_SHARE));
@ -117,7 +119,7 @@ void share_write(YAAMP_DB *db)
int count = 0; int count = 0;
int now = time(NULL); 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(); g_list_worker.Enter();
for(CLI li = g_list_worker.first; li; li = li->next) 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(worker->deleted) continue;
if(count) strcat(buffer, ","); 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->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) if(++count >= 1000)
{ {
db_query(db, buffer); 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; count = 0;
} }

View file

@ -9,9 +9,11 @@ public:
bool valid; bool valid;
bool extranonce1; bool extranonce1;
int error_number; int error_number;
uint32_t ntime;
double difficulty; double difficulty;
double share_diff; /* submitted hash diff */
}; };
inline void worker_delete(YAAMP_OBJECT *object) 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); 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_write(YAAMP_DB *db);
void share_prune(YAAMP_DB *db); void share_prune(YAAMP_DB *db);