Browse Source

Create extra work fields when generating GBT work.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
875ca0fcc6
  1. 24
      cgminer.c
  2. 1
      miner.h

24
cgminer.c

@ -1499,6 +1499,8 @@ static unsigned char *__gbt_merkleroot(struct pool *pool) @@ -1499,6 +1499,8 @@ static unsigned char *__gbt_merkleroot(struct pool *pool)
return merkle_hash;
}
static void calc_diff(struct work *work, int known);
static void gen_gbt_work(struct pool *pool, struct work *work)
{
unsigned char *merkleroot;
@ -1508,19 +1510,35 @@ static void gen_gbt_work(struct pool *pool, struct work *work) @@ -1508,19 +1510,35 @@ static void gen_gbt_work(struct pool *pool, struct work *work)
merkleroot = __gbt_merkleroot(pool);
memcpy(work->data, &pool->gbt_version, 4);
hex2bin(work->data + 4, pool->previousblockhash, 32);
memcpy(work->data + 4 + 32, merkleroot, 32);
memcpy(work->data + 4 + 32 + 32, &pool->curtime, 4);
hex2bin(work->data + 4 + 32 + 32 + 4, pool->gbt_bits, 4);
memset(work->data + 4 + 32 + 32 + 4 + 4, 0, 4); /* nonce */
hex2bin(work->target, pool->gbt_target, 32);
mutex_unlock(&pool->gbt_lock);
memcpy(work->data + 4 + 32, merkleroot, 32);
memset(work->data + 4 + 32 + 32 + 4 + 4, 0, 4); /* nonce */
hex2bin(work->data + 4 + 32 + 32 + 4 + 4 + 4, "000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000", 48);
hex2bin(work->hash1, "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000", 64);
if (opt_debug) {
char *header = bin2hex(work->data, 4 + 32 + 32 + 4 + 4 + 4);
char *header = bin2hex(work->data, 128);
applog(LOG_DEBUG, "Generated GBT header %s", header);
free(header);
}
local_work++;
work->pool = pool;
work->gbt = true;
work->id = total_work++;
work->longpoll = false;
work->getwork_mode = GETWORK_MODE_GBT;
work->work_block = work_block;
calc_diff(work, 0);
gettimeofday(&work->tv_staged, NULL);
free(merkleroot);
}

1
miner.h

@ -909,6 +909,7 @@ struct pool { @@ -909,6 +909,7 @@ struct pool {
#define GETWORK_MODE_LP 'L'
#define GETWORK_MODE_BENCHMARK 'B'
#define GETWORK_MODE_STRATUM 'S'
#define GETWORK_MODE_GBT 'G'
struct work {
unsigned char data[128];

Loading…
Cancel
Save