|
|
|
@ -3732,12 +3732,13 @@ public:
@@ -3732,12 +3732,13 @@ public:
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
CBlock* CreateNewBlock(CReserveKey& reservekey) |
|
|
|
|
CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) |
|
|
|
|
{ |
|
|
|
|
// Create new block
|
|
|
|
|
auto_ptr<CBlock> pblock(new CBlock()); |
|
|
|
|
if (!pblock.get()) |
|
|
|
|
auto_ptr<CBlockTemplate> pblocktemplate(new CBlockTemplate()); |
|
|
|
|
if(!pblocktemplate.get()) |
|
|
|
|
return NULL; |
|
|
|
|
CBlock *pblock = &pblocktemplate->block; // pointer for convenience
|
|
|
|
|
|
|
|
|
|
// Create coinbase tx
|
|
|
|
|
CTransaction txNew; |
|
|
|
@ -3748,6 +3749,8 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
@@ -3748,6 +3749,8 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
|
|
|
|
|
|
|
|
|
|
// Add our coinbase tx as first transaction
|
|
|
|
|
pblock->vtx.push_back(txNew); |
|
|
|
|
pblocktemplate->vTxFees.push_back(-1); // updated at end
|
|
|
|
|
pblocktemplate->vTxSigOps.push_back(-1); // updated at end
|
|
|
|
|
|
|
|
|
|
// Largest block you're willing to create:
|
|
|
|
|
unsigned int nBlockMaxSize = GetArg("-blockmaxsize", MAX_BLOCK_SIZE_GEN/2); |
|
|
|
@ -3925,6 +3928,8 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
@@ -3925,6 +3928,8 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
|
|
|
|
|
|
|
|
|
|
// Added
|
|
|
|
|
pblock->vtx.push_back(tx); |
|
|
|
|
pblocktemplate->vTxFees.push_back(nTxFees); |
|
|
|
|
pblocktemplate->vTxSigOps.push_back(nTxSigOps); |
|
|
|
|
nBlockSize += nTxSize; |
|
|
|
|
++nBlockTx; |
|
|
|
|
nBlockSigOps += nTxSigOps; |
|
|
|
@ -3959,13 +3964,15 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
@@ -3959,13 +3964,15 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
|
|
|
|
|
printf("CreateNewBlock(): total size %"PRI64u"\n", nBlockSize); |
|
|
|
|
|
|
|
|
|
pblock->vtx[0].vout[0].nValue = GetBlockValue(pindexPrev->nHeight+1, nFees); |
|
|
|
|
pblocktemplate->vTxFees[0] = -nFees; |
|
|
|
|
|
|
|
|
|
// Fill in header
|
|
|
|
|
pblock->hashPrevBlock = pindexPrev->GetBlockHash(); |
|
|
|
|
pblock->UpdateTime(pindexPrev); |
|
|
|
|
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock.get()); |
|
|
|
|
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock); |
|
|
|
|
pblock->nNonce = 0; |
|
|
|
|
pblock->vtx[0].vin[0].scriptSig = CScript() << OP_0 << OP_0; |
|
|
|
|
pblocktemplate->vTxSigOps[0] = pblock->vtx[0].GetLegacySigOpCount(); |
|
|
|
|
|
|
|
|
|
CBlockIndex indexDummy(*pblock); |
|
|
|
|
indexDummy.pprev = pindexPrev; |
|
|
|
@ -3975,7 +3982,7 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
@@ -3975,7 +3982,7 @@ CBlock* CreateNewBlock(CReserveKey& reservekey)
|
|
|
|
|
throw std::runtime_error("CreateNewBlock() : ConnectBlock failed"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return pblock.release(); |
|
|
|
|
return pblocktemplate.release(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -4118,10 +4125,11 @@ void static BitcoinMiner(CWallet *pwallet)
@@ -4118,10 +4125,11 @@ void static BitcoinMiner(CWallet *pwallet)
|
|
|
|
|
unsigned int nTransactionsUpdatedLast = nTransactionsUpdated; |
|
|
|
|
CBlockIndex* pindexPrev = pindexBest; |
|
|
|
|
|
|
|
|
|
auto_ptr<CBlock> pblock(CreateNewBlock(reservekey)); |
|
|
|
|
if (!pblock.get()) |
|
|
|
|
auto_ptr<CBlockTemplate> pblocktemplate(CreateNewBlock(reservekey)); |
|
|
|
|
if (!pblocktemplate.get()) |
|
|
|
|
return; |
|
|
|
|
IncrementExtraNonce(pblock.get(), pindexPrev, nExtraNonce); |
|
|
|
|
CBlock *pblock = &pblocktemplate->block; |
|
|
|
|
IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); |
|
|
|
|
|
|
|
|
|
printf("Running BitcoinMiner with %"PRIszu" transactions in block (%u bytes)\n", pblock->vtx.size(), |
|
|
|
|
::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); |
|
|
|
@ -4134,7 +4142,7 @@ void static BitcoinMiner(CWallet *pwallet)
@@ -4134,7 +4142,7 @@ void static BitcoinMiner(CWallet *pwallet)
|
|
|
|
|
char pdatabuf[128+16]; char* pdata = alignup<16>(pdatabuf); |
|
|
|
|
char phash1buf[64+16]; char* phash1 = alignup<16>(phash1buf); |
|
|
|
|
|
|
|
|
|
FormatHashBuffers(pblock.get(), pmidstate, pdata, phash1); |
|
|
|
|
FormatHashBuffers(pblock, pmidstate, pdata, phash1); |
|
|
|
|
|
|
|
|
|
unsigned int& nBlockTime = *(unsigned int*)(pdata + 64 + 4); |
|
|
|
|
unsigned int& nBlockBits = *(unsigned int*)(pdata + 64 + 8); |
|
|
|
@ -4170,7 +4178,7 @@ void static BitcoinMiner(CWallet *pwallet)
@@ -4170,7 +4178,7 @@ void static BitcoinMiner(CWallet *pwallet)
|
|
|
|
|
assert(hash == pblock->GetHash()); |
|
|
|
|
|
|
|
|
|
SetThreadPriority(THREAD_PRIORITY_NORMAL); |
|
|
|
|
CheckWork(pblock.get(), *pwalletMain, reservekey); |
|
|
|
|
CheckWork(pblock, *pwalletMain, reservekey); |
|
|
|
|
SetThreadPriority(THREAD_PRIORITY_LOWEST); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|