Merge pull request #2851 from TheBlueMatt/master

Prepare for mempool testing in pull-tester and fix multi-block transaction resurrection
This commit is contained in:
Gavin Andresen 2013-08-05 01:53:17 -07:00
commit 15047f5af0
2 changed files with 21 additions and 8 deletions

View File

@ -67,11 +67,24 @@ namespace Checkpoints
300 300
}; };
static MapCheckpoints mapCheckpointsRegtest =
boost::assign::map_list_of
( 0, uint256("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"))
;
static const CCheckpointData dataRegtest = {
&mapCheckpointsRegtest,
0,
0,
0
};
const CCheckpointData &Checkpoints() { const CCheckpointData &Checkpoints() {
if (TestNet()) if (Params().NetworkID() == CChainParams::TESTNET)
return dataTestnet; return dataTestnet;
else else if (Params().NetworkID() == CChainParams::MAIN)
return data; return data;
else
return dataRegtest;
} }
bool CheckBlock(int nHeight, const uint256& hash) bool CheckBlock(int nHeight, const uint256& hash)

View File

@ -810,9 +810,9 @@ bool CTxMemPool::accept(CValidationState &state, CTransaction &tx, bool fLimitFr
if ((int64)tx.nLockTime > std::numeric_limits<int>::max()) if ((int64)tx.nLockTime > std::numeric_limits<int>::max())
return error("CTxMemPool::accept() : not accepting nLockTime beyond 2038 yet"); return error("CTxMemPool::accept() : not accepting nLockTime beyond 2038 yet");
// Rather not work on nonstandard transactions (unless -testnet) // Rather not work on nonstandard transactions (unless -testnet/-regtest)
string reason; string reason;
if (!TestNet() && !IsStandardTx(tx, reason)) if (Params().NetworkID() == CChainParams::MAIN && !IsStandardTx(tx, reason))
return error("CTxMemPool::accept() : nonstandard transaction: %s", return error("CTxMemPool::accept() : nonstandard transaction: %s",
reason.c_str()); reason.c_str());
@ -888,7 +888,7 @@ bool CTxMemPool::accept(CValidationState &state, CTransaction &tx, bool fLimitFr
} }
// Check for non-standard pay-to-script-hash in inputs // Check for non-standard pay-to-script-hash in inputs
if (!TestNet() && !AreInputsStandard(tx, view)) if (Params().NetworkID() == CChainParams::MAIN && !AreInputsStandard(tx, view))
return error("CTxMemPool::accept() : nonstandard transaction input"); return error("CTxMemPool::accept() : nonstandard transaction input");
// Note: if you modify this code to accept non-standard transactions, then // Note: if you modify this code to accept non-standard transactions, then
@ -1938,7 +1938,7 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
} }
// Disconnect shorter branch // Disconnect shorter branch
vector<CTransaction> vResurrect; list<CTransaction> vResurrect;
BOOST_FOREACH(CBlockIndex* pindex, vDisconnect) { BOOST_FOREACH(CBlockIndex* pindex, vDisconnect) {
CBlock block; CBlock block;
if (!ReadBlockFromDisk(block, pindex)) if (!ReadBlockFromDisk(block, pindex))
@ -1952,9 +1952,9 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
// Queue memory transactions to resurrect. // Queue memory transactions to resurrect.
// We only do this for blocks after the last checkpoint (reorganisation before that // We only do this for blocks after the last checkpoint (reorganisation before that
// point should only happen with -reindex/-loadblock, or a misbehaving peer. // point should only happen with -reindex/-loadblock, or a misbehaving peer.
BOOST_FOREACH(const CTransaction& tx, block.vtx) BOOST_REVERSE_FOREACH(const CTransaction& tx, block.vtx)
if (!tx.IsCoinBase() && pindex->nHeight > Checkpoints::GetTotalBlocksEstimate()) if (!tx.IsCoinBase() && pindex->nHeight > Checkpoints::GetTotalBlocksEstimate())
vResurrect.push_back(tx); vResurrect.push_front(tx);
} }
// Connect longer branch // Connect longer branch