mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-14 12:43:40 +02:00
Merge a55904a80c into merged_master (Bitcoin PR bitcoin/bitcoin#21866)
Paying the piper for some lazy use of globals, including ones I added
in 8e770d3f21
Had to add another couple methods to interfaces::Chain
This commit is contained in:
commit
34da23bd1a
41 changed files with 270 additions and 365 deletions
|
|
@ -197,26 +197,16 @@ public:
|
|||
int getNumBlocks() override
|
||||
{
|
||||
LOCK(::cs_main);
|
||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
||||
return chainman().ActiveChain().Height();
|
||||
}
|
||||
uint256 getBestBlockHash() override
|
||||
{
|
||||
const CBlockIndex* tip;
|
||||
{
|
||||
// TODO: Temporary scope to check correctness of refactored code.
|
||||
// Should be removed manually after merge of
|
||||
// https://github.com/bitcoin/bitcoin/pull/20158
|
||||
LOCK(cs_main);
|
||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
||||
tip = chainman().ActiveChain().Tip();
|
||||
}
|
||||
const CBlockIndex* tip = WITH_LOCK(::cs_main, return chainman().ActiveChain().Tip());
|
||||
return tip ? tip->GetBlockHash() : Params().GenesisBlock().GetHash();
|
||||
}
|
||||
int64_t getLastBlockTime() override
|
||||
{
|
||||
LOCK(::cs_main);
|
||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
||||
if (chainman().ActiveChain().Tip()) {
|
||||
return chainman().ActiveChain().Tip()->GetBlockTime();
|
||||
}
|
||||
|
|
@ -227,22 +217,12 @@ public:
|
|||
const CBlockIndex* tip;
|
||||
{
|
||||
LOCK(::cs_main);
|
||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
||||
tip = chainman().ActiveChain().Tip();
|
||||
}
|
||||
return GuessVerificationProgress(tip, Params().GetConsensus().nPowTargetSpacing);
|
||||
}
|
||||
bool isInitialBlockDownload() override {
|
||||
const CChainState* active_chainstate;
|
||||
{
|
||||
// TODO: Temporary scope to check correctness of refactored code.
|
||||
// Should be removed manually after merge of
|
||||
// https://github.com/bitcoin/bitcoin/pull/20158
|
||||
LOCK(::cs_main);
|
||||
active_chainstate = &m_context->chainman->ActiveChainstate();
|
||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*active_chainstate));
|
||||
}
|
||||
return active_chainstate->IsInitialBlockDownload();
|
||||
return chainman().ActiveChainstate().IsInitialBlockDownload();
|
||||
}
|
||||
bool getReindex() override { return ::fReindex; }
|
||||
bool getImporting() override { return ::fImporting; }
|
||||
|
|
@ -269,7 +249,6 @@ public:
|
|||
bool getUnspentOutput(const COutPoint& output, Coin& coin) override
|
||||
{
|
||||
LOCK(::cs_main);
|
||||
assert(std::addressof(::ChainstateActive()) == std::addressof(chainman().ActiveChainstate()));
|
||||
return chainman().ActiveChainstate().CoinsTip().GetCoin(output, coin);
|
||||
}
|
||||
WalletClient& walletClient() override
|
||||
|
|
@ -476,14 +455,12 @@ public:
|
|||
bool checkFinalTx(const CTransaction& tx) override
|
||||
{
|
||||
LOCK(cs_main);
|
||||
assert(std::addressof(::ChainActive()) == std::addressof(chainman().ActiveChain()));
|
||||
return CheckFinalTx(chainman().ActiveChain().Tip(), tx);
|
||||
}
|
||||
std::optional<int> findLocatorFork(const CBlockLocator& locator) override
|
||||
{
|
||||
LOCK(cs_main);
|
||||
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)) {
|
||||
return fork->nHeight;
|
||||
}
|
||||
|
|
@ -493,7 +470,6 @@ public:
|
|||
{
|
||||
WAIT_LOCK(cs_main, lock);
|
||||
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);
|
||||
}
|
||||
bool findFirstBlockWithTimeAndHeight(int64_t min_time, int min_height, const FoundBlock& block) override
|
||||
|
|
@ -506,7 +482,6 @@ public:
|
|||
{
|
||||
WAIT_LOCK(cs_main, lock);
|
||||
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* ancestor = block->GetAncestor(ancestor_height)) {
|
||||
return FillBlock(ancestor, ancestor_out, lock, active);
|
||||
|
|
@ -518,9 +493,7 @@ public:
|
|||
{
|
||||
WAIT_LOCK(cs_main, lock);
|
||||
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);
|
||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
||||
const CBlockIndex* ancestor = m_node.chainman->m_blockman.LookupBlockIndex(ancestor_hash);
|
||||
if (block && ancestor && block->GetAncestor(ancestor->nHeight) != ancestor) ancestor = nullptr;
|
||||
return FillBlock(ancestor, ancestor_out, lock, active);
|
||||
|
|
@ -529,9 +502,7 @@ public:
|
|||
{
|
||||
WAIT_LOCK(cs_main, lock);
|
||||
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);
|
||||
assert(std::addressof(g_chainman) == std::addressof(*m_node.chainman));
|
||||
const CBlockIndex* block2 = m_node.chainman->m_blockman.LookupBlockIndex(block_hash2);
|
||||
const CBlockIndex* ancestor = block1 && block2 ? LastCommonAncestor(block1, block2) : nullptr;
|
||||
// Using & instead of && below to avoid short circuiting and leaving
|
||||
|
|
@ -542,7 +513,6 @@ public:
|
|||
double guessVerificationProgress(const uint256& block_hash) override
|
||||
{
|
||||
LOCK(cs_main);
|
||||
assert(std::addressof(g_chainman.m_blockman) == std::addressof(chainman().m_blockman));
|
||||
return GuessVerificationProgress(chainman().m_blockman.LookupBlockIndex(block_hash), Params().GetConsensus().nPowTargetSpacing);
|
||||
}
|
||||
bool hasBlocks(const uint256& block_hash, int min_height, std::optional<int> max_height) override
|
||||
|
|
@ -555,7 +525,6 @@ public:
|
|||
// 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.
|
||||
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 (max_height && block->nHeight >= *max_height) block = block->GetAncestor(*max_height);
|
||||
for (; block->nStatus & BLOCK_HAVE_DATA; block = block->pprev) {
|
||||
|
|
@ -648,16 +617,7 @@ public:
|
|||
}
|
||||
bool isReadyToBroadcast() override { return !::fImporting && !::fReindex && !isInitialBlockDownload(); }
|
||||
bool isInitialBlockDownload() override {
|
||||
const CChainState* active_chainstate;
|
||||
{
|
||||
// TODO: Temporary scope to check correctness of refactored code.
|
||||
// Should be removed manually after merge of
|
||||
// https://github.com/bitcoin/bitcoin/pull/20158
|
||||
LOCK(::cs_main);
|
||||
active_chainstate = &chainman().ActiveChainstate();
|
||||
assert(std::addressof(::ChainstateActive()) == std::addressof(*active_chainstate));
|
||||
}
|
||||
return active_chainstate->IsInitialBlockDownload();
|
||||
return chainman().ActiveChainstate().IsInitialBlockDownload();
|
||||
}
|
||||
bool shutdownRequested() override { return ShutdownRequested(); }
|
||||
int64_t getAdjustedTime() override { return GetAdjustedTime(); }
|
||||
|
|
@ -723,7 +683,17 @@ public:
|
|||
// ELEMENTS
|
||||
MempoolAcceptResult testPeginClaimAcceptance(const CTransactionRef tx) override {
|
||||
LOCK(::cs_main);
|
||||
return ::AcceptToMemoryPool(::ChainstateActive(), *m_node.mempool, tx, false /* bypass_limits */, true /* test_accept */);
|
||||
return ::AcceptToMemoryPool(chainman().ActiveChainstate(), *m_node.mempool, tx, false /* bypass_limits */, true /* test_accept */);
|
||||
}
|
||||
CBlockIndex* getTip() override {
|
||||
LOCK(::cs_main);
|
||||
const CChain& active = Assert(m_node.chainman)->ActiveChain();
|
||||
return active.Tip();
|
||||
}
|
||||
bool testBlockValidity(BlockValidationState& state, const CChainParams& chainparams, const CBlock& block, CBlockIndex* pindexPrev, bool fCheckPOW, bool fCheckMerkleRoot) override {
|
||||
LOCK(::cs_main);
|
||||
Assert(m_node.chainman);
|
||||
return TestBlockValidity(state, chainparams, m_node.chainman->ActiveChainstate(), block, pindexPrev, fCheckPOW, fCheckMerkleRoot);
|
||||
}
|
||||
// end ELEMENTS
|
||||
NodeContext& m_node;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue