scripted-diff: tree-wide: Remove all review-only assertions
-BEGIN VERIFY SCRIPT-
find_regex='((assert|CHECK_NONFATAL)\(std::addressof|TODO: REVIEW-ONLY)' \
&& git grep -l -E "$find_regex" -- . \
| xargs sed -i -E "/${find_regex}/d"
-END VERIFY SCRIPT-
This commit is contained in:
1 parent
3e82abb8dd
commit
6c3b5dc0c1
14 files changed
-81
No files matched your search
@@ -25,7 +25,6 @@ static void DuplicateInputs(benchmark::Bench& bench)
|
|||||||
CMutableTransaction naughtyTx{};
|
CMutableTransaction naughtyTx{};
|
||||||
|
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(testing_setup->m_node.chainman->ActiveChain()));
|
|
||||||
CBlockIndex* pindexPrev = testing_setup->m_node.chainman->ActiveChain().Tip();
|
CBlockIndex* pindexPrev = testing_setup->m_node.chainman->ActiveChain().Tip();
|
||||||
assert(pindexPrev != nullptr);
|
assert(pindexPrev != nullptr);
|
||||||
block.nBits = GetNextWorkRequired(pindexPrev, &block, chainparams.GetConsensus());
|
block.nBits = GetNextWorkRequired(pindexPrev, &block, chainparams.GetConsensus());
|
||||||
|
|||||||
@@ -340,7 +340,6 @@ void BaseIndex::Interrupt()
|
|||||||
|
|
||||||
bool BaseIndex::Start(CChainState& active_chainstate)
|
bool BaseIndex::Start(CChainState& active_chainstate)
|
||||||
{
|
{
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
m_chainstate = &active_chainstate;
|
m_chainstate = &active_chainstate;
|
||||||
// Need to register this ValidationInterface before running Init(), so that
|
// Need to register this ValidationInterface before running Init(), so that
|
||||||
// callbacks are not missed if Init sets m_synced to true.
|
// callbacks are not missed if Init sets m_synced to true.
|
||||||
|
|||||||
@@ -1384,7 +1384,6 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|||||||
|
|
||||||
// If the loaded chain has a wrong genesis, bail out immediately
|
// If the loaded chain has a wrong genesis, bail out immediately
|
||||||
// (we're likely using a testnet datadir, or the other way around).
|
// (we're likely using a testnet datadir, or the other way around).
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(chainman.m_blockman));
|
|
||||||
if (!chainman.BlockIndex().empty() &&
|
if (!chainman.BlockIndex().empty() &&
|
||||||
!chainman.m_blockman.LookupBlockIndex(chainparams.GetConsensus().hashGenesisBlock)) {
|
!chainman.m_blockman.LookupBlockIndex(chainparams.GetConsensus().hashGenesisBlock)) {
|
||||||
return InitError(_("Incorrect or no genesis block found. Wrong datadir for network?"));
|
return InitError(_("Incorrect or no genesis block found. Wrong datadir for network?"));
|
||||||
@@ -1612,7 +1611,6 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|||||||
// Either install a handler to notify us when genesis activates, or set fHaveGenesis directly.
|
// Either install a handler to notify us when genesis activates, or set fHaveGenesis directly.
|
||||||
// No locking, as this happens before any background thread is started.
|
// No locking, as this happens before any background thread is started.
|
||||||
boost::signals2::connection block_notify_genesis_wait_connection;
|
boost::signals2::connection block_notify_genesis_wait_connection;
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman.ActiveChain()));
|
|
||||||
if (chainman.ActiveChain().Tip() == nullptr) {
|
if (chainman.ActiveChain().Tip() == nullptr) {
|
||||||
block_notify_genesis_wait_connection = uiInterface.NotifyBlockTip_connect(std::bind(BlockNotifyGenesisWait, std::placeholders::_2));
|
block_notify_genesis_wait_connection = uiInterface.NotifyBlockTip_connect(std::bind(BlockNotifyGenesisWait, std::placeholders::_2));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -116,7 +116,6 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
|
|||||||
pblocktemplate->vTxSigOpsCost.push_back(-1); // updated at end
|
pblocktemplate->vTxSigOpsCost.push_back(-1); // updated at end
|
||||||
|
|
||||||
LOCK2(cs_main, m_mempool.cs);
|
LOCK2(cs_main, m_mempool.cs);
|
||||||
assert(std::addressof(*::ChainActive().Tip()) == std::addressof(*m_chainstate.m_chain.Tip()));
|
|
||||||
CBlockIndex* pindexPrev = m_chainstate.m_chain.Tip();
|
CBlockIndex* pindexPrev = m_chainstate.m_chain.Tip();
|
||||||
assert(pindexPrev != nullptr);
|
assert(pindexPrev != nullptr);
|
||||||
nHeight = pindexPrev->nHeight + 1;
|
nHeight = pindexPrev->nHeight + 1;
|
||||||
@@ -176,7 +175,6 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
|
|||||||
pblocktemplate->vTxSigOpsCost[0] = WITNESS_SCALE_FACTOR * GetLegacySigOpCount(*pblock->vtx[0]);
|
pblocktemplate->vTxSigOpsCost[0] = WITNESS_SCALE_FACTOR * GetLegacySigOpCount(*pblock->vtx[0]);
|
||||||
|
|
||||||
BlockValidationState state;
|
BlockValidationState state;
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(m_chainstate));
|
|
||||||
if (!TestBlockValidity(state, chainparams, m_chainstate, *pblock, pindexPrev, false, false)) {
|
if (!TestBlockValidity(state, chainparams, m_chainstate, *pblock, pindexPrev, false, false)) {
|
||||||
throw std::runtime_error(strprintf("%s: TestBlockValidity failed: %s", __func__, state.ToString()));
|
throw std::runtime_error(strprintf("%s: TestBlockValidity failed: %s", __func__, state.ToString()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1361,7 +1361,6 @@ PeerManagerImpl::PeerManagerImpl(const CChainParams& chainparams, CConnman& conn
|
|||||||
m_stale_tip_check_time(0),
|
m_stale_tip_check_time(0),
|
||||||
m_ignore_incoming_txs(ignore_incoming_txs)
|
m_ignore_incoming_txs(ignore_incoming_txs)
|
||||||
{
|
{
|
||||||
assert(std::addressof(g_chainman) == std::addressof(m_chainman));
|
|
||||||
// Initialize global variables that cannot be constructed at startup.
|
// Initialize global variables that cannot be constructed at startup.
|
||||||
recentRejects.reset(new CRollingBloomFilter(120000, 0.000001));
|
recentRejects.reset(new CRollingBloomFilter(120000, 0.000001));
|
||||||
|
|
||||||
|
|||||||
@@ -248,7 +248,6 @@ bool FindBlockPos(FlatFilePos& pos, unsigned int nAddSize, unsigned int nHeight,
|
|||||||
// when the undo file is keeping up with the block file, we want to flush it explicitly
|
// when the undo file is keeping up with the block file, we want to flush it explicitly
|
||||||
// when it is lagging behind (more blocks arrive than are being connected), we let the
|
// when it is lagging behind (more blocks arrive than are being connected), we let the
|
||||||
// undo block write case handle it
|
// undo block write case handle it
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(active_chain));
|
|
||||||
finalize_undo = (vinfoBlockFile[nFile].nHeightLast == (unsigned int)active_chain.Tip()->nHeight);
|
finalize_undo = (vinfoBlockFile[nFile].nHeightLast == (unsigned int)active_chain.Tip()->nHeight);
|
||||||
nFile++;
|
nFile++;
|
||||||
if (vinfoBlockFile.size() <= nFile) {
|
if (vinfoBlockFile.size() <= nFile) {
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ void FindCoins(const NodeContext& node, std::map<COutPoint, Coin>& coins)
|
|||||||
assert(node.mempool);
|
assert(node.mempool);
|
||||||
assert(node.chainman);
|
assert(node.chainman);
|
||||||
LOCK2(cs_main, node.mempool->cs);
|
LOCK2(cs_main, node.mempool->cs);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(node.chainman->ActiveChainstate()));
|
|
||||||
CCoinsViewCache& chain_view = node.chainman->ActiveChainstate().CoinsTip();
|
CCoinsViewCache& chain_view = node.chainman->ActiveChainstate().CoinsTip();
|
||||||
CCoinsViewMemPool mempool_view(&chain_view, *node.mempool);
|
CCoinsViewMemPool mempool_view(&chain_view, *node.mempool);
|
||||||
for (auto& coin : coins) {
|
for (auto& coin : coins) {
|
||||||
|
|||||||
@@ -97,7 +97,6 @@ static bool GetUTXOStats(CCoinsView* view, BlockManager& blockman, CCoinsStats&
|
|||||||
if (!pindex) {
|
if (!pindex) {
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(blockman));
|
|
||||||
pindex = blockman.LookupBlockIndex(view->GetBestBlock());
|
pindex = blockman.LookupBlockIndex(view->GetBestBlock());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -197,7 +197,6 @@ public:
|
|||||||
int getNumBlocks() override
|
int getNumBlocks() override
|
||||||
{
|
{
|
||||||
LOCK(::cs_main);
|
LOCK(::cs_main);
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
|
||||||
return chainman().ActiveChain().Height();
|
return chainman().ActiveChain().Height();
|
||||||
}
|
}
|
||||||
uint256 getBestBlockHash() override
|
uint256 getBestBlockHash() override
|
||||||
@@ -208,7 +207,6 @@ public:
|
|||||||
int64_t getLastBlockTime() override
|
int64_t getLastBlockTime() override
|
||||||
{
|
{
|
||||||
LOCK(::cs_main);
|
LOCK(::cs_main);
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
|
||||||
if (chainman().ActiveChain().Tip()) {
|
if (chainman().ActiveChain().Tip()) {
|
||||||
return chainman().ActiveChain().Tip()->GetBlockTime();
|
return chainman().ActiveChain().Tip()->GetBlockTime();
|
||||||
}
|
}
|
||||||
@@ -219,7 +217,6 @@ public:
|
|||||||
const CBlockIndex* tip;
|
const CBlockIndex* tip;
|
||||||
{
|
{
|
||||||
LOCK(::cs_main);
|
LOCK(::cs_main);
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
|
||||||
tip = chainman().ActiveChain().Tip();
|
tip = chainman().ActiveChain().Tip();
|
||||||
}
|
}
|
||||||
return GuessVerificationProgress(Params().TxData(), tip);
|
return GuessVerificationProgress(Params().TxData(), tip);
|
||||||
@@ -252,7 +249,6 @@ public:
|
|||||||
bool getUnspentOutput(const COutPoint& output, Coin& coin) override
|
bool getUnspentOutput(const COutPoint& output, Coin& coin) override
|
||||||
{
|
{
|
||||||
LOCK(::cs_main);
|
LOCK(::cs_main);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(chainman().ActiveChainstate()));
|
|
||||||
return chainman().ActiveChainstate().CoinsTip().GetCoin(output, coin);
|
return chainman().ActiveChainstate().CoinsTip().GetCoin(output, coin);
|
||||||
}
|
}
|
||||||
WalletClient& walletClient() override
|
WalletClient& walletClient() override
|
||||||
@@ -459,14 +455,12 @@ public:
|
|||||||
bool checkFinalTx(const CTransaction& tx) override
|
bool checkFinalTx(const CTransaction& tx) override
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
|
||||||
return CheckFinalTx(chainman().ActiveChain().Tip(), tx);
|
return CheckFinalTx(chainman().ActiveChain().Tip(), tx);
|
||||||
}
|
}
|
||||||
std::optional<int> findLocatorFork(const CBlockLocator& locator) override
|
std::optional<int> findLocatorFork(const CBlockLocator& locator) override
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
||||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
|
||||||
if (CBlockIndex* fork = m_node.chainman->m_blockman.FindForkInGlobalIndex(active, locator)) {
|
if (CBlockIndex* fork = m_node.chainman->m_blockman.FindForkInGlobalIndex(active, locator)) {
|
||||||
return fork->nHeight;
|
return fork->nHeight;
|
||||||
}
|
}
|
||||||
@@ -476,7 +470,6 @@ public:
|
|||||||
{
|
{
|
||||||
WAIT_LOCK(cs_main, lock);
|
WAIT_LOCK(cs_main, lock);
|
||||||
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
||||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
|
||||||
return FillBlock(m_node.chainman->m_blockman.LookupBlockIndex(hash), block, lock, active);
|
return FillBlock(m_node.chainman->m_blockman.LookupBlockIndex(hash), block, lock, active);
|
||||||
}
|
}
|
||||||
bool findFirstBlockWithTimeAndHeight(int64_t min_time, int min_height, const FoundBlock& block) override
|
bool findFirstBlockWithTimeAndHeight(int64_t min_time, int min_height, const FoundBlock& block) override
|
||||||
@@ -489,7 +482,6 @@ public:
|
|||||||
{
|
{
|
||||||
WAIT_LOCK(cs_main, lock);
|
WAIT_LOCK(cs_main, lock);
|
||||||
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
||||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
|
||||||
if (const CBlockIndex* block = m_node.chainman->m_blockman.LookupBlockIndex(block_hash)) {
|
if (const CBlockIndex* block = m_node.chainman->m_blockman.LookupBlockIndex(block_hash)) {
|
||||||
if (const CBlockIndex* ancestor = block->GetAncestor(ancestor_height)) {
|
if (const CBlockIndex* ancestor = block->GetAncestor(ancestor_height)) {
|
||||||
return FillBlock(ancestor, ancestor_out, lock, active);
|
return FillBlock(ancestor, ancestor_out, lock, active);
|
||||||
@@ -501,9 +493,7 @@ public:
|
|||||||
{
|
{
|
||||||
WAIT_LOCK(cs_main, lock);
|
WAIT_LOCK(cs_main, lock);
|
||||||
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
||||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
|
||||||
const CBlockIndex* block = m_node.chainman->m_blockman.LookupBlockIndex(block_hash);
|
const CBlockIndex* block = m_node.chainman->m_blockman.LookupBlockIndex(block_hash);
|
||||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
|
||||||
const CBlockIndex* ancestor = m_node.chainman->m_blockman.LookupBlockIndex(ancestor_hash);
|
const CBlockIndex* ancestor = m_node.chainman->m_blockman.LookupBlockIndex(ancestor_hash);
|
||||||
if (block && ancestor && block->GetAncestor(ancestor->nHeight) != ancestor) ancestor = nullptr;
|
if (block && ancestor && block->GetAncestor(ancestor->nHeight) != ancestor) ancestor = nullptr;
|
||||||
return FillBlock(ancestor, ancestor_out, lock, active);
|
return FillBlock(ancestor, ancestor_out, lock, active);
|
||||||
@@ -512,9 +502,7 @@ public:
|
|||||||
{
|
{
|
||||||
WAIT_LOCK(cs_main, lock);
|
WAIT_LOCK(cs_main, lock);
|
||||||
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
||||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
|
||||||
const CBlockIndex* block1 = m_node.chainman->m_blockman.LookupBlockIndex(block_hash1);
|
const CBlockIndex* block1 = m_node.chainman->m_blockman.LookupBlockIndex(block_hash1);
|
||||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
|
||||||
const CBlockIndex* block2 = m_node.chainman->m_blockman.LookupBlockIndex(block_hash2);
|
const CBlockIndex* block2 = m_node.chainman->m_blockman.LookupBlockIndex(block_hash2);
|
||||||
const CBlockIndex* ancestor = block1 && block2 ? LastCommonAncestor(block1, block2) : nullptr;
|
const CBlockIndex* ancestor = block1 && block2 ? LastCommonAncestor(block1, block2) : nullptr;
|
||||||
// Using & instead of && below to avoid short circuiting and leaving
|
// Using & instead of && below to avoid short circuiting and leaving
|
||||||
@@ -525,7 +513,6 @@ public:
|
|||||||
double guessVerificationProgress(const uint256& block_hash) override
|
double guessVerificationProgress(const uint256& block_hash) override
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(chainman().m_blockman));
|
|
||||||
return GuessVerificationProgress(Params().TxData(), chainman().m_blockman.LookupBlockIndex(block_hash));
|
return GuessVerificationProgress(Params().TxData(), chainman().m_blockman.LookupBlockIndex(block_hash));
|
||||||
}
|
}
|
||||||
bool hasBlocks(const uint256& block_hash, int min_height, std::optional<int> max_height) override
|
bool hasBlocks(const uint256& block_hash, int min_height, std::optional<int> max_height) override
|
||||||
@@ -538,7 +525,6 @@ public:
|
|||||||
// used to limit the range, and passing min_height that's too low or
|
// used to limit the range, and passing min_height that's too low or
|
||||||
// max_height that's too high will not crash or change the result.
|
// max_height that's too high will not crash or change the result.
|
||||||
LOCK(::cs_main);
|
LOCK(::cs_main);
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(chainman().m_blockman));
|
|
||||||
if (CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash)) {
|
if (CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash)) {
|
||||||
if (max_height && block->nHeight >= *max_height) block = block->GetAncestor(*max_height);
|
if (max_height && block->nHeight >= *max_height) block = block->GetAncestor(*max_height);
|
||||||
for (; block->nStatus & BLOCK_HAVE_DATA; block = block->pprev) {
|
for (; block->nStatus & BLOCK_HAVE_DATA; block = block->pprev) {
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ TransactionError BroadcastTransaction(NodeContext& node, const CTransactionRef t
|
|||||||
{ // cs_main scope
|
{ // cs_main scope
|
||||||
assert(node.chainman);
|
assert(node.chainman);
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(node.chainman->ActiveChainstate()));
|
|
||||||
// If the transaction is already confirmed in the chain, don't do anything
|
// If the transaction is already confirmed in the chain, don't do anything
|
||||||
// and return early.
|
// and return early.
|
||||||
CCoinsViewCache &view = node.chainman->ActiveChainstate().CoinsTip();
|
CCoinsViewCache &view = node.chainman->ActiveChainstate().CoinsTip();
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ ChainstateManager& EnsureChainman(const NodeContext& node)
|
|||||||
if (!node.chainman) {
|
if (!node.chainman) {
|
||||||
throw JSONRPCError(RPC_INTERNAL_ERROR, "Node chainman not found");
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "Node chainman not found");
|
||||||
}
|
}
|
||||||
WITH_LOCK(::cs_main, CHECK_NONFATAL(std::addressof(g_chainman) == std::addressof(*node.chainman)));
|
|
||||||
return *node.chainman;
|
return *node.chainman;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ static bool GenerateBlock(ChainstateManager& chainman, CBlock& block, uint64_t&
|
|||||||
|
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
CHECK_NONFATAL(std::addressof(::ChainActive()) == std::addressof(chainman.ActiveChain()));
|
|
||||||
IncrementExtraNonce(&block, chainman.ActiveChain().Tip(), extra_nonce);
|
IncrementExtraNonce(&block, chainman.ActiveChain().Tip(), extra_nonce);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,7 +146,6 @@ static UniValue generateBlocks(ChainstateManager& chainman, const CTxMemPool& me
|
|||||||
|
|
||||||
{ // Don't keep cs_main locked
|
{ // Don't keep cs_main locked
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
CHECK_NONFATAL(std::addressof(::ChainActive()) == std::addressof(chainman.ActiveChain()));
|
|
||||||
nHeight = chainman.ActiveChain().Height();
|
nHeight = chainman.ActiveChain().Height();
|
||||||
nHeightEnd = nHeight+nGenerate;
|
nHeightEnd = nHeight+nGenerate;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -513,7 +513,6 @@ void CTxMemPool::removeForReorg(CChainState& active_chainstate, int flags)
|
|||||||
for (indexed_transaction_set::const_iterator it = mapTx.begin(); it != mapTx.end(); it++) {
|
for (indexed_transaction_set::const_iterator it = mapTx.begin(); it != mapTx.end(); it++) {
|
||||||
const CTransaction& tx = it->GetTx();
|
const CTransaction& tx = it->GetTx();
|
||||||
LockPoints lp = it->GetLockPoints();
|
LockPoints lp = it->GetLockPoints();
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
bool validLP = TestLockPointValidity(active_chainstate.m_chain, &lp);
|
bool validLP = TestLockPointValidity(active_chainstate.m_chain, &lp);
|
||||||
CCoinsViewMemPool view_mempool(&active_chainstate.CoinsTip(), *this);
|
CCoinsViewMemPool view_mempool(&active_chainstate.CoinsTip(), *this);
|
||||||
if (!CheckFinalTx(active_chainstate.m_chain.Tip(), tx, flags)
|
if (!CheckFinalTx(active_chainstate.m_chain.Tip(), tx, flags)
|
||||||
@@ -638,10 +637,8 @@ void CTxMemPool::check(CChainState& active_chainstate) const
|
|||||||
uint64_t innerUsage = 0;
|
uint64_t innerUsage = 0;
|
||||||
|
|
||||||
CCoinsViewCache& active_coins_tip = active_chainstate.CoinsTip();
|
CCoinsViewCache& active_coins_tip = active_chainstate.CoinsTip();
|
||||||
assert(std::addressof(::ChainstateActive().CoinsTip()) == std::addressof(active_coins_tip)); // TODO: REVIEW-ONLY, REMOVE IN FUTURE COMMIT
|
|
||||||
CCoinsViewCache mempoolDuplicate(const_cast<CCoinsViewCache*>(&active_coins_tip));
|
CCoinsViewCache mempoolDuplicate(const_cast<CCoinsViewCache*>(&active_coins_tip));
|
||||||
const int64_t spendheight = active_chainstate.m_chain.Height() + 1;
|
const int64_t spendheight = active_chainstate.m_chain.Height() + 1;
|
||||||
assert(g_chainman.m_blockman.GetSpendHeight(mempoolDuplicate) == spendheight); // TODO: REVIEW-ONLY, REMOVE IN FUTURE COMMIT
|
|
||||||
|
|
||||||
std::list<const CTxMemPoolEntry*> waitingOnDependants;
|
std::list<const CTxMemPoolEntry*> waitingOnDependants;
|
||||||
for (indexed_transaction_set::const_iterator it = mapTx.begin(); it != mapTx.end(); it++) {
|
for (indexed_transaction_set::const_iterator it = mapTx.begin(); it != mapTx.end(); it++) {
|
||||||
|
|||||||
@@ -161,7 +161,6 @@ void FlushBlockFile(bool fFinalize = false, bool finalize_undo = false);
|
|||||||
CBlockIndex* BlockManager::LookupBlockIndex(const uint256& hash) const
|
CBlockIndex* BlockManager::LookupBlockIndex(const uint256& hash) const
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
assert(std::addressof(g_chainman.BlockIndex()) == std::addressof(m_block_index));
|
|
||||||
BlockMap::const_iterator it = m_block_index.find(hash);
|
BlockMap::const_iterator it = m_block_index.find(hash);
|
||||||
return it == m_block_index.end() ? nullptr : it->second;
|
return it == m_block_index.end() ? nullptr : it->second;
|
||||||
}
|
}
|
||||||
@@ -170,7 +169,6 @@ CBlockIndex* BlockManager::FindForkInGlobalIndex(const CChain& chain, const CBlo
|
|||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
|
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(*this));
|
|
||||||
// Find the latest block common to locator and chain - we expect that
|
// Find the latest block common to locator and chain - we expect that
|
||||||
// locator.vHave is sorted descending by height.
|
// locator.vHave is sorted descending by height.
|
||||||
for (const uint256& hash : locator.vHave) {
|
for (const uint256& hash : locator.vHave) {
|
||||||
@@ -198,7 +196,6 @@ bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, i
|
|||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
assert(active_chain_tip); // TODO: Make active_chain_tip a reference
|
assert(active_chain_tip); // TODO: Make active_chain_tip a reference
|
||||||
assert(std::addressof(*::ChainActive().Tip()) == std::addressof(*active_chain_tip));
|
|
||||||
|
|
||||||
// By convention a negative value for flags indicates that the
|
// By convention a negative value for flags indicates that the
|
||||||
// current network-enforced consensus rules should be used. In
|
// current network-enforced consensus rules should be used. In
|
||||||
@@ -237,7 +234,6 @@ bool TestLockPointValidity(CChain& active_chain, const LockPoints* lp)
|
|||||||
if (lp->maxInputBlock) {
|
if (lp->maxInputBlock) {
|
||||||
// Check whether ::ChainActive() is an extension of the block at which the LockPoints
|
// Check whether ::ChainActive() is an extension of the block at which the LockPoints
|
||||||
// calculation was valid. If not LockPoints are no longer valid
|
// calculation was valid. If not LockPoints are no longer valid
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(active_chain));
|
|
||||||
if (!active_chain.Contains(lp->maxInputBlock)) {
|
if (!active_chain.Contains(lp->maxInputBlock)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -331,7 +327,6 @@ static void LimitMempoolSize(CTxMemPool& pool, CCoinsViewCache& coins_cache, siz
|
|||||||
|
|
||||||
std::vector<COutPoint> vNoSpendsRemaining;
|
std::vector<COutPoint> vNoSpendsRemaining;
|
||||||
pool.TrimToSize(limit, &vNoSpendsRemaining);
|
pool.TrimToSize(limit, &vNoSpendsRemaining);
|
||||||
assert(std::addressof(::ChainstateActive().CoinsTip()) == std::addressof(coins_cache));
|
|
||||||
for (const COutPoint& removed : vNoSpendsRemaining)
|
for (const COutPoint& removed : vNoSpendsRemaining)
|
||||||
coins_cache.Uncache(removed);
|
coins_cache.Uncache(removed);
|
||||||
}
|
}
|
||||||
@@ -339,7 +334,6 @@ static void LimitMempoolSize(CTxMemPool& pool, CCoinsViewCache& coins_cache, siz
|
|||||||
static bool IsCurrentForFeeEstimation(CChainState& active_chainstate) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
static bool IsCurrentForFeeEstimation(CChainState& active_chainstate) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
if (active_chainstate.IsInitialBlockDownload())
|
if (active_chainstate.IsInitialBlockDownload())
|
||||||
return false;
|
return false;
|
||||||
if (active_chainstate.m_chain.Tip()->GetBlockTime() < count_seconds(GetTime<std::chrono::seconds>() - MAX_FEE_ESTIMATION_TIP_AGE))
|
if (active_chainstate.m_chain.Tip()->GetBlockTime() < count_seconds(GetTime<std::chrono::seconds>() - MAX_FEE_ESTIMATION_TIP_AGE))
|
||||||
@@ -366,7 +360,6 @@ static void UpdateMempoolForReorg(CChainState& active_chainstate, CTxMemPool& me
|
|||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
AssertLockHeld(mempool.cs);
|
AssertLockHeld(mempool.cs);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
std::vector<uint256> vHashUpdate;
|
std::vector<uint256> vHashUpdate;
|
||||||
// disconnectpool's insertion_order index sorts the entries from
|
// disconnectpool's insertion_order index sorts the entries from
|
||||||
// oldest to newest, but the oldest entry will be the last tx from the
|
// oldest to newest, but the oldest entry will be the last tx from the
|
||||||
@@ -433,7 +426,6 @@ static bool CheckInputsFromMempoolAndCache(const CTransaction& tx, TxValidationS
|
|||||||
assert(txFrom->vout.size() > txin.prevout.n);
|
assert(txFrom->vout.size() > txin.prevout.n);
|
||||||
assert(txFrom->vout[txin.prevout.n] == coin.out);
|
assert(txFrom->vout[txin.prevout.n] == coin.out);
|
||||||
} else {
|
} else {
|
||||||
assert(std::addressof(::ChainstateActive().CoinsTip()) == std::addressof(coins_tip));
|
|
||||||
const Coin& coinFromUTXOSet = coins_tip.AccessCoin(txin.prevout);
|
const Coin& coinFromUTXOSet = coins_tip.AccessCoin(txin.prevout);
|
||||||
assert(!coinFromUTXOSet.IsSpent());
|
assert(!coinFromUTXOSet.IsSpent());
|
||||||
assert(coinFromUTXOSet.out == coin.out);
|
assert(coinFromUTXOSet.out == coin.out);
|
||||||
@@ -454,7 +446,6 @@ public:
|
|||||||
m_limit_ancestor_size(gArgs.GetArg("-limitancestorsize", DEFAULT_ANCESTOR_SIZE_LIMIT)*1000),
|
m_limit_ancestor_size(gArgs.GetArg("-limitancestorsize", DEFAULT_ANCESTOR_SIZE_LIMIT)*1000),
|
||||||
m_limit_descendants(gArgs.GetArg("-limitdescendantcount", DEFAULT_DESCENDANT_LIMIT)),
|
m_limit_descendants(gArgs.GetArg("-limitdescendantcount", DEFAULT_DESCENDANT_LIMIT)),
|
||||||
m_limit_descendant_size(gArgs.GetArg("-limitdescendantsize", DEFAULT_DESCENDANT_SIZE_LIMIT)*1000) {
|
m_limit_descendant_size(gArgs.GetArg("-limitdescendantsize", DEFAULT_DESCENDANT_SIZE_LIMIT)*1000) {
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(m_active_chainstate));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// We put the arguments we're handed into a struct, so we can pass them
|
// We put the arguments we're handed into a struct, so we can pass them
|
||||||
@@ -607,7 +598,6 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
// Only accept nLockTime-using transactions that can be mined in the next
|
// Only accept nLockTime-using transactions that can be mined in the next
|
||||||
// block; we don't want our mempool filled up with transactions that can't
|
// block; we don't want our mempool filled up with transactions that can't
|
||||||
// be mined yet.
|
// be mined yet.
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(m_active_chainstate.m_chain));
|
|
||||||
if (!CheckFinalTx(m_active_chainstate.m_chain.Tip(), tx, STANDARD_LOCKTIME_VERIFY_FLAGS))
|
if (!CheckFinalTx(m_active_chainstate.m_chain.Tip(), tx, STANDARD_LOCKTIME_VERIFY_FLAGS))
|
||||||
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-final");
|
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-final");
|
||||||
|
|
||||||
@@ -663,7 +653,6 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
LockPoints lp;
|
LockPoints lp;
|
||||||
m_view.SetBackend(m_viewmempool);
|
m_view.SetBackend(m_viewmempool);
|
||||||
|
|
||||||
assert(std::addressof(::ChainstateActive().CoinsTip()) == std::addressof(m_active_chainstate.CoinsTip()));
|
|
||||||
const CCoinsViewCache& coins_cache = m_active_chainstate.CoinsTip();
|
const CCoinsViewCache& coins_cache = m_active_chainstate.CoinsTip();
|
||||||
// do all inputs exist?
|
// do all inputs exist?
|
||||||
for (const CTxIn& txin : tx.vin) {
|
for (const CTxIn& txin : tx.vin) {
|
||||||
@@ -701,18 +690,15 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
// be mined yet.
|
// be mined yet.
|
||||||
// Pass in m_view which has all of the relevant inputs cached. Note that, since m_view's
|
// Pass in m_view which has all of the relevant inputs cached. Note that, since m_view's
|
||||||
// backend was removed, it no longer pulls coins from the mempool.
|
// backend was removed, it no longer pulls coins from the mempool.
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(m_active_chainstate));
|
|
||||||
if (!CheckSequenceLocks(m_active_chainstate.m_chain.Tip(), m_view, tx, STANDARD_LOCKTIME_VERIFY_FLAGS, &lp))
|
if (!CheckSequenceLocks(m_active_chainstate.m_chain.Tip(), m_view, tx, STANDARD_LOCKTIME_VERIFY_FLAGS, &lp))
|
||||||
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-BIP68-final");
|
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-BIP68-final");
|
||||||
|
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(m_active_chainstate.m_blockman));
|
|
||||||
if (!Consensus::CheckTxInputs(tx, state, m_view, m_active_chainstate.m_blockman.GetSpendHeight(m_view), ws.m_base_fees)) {
|
if (!Consensus::CheckTxInputs(tx, state, m_view, m_active_chainstate.m_blockman.GetSpendHeight(m_view), ws.m_base_fees)) {
|
||||||
return false; // state filled in by CheckTxInputs
|
return false; // state filled in by CheckTxInputs
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for non-standard pay-to-script-hash in inputs
|
// Check for non-standard pay-to-script-hash in inputs
|
||||||
const auto& params = args.m_chainparams.GetConsensus();
|
const auto& params = args.m_chainparams.GetConsensus();
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(m_active_chainstate.m_chain));
|
|
||||||
auto taproot_state = VersionBitsState(m_active_chainstate.m_chain.Tip(), params, Consensus::DEPLOYMENT_TAPROOT, versionbitscache);
|
auto taproot_state = VersionBitsState(m_active_chainstate.m_chain.Tip(), params, Consensus::DEPLOYMENT_TAPROOT, versionbitscache);
|
||||||
if (fRequireStandard && !AreInputsStandard(tx, m_view, taproot_state == ThresholdState::ACTIVE)) {
|
if (fRequireStandard && !AreInputsStandard(tx, m_view, taproot_state == ThresholdState::ACTIVE)) {
|
||||||
return state.Invalid(TxValidationResult::TX_INPUTS_NOT_STANDARD, "bad-txns-nonstandard-inputs");
|
return state.Invalid(TxValidationResult::TX_INPUTS_NOT_STANDARD, "bad-txns-nonstandard-inputs");
|
||||||
@@ -739,7 +725,6 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(m_active_chainstate.m_chain));
|
|
||||||
entry.reset(new CTxMemPoolEntry(ptx, ws.m_base_fees, nAcceptTime, m_active_chainstate.m_chain.Height(),
|
entry.reset(new CTxMemPoolEntry(ptx, ws.m_base_fees, nAcceptTime, m_active_chainstate.m_chain.Height(),
|
||||||
fSpendsCoinbase, nSigOpsCost, lp));
|
fSpendsCoinbase, nSigOpsCost, lp));
|
||||||
unsigned int nSize = entry->GetTxSize();
|
unsigned int nSize = entry->GetTxSize();
|
||||||
@@ -992,9 +977,7 @@ bool MemPoolAccept::ConsensusScriptChecks(const ATMPArgs& args, Workspace& ws, P
|
|||||||
// There is a similar check in CreateNewBlock() to prevent creating
|
// There is a similar check in CreateNewBlock() to prevent creating
|
||||||
// invalid blocks (using TestBlockValidity), however allowing such
|
// invalid blocks (using TestBlockValidity), however allowing such
|
||||||
// transactions into the mempool can be exploited as a DoS attack.
|
// transactions into the mempool can be exploited as a DoS attack.
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(m_active_chainstate.m_chain));
|
|
||||||
unsigned int currentBlockScriptVerifyFlags = GetBlockScriptFlags(m_active_chainstate.m_chain.Tip(), chainparams.GetConsensus());
|
unsigned int currentBlockScriptVerifyFlags = GetBlockScriptFlags(m_active_chainstate.m_chain.Tip(), chainparams.GetConsensus());
|
||||||
assert(std::addressof(::ChainstateActive().CoinsTip()) == std::addressof(m_active_chainstate.CoinsTip()));
|
|
||||||
if (!CheckInputsFromMempoolAndCache(tx, state, m_view, m_pool, currentBlockScriptVerifyFlags, txdata, m_active_chainstate.CoinsTip())) {
|
if (!CheckInputsFromMempoolAndCache(tx, state, m_view, m_pool, currentBlockScriptVerifyFlags, txdata, m_active_chainstate.CoinsTip())) {
|
||||||
return error("%s: BUG! PLEASE REPORT THIS! CheckInputScripts failed against latest-block but not STANDARD flags %s, %s",
|
return error("%s: BUG! PLEASE REPORT THIS! CheckInputScripts failed against latest-block but not STANDARD flags %s, %s",
|
||||||
__func__, hash.ToString(), state.ToString());
|
__func__, hash.ToString(), state.ToString());
|
||||||
@@ -1035,7 +1018,6 @@ bool MemPoolAccept::Finalize(const ATMPArgs& args, Workspace& ws)
|
|||||||
// - it's not being re-added during a reorg which bypasses typical mempool fee limits
|
// - it's not being re-added during a reorg which bypasses typical mempool fee limits
|
||||||
// - the node is not behind
|
// - the node is not behind
|
||||||
// - the transaction is not dependent on any other transactions in the mempool
|
// - the transaction is not dependent on any other transactions in the mempool
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(m_active_chainstate));
|
|
||||||
bool validForFeeEstimation = !fReplacementTransaction && !bypass_limits && IsCurrentForFeeEstimation(m_active_chainstate) && m_pool.HasNoInputsOf(tx);
|
bool validForFeeEstimation = !fReplacementTransaction && !bypass_limits && IsCurrentForFeeEstimation(m_active_chainstate) && m_pool.HasNoInputsOf(tx);
|
||||||
|
|
||||||
// Store transaction in memory
|
// Store transaction in memory
|
||||||
@@ -1043,7 +1025,6 @@ bool MemPoolAccept::Finalize(const ATMPArgs& args, Workspace& ws)
|
|||||||
|
|
||||||
// trim mempool and check if tx was trimmed
|
// trim mempool and check if tx was trimmed
|
||||||
if (!bypass_limits) {
|
if (!bypass_limits) {
|
||||||
assert(std::addressof(::ChainstateActive().CoinsTip()) == std::addressof(m_active_chainstate.CoinsTip()));
|
|
||||||
LimitMempoolSize(m_pool, m_active_chainstate.CoinsTip(), gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000, std::chrono::hours{gArgs.GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY)});
|
LimitMempoolSize(m_pool, m_active_chainstate.CoinsTip(), gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000, std::chrono::hours{gArgs.GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY)});
|
||||||
if (!m_pool.exists(hash))
|
if (!m_pool.exists(hash))
|
||||||
return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "mempool full");
|
return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "mempool full");
|
||||||
@@ -1146,7 +1127,6 @@ static MempoolAcceptResult AcceptToMemoryPoolWithTime(const CChainParams& chainp
|
|||||||
MemPoolAccept::ATMPArgs args { chainparams, nAcceptTime, bypass_limits, coins_to_uncache,
|
MemPoolAccept::ATMPArgs args { chainparams, nAcceptTime, bypass_limits, coins_to_uncache,
|
||||||
test_accept, /* m_allow_bip125_replacement */ true };
|
test_accept, /* m_allow_bip125_replacement */ true };
|
||||||
|
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
const MempoolAcceptResult result = MemPoolAccept(pool, active_chainstate).AcceptSingleTransaction(tx, args);
|
const MempoolAcceptResult result = MemPoolAccept(pool, active_chainstate).AcceptSingleTransaction(tx, args);
|
||||||
if (result.m_result_type != MempoolAcceptResult::ResultType::VALID) {
|
if (result.m_result_type != MempoolAcceptResult::ResultType::VALID) {
|
||||||
// Remove coins that were not present in the coins cache before calling
|
// Remove coins that were not present in the coins cache before calling
|
||||||
@@ -1166,7 +1146,6 @@ static MempoolAcceptResult AcceptToMemoryPoolWithTime(const CChainParams& chainp
|
|||||||
MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, CTxMemPool& pool, const CTransactionRef& tx,
|
MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, CTxMemPool& pool, const CTransactionRef& tx,
|
||||||
bool bypass_limits, bool test_accept)
|
bool bypass_limits, bool test_accept)
|
||||||
{
|
{
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
return AcceptToMemoryPoolWithTime(Params(), pool, active_chainstate, tx, GetTime(), bypass_limits, test_accept);
|
return AcceptToMemoryPoolWithTime(Params(), pool, active_chainstate, tx, GetTime(), bypass_limits, test_accept);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1182,7 +1161,6 @@ PackageMempoolAcceptResult ProcessNewPackage(CChainState& active_chainstate, CTx
|
|||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
MemPoolAccept::ATMPArgs args { chainparams, GetTime(), /* bypass_limits */ false, coins_to_uncache,
|
MemPoolAccept::ATMPArgs args { chainparams, GetTime(), /* bypass_limits */ false, coins_to_uncache,
|
||||||
test_accept, /* m_allow_bip125_replacement */ false };
|
test_accept, /* m_allow_bip125_replacement */ false };
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
const PackageMempoolAcceptResult result = MemPoolAccept(pool, active_chainstate).AcceptMultipleTransactions(package, args);
|
const PackageMempoolAcceptResult result = MemPoolAccept(pool, active_chainstate).AcceptMultipleTransactions(package, args);
|
||||||
|
|
||||||
// Uncache coins pertaining to transactions that were not submitted to the mempool.
|
// Uncache coins pertaining to transactions that were not submitted to the mempool.
|
||||||
@@ -1321,7 +1299,6 @@ static void AlertNotify(const std::string& strMessage)
|
|||||||
void CChainState::CheckForkWarningConditions()
|
void CChainState::CheckForkWarningConditions()
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
|
|
||||||
// Before we get past initial download, we cannot reliably alert about forks
|
// Before we get past initial download, we cannot reliably alert about forks
|
||||||
// (we assume we don't get stuck on a fork before finishing our initial sync)
|
// (we assume we don't get stuck on a fork before finishing our initial sync)
|
||||||
@@ -1340,7 +1317,6 @@ void CChainState::CheckForkWarningConditions()
|
|||||||
// Called both upon regular invalid block discovery *and* InvalidateBlock
|
// Called both upon regular invalid block discovery *and* InvalidateBlock
|
||||||
void CChainState::InvalidChainFound(CBlockIndex* pindexNew)
|
void CChainState::InvalidChainFound(CBlockIndex* pindexNew)
|
||||||
{
|
{
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
if (!pindexBestInvalid || pindexNew->nChainWork > pindexBestInvalid->nChainWork)
|
if (!pindexBestInvalid || pindexNew->nChainWork > pindexBestInvalid->nChainWork)
|
||||||
pindexBestInvalid = pindexNew;
|
pindexBestInvalid = pindexNew;
|
||||||
if (pindexBestHeader != nullptr && pindexBestHeader->GetAncestor(pindexNew->nHeight) == pindexNew) {
|
if (pindexBestHeader != nullptr && pindexBestHeader->GetAncestor(pindexNew->nHeight) == pindexNew) {
|
||||||
@@ -1401,7 +1377,6 @@ bool CScriptCheck::operator()() {
|
|||||||
int BlockManager::GetSpendHeight(const CCoinsViewCache& inputs)
|
int BlockManager::GetSpendHeight(const CCoinsViewCache& inputs)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(*this));
|
|
||||||
CBlockIndex* pindexPrev = LookupBlockIndex(inputs.GetBestBlock());
|
CBlockIndex* pindexPrev = LookupBlockIndex(inputs.GetBestBlock());
|
||||||
return pindexPrev->nHeight + 1;
|
return pindexPrev->nHeight + 1;
|
||||||
}
|
}
|
||||||
@@ -2285,7 +2260,6 @@ static void UpdateTip(CTxMemPool& mempool, const CBlockIndex* pindexNew, const C
|
|||||||
}
|
}
|
||||||
|
|
||||||
bilingual_str warning_messages;
|
bilingual_str warning_messages;
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
if (!active_chainstate.IsInitialBlockDownload()) {
|
if (!active_chainstate.IsInitialBlockDownload()) {
|
||||||
const CBlockIndex* pindex = pindexNew;
|
const CBlockIndex* pindex = pindexNew;
|
||||||
for (int bit = 0; bit < VERSIONBITS_NUM_BITS; bit++) {
|
for (int bit = 0; bit < VERSIONBITS_NUM_BITS; bit++) {
|
||||||
@@ -2301,7 +2275,6 @@ static void UpdateTip(CTxMemPool& mempool, const CBlockIndex* pindexNew, const C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
LogPrintf("%s: new best=%s height=%d version=0x%08x log2_work=%f tx=%lu date='%s' progress=%f cache=%.1fMiB(%utxo)%s\n", __func__,
|
LogPrintf("%s: new best=%s height=%d version=0x%08x log2_work=%f tx=%lu date='%s' progress=%f cache=%.1fMiB(%utxo)%s\n", __func__,
|
||||||
pindexNew->GetBlockHash().ToString(), pindexNew->nHeight, pindexNew->nVersion,
|
pindexNew->GetBlockHash().ToString(), pindexNew->nHeight, pindexNew->nVersion,
|
||||||
log(pindexNew->nChainWork.getdouble())/log(2.0), (unsigned long)pindexNew->nChainTx,
|
log(pindexNew->nChainWork.getdouble())/log(2.0), (unsigned long)pindexNew->nChainTx,
|
||||||
@@ -2561,7 +2534,6 @@ bool CChainState::ActivateBestChainStep(BlockValidationState& state, const CChai
|
|||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
AssertLockHeld(m_mempool.cs);
|
AssertLockHeld(m_mempool.cs);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
|
|
||||||
const CBlockIndex* pindexOldTip = m_chain.Tip();
|
const CBlockIndex* pindexOldTip = m_chain.Tip();
|
||||||
const CBlockIndex* pindexFork = m_chain.FindFork(pindexMostWork);
|
const CBlockIndex* pindexFork = m_chain.FindFork(pindexMostWork);
|
||||||
@@ -2661,7 +2633,6 @@ static bool NotifyHeaderTip(CChainState& chainstate) LOCKS_EXCLUDED(cs_main) {
|
|||||||
|
|
||||||
if (pindexHeader != pindexHeaderOld) {
|
if (pindexHeader != pindexHeaderOld) {
|
||||||
fNotify = true;
|
fNotify = true;
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(chainstate));
|
|
||||||
fInitialBlockDownload = chainstate.IsInitialBlockDownload();
|
fInitialBlockDownload = chainstate.IsInitialBlockDownload();
|
||||||
pindexHeaderOld = pindexHeader;
|
pindexHeaderOld = pindexHeader;
|
||||||
}
|
}
|
||||||
@@ -2872,7 +2843,6 @@ bool CChainState::InvalidateBlock(BlockValidationState& state, const CChainParam
|
|||||||
// transactions back to the mempool if disconnecting was successful,
|
// transactions back to the mempool if disconnecting was successful,
|
||||||
// and we're not doing a very deep invalidation (in which case
|
// and we're not doing a very deep invalidation (in which case
|
||||||
// keeping the mempool up to date is probably futile anyway).
|
// keeping the mempool up to date is probably futile anyway).
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
UpdateMempoolForReorg(*this, m_mempool, disconnectpool, /* fAddToMempool = */ (++disconnected <= 10) && ret);
|
UpdateMempoolForReorg(*this, m_mempool, disconnectpool, /* fAddToMempool = */ (++disconnected <= 10) && ret);
|
||||||
if (!ret) return false;
|
if (!ret) return false;
|
||||||
assert(invalid_walk_tip->pprev == m_chain.Tip());
|
assert(invalid_walk_tip->pprev == m_chain.Tip());
|
||||||
@@ -3203,7 +3173,6 @@ CBlockIndex* BlockManager::GetLastCheckpoint(const CCheckpointData& data)
|
|||||||
for (const MapCheckpoints::value_type& i : reverse_iterate(checkpoints))
|
for (const MapCheckpoints::value_type& i : reverse_iterate(checkpoints))
|
||||||
{
|
{
|
||||||
const uint256& hash = i.second;
|
const uint256& hash = i.second;
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(*this));
|
|
||||||
CBlockIndex* pindex = LookupBlockIndex(hash);
|
CBlockIndex* pindex = LookupBlockIndex(hash);
|
||||||
if (pindex) {
|
if (pindex) {
|
||||||
return pindex;
|
return pindex;
|
||||||
@@ -3236,7 +3205,6 @@ static bool ContextualCheckBlockHeader(const CBlockHeader& block, BlockValidatio
|
|||||||
// Don't accept any forks from the main chain prior to last checkpoint.
|
// Don't accept any forks from the main chain prior to last checkpoint.
|
||||||
// GetLastCheckpoint finds the last checkpoint in MapCheckpoints that's in our
|
// GetLastCheckpoint finds the last checkpoint in MapCheckpoints that's in our
|
||||||
// BlockIndex().
|
// BlockIndex().
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(blockman));
|
|
||||||
CBlockIndex* pcheckpoint = blockman.GetLastCheckpoint(params.Checkpoints());
|
CBlockIndex* pcheckpoint = blockman.GetLastCheckpoint(params.Checkpoints());
|
||||||
if (pcheckpoint && nHeight < pcheckpoint->nHeight) {
|
if (pcheckpoint && nHeight < pcheckpoint->nHeight) {
|
||||||
LogPrintf("ERROR: %s: forked chain older than last checkpoint (height %d)\n", __func__, nHeight);
|
LogPrintf("ERROR: %s: forked chain older than last checkpoint (height %d)\n", __func__, nHeight);
|
||||||
@@ -3440,7 +3408,6 @@ bool BlockManager::AcceptBlockHeader(const CBlockHeader& block, BlockValidationS
|
|||||||
// Exposed wrapper for AcceptBlockHeader
|
// Exposed wrapper for AcceptBlockHeader
|
||||||
bool ChainstateManager::ProcessNewBlockHeaders(const std::vector<CBlockHeader>& headers, BlockValidationState& state, const CChainParams& chainparams, const CBlockIndex** ppindex)
|
bool ChainstateManager::ProcessNewBlockHeaders(const std::vector<CBlockHeader>& headers, BlockValidationState& state, const CChainParams& chainparams, const CBlockIndex** ppindex)
|
||||||
{
|
{
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(ActiveChainstate()));
|
|
||||||
AssertLockNotHeld(cs_main);
|
AssertLockNotHeld(cs_main);
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
@@ -3531,7 +3498,6 @@ bool CChainState::AcceptBlock(const std::shared_ptr<const CBlock>& pblock, Block
|
|||||||
|
|
||||||
// Write block to history file
|
// Write block to history file
|
||||||
if (fNewBlock) *fNewBlock = true;
|
if (fNewBlock) *fNewBlock = true;
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(m_chain));
|
|
||||||
try {
|
try {
|
||||||
FlatFilePos blockPos = SaveBlockToDisk(block, pindex->nHeight, m_chain, chainparams, dbp);
|
FlatFilePos blockPos = SaveBlockToDisk(block, pindex->nHeight, m_chain, chainparams, dbp);
|
||||||
if (blockPos.IsNull()) {
|
if (blockPos.IsNull()) {
|
||||||
@@ -3553,7 +3519,6 @@ bool CChainState::AcceptBlock(const std::shared_ptr<const CBlock>& pblock, Block
|
|||||||
bool ChainstateManager::ProcessNewBlock(const CChainParams& chainparams, const std::shared_ptr<const CBlock>& block, bool force_processing, bool* new_block)
|
bool ChainstateManager::ProcessNewBlock(const CChainParams& chainparams, const std::shared_ptr<const CBlock>& block, bool force_processing, bool* new_block)
|
||||||
{
|
{
|
||||||
AssertLockNotHeld(cs_main);
|
AssertLockNotHeld(cs_main);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(ActiveChainstate()));
|
|
||||||
|
|
||||||
{
|
{
|
||||||
CBlockIndex *pindex = nullptr;
|
CBlockIndex *pindex = nullptr;
|
||||||
@@ -3598,7 +3563,6 @@ bool TestBlockValidity(BlockValidationState& state,
|
|||||||
bool fCheckMerkleRoot)
|
bool fCheckMerkleRoot)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(chainstate));
|
|
||||||
assert(pindexPrev && pindexPrev == chainstate.m_chain.Tip());
|
assert(pindexPrev && pindexPrev == chainstate.m_chain.Tip());
|
||||||
CCoinsViewCache viewNew(&chainstate.CoinsTip());
|
CCoinsViewCache viewNew(&chainstate.CoinsTip());
|
||||||
uint256 block_hash(block.GetHash());
|
uint256 block_hash(block.GetHash());
|
||||||
@@ -3608,7 +3572,6 @@ bool TestBlockValidity(BlockValidationState& state,
|
|||||||
indexDummy.phashBlock = &block_hash;
|
indexDummy.phashBlock = &block_hash;
|
||||||
|
|
||||||
// NOTE: CheckBlockHeader is called by CheckBlock
|
// NOTE: CheckBlockHeader is called by CheckBlock
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(chainstate.m_blockman));
|
|
||||||
if (!ContextualCheckBlockHeader(block, state, chainstate.m_blockman, chainparams, pindexPrev, GetAdjustedTime()))
|
if (!ContextualCheckBlockHeader(block, state, chainstate.m_blockman, chainparams, pindexPrev, GetAdjustedTime()))
|
||||||
return error("%s: Consensus::ContextualCheckBlockHeader: %s", __func__, state.ToString());
|
return error("%s: Consensus::ContextualCheckBlockHeader: %s", __func__, state.ToString());
|
||||||
if (!CheckBlock(block, state, chainparams.GetConsensus(), fCheckPOW, fCheckMerkleRoot))
|
if (!CheckBlock(block, state, chainparams.GetConsensus(), fCheckPOW, fCheckMerkleRoot))
|
||||||
@@ -3688,7 +3651,6 @@ void PruneBlockFilesManual(CChainState& active_chainstate, int nManualPruneHeigh
|
|||||||
{
|
{
|
||||||
BlockValidationState state;
|
BlockValidationState state;
|
||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
if (!active_chainstate.FlushStateToDisk(
|
if (!active_chainstate.FlushStateToDisk(
|
||||||
chainparams, state, FlushStateMode::NONE, nManualPruneHeight)) {
|
chainparams, state, FlushStateMode::NONE, nManualPruneHeight)) {
|
||||||
LogPrintf("%s: failed to flush state (%s)\n", __func__, state.ToString());
|
LogPrintf("%s: failed to flush state (%s)\n", __func__, state.ToString());
|
||||||
@@ -3842,7 +3804,6 @@ void BlockManager::Unload() {
|
|||||||
|
|
||||||
bool CChainState::LoadBlockIndexDB(const CChainParams& chainparams)
|
bool CChainState::LoadBlockIndexDB(const CChainParams& chainparams)
|
||||||
{
|
{
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
if (!m_blockman.LoadBlockIndex(
|
if (!m_blockman.LoadBlockIndex(
|
||||||
chainparams.GetConsensus(), *pblocktree,
|
chainparams.GetConsensus(), *pblocktree,
|
||||||
setBlockIndexCandidates)) {
|
setBlockIndexCandidates)) {
|
||||||
@@ -3899,7 +3860,6 @@ bool CChainState::LoadBlockIndexDB(const CChainParams& chainparams)
|
|||||||
void CChainState::LoadMempool(const ArgsManager& args)
|
void CChainState::LoadMempool(const ArgsManager& args)
|
||||||
{
|
{
|
||||||
if (args.GetArg("-persistmempool", DEFAULT_PERSIST_MEMPOOL)) {
|
if (args.GetArg("-persistmempool", DEFAULT_PERSIST_MEMPOOL)) {
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
::LoadMempool(m_mempool, *this);
|
::LoadMempool(m_mempool, *this);
|
||||||
}
|
}
|
||||||
m_mempool.SetIsLoaded(!ShutdownRequested());
|
m_mempool.SetIsLoaded(!ShutdownRequested());
|
||||||
@@ -3951,7 +3911,6 @@ bool CVerifyDB::VerifyDB(
|
|||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
|
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(chainstate));
|
|
||||||
if (chainstate.m_chain.Tip() == nullptr || chainstate.m_chain.Tip()->pprev == nullptr)
|
if (chainstate.m_chain.Tip() == nullptr || chainstate.m_chain.Tip()->pprev == nullptr)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -4220,7 +4179,6 @@ bool CChainState::LoadGenesisBlock(const CChainParams& chainparams)
|
|||||||
if (m_blockman.m_block_index.count(chainparams.GenesisBlock().GetHash()))
|
if (m_blockman.m_block_index.count(chainparams.GenesisBlock().GetHash()))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
assert(std::addressof(::ChainActive()) == std::addressof(m_chain));
|
|
||||||
try {
|
try {
|
||||||
const CBlock& block = chainparams.GenesisBlock();
|
const CBlock& block = chainparams.GenesisBlock();
|
||||||
FlatFilePos blockPos = SaveBlockToDisk(block, 0, m_chain, chainparams, nullptr);
|
FlatFilePos blockPos = SaveBlockToDisk(block, 0, m_chain, chainparams, nullptr);
|
||||||
@@ -4284,7 +4242,6 @@ void CChainState::LoadExternalBlockFile(const CChainParams& chainparams, FILE* f
|
|||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
// detect out of order blocks, and store them for later
|
// detect out of order blocks, and store them for later
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(m_blockman));
|
|
||||||
if (hash != chainparams.GetConsensus().hashGenesisBlock && !m_blockman.LookupBlockIndex(block.hashPrevBlock)) {
|
if (hash != chainparams.GetConsensus().hashGenesisBlock && !m_blockman.LookupBlockIndex(block.hashPrevBlock)) {
|
||||||
LogPrint(BCLog::REINDEX, "%s: Out of order block %s, parent %s not known\n", __func__, hash.ToString(),
|
LogPrint(BCLog::REINDEX, "%s: Out of order block %s, parent %s not known\n", __func__, hash.ToString(),
|
||||||
block.hashPrevBlock.ToString());
|
block.hashPrevBlock.ToString());
|
||||||
@@ -4294,11 +4251,9 @@ void CChainState::LoadExternalBlockFile(const CChainParams& chainparams, FILE* f
|
|||||||
}
|
}
|
||||||
|
|
||||||
// process in case the block isn't known yet
|
// process in case the block isn't known yet
|
||||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(m_blockman));
|
|
||||||
CBlockIndex* pindex = m_blockman.LookupBlockIndex(hash);
|
CBlockIndex* pindex = m_blockman.LookupBlockIndex(hash);
|
||||||
if (!pindex || (pindex->nStatus & BLOCK_HAVE_DATA) == 0) {
|
if (!pindex || (pindex->nStatus & BLOCK_HAVE_DATA) == 0) {
|
||||||
BlockValidationState state;
|
BlockValidationState state;
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
if (AcceptBlock(pblock, state, chainparams, nullptr, true, dbp, nullptr)) {
|
if (AcceptBlock(pblock, state, chainparams, nullptr, true, dbp, nullptr)) {
|
||||||
nLoaded++;
|
nLoaded++;
|
||||||
}
|
}
|
||||||
@@ -4313,13 +4268,11 @@ void CChainState::LoadExternalBlockFile(const CChainParams& chainparams, FILE* f
|
|||||||
// Activate the genesis block so normal node progress can continue
|
// Activate the genesis block so normal node progress can continue
|
||||||
if (hash == chainparams.GetConsensus().hashGenesisBlock) {
|
if (hash == chainparams.GetConsensus().hashGenesisBlock) {
|
||||||
BlockValidationState state;
|
BlockValidationState state;
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
if (!ActivateBestChain(state, chainparams, nullptr)) {
|
if (!ActivateBestChain(state, chainparams, nullptr)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
NotifyHeaderTip(*this);
|
NotifyHeaderTip(*this);
|
||||||
|
|
||||||
// Recursively process earlier encountered successors of this block
|
// Recursively process earlier encountered successors of this block
|
||||||
@@ -4338,7 +4291,6 @@ void CChainState::LoadExternalBlockFile(const CChainParams& chainparams, FILE* f
|
|||||||
head.ToString());
|
head.ToString());
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
BlockValidationState dummy;
|
BlockValidationState dummy;
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
if (AcceptBlock(pblockrecursive, dummy, chainparams, nullptr, true, &it->second, nullptr))
|
if (AcceptBlock(pblockrecursive, dummy, chainparams, nullptr, true, &it->second, nullptr))
|
||||||
{
|
{
|
||||||
nLoaded++;
|
nLoaded++;
|
||||||
@@ -4347,7 +4299,6 @@ void CChainState::LoadExternalBlockFile(const CChainParams& chainparams, FILE* f
|
|||||||
}
|
}
|
||||||
range.first++;
|
range.first++;
|
||||||
mapBlocksUnknownParent.erase(it);
|
mapBlocksUnknownParent.erase(it);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*this));
|
|
||||||
NotifyHeaderTip(*this);
|
NotifyHeaderTip(*this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4628,7 +4579,6 @@ bool LoadMempool(CTxMemPool& pool, CChainState& active_chainstate, FopenFn mocka
|
|||||||
}
|
}
|
||||||
if (nTime > nNow - nExpiryTimeout) {
|
if (nTime > nNow - nExpiryTimeout) {
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
assert(std::addressof(::ChainstateActive()) == std::addressof(active_chainstate));
|
|
||||||
if (AcceptToMemoryPoolWithTime(chainparams, pool, active_chainstate, tx, nTime, false /* bypass_limits */,
|
if (AcceptToMemoryPoolWithTime(chainparams, pool, active_chainstate, tx, nTime, false /* bypass_limits */,
|
||||||
false /* test_accept */).m_result_type == MempoolAcceptResult::ResultType::VALID) {
|
false /* test_accept */).m_result_type == MempoolAcceptResult::ResultType::VALID) {
|
||||||
++count;
|
++count;
|
||||||
|
|||||||
Reference in new issue
Block a user