From 88d9bc5aa4f9e054487e8cfa60a1f12c5d508237 Mon Sep 17 00:00:00 2001 From: yuvicc Date: Mon, 18 May 2026 19:28:09 +0530 Subject: [PATCH] kernel: Return btck_BlockValidationState from process_block_header API Remove redundant int return from btck_chainstate_manager_process_block_header. Previously returned both an int result and an output validation state parameter, creating ambiguity where non-zero could mean either invalid header or processing failure. Since ProcessNewBlockHeaders already provides complete validation info, the int return was redundant. Co-authored-by: stringintech Co-authored-by: stickies-v Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com> --- src/kernel/bitcoinkernel.cpp | 13 +++++++------ src/kernel/bitcoinkernel.h | 8 +++----- src/kernel/bitcoinkernel_wrapper.h | 9 ++++++--- src/test/kernel/test_kernel.cpp | 5 ++--- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/kernel/bitcoinkernel.cpp b/src/kernel/bitcoinkernel.cpp index ea646cd551f..64545c6fdc7 100644 --- a/src/kernel/bitcoinkernel.cpp +++ b/src/kernel/bitcoinkernel.cpp @@ -1298,19 +1298,20 @@ int btck_chainstate_manager_process_block( return result ? 0 : -1; } -int btck_chainstate_manager_process_block_header( +btck_BlockValidationState* btck_chainstate_manager_process_block_header( btck_ChainstateManager* chainstate_manager, - const btck_BlockHeader* header, - btck_BlockValidationState* state) + const btck_BlockHeader* header) { try { auto& chainman = btck_ChainstateManager::get(chainstate_manager).m_chainman; - auto result = chainman->ProcessNewBlockHeaders({&btck_BlockHeader::get(header), 1}, /*min_pow_checked=*/true, btck_BlockValidationState::get(state), /*ppindex=*/nullptr); - return result ? 0 : -1; + auto state = btck_BlockValidationState::create(); + bool result{chainman->ProcessNewBlockHeaders({&btck_BlockHeader::get(header), 1}, /*min_pow_checked=*/true, btck_BlockValidationState::get(state))}; + assert(result == btck_BlockValidationState::get(state).IsValid()); + return state; } catch (const std::exception& e) { LogError("Failed to process block header: %s", e.what()); - return -1; + return nullptr; } } diff --git a/src/kernel/bitcoinkernel.h b/src/kernel/bitcoinkernel.h index 5427e776177..efe8c206e88 100644 --- a/src/kernel/bitcoinkernel.h +++ b/src/kernel/bitcoinkernel.h @@ -1117,13 +1117,11 @@ BITCOINKERNEL_API const btck_BlockTreeEntry* BITCOINKERNEL_WARN_UNUSED_RESULT bt * * @param[in] chainstate_manager Non-null. * @param[in] header Non-null btck_BlockHeader to be validated. - * @param[out] block_validation_state The result of the btck_BlockHeader validation. - * @return 0 if btck_BlockHeader processing completed successfully, non-zero on error. + * @return The btck_BlockValidationState containing validation result, or null on error. */ -BITCOINKERNEL_API int BITCOINKERNEL_WARN_UNUSED_RESULT btck_chainstate_manager_process_block_header( +BITCOINKERNEL_API btck_BlockValidationState* BITCOINKERNEL_WARN_UNUSED_RESULT btck_chainstate_manager_process_block_header( btck_ChainstateManager* chainstate_manager, - const btck_BlockHeader* header, - btck_BlockValidationState* block_validation_state) BITCOINKERNEL_ARG_NONNULL(1, 2, 3); + const btck_BlockHeader* header) BITCOINKERNEL_ARG_NONNULL(1, 2); /** * @brief Triggers the start of a reindex if the wipe options were previously diff --git a/src/kernel/bitcoinkernel_wrapper.h b/src/kernel/bitcoinkernel_wrapper.h index 064d0dd14b9..1f626834457 100644 --- a/src/kernel/bitcoinkernel_wrapper.h +++ b/src/kernel/bitcoinkernel_wrapper.h @@ -939,7 +939,9 @@ class BlockValidationState : public HandleProcessBlockHeader(header, state)); + BlockValidationState state = chainman->ProcessBlockHeader(header); BOOST_CHECK(state.GetValidationMode() == ValidationMode::VALID); + BOOST_CHECK(state.GetBlockValidationResult() == BlockValidationResult::UNSET); BlockTreeEntry entry{*chainman->GetBlockTreeEntry(header.Hash())}; BOOST_CHECK(!chainman->GetChain().Contains(entry)); BlockTreeEntry best_entry{chainman->GetBestEntry()};