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:
commit
15047f5af0
2 changed files with 21 additions and 8 deletions
|
@ -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)
|
||||||
|
|
12
src/main.cpp
12
src/main.cpp
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue