enhance solo mining, update http headers
and prepare next version...
This commit is contained in:
parent
c0b5513316
commit
799b230af2
@ -31,9 +31,6 @@
|
|||||||
<Filter Include="Source Files\code">
|
<Filter Include="Source Files\code">
|
||||||
<UniqueIdentifier>{fe39ded0-754b-415f-a284-038a15a0aa55}</UniqueIdentifier>
|
<UniqueIdentifier>{fe39ded0-754b-415f-a284-038a15a0aa55}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="Source Files\CUDA\jansson">
|
|
||||||
<UniqueIdentifier>{17b56151-79ec-4a32-bac3-9d94ae7f68fe}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Source Files\CUDA\JHA">
|
<Filter Include="Source Files\CUDA\JHA">
|
||||||
<UniqueIdentifier>{d8f2e173-a0a5-455b-8efc-42511b585156}</UniqueIdentifier>
|
<UniqueIdentifier>{d8f2e173-a0a5-455b-8efc-42511b585156}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
@ -67,25 +64,28 @@
|
|||||||
<Filter Include="Source Files\CUDA\x17">
|
<Filter Include="Source Files\CUDA\x17">
|
||||||
<UniqueIdentifier>{85dfae6a-66ca-4332-8cec-98ee70cbdf2f}</UniqueIdentifier>
|
<UniqueIdentifier>{85dfae6a-66ca-4332-8cec-98ee70cbdf2f}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="Source Files\jansson">
|
||||||
|
<UniqueIdentifier>{17b56151-79ec-4a32-bac3-9d94ae7f68fe}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="compat\jansson\dump.c">
|
<ClCompile Include="compat\jansson\dump.c">
|
||||||
<Filter>Source Files\CUDA\jansson</Filter>
|
<Filter>Source Files\jansson</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="compat\jansson\hashtable.c">
|
<ClCompile Include="compat\jansson\hashtable.c">
|
||||||
<Filter>Source Files\CUDA\jansson</Filter>
|
<Filter>Source Files\jansson</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="compat\jansson\load.c">
|
<ClCompile Include="compat\jansson\load.c">
|
||||||
<Filter>Source Files\CUDA\jansson</Filter>
|
<Filter>Source Files\jansson</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="compat\jansson\strbuffer.c">
|
<ClCompile Include="compat\jansson\strbuffer.c">
|
||||||
<Filter>Source Files\CUDA\jansson</Filter>
|
<Filter>Source Files\jansson</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="compat\jansson\utf.c">
|
<ClCompile Include="compat\jansson\utf.c">
|
||||||
<Filter>Source Files\CUDA\jansson</Filter>
|
<Filter>Source Files\jansson</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="compat\jansson\value.c">
|
<ClCompile Include="compat\jansson\value.c">
|
||||||
<Filter>Source Files\CUDA\jansson</Filter>
|
<Filter>Source Files\jansson</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="compat\getopt\getopt_long.c">
|
<ClCompile Include="compat\getopt\getopt_long.c">
|
||||||
<Filter>Source Files\getopt</Filter>
|
<Filter>Source Files\getopt</Filter>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
AC_INIT([ccminer], [2014.09.11])
|
AC_INIT([ccminer], [2014.09.28])
|
||||||
|
|
||||||
AC_PREREQ([2.59c])
|
AC_PREREQ([2.59c])
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
|
22
cpu-miner.c
22
cpu-miner.c
@ -362,6 +362,10 @@ struct work {
|
|||||||
|
|
||||||
uint32_t scanned_from;
|
uint32_t scanned_from;
|
||||||
uint32_t scanned_to;
|
uint32_t scanned_to;
|
||||||
|
|
||||||
|
/* deprecated, but maybe useful
|
||||||
|
for some 256-bit algos */
|
||||||
|
uint32_t midstate[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct work g_work;
|
static struct work g_work;
|
||||||
@ -421,6 +425,13 @@ static bool work_decode(const json_t *val, struct work *work)
|
|||||||
for (i = 0; i < ARRAY_SIZE(work->target); i++)
|
for (i = 0; i < ARRAY_SIZE(work->target); i++)
|
||||||
work->target[i] = le32dec(work->target + i);
|
work->target[i] = le32dec(work->target + i);
|
||||||
|
|
||||||
|
if (opt_algo == ALGO_ANIME || opt_algo == ALGO_BLAKE /* || opt_algo == ALGO_SHA256D || opt_algo == ALGO_SCRYPT */) {
|
||||||
|
jobj_binary(val, "midstate", work->midstate, sizeof(work->midstate));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* use work ntime as job id (solo-mining) */
|
||||||
|
cbin2hex(work->job_id, (const char*)&work->data[17], 4);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
err_out:
|
err_out:
|
||||||
@ -594,8 +605,13 @@ static bool get_upstream_work(CURL *curl, struct work *work)
|
|||||||
|
|
||||||
if (opt_debug && rc) {
|
if (opt_debug && rc) {
|
||||||
timeval_subtract(&diff, &tv_end, &tv_start);
|
timeval_subtract(&diff, &tv_end, &tv_start);
|
||||||
applog(LOG_DEBUG, "DEBUG: got new work in %u µs",
|
/* anime : {"error":null,"result":{
|
||||||
diff.tv_sec * 1000000 + diff.tv_usec);
|
"target": "0000000000000000000000000000000000000000000000000000331a07000000",
|
||||||
|
"midstate":"57049c1d01d724567a1eb1886c5142cb79e7048f2ef206bee32441a90f3ec49e",
|
||||||
|
"hash1":"00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000",
|
||||||
|
"data":"000000701bfd5bf1745a10bde7cab641e90b196146410b2b28d60d57b90f0b3d0000000454b7169957e174da9575c67bc4da6ba9d204ca04c8ff5ef05cb06c2cd38e92065427a8331d071a3300000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000"},
|
||||||
|
"id":0} */
|
||||||
|
applog(LOG_DEBUG, "got new work %s", work->job_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
json_decref(val);
|
json_decref(val);
|
||||||
@ -1459,7 +1475,7 @@ out:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PROGRAM_VERSION "1.4.4"
|
#define PROGRAM_VERSION "1.4.5"
|
||||||
static void show_version_and_exit(void)
|
static void show_version_and_exit(void)
|
||||||
{
|
{
|
||||||
printf("%s v%s\n"
|
printf("%s v%s\n"
|
||||||
|
@ -156,7 +156,7 @@
|
|||||||
#define PACKAGE_NAME "ccminer"
|
#define PACKAGE_NAME "ccminer"
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
/* Define to the full name and version of this package. */
|
||||||
#define PACKAGE_STRING "ccminer 2014.09.11"
|
#define PACKAGE_STRING "ccminer 2014.09.28"
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
#define PACKAGE_TARNAME "ccminer"
|
#define PACKAGE_TARNAME "ccminer"
|
||||||
@ -165,7 +165,7 @@
|
|||||||
#define PACKAGE_URL ""
|
#define PACKAGE_URL ""
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#define PACKAGE_VERSION "2014.09.11"
|
#define PACKAGE_VERSION "1.4"
|
||||||
|
|
||||||
/* If using the C implementation of alloca, define if you know the
|
/* If using the C implementation of alloca, define if you know the
|
||||||
direction of stack growth for your system; otherwise it will be
|
direction of stack growth for your system; otherwise it will be
|
||||||
@ -188,7 +188,7 @@
|
|||||||
#define USE_XOP 1
|
#define USE_XOP 1
|
||||||
|
|
||||||
/* Version number of package */
|
/* Version number of package */
|
||||||
#define VERSION "2014.09.11"
|
#define VERSION "2014.09.28"
|
||||||
|
|
||||||
/* Define curl_free() as free() if our version of curl lacks curl_free. */
|
/* Define curl_free() as free() if our version of curl lacks curl_free. */
|
||||||
/* #undef curl_free */
|
/* #undef curl_free */
|
||||||
|
3
miner.h
3
miner.h
@ -352,7 +352,8 @@ extern uint16_t opt_vote;
|
|||||||
extern void applog(int prio, const char *fmt, ...);
|
extern void applog(int prio, const char *fmt, ...);
|
||||||
extern json_t *json_rpc_call(CURL *curl, const char *url, const char *userpass,
|
extern json_t *json_rpc_call(CURL *curl, const char *url, const char *userpass,
|
||||||
const char *rpc_req, bool, bool, int *);
|
const char *rpc_req, bool, bool, int *);
|
||||||
extern char *bin2hex(const unsigned char *p, size_t len);
|
extern void cbin2hex(char *out, const char *in, size_t len);
|
||||||
|
extern char *bin2hex(const unsigned char *in, size_t len);
|
||||||
extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len);
|
extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len);
|
||||||
extern int timeval_subtract(struct timeval *result, struct timeval *x,
|
extern int timeval_subtract(struct timeval *result, struct timeval *x,
|
||||||
struct timeval *y);
|
struct timeval *y);
|
||||||
|
@ -140,7 +140,7 @@ extern "C" void animehash(void *state, const void *input)
|
|||||||
memcpy(state, hash, 32);
|
memcpy(state, hash, 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
struct HashPredicate
|
struct HashPredicate
|
||||||
{
|
{
|
||||||
HashPredicate(uint32_t *hashes, uint32_t startNonce) :
|
HashPredicate(uint32_t *hashes, uint32_t startNonce) :
|
||||||
@ -158,7 +158,7 @@ struct HashPredicate
|
|||||||
uint32_t *m_hashes;
|
uint32_t *m_hashes;
|
||||||
uint32_t m_startNonce;
|
uint32_t m_startNonce;
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
|
extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
|
||||||
const uint32_t *ptarget, uint32_t max_nonce,
|
const uint32_t *ptarget, uint32_t max_nonce,
|
||||||
@ -170,7 +170,6 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
|
|||||||
((uint32_t*)ptarget)[7] = 0x00000f;
|
((uint32_t*)ptarget)[7] = 0x00000f;
|
||||||
|
|
||||||
const uint32_t Htarg = ptarget[7];
|
const uint32_t Htarg = ptarget[7];
|
||||||
|
|
||||||
const int throughput = 256*2048; // 100;
|
const int throughput = 256*2048; // 100;
|
||||||
|
|
||||||
static bool init[8] = {0,0,0,0,0,0,0,0};
|
static bool init[8] = {0,0,0,0,0,0,0,0};
|
||||||
@ -178,8 +177,7 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
|
|||||||
{
|
{
|
||||||
cudaSetDevice(device_map[thr_id]);
|
cudaSetDevice(device_map[thr_id]);
|
||||||
|
|
||||||
// Konstanten kopieren, Speicher belegen
|
CUDA_SAFE_CALL(cudaMalloc(&d_hash[thr_id], 16 * sizeof(uint32_t) * throughput));
|
||||||
cudaMalloc(&d_hash[thr_id], 16 * sizeof(uint32_t) * throughput);
|
|
||||||
|
|
||||||
quark_blake512_cpu_init(thr_id, throughput);
|
quark_blake512_cpu_init(thr_id, throughput);
|
||||||
quark_groestl512_cpu_init(thr_id, throughput);
|
quark_groestl512_cpu_init(thr_id, throughput);
|
||||||
@ -190,10 +188,10 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
|
|||||||
cuda_check_cpu_init(thr_id, throughput);
|
cuda_check_cpu_init(thr_id, throughput);
|
||||||
quark_compactTest_cpu_init(thr_id, throughput);
|
quark_compactTest_cpu_init(thr_id, throughput);
|
||||||
|
|
||||||
cudaMalloc(&d_animeNonces[thr_id], sizeof(uint32_t)*throughput);
|
CUDA_SAFE_CALL(cudaMalloc(&d_animeNonces[thr_id], sizeof(uint32_t)*throughput));
|
||||||
cudaMalloc(&d_branch1Nonces[thr_id], sizeof(uint32_t)*throughput);
|
CUDA_SAFE_CALL(cudaMalloc(&d_branch1Nonces[thr_id], sizeof(uint32_t)*throughput));
|
||||||
cudaMalloc(&d_branch2Nonces[thr_id], sizeof(uint32_t)*throughput);
|
CUDA_SAFE_CALL(cudaMalloc(&d_branch2Nonces[thr_id], sizeof(uint32_t)*throughput));
|
||||||
cudaMalloc(&d_branch3Nonces[thr_id], sizeof(uint32_t)*throughput);
|
CUDA_SAFE_CALL(cudaMalloc(&d_branch3Nonces[thr_id], sizeof(uint32_t)*throughput));
|
||||||
|
|
||||||
init[thr_id] = true;
|
init[thr_id] = true;
|
||||||
}
|
}
|
||||||
@ -269,17 +267,22 @@ extern "C" int scanhash_anime(int thr_id, uint32_t *pdata,
|
|||||||
if ((vhash64[7]<=Htarg) && fulltest(vhash64, ptarget)) {
|
if ((vhash64[7]<=Htarg) && fulltest(vhash64, ptarget)) {
|
||||||
|
|
||||||
pdata[19] = foundNonce;
|
pdata[19] = foundNonce;
|
||||||
*hashes_done = (foundNonce - first_nonce + 1)/2;
|
*hashes_done = foundNonce - first_nonce + 1;
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
applog(LOG_INFO, "GPU #%d: result for nonce $%08X does not validate on CPU!", thr_id, foundNonce);
|
applog(LOG_INFO, "GPU #%d: result for nonce $%08X does not validate on CPU!", thr_id, foundNonce);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((uint64_t)pdata[19] + throughput > (uint64_t)max_nonce) {
|
||||||
|
pdata[19] = max_nonce;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
pdata[19] += throughput;
|
pdata[19] += throughput;
|
||||||
|
|
||||||
} while (pdata[19] < max_nonce && !work_restart[thr_id].restart);
|
} while (!work_restart[thr_id].restart);
|
||||||
|
|
||||||
*hashes_done = (pdata[19] - first_nonce + 1)/2;
|
*hashes_done = pdata[19] - first_nonce + 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
23
util.c
23
util.c
@ -257,12 +257,12 @@ static size_t resp_hdr_cb(void *ptr, size_t size, size_t nmemb, void *user_data)
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!strcasecmp("X-Long-Polling", key)) {
|
if (!strcasecmp("X-Long-Polling", key)) {
|
||||||
hi->lp_path = val; /* steal memory reference */
|
hi->lp_path = val; /* X-Mining-Extensions: longpoll */
|
||||||
val = NULL;
|
val = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcasecmp("X-Reject-Reason", key)) {
|
if (!strcasecmp("X-Reject-Reason", key)) {
|
||||||
hi->reason = val; /* steal memory reference */
|
hi->reason = val; /* X-Mining-Extensions: reject-reason */
|
||||||
val = NULL;
|
val = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,7 +389,7 @@ json_t *json_rpc_call(CURL *curl, const char *url,
|
|||||||
headers = curl_slist_append(headers, "Content-Type: application/json");
|
headers = curl_slist_append(headers, "Content-Type: application/json");
|
||||||
headers = curl_slist_append(headers, len_hdr);
|
headers = curl_slist_append(headers, len_hdr);
|
||||||
headers = curl_slist_append(headers, "User-Agent: " USER_AGENT);
|
headers = curl_slist_append(headers, "User-Agent: " USER_AGENT);
|
||||||
headers = curl_slist_append(headers, "X-Mining-Extensions: midstate");
|
headers = curl_slist_append(headers, "X-Mining-Extensions: longpoll midstate reject-reason");
|
||||||
headers = curl_slist_append(headers, "Accept:"); /* disable Accept hdr*/
|
headers = curl_slist_append(headers, "Accept:"); /* disable Accept hdr*/
|
||||||
headers = curl_slist_append(headers, "Expect:"); /* disable Expect hdr*/
|
headers = curl_slist_append(headers, "Expect:"); /* disable Expect hdr*/
|
||||||
|
|
||||||
@ -433,7 +433,7 @@ json_t *json_rpc_call(CURL *curl, const char *url,
|
|||||||
|
|
||||||
if (opt_protocol) {
|
if (opt_protocol) {
|
||||||
char *s = json_dumps(val, JSON_INDENT(3));
|
char *s = json_dumps(val, JSON_INDENT(3));
|
||||||
applog(LOG_DEBUG, "JSON protocol response:\n%s", s);
|
applog(LOG_DEBUG, "JSON protocol response:\n%s\n", s);
|
||||||
free(s);
|
free(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,15 +476,22 @@ err_out:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *bin2hex(const unsigned char *p, size_t len)
|
void cbin2hex(char *out, const char *in, size_t len)
|
||||||
{
|
{
|
||||||
|
if (out) {
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
sprintf(out + (i * 2), "%02x", (uint8_t)in[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *bin2hex(const unsigned char *in, size_t len)
|
||||||
|
{
|
||||||
char *s = (char*)malloc((len * 2) + 1);
|
char *s = (char*)malloc((len * 2) + 1);
|
||||||
if (!s)
|
if (!s)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
cbin2hex(s, (const char *) in, len);
|
||||||
sprintf(s + (i * 2), "%02x", (unsigned int) p[i]);
|
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -1433,7 +1440,7 @@ extern void applog_compare_hash(unsigned char *hash, unsigned char *hash2)
|
|||||||
char s[256] = "";
|
char s[256] = "";
|
||||||
int len = 0;
|
int len = 0;
|
||||||
for (int i=0; i < 32; i += 4) {
|
for (int i=0; i < 32; i += 4) {
|
||||||
char *color = memcmp(hash+i, hash2+i, 4) ? CL_RED : CL_GRY;
|
char *color = memcmp(hash+i, hash2+i, 4) ? CL_WHT : CL_GRY;
|
||||||
len += sprintf(s+len, "%s%02x%02x%02x%02x " CL_GRY, color,
|
len += sprintf(s+len, "%s%02x%02x%02x%02x " CL_GRY, color,
|
||||||
hash[i], hash[i+1], hash[i+2], hash[i+3]);
|
hash[i], hash[i+1], hash[i+2], hash[i+3]);
|
||||||
s[len] = '\0';
|
s[len] = '\0';
|
||||||
|
Loading…
Reference in New Issue
Block a user