X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fminer.cpp;fp=src%2Fminer.cpp;h=6057eecdda1103212d8d2ab0f511cbe9038b0fda;hp=f9bdf80334eef3f792fce3effab6ae61cc25befb;hb=fe038d999ac1d67fa617f0a0e7aeae96a4d4cd04;hpb=0cc4d6f0a43c1b3de8a5fd1fbf40e7245b3147b5 diff --git a/src/miner.cpp b/src/miner.cpp index f9bdf80..6057eec 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -7,6 +7,7 @@ #include "txdb.h" #include "miner.h" #include "kernel.h" +#include "kernel_worker.h" using namespace std; @@ -530,8 +531,8 @@ bool CheckStake(CBlock* pblock, CWallet& wallet) } // Precalculated SHA256 contexts and metadata -// (txid, vout.n) => (SHA256_CTX, (tx.nTime, nAmount)) -typedef std::map, std::pair > > MidstateMap; +// (txid, vout.n) => (kernel, (tx.nTime, nAmount)) +typedef std::map, std::pair, std::pair > > MidstateMap; // Fill the inputs map with precalculated contexts and metadata bool FillMap(CWallet *pwallet, uint32_t nUpperTime, MidstateMap &inputsMap) @@ -598,16 +599,9 @@ bool FillMap(CWallet *pwallet, uint32_t nUpperTime, MidstateMap &inputsMap) CDataStream ssKernel(SER_GETHASH, 0); ssKernel << nStakeModifier; ssKernel << block.nTime << (txindex.pos.nTxPos - txindex.pos.nBlockPos) << pcoin->first->nTime << pcoin->second; - CDataStream::const_iterator itK = ssKernel.begin(); - // Init new sha256 context and update it - // with first 24 bytes of kernel - SHA256_CTX ctx; - SHA256_Init(&ctx); - SHA256_Update(&ctx, (unsigned char*)&itK[0], 8 + 16); - - // (txid, vout.n) => (SHA256_CTX, (tx.nTime, nAmount)) - inputsMap[key] = make_pair(ctx, make_pair(pcoin->first->nTime, pcoin->first->vout[pcoin->second].nValue)); + // (txid, vout.n) => (kernel, (tx.nTime, nAmount)) + inputsMap[key] = make_pair(std::vector(ssKernel.begin(), ssKernel.end()), make_pair(pcoin->first->nTime, pcoin->first->vout[pcoin->second].nValue)); } nStakeInputsMapSize = inputsMap.size(); @@ -633,13 +627,13 @@ bool ScanMap(const MidstateMap &inputsMap, uint32_t nBits, MidstateMap::key_type interval.first = nSearchTime; interval.second = nSearchTime - min(nSearchTime-nLastCoinStakeSearchTime, nMaxStakeSearchInterval); - // (txid, nout) => (SHA256_CTX, (tx.nTime, nAmount)) + // (txid, nout) => (kernel, (tx.nTime, nAmount)) for(MidstateMap::const_iterator input = inputsMap.begin(); input != inputsMap.end(); input++) { - SHA256_CTX ctx = input->second.first; + unsigned char *kernel = (unsigned char *) &input->second.first[0]; // scan(State, Bits, Time, Amount, ...) - if (ScanContextBackward(ctx, nBits, input->second.second.first, input->second.second.second, interval, solution)) + if (ScanKernelBackward(kernel, nBits, input->second.second.first, input->second.second.second, interval, solution)) { // Solution found LuckyInput = input->first; // (txid, nout)