Browse Source

Merge commit '5ed6e9d' into stratum

Luke Dashjr 13 years ago
parent
commit
809ea5956c
2 changed files with 29 additions and 11 deletions
  1. 10 11
      miner.c
  2. 19 0
      util.c

+ 10 - 11
miner.c

@@ -5428,21 +5428,20 @@ static void gen_hash(unsigned char *data, unsigned char *hash, int len)
 	sha2(hash1, 32, hash, false);
 	sha2(hash1, 32, hash, false);
 }
 }
 
 
+/* Diff 1 is a 256 bit unsigned integer of
+ * 0x00000000ffff0000000000000000000000000000000000000000000000000000
+ * so we use a big endian 64 bit unsigned integer centred on the 5th byte to
+ * cover a huge range of difficulty targets, though not all 256 bits' worth */
 static void set_work_target(struct work *work, int diff)
 static void set_work_target(struct work *work, int diff)
 {
 {
 	unsigned char rtarget[33], target[33];
 	unsigned char rtarget[33], target[33];
-	uint8_t *data8;
-	int i, j;
-
-	/* Scale to any diff by setting number of bits according to diff */
-	hex2bin(rtarget, "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32);
-	data8 = (uint8_t *)(rtarget + 4);
-	for (i = 1, j = 0; i < diff; i++, j++) {
-		int byte = j / 8;
-		int bit = j % 8;
+	uint64_t *data64, h64;
 
 
-		data8[byte] &= ~(128 >> bit);
-	}
+	h64 = 0xFFFF000000000000ull;
+	h64 /= (uint64_t)diff;
+	memset(rtarget, 0, 32);
+	data64 = (uint64_t *)(rtarget + 4);
+	*data64 = htobe64(h64);
 	swab256(target, rtarget);
 	swab256(target, rtarget);
 	if (opt_debug) {
 	if (opt_debug) {
 		char *htarget = bin2hex(target, 32);
 		char *htarget = bin2hex(target, 32);

+ 19 - 0
util.c

@@ -1103,6 +1103,21 @@ static bool parse_reconnect(struct pool *pool, json_t *val)
 	return true;
 	return true;
 }
 }
 
 
+static bool send_version(struct pool *pool, json_t *val)
+{
+	char s[RBUFSIZE];
+	int id = json_integer_value(json_object_get(val, "id"));
+	
+	if (!id)
+		return false;
+
+	sprintf(s, "{\"id\": %d, \"result\": \""PACKAGE"/"VERSION"\", \"error\": null}", id);
+	if (!stratum_send(pool, s, strlen(s)))
+		return false;
+
+	return true;
+}
+
 bool parse_method(struct pool *pool, char *s)
 bool parse_method(struct pool *pool, char *s)
 {
 {
 	json_t *val = NULL, *method, *err_val, *params;
 	json_t *val = NULL, *method, *err_val, *params;
@@ -1159,6 +1174,10 @@ bool parse_method(struct pool *pool, char *s)
 		goto out;
 		goto out;
 	}
 	}
 
 
+	if (!strncasecmp(buf, "client.get_version", 18) && send_version(pool, val)) {
+		ret = true;
+		goto out;
+	}
 out:
 out:
 	if (val)
 	if (val)
 		json_decref(val);
 		json_decref(val);