refactor: remove unneeded temporaries in node/interfaces, simplify code

- make the code easier to read and understand

- improve performance by avoiding unnecessary move operations

- the cleaner, simpler, and easier to read the code is, the
  better chance the compiler has at implementing it well
This commit is contained in:
Jon Atack
2022-07-27 13:21:08 +02:00
parent b27ba169eb
commit 4bedfd702a

View File

@@ -287,12 +287,7 @@ public:
} }
double getVerificationProgress() override double getVerificationProgress() override
{ {
const CBlockIndex* tip; return GuessVerificationProgress(chainman().GetParams().TxData(), WITH_LOCK(::cs_main, return chainman().ActiveChain().Tip()));
{
LOCK(::cs_main);
tip = chainman().ActiveChain().Tip();
}
return GuessVerificationProgress(chainman().GetParams().TxData(), tip);
} }
bool isInitialBlockDownload() override { bool isInitialBlockDownload() override {
return chainman().ActiveChainstate().IsInitialBlockDownload(); return chainman().ActiveChainstate().IsInitialBlockDownload();
@@ -505,34 +500,24 @@ public:
explicit ChainImpl(NodeContext& node) : m_node(node) {} explicit ChainImpl(NodeContext& node) : m_node(node) {}
std::optional<int> getHeight() override std::optional<int> getHeight() override
{ {
LOCK(::cs_main); const int height{WITH_LOCK(::cs_main, return chainman().ActiveChain().Height())};
const CChain& active = chainman().ActiveChain(); return height >= 0 ? std::optional{height} : std::nullopt;
int height = active.Height();
if (height >= 0) {
return height;
}
return std::nullopt;
} }
uint256 getBlockHash(int height) override uint256 getBlockHash(int height) override
{ {
LOCK(::cs_main); LOCK(::cs_main);
const CChain& active = chainman().ActiveChain(); return Assert(chainman().ActiveChain()[height])->GetBlockHash();
CBlockIndex* block = active[height];
assert(block);
return block->GetBlockHash();
} }
bool haveBlockOnDisk(int height) override bool haveBlockOnDisk(int height) override
{ {
LOCK(::cs_main); LOCK(::cs_main);
const CChain& active = chainman().ActiveChain(); const CBlockIndex* block{chainman().ActiveChain()[height]};
CBlockIndex* block = active[height];
return block && ((block->nStatus & BLOCK_HAVE_DATA) != 0) && block->nTx > 0; return block && ((block->nStatus & BLOCK_HAVE_DATA) != 0) && block->nTx > 0;
} }
CBlockLocator getTipLocator() override CBlockLocator getTipLocator() override
{ {
LOCK(::cs_main); LOCK(::cs_main);
const CChain& active = chainman().ActiveChain(); return chainman().ActiveChain().GetLocator();
return active.GetLocator();
} }
CBlockLocator getActiveChainLocator(const uint256& block_hash) override CBlockLocator getActiveChainLocator(const uint256& block_hash) override
{ {
@@ -544,8 +529,7 @@ public:
std::optional<int> findLocatorFork(const CBlockLocator& locator) override std::optional<int> findLocatorFork(const CBlockLocator& locator) override
{ {
LOCK(::cs_main); LOCK(::cs_main);
const CChainState& active = chainman().ActiveChainstate(); if (const CBlockIndex* fork = chainman().ActiveChainstate().FindForkInGlobalIndex(locator)) {
if (const CBlockIndex* fork = active.FindForkInGlobalIndex(locator)) {
return fork->nHeight; return fork->nHeight;
} }
return std::nullopt; return std::nullopt;
@@ -553,8 +537,7 @@ public:
bool findBlock(const uint256& hash, const FoundBlock& block) override bool findBlock(const uint256& hash, const FoundBlock& block) override
{ {
WAIT_LOCK(cs_main, lock); WAIT_LOCK(cs_main, lock);
const CChain& active = chainman().ActiveChain(); return FillBlock(chainman().m_blockman.LookupBlockIndex(hash), block, lock, chainman().ActiveChain());
return FillBlock(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
{ {
@@ -576,11 +559,10 @@ public:
bool findAncestorByHash(const uint256& block_hash, const uint256& ancestor_hash, const FoundBlock& ancestor_out) override bool findAncestorByHash(const uint256& block_hash, const uint256& ancestor_hash, const FoundBlock& ancestor_out) override
{ {
WAIT_LOCK(cs_main, lock); WAIT_LOCK(cs_main, lock);
const CChain& active = chainman().ActiveChain();
const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash); const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash);
const CBlockIndex* ancestor = chainman().m_blockman.LookupBlockIndex(ancestor_hash); const CBlockIndex* ancestor = 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, chainman().ActiveChain());
} }
bool findCommonAncestor(const uint256& block_hash1, const uint256& block_hash2, const FoundBlock& ancestor_out, const FoundBlock& block1_out, const FoundBlock& block2_out) override bool findCommonAncestor(const uint256& block_hash1, const uint256& block_hash2, const FoundBlock& ancestor_out, const FoundBlock& block1_out, const FoundBlock& block2_out) override
{ {
@@ -720,11 +702,7 @@ public:
} }
void waitForNotificationsIfTipChanged(const uint256& old_tip) override void waitForNotificationsIfTipChanged(const uint256& old_tip) override
{ {
if (!old_tip.IsNull()) { if (!old_tip.IsNull() && old_tip == WITH_LOCK(::cs_main, return chainman().ActiveChain().Tip()->GetBlockHash())) return;
LOCK(::cs_main);
const CChain& active = chainman().ActiveChain();
if (old_tip == active.Tip()->GetBlockHash()) return;
}
SyncWithValidationInterfaceQueue(); SyncWithValidationInterfaceQueue();
} }
std::unique_ptr<Handler> handleRpc(const CRPCCommand& command) override std::unique_ptr<Handler> handleRpc(const CRPCCommand& command) override