Browse Source

Allow arbitrary length coinbase2 for proxying to work properly

master
Con Kolivas 11 years ago
parent
commit
7eb4e018b6
  1. 12
      src/stratifier.c

12
src/stratifier.c

@ -122,8 +122,8 @@ struct workbase {
int enonce2varlen; // length of space left for extranonce2 - usually 8 unless proxying int enonce2varlen; // length of space left for extranonce2 - usually 8 unless proxying
char coinb2[128]; // coinbase2 char *coinb2; // coinbase2
uchar coinb2bin[64]; uchar *coinb2bin;
int coinb2len; // length of above int coinb2len; // length of above
/* Cached header binary */ /* Cached header binary */
@ -290,6 +290,7 @@ static void generate_coinbase(ckpool_t *ckp, workbase_t *wb)
len += wb->enonce1varlen; len += wb->enonce1varlen;
len += wb->enonce2varlen; len += wb->enonce2varlen;
wb->coinb2bin = ckalloc(128);
memcpy(wb->coinb2bin, "\x0a\x63\x6b\x70\x6f\x6f\x6c", 7); memcpy(wb->coinb2bin, "\x0a\x63\x6b\x70\x6f\x6f\x6c", 7);
wb->coinb2len = 7; wb->coinb2len = 7;
if (ckp->btcsig) { if (ckp->btcsig) {
@ -324,7 +325,7 @@ static void generate_coinbase(ckpool_t *ckp, workbase_t *wb)
wb->coinb2len += 4; // Blank lock wb->coinb2len += 4; // Blank lock
__bin2hex(wb->coinb2, wb->coinb2bin, wb->coinb2len); wb->coinb2 = bin2hex(wb->coinb2bin, wb->coinb2len);
LOGDEBUG("Coinb2: %s", wb->coinb2); LOGDEBUG("Coinb2: %s", wb->coinb2);
/* Coinbase 2 complete */ /* Coinbase 2 complete */
@ -345,6 +346,8 @@ static void clear_workbase(workbase_t *wb)
free(wb->flags); free(wb->flags);
free(wb->txn_data); free(wb->txn_data);
free(wb->logdir); free(wb->logdir);
free(wb->coinb2bin);
free(wb->coinb2);
json_decref(wb->merkle_array); json_decref(wb->merkle_array);
free(wb); free(wb);
} }
@ -560,8 +563,9 @@ static void update_notify(ckpool_t *ckp)
wb->coinb1len = strlen(wb->coinb1) / 2; wb->coinb1len = strlen(wb->coinb1) / 2;
hex2bin(wb->coinb1bin, wb->coinb1, wb->coinb1len); hex2bin(wb->coinb1bin, wb->coinb1, wb->coinb1len);
wb->height = get_sernumber(wb->coinb1bin + 42); wb->height = get_sernumber(wb->coinb1bin + 42);
json_strcpy(wb->coinb2, val, "coinbase2"); json_strdup(&wb->coinb2, val, "coinbase2");
wb->coinb2len = strlen(wb->coinb2) / 2; wb->coinb2len = strlen(wb->coinb2) / 2;
wb->coinb2bin = ckalloc(wb->coinb2len);
hex2bin(wb->coinb2bin, wb->coinb2, wb->coinb2len); hex2bin(wb->coinb2bin, wb->coinb2, wb->coinb2len);
wb->merkle_array = json_copy(json_object_get(val, "merklehash")); wb->merkle_array = json_copy(json_object_get(val, "merklehash"));
wb->merkles = json_array_size(wb->merkle_array); wb->merkles = json_array_size(wb->merkle_array);

Loading…
Cancel
Save