Browse Source

Correct last few components of GBT block generation courtesy of Luke-jr.

Con Kolivas 13 years ago
parent
commit
85f400bf80
2 changed files with 13 additions and 2 deletions
  1. 3 2
      cgminer.c
  2. 10 0
      miner.h

+ 3 - 2
cgminer.c

@@ -1428,7 +1428,7 @@ static bool __build_gbt_txns(struct pool *pool, json_t *res_val)
 		if (unlikely(!hex2bin(txn_bin, txn, txn_len / 2)))
 			quit(1, "Failed to hex2bin txn_bin");
 
-		gen_hash(txn_bin, pool->txn_hashes + (32 * i), txn_len);
+		gen_hash(txn_bin, pool->txn_hashes + (32 * i), txn_len / 2);
 		free(txn_bin);
 	}
 out:
@@ -1446,7 +1446,7 @@ static unsigned char *__gbt_merkleroot(struct pool *pool)
 
 	gen_hash(pool->gbt_coinbase, merkle_hash, pool->coinbase_len);
 
-	if (pool->gbt_txns > 1)
+	if (pool->gbt_txns)
 		memcpy(merkle_hash + 32, pool->txn_hashes, pool->gbt_txns * 32);
 
 	txns = pool->gbt_txns + 1;
@@ -1493,6 +1493,7 @@ static void gen_gbt_work(struct pool *pool, struct work *work)
 	mutex_unlock(&pool->gbt_lock);
 
 	memcpy(work->data + 4 + 32, merkleroot, 32);
+	flip32(work->data + 4 + 32, merkleroot);
 	free(merkleroot);
 	memset(work->data + 4 + 32 + 32 + 4 + 4, 0, 4); /* nonce */
 

+ 10 - 0
miner.h

@@ -544,6 +544,16 @@ static inline void swab256(void *dest_p, const void *src_p)
 	dest[7] = swab32(src[0]);
 }
 
+static inline void flip32(void *dest_p, const void *src_p)
+{
+	uint32_t *dest = dest_p;
+	const uint32_t *src = src_p;
+	int i;
+
+	for (i = 0; i < 8; i++)
+		dest[i] = swab32(src[i]);
+}
+
 static inline void flip80(void *dest_p, const void *src_p)
 {
 	uint32_t *dest = dest_p;