if (tx.nTime > GetAdjustedTime() || (fProofOfStake && tx.nTime > txCoinStake->nTime))
continue;
- // Simplify transaction fee - allow free = false
- int64_t nMinFee = tx.GetMinFee(nBlockSize, true, GMF_BLOCK, nTxSize);
-
// Skip free transactions if we're past the minimum block size:
if (fSortedByFee && (dFeePerKb < nMinTxFee) && (nBlockSize + nTxSize >= nBlockMinSize))
continue;
if (!tx.FetchInputs(txdb, mapTestPoolTmp, false, true, mapInputs, fInvalid))
continue;
+ // Transaction fee
int64_t nTxFees = tx.GetValueIn(mapInputs)-tx.GetValueOut();
+ int64_t nMinFee = tx.GetMinFee(nBlockSize, true, GMF_BLOCK, nTxSize);
if (nTxFees < nMinFee)
continue;
+ // Sigops accumulation
nTxSigOps += tx.GetP2SHSigOpCount(mapInputs);
if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS)
continue;
return false;
}
-void StakeMiner(CWallet *pwallet)
+// TODO: Get rid of nested loops
+void StakeMiner(CWallet* pwallet)
{
SetThreadPriority(THREAD_PRIORITY_LOWEST);
CTransaction txCoinStake;
// Create new coinstake transaction
- if (!pwallet->CreateCoinStake(LuckyInput.first, LuckyInput.second, solution.second, pindexPrev->nBits, txCoinStake, key))
+ if (!pwallet->CreateCoinStake(LuckyInput.first, LuckyInput.second, solution.second, nBits, txCoinStake, key))
{
string strMessage = _("Warning: Unable to create coinstake transaction, see debug.log for the details. Mining thread has been stopped.");
strMiscWarning = strMessage;
continue;
}
}
+
+// Stake minter thread
+void ThreadStakeMinter(void* parg)
+{
+ printf("ThreadStakeMinter started\n");
+ CWallet* pwallet = (CWallet*)parg;
+ try
+ {
+ vnThreadsRunning[THREAD_MINTER]++;
+ StakeMiner(pwallet);
+ vnThreadsRunning[THREAD_MINTER]--;
+ }
+ catch (std::exception& e) {
+ vnThreadsRunning[THREAD_MINTER]--;
+ PrintException(&e, "ThreadStakeMinter()");
+ } catch (...) {
+ vnThreadsRunning[THREAD_MINTER]--;
+ PrintException(NULL, "ThreadStakeMinter()");
+ }
+ printf("ThreadStakeMinter exiting, %d threads remaining\n", vnThreadsRunning[THREAD_MINTER]);
+}