From fccf4f91d21c351d742943d35476f53d40963b8b Mon Sep 17 00:00:00 2001 From: Fabian Jahr Date: Sat, 2 Mar 2024 16:42:27 +0100 Subject: [PATCH] RPC: Extract ReconsiderBlock helper --- src/rpc/blockchain.cpp | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 4da26e84bde..3f6def27d6d 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1622,6 +1622,25 @@ static RPCHelpMan invalidateblock() }; } +void ReconsiderBlock(ChainstateManager& chainman, uint256 block_hash) { + { + LOCK(chainman.GetMutex()); + CBlockIndex* pblockindex = chainman.m_blockman.LookupBlockIndex(block_hash); + if (!pblockindex) { + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found"); + } + + chainman.ActiveChainstate().ResetBlockFailureFlags(pblockindex); + } + + BlockValidationState state; + chainman.ActiveChainstate().ActivateBestChain(state); + + if (!state.IsValid()) { + throw JSONRPCError(RPC_DATABASE_ERROR, state.ToString()); + } +} + static RPCHelpMan reconsiderblock() { return RPCHelpMan{"reconsiderblock", @@ -1640,22 +1659,7 @@ static RPCHelpMan reconsiderblock() ChainstateManager& chainman = EnsureAnyChainman(request.context); uint256 hash(ParseHashV(request.params[0], "blockhash")); - { - LOCK(cs_main); - CBlockIndex* pblockindex = chainman.m_blockman.LookupBlockIndex(hash); - if (!pblockindex) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found"); - } - - chainman.ActiveChainstate().ResetBlockFailureFlags(pblockindex); - } - - BlockValidationState state; - chainman.ActiveChainstate().ActivateBestChain(state); - - if (!state.IsValid()) { - throw JSONRPCError(RPC_DATABASE_ERROR, state.ToString()); - } + ReconsiderBlock(chainman, hash); return UniValue::VNULL; },