@@ -340,7 +340,7 @@ static void MutateTxSign(CMutableTransaction& tx, const string& flagStr) | |||
CMutableTransaction mergedTx(txVariants[0]); | |||
bool fComplete = true; | |||
CCoinsView viewDummy; | |||
CCoinsViewCache view(viewDummy); | |||
CCoinsViewCache view(&viewDummy); | |||
if (!registers.count("privatekeys")) | |||
throw runtime_error("privatekeys register variable must be set."); |
@@ -59,7 +59,7 @@ bool CCoinsView::BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock) { ret | |||
bool CCoinsView::GetStats(CCoinsStats &stats) const { return false; } | |||
CCoinsViewBacked::CCoinsViewBacked(CCoinsView &viewIn) : base(&viewIn) { } | |||
CCoinsViewBacked::CCoinsViewBacked(CCoinsView *viewIn) : base(viewIn) { } | |||
bool CCoinsViewBacked::GetCoins(const uint256 &txid, CCoins &coins) const { return base->GetCoins(txid, coins); } | |||
bool CCoinsViewBacked::HaveCoins(const uint256 &txid) const { return base->HaveCoins(txid); } | |||
uint256 CCoinsViewBacked::GetBestBlock() const { return base->GetBestBlock(); } | |||
@@ -69,7 +69,7 @@ bool CCoinsViewBacked::GetStats(CCoinsStats &stats) const { return base->GetStat | |||
CCoinsKeyHasher::CCoinsKeyHasher() : salt(GetRandHash()) {} | |||
CCoinsViewCache::CCoinsViewCache(CCoinsView &baseIn, bool fDummy) : CCoinsViewBacked(baseIn), hasModifier(false), hashBlock(0) { } | |||
CCoinsViewCache::CCoinsViewCache(CCoinsView *baseIn) : CCoinsViewBacked(baseIn), hasModifier(false), hashBlock(0) { } | |||
CCoinsViewCache::~CCoinsViewCache() | |||
{ |
@@ -333,7 +333,7 @@ protected: | |||
CCoinsView *base; | |||
public: | |||
CCoinsViewBacked(CCoinsView &viewIn); | |||
CCoinsViewBacked(CCoinsView *viewIn); | |||
bool GetCoins(const uint256 &txid, CCoins &coins) const; | |||
bool HaveCoins(const uint256 &txid) const; | |||
uint256 GetBestBlock() const; | |||
@@ -375,7 +375,7 @@ protected: | |||
mutable CCoinsMap cacheCoins; | |||
public: | |||
CCoinsViewCache(CCoinsView &baseIn, bool fDummy = false); | |||
CCoinsViewCache(CCoinsView *baseIn); | |||
~CCoinsViewCache(); | |||
// Standard CCoinsView methods |
@@ -958,7 +958,7 @@ bool AppInit2(boost::thread_group& threadGroup) | |||
pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex); | |||
pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex); | |||
pcoinsTip = new CCoinsViewCache(*pcoinsdbview); | |||
pcoinsTip = new CCoinsViewCache(pcoinsdbview); | |||
if (fReindex) | |||
pblocktree->WriteReindexing(true); |
@@ -896,12 +896,12 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa | |||
{ | |||
CCoinsView dummy; | |||
CCoinsViewCache view(dummy); | |||
CCoinsViewCache view(&dummy); | |||
int64_t nValueIn = 0; | |||
{ | |||
LOCK(pool.cs); | |||
CCoinsViewMemPool viewMemPool(*pcoinsTip, pool); | |||
CCoinsViewMemPool viewMemPool(pcoinsTip, pool); | |||
view.SetBackend(viewMemPool); | |||
// do we already have it? | |||
@@ -1835,7 +1835,7 @@ bool static DisconnectTip(CValidationState &state) { | |||
// Apply the block atomically to the chain state. | |||
int64_t nStart = GetTimeMicros(); | |||
{ | |||
CCoinsViewCache view(*pcoinsTip, true); | |||
CCoinsViewCache view(pcoinsTip); | |||
if (!DisconnectBlock(block, state, pindexDelete, view)) | |||
return error("DisconnectTip() : DisconnectBlock %s failed", pindexDelete->GetBlockHash().ToString()); | |||
assert(view.Flush()); | |||
@@ -1888,7 +1888,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * | |||
int64_t nTime3; | |||
LogPrint("bench", " - Load block from disk: %.2fms [%.2fs]\n", (nTime2 - nTime1) * 0.001, nTimeReadFromDisk * 0.000001); | |||
{ | |||
CCoinsViewCache view(*pcoinsTip, true); | |||
CCoinsViewCache view(pcoinsTip); | |||
CInv inv(MSG_BLOCK, pindexNew->GetBlockHash()); | |||
if (!ConnectBlock(*pblock, state, pindexNew, view)) { | |||
if (state.IsInvalid()) | |||
@@ -2936,7 +2936,7 @@ bool CVerifyDB::VerifyDB(CCoinsView *coinsview, int nCheckLevel, int nCheckDepth | |||
nCheckDepth = chainActive.Height(); | |||
nCheckLevel = std::max(0, std::min(4, nCheckLevel)); | |||
LogPrintf("Verifying last %i blocks at level %i\n", nCheckDepth, nCheckLevel); | |||
CCoinsViewCache coins(*coinsview, true); | |||
CCoinsViewCache coins(coinsview); | |||
CBlockIndex* pindexState = chainActive.Tip(); | |||
CBlockIndex* pindexFailure = NULL; | |||
int nGoodTransactions = 0; |
@@ -116,7 +116,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) | |||
{ | |||
LOCK2(cs_main, mempool.cs); | |||
CBlockIndex* pindexPrev = chainActive.Tip(); | |||
CCoinsViewCache view(*pcoinsTip, true); | |||
CCoinsViewCache view(pcoinsTip); | |||
// Priority order to process transactions | |||
list<COrphan> vOrphan; // list memory doesn't move | |||
@@ -316,7 +316,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) | |||
CBlockIndex indexDummy(*pblock); | |||
indexDummy.pprev = pindexPrev; | |||
indexDummy.nHeight = pindexPrev->nHeight + 1; | |||
CCoinsViewCache viewNew(*pcoinsTip, true); | |||
CCoinsViewCache viewNew(pcoinsTip); | |||
CValidationState state; | |||
if (!ConnectBlock(*pblock, state, &indexDummy, viewNew, true)) | |||
throw std::runtime_error("CreateNewBlock() : ConnectBlock failed"); |
@@ -381,7 +381,7 @@ Value gettxout(const Array& params, bool fHelp) | |||
CCoins coins; | |||
if (fMempool) { | |||
LOCK(mempool.cs); | |||
CCoinsViewMemPool view(*pcoinsTip, mempool); | |||
CCoinsViewMemPool view(pcoinsTip, mempool); | |||
if (!view.GetCoins(hash, coins)) | |||
return Value::null; | |||
mempool.pruneSpent(hash, coins); // TODO: this should be done by the CCoinsViewMemPool |
@@ -557,11 +557,11 @@ Value signrawtransaction(const Array& params, bool fHelp) | |||
// Fetch previous transactions (inputs): | |||
CCoinsView viewDummy; | |||
CCoinsViewCache view(viewDummy); | |||
CCoinsViewCache view(&viewDummy); | |||
{ | |||
LOCK(mempool.cs); | |||
CCoinsViewCache &viewChain = *pcoinsTip; | |||
CCoinsViewMemPool viewMempool(viewChain, mempool); | |||
CCoinsViewMemPool viewMempool(&viewChain, mempool); | |||
view.SetBackend(viewMempool); // temporarily switch cache backend to db+mempool view | |||
BOOST_FOREACH(const CTxIn& txin, mergedTx.vin) { |
@@ -90,7 +90,7 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test) | |||
// The cache stack. | |||
CCoinsViewTest base; // A CCoinsViewTest at the bottom. | |||
std::vector<CCoinsViewCache*> stack; // A stack of CCoinsViewCaches on top. | |||
stack.push_back(new CCoinsViewCache(base, false)); // Start with one cache. | |||
stack.push_back(new CCoinsViewCache(&base)); // Start with one cache. | |||
// Use a limited set of random transaction ids, so we do test overwriting entries. | |||
std::vector<uint256> txids; | |||
@@ -151,7 +151,7 @@ BOOST_AUTO_TEST_CASE(coins_cache_simulation_test) | |||
} else { | |||
removed_all_caches = true; | |||
} | |||
stack.push_back(new CCoinsViewCache(*tip, false)); | |||
stack.push_back(new CCoinsViewCache(tip)); | |||
if (stack.size() == 4) { | |||
reached_4_caches = true; | |||
} |
@@ -255,7 +255,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard) | |||
{ | |||
LOCK(cs_main); | |||
CCoinsView coinsDummy; | |||
CCoinsViewCache coins(coinsDummy); | |||
CCoinsViewCache coins(&coinsDummy); | |||
CBasicKeyStore keystore; | |||
CKey key[6]; | |||
vector<CPubKey> keys; |
@@ -41,7 +41,7 @@ struct TestingSetup { | |||
mapArgs["-datadir"] = pathTemp.string(); | |||
pblocktree = new CBlockTreeDB(1 << 20, true); | |||
pcoinsdbview = new CCoinsViewDB(1 << 23, true); | |||
pcoinsTip = new CCoinsViewCache(*pcoinsdbview); | |||
pcoinsTip = new CCoinsViewCache(pcoinsdbview); | |||
InitBlockIndex(); | |||
#ifdef ENABLE_WALLET | |||
bool fFirstRun; |
@@ -260,7 +260,7 @@ BOOST_AUTO_TEST_CASE(test_Get) | |||
{ | |||
CBasicKeyStore keystore; | |||
CCoinsView coinsDummy; | |||
CCoinsViewCache coins(coinsDummy); | |||
CCoinsViewCache coins(&coinsDummy); | |||
std::vector<CMutableTransaction> dummyTransactions = SetupDummyInputs(keystore, coins); | |||
CMutableTransaction t1; | |||
@@ -295,7 +295,7 @@ BOOST_AUTO_TEST_CASE(test_IsStandard) | |||
LOCK(cs_main); | |||
CBasicKeyStore keystore; | |||
CCoinsView coinsDummy; | |||
CCoinsViewCache coins(coinsDummy); | |||
CCoinsViewCache coins(&coinsDummy); | |||
std::vector<CMutableTransaction> dummyTransactions = SetupDummyInputs(keystore, coins); | |||
CMutableTransaction t; |
@@ -630,7 +630,7 @@ void CTxMemPool::ClearPrioritisation(const uint256 hash) | |||
} | |||
CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { } | |||
CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView *baseIn, CTxMemPool &mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { } | |||
bool CCoinsViewMemPool::GetCoins(const uint256 &txid, CCoins &coins) const { | |||
// If an entry in the mempool exists, always return that one, as it's guaranteed to never |
@@ -144,7 +144,7 @@ protected: | |||
CTxMemPool &mempool; | |||
public: | |||
CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn); | |||
CCoinsViewMemPool(CCoinsView *baseIn, CTxMemPool &mempoolIn); | |||
bool GetCoins(const uint256 &txid, CCoins &coins) const; | |||
bool HaveCoins(const uint256 &txid) const; | |||
}; |