};
// CreateNewBlock: create new block (without proof-of-work/with provided coinstake)
-CBlock* CreateNewBlock(CWallet* pwallet, CTransaction *txCoinStake)
+std::shared_ptr<CBlock> CreateNewBlock(CWallet* pwallet, CTransaction *txCoinStake)
{
bool fProofOfStake = txCoinStake != NULL;
// Create new block
- auto_ptr<CBlock> pblock(new CBlock());
+ shared_ptr<CBlock> pblock(new CBlock());
if (!pblock.get())
return NULL;
pblock->nNonce = 0;
}
- return pblock.release();
+ return pblock;
}
-void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce)
+void IncrementExtraNonce(shared_ptr<CBlock>& pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce)
{
// Update nExtraNonce
static uint256 hashPrevBlock;
}
-void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash1)
+void FormatHashBuffers(const shared_ptr<CBlock>& pblock, char* pmidstate, char* pdata, char* phash1)
{
//
// Pre-build hash buffers
}
-bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey)
+bool CheckWork(const std::shared_ptr<CBlock>& pblock, CWallet& wallet, CReserveKey& reservekey)
{
uint256 hashBlock = pblock->GetHash();
uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256();
}
// Process this block the same as if we had received it from another node
- if (!ProcessBlock(NULL, pblock))
+ if (!ProcessBlock(NULL, pblock.get()))
return error("CheckWork() : ProcessBlock, block not accepted");
}
return true;
}
-bool CheckStake(CBlock* pblock, CWallet& wallet)
+bool CheckStake(const std::shared_ptr<CBlock>& pblock, CWallet& wallet)
{
uint256 proofHash = 0, hashTarget = 0;
uint256 hashBlock = pblock->GetHash();
}
// Process this block the same as if we had received it from another node
- if (!ProcessBlock(NULL, pblock))
+ if (!ProcessBlock(NULL, pblock.get()))
return error("CheckStake() : ProcessBlock, block not accepted");
}
}
// Now we have new coinstake, it's time to create the block ...
- CBlock* pblock;
- pblock = CreateNewBlock(pwallet, &txCoinStake);
+ std::shared_ptr<CBlock> pblock = CreateNewBlock(pwallet, &txCoinStake);
if (!pblock)
{
string strMessage = _("Warning: Unable to allocate memory for the new block object. Mining thread has been stopped.");
#include "main.h"
#include "wallet.h"
+#include <memory>
/* Generate a new block, without valid proof-of-work/with provided proof-of-stake */
-CBlock* CreateNewBlock(CWallet* pwallet, CTransaction *txAdd=NULL);
+std::shared_ptr<CBlock> CreateNewBlock(CWallet* pwallet, CTransaction *txAdd=NULL);
/** Modify the extranonce in a block */
-void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce);
+void IncrementExtraNonce(std::shared_ptr<CBlock>& pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce);
/** Do mining precalculation */
-void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash1);
+void FormatHashBuffers(const std::shared_ptr<CBlock>& pblock, char* pmidstate, char* pdata, char* phash1);
/** Check mined proof-of-work block */
-bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey);
+bool CheckWork(const std::shared_ptr<CBlock>& pblock, CWallet& wallet, CReserveKey& reservekey);
/** Check mined proof-of-stake block */
-bool CheckStake(CBlock* pblock, CWallet& wallet);
+bool CheckStake(const std::shared_ptr<CBlock>& pblock, CWallet& wallet);
/** Base sha256 mining transform */
void SHA256Transform(void* pstate, void* pinput, const void* pinit);
if (IsInitialBlockDownload())
throw JSONRPCError(-10, "NovaCoin is downloading blocks...");
- typedef map<uint256, pair<CBlock*, CScript> > mapNewBlock_t;
+ typedef map<uint256, pair<shared_ptr<CBlock>, CScript> > mapNewBlock_t;
static mapNewBlock_t mapNewBlock;
- static vector<CBlock*> vNewBlock;
+ static vector<std::shared_ptr<CBlock>> vNewBlock;
static CReserveKey reservekey(pwalletMain);
if (params.size() == 0)
static unsigned int nTransactionsUpdatedLast;
static CBlockIndex* pindexPrev;
static int64_t nStart;
- static CBlock* pblock;
+ static shared_ptr<CBlock> pblock;
if (pindexPrev != pindexBest ||
(nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60))
{
{
// Deallocate old blocks since they're obsolete now
mapNewBlock.clear();
- BOOST_FOREACH(CBlock* pblock, vNewBlock)
- delete pblock;
vNewBlock.clear();
}
nTransactionsUpdatedLast = nTransactionsUpdated;
// Get saved block
if (!mapNewBlock.count(pdata->hashMerkleRoot))
return false;
- CBlock* pblock = mapNewBlock[pdata->hashMerkleRoot].first;
+ std::shared_ptr<CBlock> pblock = mapNewBlock[pdata->hashMerkleRoot].first;
pblock->nTime = pdata->nTime;
pblock->nNonce = pdata->nNonce;
if (IsInitialBlockDownload())
throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "NovaCoin is downloading blocks...");
- typedef map<uint256, pair<CBlock*, CScript> > mapNewBlock_t;
+ typedef map<uint256, pair<shared_ptr<CBlock>, CScript> > mapNewBlock_t;
static mapNewBlock_t mapNewBlock; // FIXME: thread safety
- static vector<CBlock*> vNewBlock;
+ static vector<shared_ptr<CBlock>> vNewBlock;
static CReserveKey reservekey(pwalletMain);
if (params.size() == 0)
static unsigned int nTransactionsUpdatedLast;
static CBlockIndex* pindexPrev;
static int64_t nStart;
- static CBlock* pblock;
+ static shared_ptr<CBlock> pblock;
if (pindexPrev != pindexBest ||
(nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60))
{
{
// Deallocate old blocks since they're obsolete now
mapNewBlock.clear();
- BOOST_FOREACH(CBlock* pblock, vNewBlock)
- delete pblock;
vNewBlock.clear();
}
// Get saved block
if (!mapNewBlock.count(pdata->hashMerkleRoot))
return false;
- CBlock* pblock = mapNewBlock[pdata->hashMerkleRoot].first;
+ std::shared_ptr<CBlock> pblock = mapNewBlock[pdata->hashMerkleRoot].first;
pblock->nTime = pdata->nTime;
pblock->nNonce = pdata->nNonce;
static unsigned int nTransactionsUpdatedLast;
static CBlockIndex* pindexPrev;
static int64_t nStart;
- static CBlock* pblock;
+ static std::shared_ptr<CBlock> pblock;
if (pindexPrev != pindexBest ||
(nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 5))
{
// Create new block
if(pblock)
{
- delete pblock;
- pblock = NULL;
+ pblock.reset();
}
pblock = CreateNewBlock(pwalletMain);
if (!pblock)