X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fscrypt_mine.cpp;h=c424e494fc13834dad68b4f6aceb3e9b01f94446;hb=59a5b3624068f152efe55968ba77eb10a8e8f945;hp=afca59db32e2831c81d3615f19671e5a3ea80619;hpb=e45b499e2f6f78923d9f6df7a839f091eeb9b6fd;p=novacoin.git diff --git a/src/scrypt_mine.cpp b/src/scrypt_mine.cpp index afca59d..c424e49 100644 --- a/src/scrypt_mine.cpp +++ b/src/scrypt_mine.cpp @@ -37,29 +37,9 @@ #include "util.h" #include "net.h" -extern bool fShutdown; -extern bool fGenerateBitcoins; - -extern CBlockIndex* pindexBest; -extern uint32_t nTransactionsUpdated; - - -#if defined(__x86_64__) - -#define SCRYPT_3WAY -#define SCRYPT_BUFFER_SIZE (3 * 131072 + 63) - -extern "C" int scrypt_best_throughput(); -extern "C" void scrypt_core(uint32_t *X, uint32_t *V); -extern "C" void scrypt_core_2way(uint32_t *X, uint32_t *Y, uint32_t *V); -extern "C" void scrypt_core_3way(uint32_t *X, uint32_t *Y, uint32_t *Z, uint32_t *V); - -#elif defined(__i386__) - +#if defined (__x86_64__) || defined (__i386__) #define SCRYPT_BUFFER_SIZE (131072 + 63) - -extern "C" void scrypt_core(uint32_t *X, uint32_t *V); - +extern "C" void scrypt_core(uint32_t *X, uint32_t *V); #endif void *scrypt_buffer_alloc() { @@ -93,116 +73,3 @@ void scrypt_hash(const void* input, size_t inputlen, uint32_t *res, void *scratc { return scrypt(input, inputlen, res, scratchpad); } - -#ifdef SCRYPT_3WAY -static void scrypt_2way(const void *input1, const void *input2, size_t input1len, size_t input2len, uint32_t *res1, uint32_t *res2, void *scratchpad) -{ - uint32_t *V; - uint32_t X[32], Y[32]; - V = (uint32_t *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63)); - - PBKDF2_SHA256((const uint8_t*)input1, input1len, (const uint8_t*)input1, input1len, 1, (uint8_t *)X, 128); - PBKDF2_SHA256((const uint8_t*)input2, input2len, (const uint8_t*)input2, input2len, 1, (uint8_t *)Y, 128); - - scrypt_core_2way(X, Y, V); - - PBKDF2_SHA256((const uint8_t*)input1, input1len, (uint8_t *)X, 128, 1, (uint8_t*)res1, 32); - PBKDF2_SHA256((const uint8_t*)input2, input2len, (uint8_t *)Y, 128, 1, (uint8_t*)res2, 32); -} - -static void scrypt_3way(const void *input1, const void *input2, const void *input3, - size_t input1len, size_t input2len, size_t input3len, uint32_t *res1, uint32_t *res2, uint32_t *res3, - void *scratchpad) -{ - uint32_t *V; - uint32_t X[32], Y[32], Z[32]; - V = (uint32_t *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63)); - - PBKDF2_SHA256((const uint8_t*)input1, input1len, (const uint8_t*)input1, input1len, 1, (uint8_t *)X, 128); - PBKDF2_SHA256((const uint8_t*)input2, input2len, (const uint8_t*)input2, input2len, 1, (uint8_t *)Y, 128); - PBKDF2_SHA256((const uint8_t*)input3, input3len, (const uint8_t*)input3, input3len, 1, (uint8_t *)Z, 128); - - scrypt_core_3way(X, Y, Z, V); - - PBKDF2_SHA256((const uint8_t*)input1, input1len, (uint8_t *)X, 128, 1, (uint8_t*)res1, 32); - PBKDF2_SHA256((const uint8_t*)input2, input2len, (uint8_t *)Y, 128, 1, (uint8_t*)res2, 32); - PBKDF2_SHA256((const uint8_t*)input3, input3len, (uint8_t *)Z, 128, 1, (uint8_t*)res3, 32); -} -#endif - -unsigned int scanhash_scrypt(block_header *pdata, void *scratchbuf, - uint32_t max_nonce, uint32_t &hash_count, - void *result, block_header *res_header) -{ - hash_count = 0; - block_header data = *pdata; - uint32_t hash[8]; - unsigned char *hashc = (unsigned char *) &hash; - -#ifdef SCRYPT_3WAY - block_header data2 = *pdata; - uint32_t hash2[8]; - unsigned char *hashc2 = (unsigned char *) &hash2; - - block_header data3 = *pdata; - uint32_t hash3[8]; - unsigned char *hashc3 = (unsigned char *) &hash3; - - int throughput = scrypt_best_throughput(); -#endif - - uint32_t n = 0; - - while (true) { - - data.nonce = n++; - -#ifdef SCRYPT_3WAY - if (throughput >= 2 && n < max_nonce) { - data2.nonce = n++; - if(throughput >= 3) - { - data3.nonce = n++; - scrypt_3way(&data, &data2, &data3, 80, 80, 80, hash, hash2, hash3, scratchbuf); - hash_count += 3; - - if (hashc3[31] == 0 && hashc3[30] == 0) { - memcpy(result, hash3, 32); - *res_header = data3; - - return data3.nonce; - } - } - else - { - scrypt_2way(&data, &data2, 80, 80, hash, hash2, scratchbuf); - hash_count += 2; - } - - if (hashc2[31] == 0 && hashc2[30] == 0) { - memcpy(result, hash2, 32); - - return data2.nonce; - } - } else { - scrypt(&data, 80, hash, scratchbuf); - hash_count += 1; - } -#else - scrypt(&data, 80, hash, scratchbuf); - hash_count += 1; -#endif - if (hashc[31] == 0 && hashc[30] == 0) { - memcpy(result, hash, 32); - - return data.nonce; - } - - if (n >= max_nonce) { - hash_count = 0xffff + 1; - break; - } - } - - return (unsigned int) -1; -}