kernel: Remove some unnecessary non-kernel includes
What changed, and why it matters
This is a routine code cleanup commit for the Bitcoin Core project. It removes unused or unnecessary header file includes from several source files related to the 'kernel' module and adds those files to an automated check that enforces correct include usage. There is no functional change to the program's behavior and no security issue is present.
No security action required. Treat as normal refactoring/technical-debt cleanup.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit refactors include directives across src/core_read.cpp, src/node/blockstorage.cpp/.h, src/node/utxo_snapshot.cpp/.h, and src/signet.cpp/.h. It removes non-kernel dependencies such as batchpriority, chainparams, script/sign.h, and common/system.h, replacing them with more precise forward declarations or direct includes. It also updates ci/test/03_test_script.sh to enforce Include-What-You-Use (IWYU) rules on the affected files. The diff shows only header/include changes and no logic modifications.
Changed components
src/core_read.cppsrc/node/blockstorage.cppsrc/node/blockstorage.hsrc/node/utxo_snapshot.cppsrc/node/utxo_snapshot.hsrc/signet.cppsrc/signet.hci/test/03_test_script.shInspect captured patch +50 / −19
diff --git a/ci/test/03_test_script.sh b/ci/test/03_test_script.sh
index 39e13945..7f8fad71 100755
--- a/ci/test/03_test_script.sh
+++ b/ci/test/03_test_script.sh
@@ -209,7 +209,7 @@ if [ "${RUN_TIDY}" = "true" ]; then
fi
# TODO: Consider enforcing IWYU across the entire codebase.
- FILES_WITH_ENFORCED_IWYU="/src/(crypto|index)/.*\\.cpp"
+ FILES_WITH_ENFORCED_IWYU="/src/((crypto|index)/.*\\.cpp|node/blockstorage.cpp|node/utxo_snapshot.cpp|core_read.cpp|signet.cpp)"
jq --arg patterns "$FILES_WITH_ENFORCED_IWYU" 'map(select(.file | test($patterns)))' "${BASE_BUILD_DIR}/compile_commands.json" > "${BASE_BUILD_DIR}/compile_commands_iwyu_errors.json"
jq --arg patterns "$FILES_WITH_ENFORCED_IWYU" 'map(select(.file | test($patterns) | not))' "${BASE_BUILD_DIR}/compile_commands.json" > "${BASE_BUILD_DIR}/compile_commands_iwyu_warnings.json"
diff --git a/src/core_read.cpp b/src/core_read.cpp
index 59e011e0..935f4659 100644
--- a/src/core_read.cpp
+++ b/src/core_read.cpp
@@ -4,17 +4,27 @@
#include <core_io.h>
-#include <primitives/block.h>
+#include <primitives/block.h> // IWYU pragma: keep
#include <primitives/transaction.h>
+#include <script/interpreter.h>
#include <script/script.h>
-#include <script/sign.h>
#include <serialize.h>
#include <streams.h>
#include <util/result.h>
#include <util/strencodings.h>
+#include <util/string.h>
+#include <util/translation.h>
#include <algorithm>
-#include <string>
+#include <compare>
+#include <cstdint>
+#include <exception>
+#include <map>
+#include <optional>
+#include <span>
+#include <stdexcept>
+#include <utility>
+#include <vector>
using util::SplitString;
diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp
index 71578843..b0d54add 100644
--- a/src/node/blockstorage.cpp
+++ b/src/node/blockstorage.cpp
@@ -7,12 +7,10 @@
#include <arith_uint256.h>
#include <chain.h>
#include <consensus/params.h>
-#include <consensus/validation.h>
#include <dbwrapper.h>
#include <flatfile.h>
#include <hash.h>
#include <kernel/blockmanager_opts.h>
-#include <kernel/chain.h>
#include <kernel/chainparams.h>
#include <kernel/messagestartchars.h>
#include <kernel/notifications_interface.h>
@@ -24,16 +22,17 @@
#include <random.h>
#include <serialize.h>
#include <signet.h>
-#include <span.h>
#include <streams.h>
#include <sync.h>
#include <tinyformat.h>
#include <uint256.h>
#include <undo.h>
-#include <util/batchpriority.h>
#include <util/check.h>
+#include <util/expected.h>
#include <util/fs.h>
#include <util/obfuscation.h>
+#include <util/overflow.h>
+#include <util/result.h>
#include <util/signalinterrupt.h>
#include <util/strencodings.h>
#include <util/syserror.h>
@@ -41,9 +40,17 @@
#include <util/translation.h>
#include <validation.h>
+#include <cerrno>
+#include <compare>
#include <cstddef>
+#include <cstdio>
+#include <exception>
#include <map>
#include <optional>
+#include <ostream>
+#include <span>
+#include <stdexcept>
+#include <system_error>
#include <unordered_map>
namespace kernel {
diff --git a/src/node/blockstorage.h b/src/node/blockstorage.h
index f6bbfae1..3fb6cc3e 100644
--- a/src/node/blockstorage.h
+++ b/src/node/blockstorage.h
@@ -14,17 +14,22 @@
#include <kernel/cs_main.h>
#include <kernel/messagestartchars.h>
#include <primitives/block.h>
+#include <serialize.h>
#include <streams.h>
#include <sync.h>
#include <uint256.h>
#include <util/expected.h>
#include <util/fs.h>
#include <util/hasher.h>
+#include <util/obfuscation.h>
+#include <algorithm>
#include <array>
#include <atomic>
+#include <cstddef>
#include <cstdint>
#include <functional>
+#include <iosfwd>
#include <limits>
#include <map>
#include <memory>
diff --git a/src/node/utxo_snapshot.cpp b/src/node/utxo_snapshot.cpp
index c2048377..f11e979a 100644
--- a/src/node/utxo_snapshot.cpp
+++ b/src/node/utxo_snapshot.cpp
@@ -8,7 +8,6 @@
#include <streams.h>
#include <sync.h>
#include <tinyformat.h>
-#include <txdb.h>
#include <uint256.h>
#include <util/fs.h>
#include <validation.h>
@@ -16,6 +15,7 @@
#include <cassert>
#include <cstdio>
#include <optional>
+#include <span>
#include <string>
namespace node {
diff --git a/src/node/utxo_snapshot.h b/src/node/utxo_snapshot.h
index 7d470246..d8b3ca61 100644
--- a/src/node/utxo_snapshot.h
+++ b/src/node/utxo_snapshot.h
@@ -6,18 +6,22 @@
#ifndef BITCOIN_NODE_UTXO_SNAPSHOT_H
#define BITCOIN_NODE_UTXO_SNAPSHOT_H
-#include <chainparams.h>
#include <kernel/chainparams.h>
#include <kernel/cs_main.h>
-#include <serialize.h>
+#include <kernel/messagestartchars.h>
#include <sync.h>
+#include <tinyformat.h>
#include <uint256.h>
#include <util/chaintype.h>
-#include <util/check.h>
#include <util/fs.h>
+#include <algorithm>
+#include <array>
#include <cstdint>
+#include <ios>
#include <optional>
+#include <set>
+#include <string>
#include <string_view>
// UTXO set snapshot magic bytes
diff --git a/src/signet.cpp b/src/signet.cpp
index 6524ebff..787f5ae4 100644
--- a/src/signet.cpp
+++ b/src/signet.cpp
@@ -4,24 +4,25 @@
#include <signet.h>
-#include <common/system.h>
#include <consensus/merkle.h>
#include <consensus/params.h>
#include <consensus/validation.h>
-#include <core_io.h>
-#include <hash.h>
#include <logging.h>
#include <primitives/block.h>
#include <primitives/transaction.h>
#include <script/interpreter.h>
-#include <span.h>
+#include <script/script.h>
#include <streams.h>
#include <uint256.h>
-#include <util/strencodings.h>
+#include <util/check.h>
#include <algorithm>
-#include <array>
+#include <cstddef>
#include <cstdint>
+#include <exception>
+#include <memory>
+#include <span>
+#include <utility>
#include <vector>
static constexpr uint8_t SIGNET_HEADER[4] = {0xec, 0xc7, 0xda, 0xa2};
diff --git a/src/signet.h b/src/signet.h
index fa347bde..9ebae840 100644
--- a/src/signet.h
+++ b/src/signet.h
@@ -5,12 +5,16 @@
#ifndef BITCOIN_SIGNET_H
#define BITCOIN_SIGNET_H
-#include <consensus/params.h>
#include <primitives/block.h>
#include <primitives/transaction.h>
#include <optional>
+class CScript;
+namespace Consensus {
+struct Params;
+} // namespace Consensus
+
/**
* Extract signature and check whether a block has a valid solution
*/
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.