feat: modern C++23 node with coroutine networking and fast IBD#151
feat: modern C++23 node with coroutine networking and fast IBD#151fpelliccioni wants to merge 1 commit intomasterfrom
Conversation
b4f65d5 to
5458efc
Compare
1863436 to
9bcd567
Compare
5c8abb3 to
f889028
Compare
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds compile-time compiler/feature checks, new coroutine/asio utilities (channels, awaitable helpers, executors), a display_mode enum and parsing, updates umbrella includes, and small fixes in config, message, math, and logging headers. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor Caller
participant WithTimeout as "with_timeout"
participant Operation as "awaitable operation"
participant Timer as "steady_timer"
Caller->>WithTimeout: call(op, timeout)
WithTimeout->>Operation: start op (co_await concurrently)
WithTimeout->>Timer: start timer.expires_after(timeout)
par race
Operation-->>WithTimeout: result (value or expected)
and
Timer-->>WithTimeout: timeout event
end
alt Operation finished first
WithTimeout-->>Caller: return operation result
else Timer finished first
WithTimeout-->>Caller: return std::unexpected(timeout_error)
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
fa70d9f to
c164e97
Compare
| # TODO(fernando): DESCOMENTAR ESTO CUANDO TERMINEMOS EL CLEANUP DE COROUTINES | ||
| # if (BUILD_C_API) | ||
| # add_subdirectory(c-api) | ||
| # endif() No newline at end of file |
There was a problem hiding this comment.
Spanish TODO comment left in production CMake
Medium Severity
The C-API build is unconditionally disabled with a Spanish comment TODO(fernando): DESCOMENTAR ESTO CUANDO TERMINEMOS EL CLEANUP DE COROUTINES ("uncomment this when we finish the coroutine cleanup"). This permanently disables the C-API component for all builds, breaking any downstream consumers that depend on it, without a corresponding build option to control it.
2f58c27 to
f542395
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (12)
src/infrastructure/include/kth/infrastructure.hpp (1)
114-118: Minor: New utility includes break alphabetical ordering.The new coroutine utility headers (
async_channel.hpp,awaitable_helpers.hpp,cpu_executor.hpp,task_group.hpp) are added afterwriter.hpp, breaking the alphabetical ordering used in the rest of the utility section. Consider moving them to their alphabetical positions for consistency.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure.hpp` around lines 114 - 118, Reorder the utility include block so headers are alphabetically sorted: move kth/infrastructure/utility/async_channel.hpp, awaitable_helpers.hpp, cpu_executor.hpp, and task_group.hpp into their proper alphabetical positions relative to writer.hpp (and other utility includes) to restore consistent ordering; update the include list in kth::infrastructure.hpp by placing async_channel.hpp, awaitable_helpers.hpp, cpu_executor.hpp, and task_group.hpp in the correct alphabetical sequence among the existing utility headers.src/infrastructure/include/kth/infrastructure/config/authority.hpp (2)
5-6: Pre-existing typo in include guard:INFRASTUCTUREshould beINFRASTRUCTURE.The include guard is missing an 'R' in
KTH_INFRASTUCTURE_CONFIG_AUTHORITY_HPP. While this doesn't affect functionality, it should be corrected for consistency.♻️ Proposed fix
-#ifndef KTH_INFRASTUCTURE_CONFIG_AUTHORITY_HPP -#define KTH_INFRASTUCTURE_CONFIG_AUTHORITY_HPP +#ifndef KTH_INFRASTRUCTURE_CONFIG_AUTHORITY_HPP +#define KTH_INFRASTRUCTURE_CONFIG_AUTHORITY_HPP🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/config/authority.hpp` around lines 5 - 6, Typo in the include guard identifier: rename the macro KTH_INFRASTUCTURE_CONFIG_AUTHORITY_HPP to KTH_INFRASTRUCTURE_CONFIG_AUTHORITY_HPP in the authority.hpp header so the guard spelling matches the project convention; update both the `#ifndef` and `#define` (and any corresponding `#endif` comment if present) to the corrected macro to keep the symbol consistent.
8-9: Vague TODO comment lacks actionable context.The TODO doesn't specify what should be refactored or why. Consider adding details about the intended refactoring scope, or link to an issue for tracking.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/config/authority.hpp` around lines 8 - 9, Replace the vague "//TODO: Refactor" in authority.hpp with a concrete, actionable comment that specifies what to refactor (e.g., "refactor Authority::validate() to separate validation logic from state mutation"), the reasons/expected benefits, proposed tasks or checklist (what to change, tests to add), an issue or ticket link for tracking, and an owner/ETA; ensure the new comment names the affected symbol(s) (e.g., Authority class or specific methods) so future readers can locate the work to be done.src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp (2)
79-92: The milliseconds overload is redundant with the templated version.The templated
delayat lines 86-92 already handlesstd::chrono::millisecondssince it's a validduration<Rep, Period>. The explicit milliseconds overload at lines 79-84 is unnecessary unless there's a specific reason to prefer it (e.g., avoiding template instantiation in common cases).♻️ Consider removing the redundant overload
-inline awaitable<void> delay(std::chrono::milliseconds duration) { - auto executor = co_await ::asio::this_coro::executor; - ::asio::steady_timer timer(executor); - timer.expires_after(duration); - co_await timer.async_wait(use_awaitable); -} - template <typename Rep, typename Period> awaitable<void> delay(std::chrono::duration<Rep, Period> duration) {If keeping both for explicit overload resolution, add a comment explaining the intent.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp` around lines 79 - 92, Remove the redundant non-templated overload of awaitable<void> delay(std::chrono::milliseconds) or, if you intentionally want it for overload resolution/performance, add a clarifying comment above it; specifically either delete the inline delay(std::chrono::milliseconds) function or annotate it to explain why it coexists with the template awaitable<void> delay(std::chrono::duration<Rep, Period>) so there is no ambiguity about intent when readers see both overloads.
79-84: Consider handling timer cancellation errors indelay.If the timer is cancelled (e.g., due to executor shutdown),
async_waitwill complete withasio::error::operation_aborted. Withuse_awaitable, this throws an exception. Depending on the expected usage patterns, you may want to either:
- Document that callers should handle this exception, or
- Catch and return silently on cancellation
Also applies to: 86-92
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp` around lines 79 - 84, The delay awaitable (and the similar overload at lines 86-92) should swallow timer cancellation instead of propagating an exception: wrap the co_await timer.async_wait(use_awaitable) in a try/catch that catches asio::system_error (or std::system_error depending on your Asio build) and if the caught error.code() == asio::error::operation_aborted return silently, otherwise rethrow; update the inline awaitable<void> delay(...) and the corresponding overload to perform this conditional catch so executor shutdown cancellations don't throw unexpectedly.src/infrastructure/include/kth/infrastructure/display_mode.hpp (1)
38-43: Incomplete case-insensitive parsing may surprise users.The function only handles exact lowercase and uppercase matches. Mixed-case inputs like
"Tui","Log", or"Daemon"will silently default tolog. Consider either implementing proper case-insensitive comparison or documenting that only lowercase/uppercase are accepted.♻️ Proposed fix for case-insensitive parsing
+#include <algorithm> +#include <cctype> + +namespace { +inline bool iequals(std::string_view a, std::string_view b) noexcept { + return a.size() == b.size() && + std::equal(a.begin(), a.end(), b.begin(), + [](char ca, char cb) { + return std::tolower(static_cast<unsigned char>(ca)) == + std::tolower(static_cast<unsigned char>(cb)); + }); +} +} // anonymous namespace + /// Parse display_mode from string inline display_mode parse_display_mode(std::string_view str) noexcept { - if (str == "tui" || str == "TUI") return display_mode::tui; - if (str == "log" || str == "LOG") return display_mode::log; - if (str == "daemon" || str == "DAEMON") return display_mode::daemon; + if (iequals(str, "tui")) return display_mode::tui; + if (iequals(str, "log")) return display_mode::log; + if (iequals(str, "daemon")) return display_mode::daemon; return display_mode::log; // default }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp` around lines 38 - 43, The parse_display_mode function currently only matches exact lowercase or uppercase strings and will mis-handle mixed-case inputs; update parse_display_mode(std::string_view) to perform a case-insensitive comparison (e.g., normalize the input to a canonical case or compare characters with a case-insensitive predicate) and then map to the correct display_mode values (display_mode::tui, ::log, ::daemon), keeping the same default return of display_mode::log; ensure you update only parse_display_mode and reference the display_mode enum values so mixed-case inputs like "Tui" or "Daemon" are recognized.src/infrastructure/include/kth/infrastructure/log/structured_logger.hpp (1)
1-83: Well-documented placeholder for future implementation.The design documentation is comprehensive, covering dual output modes, structured events API, log levels, and sampling. This provides good guidance for future implementation.
Consider tracking this as a follow-up task to ensure the structured logging system gets implemented.
Would you like me to open an issue to track the implementation of the structured logging system?
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/log/structured_logger.hpp` around lines 1 - 83, This header currently contains only design notes and a TODO; create a tracked follow-up and add a minimal, backward-compatible API sketch so callers compile until full implementation exists: open an issue that references this file and namespace kth::log and add in this header lightweight declarations (e.g. class StructuredLogger, free functions event(const std::string&, const kv_map&), sampled(size_t) returning a small guard type, and log level enums) with clear TODO comments and an issue number, plus unit-test stubs and a CMake target placeholder so the build remains green and the work is traceable.src/infrastructure/include/kth/infrastructure/utility/asio_helper.hpp (1)
11-13: Document minimum Asio version due to experimental API usage.The
asio::experimental::channel,concurrent_channel, andawaitable_operatorsAPIs have no stability guarantee and may change between Asio releases. Since this PR intentionally uses experimental features for modern C++23 support, document the minimum required Asio version (1.36.0) to help maintainers track breaking changes if Asio updates these experimental interfaces.Also applies to: 19-21
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/asio_helper.hpp` around lines 11 - 13, Add a short comment/docblock near the Asio experimental includes that states the minimum required Asio version is 1.36.0 because the file uses unstable APIs (asio::experimental::channel, asio::experimental::concurrent_channel, asio::experimental::awaitable_operators); update the same note for the other occurrences around lines 19–21 so maintainers know these experimental interfaces may change and which Asio version is required to build.src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp (3)
132-135:test_expected()is defined but never called.The function serves as a compile-time validation, but since it's never ODR-used, the compiler may not instantiate it, meaning the
static_assertinside might not fire on all compilers/optimization levels. Consider making the validation explicit at namespace scope.♻️ Alternative: Use namespace-scope static_assert
-// Test std::expected support -inline void test_expected() { - [[maybe_unused]] std::expected<int, int> e = 42; - static_assert(std::is_same_v<decltype(e.value()), int&>); -} +// Test std::expected support +inline constexpr bool test_expected_support() { + std::expected<int, int> e = 42; + return e.has_value(); +} +static_assert(test_expected_support(), "std::expected must be functional");🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp` around lines 132 - 135, test_expected() is never ODR-used so its static_assert may not be instantiated; replace or supplement it with a namespace-scope compile-time check so the assertion always runs. For example, move the check out of test_expected() and add a static_assert that uses decltype(std::expected<int,int>{}.value()) (or directly assert std::is_same_v<decltype(std::declval<std::expected<int,int>>().value()), int&>) at namespace scope, or alternatively force instantiation by invoking test_expected() via an immediately-evaluated inline variable; update references to the existing test_expected() symbol accordingly.
161-164: Consider adding Apple Clang tocompiler_info.For consistency with any Apple Clang detection added to the version checks, the
compiler_infostruct should also distinguish Apple Clang.💡 Optional: Detect Apple Clang in compiler_info
`#elif` defined(__clang__) + `#if` defined(__apple_build_version__) + static constexpr char const* compiler_name = "Apple Clang"; + `#else` static constexpr char const* compiler_name = "Clang"; + `#endif` static constexpr int compiler_major = __clang_major__; static constexpr int compiler_minor = __clang_minor__;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp` around lines 161 - 164, The compiler_info block currently sets Clang unconditionally; update the conditional in the compiler_info/definitions (the static constexpr compiler_name, compiler_major, compiler_minor inside the compiler_info or surrounding preprocessor branches) to detect Apple Clang by checking __apple_build_version__ and set compiler_name to "AppleClang" (or similar) when present while keeping compiler_major and compiler_minor sourced from __clang_major__ and __clang_minor__; implement this as an additional `#elif` (or nested `#if` defined(__apple_build_version__)) branch around the existing Clang case so Apple Clang is distinguished from upstream Clang.
70-74: Add Apple Clang version detection to avoid false rejection on Xcode 15+.The
__clang__macro matches both upstream Clang and Apple Clang, which use different version numbers. Apple Clang 15 (Xcode 15) supportsstd::expectedand coroutines, but the current check requires Clang 17+, causing false rejection on macOS with Xcode's default compiler.💡 Optional: Add Apple Clang detection
`#elif` defined(__clang__) // Clang + `#if` defined(__apple_build_version__) + // Apple Clang has different version numbers + // Apple Clang 15 (Xcode 15) corresponds roughly to LLVM 16 + `#if` __clang_major__ < 15 + `#error` "KTH requires Apple Clang 15 (Xcode 15) or later for C++23 support." + `#endif` + `#else` `#if` __clang_major__ < 17 `#error` "KTH requires Clang 17 or later for full C++23 support." `#endif` + `#endif` `#elif` defined(_MSC_VER)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp` around lines 70 - 74, In the __clang__ branch of the compiler checks (the `#elif` defined(__clang__) block), add detection for Apple Clang (e.g. check defined(__apple_build_version__)). If __apple_build_version__ is present, skip or relax the __clang_major__ >= 17 rejection so Xcode 15+ compilers are accepted; otherwise keep the existing __clang_major__ < 17 `#error`. Update the conditional logic in that block to first test for defined(__apple_build_version__) and only enforce the Clang 17 minimum when Apple Clang is not detected.src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp (1)
8-8: Unused include:<cstddef>is not used in this file.The
<cstddef>header providesstd::size_t,std::nullptr_t, etc., but none of these are referenced in this file. Consider removing it unless it's intended for future use.🧹 Remove unused include
-#include <cstddef> - `#include` <kth/infrastructure/utility/asio_helper.hpp>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp` at line 8, Remove the unused include directive "<cstddef>" from src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp since no symbols from that header are referenced; edit async_channel.hpp to delete the `#include` <cstddef> line and run a quick rebuild (or clang-tidy) to ensure no headers relying on it were accidentally removed.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/infrastructure/include/kth/infrastructure/handlers.hpp`:
- Line 13: The file unconditionally includes <asio/awaitable.hpp>, bypassing the
KTH_ASIO_STANDALONE abstraction; replace that direct include with the project
helper so the correct header is chosen for standalone Asio vs Boost.Asio.
Specifically, remove the direct reference to asio/awaitable.hpp and include the
project's asio_helper.hpp (the same helper used by other headers) so symbols
like awaitable resolve correctly under the KTH_ASIO_STANDALONE configuration.
In `@src/infrastructure/include/kth/infrastructure/math/hash.hpp`:
- Around line 120-136: Remove the commented-out boost::hash specializations
block (the namespace boost templates for kth::byte_array and kth::byte_span)
because they are obsolete and conflict with modern Boost; rely on the existing
std::hash<kth::byte_span> and std::hash specializations already implemented
(e.g., std::hash<kth::byte_span>) instead; simply delete the entire commented
section to clean up the file while preserving git history if needed.
In `@src/infrastructure/include/kth/infrastructure/utility/asio_helper.hpp`:
- Around line 22-24: The __EMSCRIPTEN__ preprocessor branch in asio_helper.hpp
only pulls in <boost/asio/error.hpp>, so code using Boost.Asio's newer async
primitives fails to compile; update the __EMSCRIPTEN__ branch to also include
the missing headers (e.g., <boost/asio/thread_pool.hpp>,
<boost/asio/experimental/channel.hpp>, and <boost/asio/awaitable_operators.hpp>)
or, if those primitives are unavailable under Emscripten, add a clear comment
documenting their absence and guard usages of thread_pool, channel, and
awaitable operators with the __EMSCRIPTEN__ macro to avoid compilation errors.
---
Nitpick comments:
In `@src/infrastructure/include/kth/infrastructure.hpp`:
- Around line 114-118: Reorder the utility include block so headers are
alphabetically sorted: move kth/infrastructure/utility/async_channel.hpp,
awaitable_helpers.hpp, cpu_executor.hpp, and task_group.hpp into their proper
alphabetical positions relative to writer.hpp (and other utility includes) to
restore consistent ordering; update the include list in kth::infrastructure.hpp
by placing async_channel.hpp, awaitable_helpers.hpp, cpu_executor.hpp, and
task_group.hpp in the correct alphabetical sequence among the existing utility
headers.
In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp`:
- Around line 132-135: test_expected() is never ODR-used so its static_assert
may not be instantiated; replace or supplement it with a namespace-scope
compile-time check so the assertion always runs. For example, move the check out
of test_expected() and add a static_assert that uses
decltype(std::expected<int,int>{}.value()) (or directly assert
std::is_same_v<decltype(std::declval<std::expected<int,int>>().value()), int&>)
at namespace scope, or alternatively force instantiation by invoking
test_expected() via an immediately-evaluated inline variable; update references
to the existing test_expected() symbol accordingly.
- Around line 161-164: The compiler_info block currently sets Clang
unconditionally; update the conditional in the compiler_info/definitions (the
static constexpr compiler_name, compiler_major, compiler_minor inside the
compiler_info or surrounding preprocessor branches) to detect Apple Clang by
checking __apple_build_version__ and set compiler_name to "AppleClang" (or
similar) when present while keeping compiler_major and compiler_minor sourced
from __clang_major__ and __clang_minor__; implement this as an additional `#elif`
(or nested `#if` defined(__apple_build_version__)) branch around the existing
Clang case so Apple Clang is distinguished from upstream Clang.
- Around line 70-74: In the __clang__ branch of the compiler checks (the `#elif`
defined(__clang__) block), add detection for Apple Clang (e.g. check
defined(__apple_build_version__)). If __apple_build_version__ is present, skip
or relax the __clang_major__ >= 17 rejection so Xcode 15+ compilers are
accepted; otherwise keep the existing __clang_major__ < 17 `#error`. Update the
conditional logic in that block to first test for
defined(__apple_build_version__) and only enforce the Clang 17 minimum when
Apple Clang is not detected.
In `@src/infrastructure/include/kth/infrastructure/config/authority.hpp`:
- Around line 5-6: Typo in the include guard identifier: rename the macro
KTH_INFRASTUCTURE_CONFIG_AUTHORITY_HPP to
KTH_INFRASTRUCTURE_CONFIG_AUTHORITY_HPP in the authority.hpp header so the guard
spelling matches the project convention; update both the `#ifndef` and `#define`
(and any corresponding `#endif` comment if present) to the corrected macro to keep
the symbol consistent.
- Around line 8-9: Replace the vague "//TODO: Refactor" in authority.hpp with a
concrete, actionable comment that specifies what to refactor (e.g., "refactor
Authority::validate() to separate validation logic from state mutation"), the
reasons/expected benefits, proposed tasks or checklist (what to change, tests to
add), an issue or ticket link for tracking, and an owner/ETA; ensure the new
comment names the affected symbol(s) (e.g., Authority class or specific methods)
so future readers can locate the work to be done.
In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp`:
- Around line 38-43: The parse_display_mode function currently only matches
exact lowercase or uppercase strings and will mis-handle mixed-case inputs;
update parse_display_mode(std::string_view) to perform a case-insensitive
comparison (e.g., normalize the input to a canonical case or compare characters
with a case-insensitive predicate) and then map to the correct display_mode
values (display_mode::tui, ::log, ::daemon), keeping the same default return of
display_mode::log; ensure you update only parse_display_mode and reference the
display_mode enum values so mixed-case inputs like "Tui" or "Daemon" are
recognized.
In `@src/infrastructure/include/kth/infrastructure/log/structured_logger.hpp`:
- Around line 1-83: This header currently contains only design notes and a TODO;
create a tracked follow-up and add a minimal, backward-compatible API sketch so
callers compile until full implementation exists: open an issue that references
this file and namespace kth::log and add in this header lightweight declarations
(e.g. class StructuredLogger, free functions event(const std::string&, const
kv_map&), sampled(size_t) returning a small guard type, and log level enums)
with clear TODO comments and an issue number, plus unit-test stubs and a CMake
target placeholder so the build remains green and the work is traceable.
In `@src/infrastructure/include/kth/infrastructure/utility/asio_helper.hpp`:
- Around line 11-13: Add a short comment/docblock near the Asio experimental
includes that states the minimum required Asio version is 1.36.0 because the
file uses unstable APIs (asio::experimental::channel,
asio::experimental::concurrent_channel,
asio::experimental::awaitable_operators); update the same note for the other
occurrences around lines 19–21 so maintainers know these experimental interfaces
may change and which Asio version is required to build.
In `@src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp`:
- Line 8: Remove the unused include directive "<cstddef>" from
src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp since no
symbols from that header are referenced; edit async_channel.hpp to delete the
`#include` <cstddef> line and run a quick rebuild (or clang-tidy) to ensure no
headers relying on it were accidentally removed.
In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp`:
- Around line 79-92: Remove the redundant non-templated overload of
awaitable<void> delay(std::chrono::milliseconds) or, if you intentionally want
it for overload resolution/performance, add a clarifying comment above it;
specifically either delete the inline delay(std::chrono::milliseconds) function
or annotate it to explain why it coexists with the template awaitable<void>
delay(std::chrono::duration<Rep, Period>) so there is no ambiguity about intent
when readers see both overloads.
- Around line 79-84: The delay awaitable (and the similar overload at lines
86-92) should swallow timer cancellation instead of propagating an exception:
wrap the co_await timer.async_wait(use_awaitable) in a try/catch that catches
asio::system_error (or std::system_error depending on your Asio build) and if
the caught error.code() == asio::error::operation_aborted return silently,
otherwise rethrow; update the inline awaitable<void> delay(...) and the
corresponding overload to perform this conditional catch so executor shutdown
cancellations don't throw unexpectedly.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: e3e993a8-98ad-4bb9-b38c-ca0f8eae03b5
⛔ Files ignored due to path filters (254)
.coderabbit.yamlis excluded by none and included by noneCMakeLists.txtis excluded by!**/CMakeLists.txtand included by noneconan.lockis excluded by!**/*.lock,!conan.lockand included by noneconanfile.pyis excluded by!**/conanfile.pyand included by nonedata/utxo_bloom.datis excluded by!**/*.dat,!data/**,!**/*.datand included by nonesrc/CMakeLists.txtis excluded by!**/CMakeLists.txtand included by nonesrc/blockchain/CMakeLists.txtis excluded by!src/blockchain/**,!**/CMakeLists.txtand included by nonesrc/blockchain/conanfile.pyis excluded by!src/blockchain/**,!**/conanfile.pyand included by nonesrc/blockchain/include/kth/blockchain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/header_index.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/block_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/fast_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/safe_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/block_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/header_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_pool.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_base.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_chain_state.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/settings.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/utxo_builder.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_header.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/interface/block_chain.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/block_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/header_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_pool.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_base.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_chain_state.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/settings.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/utxo_bloom_embed.S.inis excluded by!src/blockchain/**,!**/*.S.inand included by nonesrc/blockchain/src/utxo_builder.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_header.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/test/header_index.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/blockchain/test/header_organizer.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/c-api/conanfile.pyis excluded by!src/c-api/**,!**/conanfile.pyand included by nonesrc/c-api/console/main.cppis excluded by!src/c-api/**and included by nonesrc/c-api/console/print_headers.cppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/chain/chain_other.his excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/conversions.hppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/primitives.his excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_async.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_other.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_sync.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction_list.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/node.cppis excluded by!src/c-api/**and included by nonesrc/consensus/conanfile.pyis excluded by!src/consensus/**,!**/conanfile.pyand included by nonesrc/consensus/src/bch-rules/coins.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/primitives/token.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/vm_limits.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/util/strencodings.his excluded by!src/consensus/**and included by nonesrc/consensus/src/btc-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/database/CMakeLists.txtis excluded by!src/database/**,!**/CMakeLists.txtand included by nonesrc/database/conanfile.pyis excluded by!src/database/**,!**/conanfile.pyand included by nonesrc/database/include/kth/database/block_store.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/block_undo.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/data_base.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/block_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/header_abla_entry.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/header_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/history_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/internal_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/internal_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/property_code.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/reorg_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/spend_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_unconfirmed_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxo_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxoz_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_pos.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_seq.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/header_index.hppis excluded by!src/database/**and included by nonesrc/database/src/block_store.cppis excluded by!src/database/**and included by nonesrc/database/src/block_undo.cppis excluded by!src/database/**and included by nonesrc/database/src/data_base.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/header_abla_entry.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/utxoz_database.cppis excluded by!src/database/**and included by nonesrc/database/src/flat_file_seq.cppis excluded by!src/database/**and included by nonesrc/database/src/header_index.cppis excluded by!src/database/**and included by nonesrc/database/src/settings.cppis excluded by!src/database/**and included by nonesrc/database/test/data_base.cppis excluded by!src/database/**,!**/test/**and included by nonesrc/database/tools/utxoz_fingerprint/utxoz_fingerprint.cppis excluded by!src/database/**,!**/tools/**and included by nonesrc/domain/CMakeLists.txtis excluded by!src/domain/**,!**/CMakeLists.txtand included by nonesrc/domain/bench/hash/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/bench/merkle/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/conanfile.pyis excluded by!src/domain/**,!**/conanfile.pyand included by nonesrc/domain/include/kth/domain/chain/block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/block_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/light_block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/config/parser.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/constants/common.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/messages.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/send_addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/version.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/multi_crypto_support.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/version.hppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/light_block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/output_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/send_addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/test/chain/light_block.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/domain/test/message/addrv2_bchn_comparison.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/infrastructure/CMakeLists.txtis excluded by!**/CMakeLists.txtand included bysrc/infrastructure/**src/infrastructure/conanfile.pyis excluded by!**/conanfile.pyand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/resubscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/subscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/test/task_group.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/async_channel.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/awaitable_helpers.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/coroutine_smoke_test.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/threadpool.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/network/CMakeLists.txtis excluded by!src/network/**,!**/CMakeLists.txtand included by nonesrc/network/conanfile.pyis excluded by!src/network/**,!**/conanfile.pyand included by nonesrc/network/include/kth/network.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/acceptor.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/banlist.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/channel.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/connector.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/ping.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/pong.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/hosts.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/message_subscriber.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/net_permissions.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/normalized_address.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p_node.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_database.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_manager.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_record.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_address_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_events.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_60001.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_reject_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_seed_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_timer.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols_coro.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/proxy.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_batch.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_inbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_manual.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_outbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_seed.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/settings.hppis excluded by!src/network/**and included by nonesrc/network/src/acceptor.cppis excluded by!src/network/**and included by nonesrc/network/src/banlist.cppis excluded by!src/network/**and included by nonesrc/network/src/channel.cppis excluded by!src/network/**and included by nonesrc/network/src/connector.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/ping.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/pong.cppis excluded by!src/network/**and included by nonesrc/network/src/hosts.cppis excluded by!src/network/**and included by nonesrc/network/src/message_subscriber.cppis excluded by!src/network/**and included by nonesrc/network/src/net_permissions.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p_node.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_database.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_manager.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_session.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_address_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_events.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_60001.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_reject_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_seed_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_timer.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols_coro.cppis excluded by!src/network/**and included by nonesrc/network/src/proxy.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_batch.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_inbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_manual.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_outbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_seed.cppis excluded by!src/network/**and included by nonesrc/network/src/settings.cppis excluded by!src/network/**and included by nonesrc/network/test/p2p_node.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_database.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_manager.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_session.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/protocols_coro.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/test_helpers.hppis excluded by!src/network/**,!**/test/**and included by nonesrc/node-exe/CMakeLists.txtis excluded by!src/node-exe/**,!**/CMakeLists.txtand included by nonesrc/node-exe/conanfile.pyis excluded by!src/node-exe/**,!**/conanfile.pyand included by nonesrc/node-exe/src/main.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.hppis excluded by!src/node-exe/**and included by nonesrc/node/CMakeLists.txtis excluded by!src/node/**,!**/CMakeLists.txtand included by nonesrc/node/conanfile.pyis excluded by!src/node/**,!**/conanfile.pyand included by nonesrc/node/data/bn.cfgis excluded by!src/node/**and included by nonesrc/node/include/kth/node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/executor/executor.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/full_node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_inbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_manual.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_outbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/settings.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/block_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/chunk_coordinator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/header_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/messages.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/orchestrator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/user_agent.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservation.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservations.hppis excluded by!src/node/**and included by nonesrc/node/src/executor/executor.cppis excluded by!src/node/**and included by nonesrc/node/src/full_node.cppis excluded by!src/node/**and included by nonesrc/node/src/parser.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_header_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_out.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_header_sync.cppis excluded by!src/node/**and included by none
📒 Files selected for processing (46)
src/infrastructure/include/kth/infrastructure.hppsrc/infrastructure/include/kth/infrastructure/compiler_constraints.hppsrc/infrastructure/include/kth/infrastructure/config/authority.hppsrc/infrastructure/include/kth/infrastructure/config/endpoint.hppsrc/infrastructure/include/kth/infrastructure/display_mode.hppsrc/infrastructure/include/kth/infrastructure/error.hppsrc/infrastructure/include/kth/infrastructure/handlers.hppsrc/infrastructure/include/kth/infrastructure/log/statsd_sink.hppsrc/infrastructure/include/kth/infrastructure/log/structured_logger.hppsrc/infrastructure/include/kth/infrastructure/math/hash.hppsrc/infrastructure/include/kth/infrastructure/message/network_address.hppsrc/infrastructure/include/kth/infrastructure/utility/asio_helper.hppsrc/infrastructure/include/kth/infrastructure/utility/async_channel.hppsrc/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hppsrc/infrastructure/include/kth/infrastructure/utility/broadcaster.hppsrc/infrastructure/include/kth/infrastructure/utility/byte_reader.hppsrc/infrastructure/include/kth/infrastructure/utility/coroutine_config.hppsrc/infrastructure/include/kth/infrastructure/utility/cpu_executor.hppsrc/infrastructure/include/kth/infrastructure/utility/deadline.hppsrc/infrastructure/include/kth/infrastructure/utility/delegates.hppsrc/infrastructure/include/kth/infrastructure/utility/dispatcher.hppsrc/infrastructure/include/kth/infrastructure/utility/resubscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/salted_hashers.hppsrc/infrastructure/include/kth/infrastructure/utility/sequencer.hppsrc/infrastructure/include/kth/infrastructure/utility/stats.hppsrc/infrastructure/include/kth/infrastructure/utility/subscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/synchronizer.hppsrc/infrastructure/include/kth/infrastructure/utility/system_memory.hppsrc/infrastructure/include/kth/infrastructure/utility/task_group.hppsrc/infrastructure/include/kth/infrastructure/utility/threadpool.hppsrc/infrastructure/include/kth/infrastructure/utility/units.hppsrc/infrastructure/include/kth/infrastructure/utility/work.hppsrc/infrastructure/src/config/endpoint.cppsrc/infrastructure/src/log/sink.cppsrc/infrastructure/src/log/statsd_sink.cppsrc/infrastructure/src/message/network_address.cppsrc/infrastructure/src/utility/deadline.cppsrc/infrastructure/src/utility/dispatcher.cppsrc/infrastructure/src/utility/sequencer.cppsrc/infrastructure/src/utility/socket.cppsrc/infrastructure/src/utility/stats.cppsrc/infrastructure/src/utility/system_memory.cppsrc/infrastructure/src/utility/threadpool.cppsrc/infrastructure/src/utility/work.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.h
💤 Files with no reviewable changes (2)
- src/infrastructure/include/kth/infrastructure/log/statsd_sink.hpp
- src/infrastructure/include/kth/infrastructure/config/endpoint.hpp
There was a problem hiding this comment.
🧹 Nitpick comments (6)
src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp (2)
79-92: Redundantdelayoverload.The
inlinemilliseconds overload (lines 79-84) is redundant—the template version (lines 86-92) already handlesstd::chrono::millisecondssince it's astd::chrono::durationspecialization.♻️ Proposed simplification
-inline awaitable<void> delay(std::chrono::milliseconds duration) { - auto executor = co_await ::asio::this_coro::executor; - ::asio::steady_timer timer(executor); - timer.expires_after(duration); - co_await timer.async_wait(use_awaitable); -} - template <typename Rep, typename Period> awaitable<void> delay(std::chrono::duration<Rep, Period> duration) { auto executor = co_await ::asio::this_coro::executor;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp` around lines 79 - 92, Remove the redundant fixed-duration overload of delay and keep a single templated implementation: delete the inline awaitable<void> delay(std::chrono::milliseconds) function and rely on the template awaitable<void> delay(std::chrono::duration<Rep, Period>) implementation; ensure the remaining template uses ::asio::this_coro::executor, ::asio::steady_timer, timer.expires_after(duration) and co_await timer.async_wait(use_awaitable) (add inline if header linkage requires it).
38-48: Timer cancellation error is silently discarded.When the operation completes first, the timer is implicitly cancelled. The
async_waitcompletes withasio::error::operation_aborted, but this error is never checked—it's simply discarded becauseresult.index() == 0. This is fine for the success path, but if the timer fails for another reason (e.g., system clock issues), that error is lost.Similarly, if the awaitable operation throws, the exception propagates but the timer remains active until cancelled.
This is likely acceptable for typical use, but consider documenting the behavior.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp` around lines 38 - 48, The current co_await of (std::move(op) || timer.async_wait(use_awaitable)) drops any non-aborted timer error and leaves the timer running if the operation throws; update the logic around the awaitable race in awaitable_helpers.hpp so that when the operation (op) wins you explicitly cancel the timer (timer.cancel()) and co_await the timer completion to observe and handle any non-operation_aborted error (propagate or log as appropriate), and when the timer wins you cancel the operation and return the timeout error as before; ensure you check the timer completion result (async_wait) for errors other than asio::error::operation_aborted before discarding them and document the behavior in comments near the race logic.src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp (1)
132-135: Consider makingtest_expectedconstexpr.The function body is trivially constexpr-eligible. Making it
constevalorconstexprwould catch issues at compile-time rather than link-time.♻️ Proposed fix
// Test std::expected support -inline void test_expected() { +consteval void test_expected() { [[maybe_unused]] std::expected<int, int> e = 42; static_assert(std::is_same_v<decltype(e.value()), int&>); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp` around lines 132 - 135, The small test function test_expected is trivially constexpr-eligible; change its signature from "inline void test_expected()" to a compile-time function (e.g., "inline constexpr void test_expected()" or "inline consteval void test_expected()") so the static_assert and value() check are evaluated at compile time; simply update the function declaration to constexpr/consteval and keep the body unchanged to ensure the check fails during compilation rather than at link-time.src/infrastructure/include/kth/infrastructure/display_mode.hpp (2)
38-43: Consider broader case handling or documenting the limited set.The function handles only exact matches for lowercase and UPPERCASE, missing common variants like "Log", "Daemon", "Tui". Consider either true case-insensitive comparison or documenting that only these exact values are accepted.
♻️ Proposed fix for true case-insensitive matching
+#include <algorithm> +#include <cctype> + +namespace { +inline bool iequals(std::string_view a, std::string_view b) noexcept { + return a.size() == b.size() && + std::equal(a.begin(), a.end(), b.begin(), + [](char c1, char c2) { + return std::tolower(static_cast<unsigned char>(c1)) == + std::tolower(static_cast<unsigned char>(c2)); + }); +} +} // namespace + inline display_mode parse_display_mode(std::string_view str) noexcept { - if (str == "tui" || str == "TUI") return display_mode::tui; - if (str == "log" || str == "LOG") return display_mode::log; - if (str == "daemon" || str == "DAEMON") return display_mode::daemon; + if (iequals(str, "tui")) return display_mode::tui; + if (iequals(str, "log")) return display_mode::log; + if (iequals(str, "daemon")) return display_mode::daemon; return display_mode::log; // default }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp` around lines 38 - 43, The parse_display_mode function currently only matches exact lowercase or UPPERCASE strings; change it to perform true case-insensitive matching by normalizing the input (e.g., convert the incoming std::string_view to a lowercase std::string or use a case-insensitive compare) and then compare against "tui", "log", and "daemon", returning display_mode::tui, display_mode::log, or display_mode::daemon accordingly, keeping the same default return (display_mode::log) and preserving noexcept; update only parse_display_mode and ensure comparisons map to the existing display_mode enum values.
9-9: Unused include.The
<string>header is included but not used—onlystd::string_view(from<string_view>) is used in this file.♻️ Proposed fix
`#include` <cstdint> -#include <string> `#include` <string_view>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp` at line 9, Remove the unused `#include` <string> and instead include <string_view> (or keep the existing <string_view> include) so the file only depends on std::string_view; specifically delete the `#include <string>` line referenced in the diff and ensure `std::string_view` is available by adding `#include <string_view>` if it's not already present.src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp (1)
8-8: Unused include.The
<cstddef>header doesn't appear to be used in this file—nostd::size_t,std::nullptr_t, or similar types are referenced.♻️ Proposed fix
-#include <cstddef> - `#include` <kth/infrastructure/utility/asio_helper.hpp>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp` at line 8, Remove the unused header include by deleting the line '#include <cstddef>' from async_channel.hpp since no std::size_t or other cstddef symbols are used; after removal, run a quick build or include-check to ensure no compilation breakage and add any required headers only if a missing symbol appears.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp`:
- Around line 132-135: The small test function test_expected is trivially
constexpr-eligible; change its signature from "inline void test_expected()" to a
compile-time function (e.g., "inline constexpr void test_expected()" or "inline
consteval void test_expected()") so the static_assert and value() check are
evaluated at compile time; simply update the function declaration to
constexpr/consteval and keep the body unchanged to ensure the check fails during
compilation rather than at link-time.
In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp`:
- Around line 38-43: The parse_display_mode function currently only matches
exact lowercase or UPPERCASE strings; change it to perform true case-insensitive
matching by normalizing the input (e.g., convert the incoming std::string_view
to a lowercase std::string or use a case-insensitive compare) and then compare
against "tui", "log", and "daemon", returning display_mode::tui,
display_mode::log, or display_mode::daemon accordingly, keeping the same default
return (display_mode::log) and preserving noexcept; update only
parse_display_mode and ensure comparisons map to the existing display_mode enum
values.
- Line 9: Remove the unused `#include` <string> and instead include <string_view>
(or keep the existing <string_view> include) so the file only depends on
std::string_view; specifically delete the `#include <string>` line referenced in
the diff and ensure `std::string_view` is available by adding `#include
<string_view>` if it's not already present.
In `@src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp`:
- Line 8: Remove the unused header include by deleting the line '#include
<cstddef>' from async_channel.hpp since no std::size_t or other cstddef symbols
are used; after removal, run a quick build or include-check to ensure no
compilation breakage and add any required headers only if a missing symbol
appears.
In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp`:
- Around line 79-92: Remove the redundant fixed-duration overload of delay and
keep a single templated implementation: delete the inline awaitable<void>
delay(std::chrono::milliseconds) function and rely on the template
awaitable<void> delay(std::chrono::duration<Rep, Period>) implementation; ensure
the remaining template uses ::asio::this_coro::executor, ::asio::steady_timer,
timer.expires_after(duration) and co_await timer.async_wait(use_awaitable) (add
inline if header linkage requires it).
- Around line 38-48: The current co_await of (std::move(op) ||
timer.async_wait(use_awaitable)) drops any non-aborted timer error and leaves
the timer running if the operation throws; update the logic around the awaitable
race in awaitable_helpers.hpp so that when the operation (op) wins you
explicitly cancel the timer (timer.cancel()) and co_await the timer completion
to observe and handle any non-operation_aborted error (propagate or log as
appropriate), and when the timer wins you cancel the operation and return the
timeout error as before; ensure you check the timer completion result
(async_wait) for errors other than asio::error::operation_aborted before
discarding them and document the behavior in comments near the race logic.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 052bb03d-a3a7-4f8c-ad13-aa2a9542b3d8
⛔ Files ignored due to path filters (254)
.coderabbit.yamlis excluded by none and included by noneCMakeLists.txtis excluded by!**/CMakeLists.txtand included by noneconan.lockis excluded by!**/*.lock,!conan.lockand included by noneconanfile.pyis excluded by!**/conanfile.pyand included by nonedata/utxo_bloom.datis excluded by!**/*.dat,!data/**,!**/*.datand included by nonesrc/CMakeLists.txtis excluded by!**/CMakeLists.txtand included by nonesrc/blockchain/CMakeLists.txtis excluded by!src/blockchain/**,!**/CMakeLists.txtand included by nonesrc/blockchain/conanfile.pyis excluded by!src/blockchain/**,!**/conanfile.pyand included by nonesrc/blockchain/include/kth/blockchain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/header_index.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/block_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/fast_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/safe_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/block_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/header_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_pool.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_base.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_chain_state.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/settings.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/utxo_builder.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_header.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/interface/block_chain.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/block_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/header_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_pool.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_base.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_chain_state.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/settings.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/utxo_bloom_embed.S.inis excluded by!src/blockchain/**,!**/*.S.inand included by nonesrc/blockchain/src/utxo_builder.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_header.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/test/header_index.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/blockchain/test/header_organizer.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/c-api/conanfile.pyis excluded by!src/c-api/**,!**/conanfile.pyand included by nonesrc/c-api/console/main.cppis excluded by!src/c-api/**and included by nonesrc/c-api/console/print_headers.cppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/chain/chain_other.his excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/conversions.hppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/primitives.his excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_async.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_other.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_sync.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction_list.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/node.cppis excluded by!src/c-api/**and included by nonesrc/consensus/conanfile.pyis excluded by!src/consensus/**,!**/conanfile.pyand included by nonesrc/consensus/src/bch-rules/coins.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/primitives/token.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/vm_limits.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/util/strencodings.his excluded by!src/consensus/**and included by nonesrc/consensus/src/btc-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/database/CMakeLists.txtis excluded by!src/database/**,!**/CMakeLists.txtand included by nonesrc/database/conanfile.pyis excluded by!src/database/**,!**/conanfile.pyand included by nonesrc/database/include/kth/database/block_store.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/block_undo.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/data_base.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/block_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/header_abla_entry.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/header_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/history_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/internal_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/internal_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/property_code.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/reorg_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/spend_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_unconfirmed_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxo_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxoz_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_pos.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_seq.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/header_index.hppis excluded by!src/database/**and included by nonesrc/database/src/block_store.cppis excluded by!src/database/**and included by nonesrc/database/src/block_undo.cppis excluded by!src/database/**and included by nonesrc/database/src/data_base.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/header_abla_entry.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/utxoz_database.cppis excluded by!src/database/**and included by nonesrc/database/src/flat_file_seq.cppis excluded by!src/database/**and included by nonesrc/database/src/header_index.cppis excluded by!src/database/**and included by nonesrc/database/src/settings.cppis excluded by!src/database/**and included by nonesrc/database/test/data_base.cppis excluded by!src/database/**,!**/test/**and included by nonesrc/database/tools/utxoz_fingerprint/utxoz_fingerprint.cppis excluded by!src/database/**,!**/tools/**and included by nonesrc/domain/CMakeLists.txtis excluded by!src/domain/**,!**/CMakeLists.txtand included by nonesrc/domain/bench/hash/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/bench/merkle/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/conanfile.pyis excluded by!src/domain/**,!**/conanfile.pyand included by nonesrc/domain/include/kth/domain/chain/block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/block_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/light_block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/config/parser.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/constants/common.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/messages.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/send_addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/version.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/multi_crypto_support.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/version.hppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/light_block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/output_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/send_addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/test/chain/light_block.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/domain/test/message/addrv2_bchn_comparison.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/infrastructure/CMakeLists.txtis excluded by!**/CMakeLists.txtand included bysrc/infrastructure/**src/infrastructure/conanfile.pyis excluded by!**/conanfile.pyand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/resubscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/subscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/test/task_group.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/async_channel.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/awaitable_helpers.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/coroutine_smoke_test.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/threadpool.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/network/CMakeLists.txtis excluded by!src/network/**,!**/CMakeLists.txtand included by nonesrc/network/conanfile.pyis excluded by!src/network/**,!**/conanfile.pyand included by nonesrc/network/include/kth/network.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/acceptor.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/banlist.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/channel.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/connector.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/ping.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/pong.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/hosts.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/message_subscriber.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/net_permissions.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/normalized_address.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p_node.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_database.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_manager.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_record.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_address_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_events.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_60001.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_reject_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_seed_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_timer.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols_coro.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/proxy.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_batch.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_inbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_manual.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_outbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_seed.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/settings.hppis excluded by!src/network/**and included by nonesrc/network/src/acceptor.cppis excluded by!src/network/**and included by nonesrc/network/src/banlist.cppis excluded by!src/network/**and included by nonesrc/network/src/channel.cppis excluded by!src/network/**and included by nonesrc/network/src/connector.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/ping.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/pong.cppis excluded by!src/network/**and included by nonesrc/network/src/hosts.cppis excluded by!src/network/**and included by nonesrc/network/src/message_subscriber.cppis excluded by!src/network/**and included by nonesrc/network/src/net_permissions.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p_node.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_database.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_manager.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_session.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_address_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_events.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_60001.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_reject_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_seed_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_timer.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols_coro.cppis excluded by!src/network/**and included by nonesrc/network/src/proxy.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_batch.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_inbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_manual.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_outbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_seed.cppis excluded by!src/network/**and included by nonesrc/network/src/settings.cppis excluded by!src/network/**and included by nonesrc/network/test/p2p_node.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_database.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_manager.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_session.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/protocols_coro.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/test_helpers.hppis excluded by!src/network/**,!**/test/**and included by nonesrc/node-exe/CMakeLists.txtis excluded by!src/node-exe/**,!**/CMakeLists.txtand included by nonesrc/node-exe/conanfile.pyis excluded by!src/node-exe/**,!**/conanfile.pyand included by nonesrc/node-exe/src/main.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.hppis excluded by!src/node-exe/**and included by nonesrc/node/CMakeLists.txtis excluded by!src/node/**,!**/CMakeLists.txtand included by nonesrc/node/conanfile.pyis excluded by!src/node/**,!**/conanfile.pyand included by nonesrc/node/data/bn.cfgis excluded by!src/node/**and included by nonesrc/node/include/kth/node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/executor/executor.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/full_node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_inbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_manual.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_outbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/settings.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/block_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/chunk_coordinator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/header_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/messages.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/orchestrator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/user_agent.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservation.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservations.hppis excluded by!src/node/**and included by nonesrc/node/src/executor/executor.cppis excluded by!src/node/**and included by nonesrc/node/src/full_node.cppis excluded by!src/node/**and included by nonesrc/node/src/parser.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_header_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_out.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_header_sync.cppis excluded by!src/node/**and included by none
📒 Files selected for processing (46)
src/infrastructure/include/kth/infrastructure.hppsrc/infrastructure/include/kth/infrastructure/compiler_constraints.hppsrc/infrastructure/include/kth/infrastructure/config/authority.hppsrc/infrastructure/include/kth/infrastructure/config/endpoint.hppsrc/infrastructure/include/kth/infrastructure/display_mode.hppsrc/infrastructure/include/kth/infrastructure/error.hppsrc/infrastructure/include/kth/infrastructure/handlers.hppsrc/infrastructure/include/kth/infrastructure/log/statsd_sink.hppsrc/infrastructure/include/kth/infrastructure/log/structured_logger.hppsrc/infrastructure/include/kth/infrastructure/math/hash.hppsrc/infrastructure/include/kth/infrastructure/message/network_address.hppsrc/infrastructure/include/kth/infrastructure/utility/asio_helper.hppsrc/infrastructure/include/kth/infrastructure/utility/async_channel.hppsrc/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hppsrc/infrastructure/include/kth/infrastructure/utility/broadcaster.hppsrc/infrastructure/include/kth/infrastructure/utility/byte_reader.hppsrc/infrastructure/include/kth/infrastructure/utility/coroutine_config.hppsrc/infrastructure/include/kth/infrastructure/utility/cpu_executor.hppsrc/infrastructure/include/kth/infrastructure/utility/deadline.hppsrc/infrastructure/include/kth/infrastructure/utility/delegates.hppsrc/infrastructure/include/kth/infrastructure/utility/dispatcher.hppsrc/infrastructure/include/kth/infrastructure/utility/resubscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/salted_hashers.hppsrc/infrastructure/include/kth/infrastructure/utility/sequencer.hppsrc/infrastructure/include/kth/infrastructure/utility/stats.hppsrc/infrastructure/include/kth/infrastructure/utility/subscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/synchronizer.hppsrc/infrastructure/include/kth/infrastructure/utility/system_memory.hppsrc/infrastructure/include/kth/infrastructure/utility/task_group.hppsrc/infrastructure/include/kth/infrastructure/utility/threadpool.hppsrc/infrastructure/include/kth/infrastructure/utility/units.hppsrc/infrastructure/include/kth/infrastructure/utility/work.hppsrc/infrastructure/src/config/endpoint.cppsrc/infrastructure/src/log/sink.cppsrc/infrastructure/src/log/statsd_sink.cppsrc/infrastructure/src/message/network_address.cppsrc/infrastructure/src/utility/deadline.cppsrc/infrastructure/src/utility/dispatcher.cppsrc/infrastructure/src/utility/sequencer.cppsrc/infrastructure/src/utility/socket.cppsrc/infrastructure/src/utility/stats.cppsrc/infrastructure/src/utility/system_memory.cppsrc/infrastructure/src/utility/threadpool.cppsrc/infrastructure/src/utility/work.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.h
💤 Files with no reviewable changes (2)
- src/infrastructure/include/kth/infrastructure/log/statsd_sink.hpp
- src/infrastructure/include/kth/infrastructure/config/endpoint.hpp
✅ Files skipped from review due to trivial changes (3)
- src/infrastructure/include/kth/infrastructure/config/authority.hpp
- src/infrastructure/include/kth/infrastructure/log/structured_logger.hpp
- src/infrastructure/include/kth/infrastructure/error.hpp
🚧 Files skipped from review as they are similar to previous changes (1)
- src/infrastructure/include/kth/infrastructure/message/network_address.hpp
41831a4 to
a1521e9
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (3)
src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp (1)
131-135: Consider makingtest_expectedaconstevalcompile-time check.The
test_expected()function is defined but never called. To ensure it's actually validated at compile time (not just when instantiated), consider usingconstevalor astatic_assertapproach:♻️ Ensure compile-time validation
-// Test std::expected support -inline void test_expected() { - [[maybe_unused]] std::expected<int, int> e = 42; - static_assert(std::is_same_v<decltype(e.value()), int&>); -} +// Test std::expected support +inline constexpr bool test_expected() { + std::expected<int, int> e = 42; + static_assert(std::is_same_v<decltype(e.value()), int&>); + return e.has_value(); +} +static_assert(test_expected(), "std::expected must work");This ensures the test runs at compile time rather than relying on potential instantiation.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp` around lines 131 - 135, The test_expected function is never invoked so its check may never run; change it to a compile-time-only check by making test_expected a consteval function (or replace its body with a static_assert) so the std::expected<int,int> value() type check is enforced at compile time; update the declaration of test_expected (and keep the use of e and std::expected) to be consteval or convert the type check into a static_assert using std::is_same_v<decltype(std::declval<std::expected<int,int>>().value()), int&> so the compiler validates this immediately.src/infrastructure/include/kth/infrastructure/display_mode.hpp (1)
39-51: Consider returningstd::optionalfor parse failures.The current implementation silently defaults to
logon unrecognized input. This is reasonable for CLI parsing where a default is needed, but returningstd::optional<display_mode>would let callers decide whether to use a default or report an error.♻️ Alternative approach with optional
-inline display_mode parse_display_mode(std::string_view str) noexcept { +inline std::optional<display_mode> parse_display_mode(std::string_view str) noexcept { auto eq = [](std::string_view a, std::string_view b) { return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin(), [](char x, char y) { return std::tolower(static_cast<unsigned char>(x)) == std::tolower(static_cast<unsigned char>(y)); }); }; if (eq(str, "tui")) return display_mode::tui; if (eq(str, "log")) return display_mode::log; if (eq(str, "daemon")) return display_mode::daemon; - return display_mode::log; // default + return std::nullopt; }This is optional—the current default-to-log behavior may be intentional for the CLI use case.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp` around lines 39 - 51, The parse_display_mode function currently defaults unknown strings to display_mode::log; change its signature to return std::optional<display_mode> and return std::nullopt for unrecognized input so callers can decide to use a default or report an error; specifically update parse_display_mode (and any direct callers) to accept std::optional<display_mode>, keep the case-insensitive eq helper as-is, return std::make_optional(display_mode::tui|log|daemon) on matches and std::nullopt otherwise, and adjust call sites to handle the optional (e.g., unwrap with a default or propagate an error).src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp (1)
79-92: Redundantdelay(milliseconds)overload.The explicit
delay(std::chrono::milliseconds)overload on line 79 is redundant since the template version on lines 86-92 already handlesmilliseconds(it's aduration<Rep, Period>). Consider removing the explicit overload.♻️ Simplified delay function
-inline awaitable<void> delay(std::chrono::milliseconds duration) { - auto executor = co_await ::asio::this_coro::executor; - ::asio::steady_timer timer(executor); - timer.expires_after(duration); - co_await timer.async_wait(use_awaitable); -} - template <typename Rep, typename Period> awaitable<void> delay(std::chrono::duration<Rep, Period> duration) { auto executor = co_await ::asio::this_coro::executor; ::asio::steady_timer timer(executor); timer.expires_after(duration); co_await timer.async_wait(use_awaitable); }The explicit overload might exist for documentation purposes or to avoid template instantiation overhead in common cases—if intentional, a brief comment would clarify.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp` around lines 79 - 92, The file defines two delay overloads where the explicit delay(std::chrono::milliseconds) duplicates the template awaitable<void> delay(std::chrono::duration<Rep, Period>) — remove the redundant milliseconds-specific overload (the template delay already covers std::chrono::milliseconds) or if it was intentional keep it but add a clarifying comment; locate and update the functions named delay, the template delay(std::chrono::duration<Rep, Period>), and references to ::asio::this_coro::executor / ::asio::steady_timer / use_awaitable accordingly so only one canonical awaitable delay implementation remains.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp`:
- Around line 131-135: The test_expected function is never invoked so its check
may never run; change it to a compile-time-only check by making test_expected a
consteval function (or replace its body with a static_assert) so the
std::expected<int,int> value() type check is enforced at compile time; update
the declaration of test_expected (and keep the use of e and std::expected) to be
consteval or convert the type check into a static_assert using
std::is_same_v<decltype(std::declval<std::expected<int,int>>().value()), int&>
so the compiler validates this immediately.
In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp`:
- Around line 39-51: The parse_display_mode function currently defaults unknown
strings to display_mode::log; change its signature to return
std::optional<display_mode> and return std::nullopt for unrecognized input so
callers can decide to use a default or report an error; specifically update
parse_display_mode (and any direct callers) to accept
std::optional<display_mode>, keep the case-insensitive eq helper as-is, return
std::make_optional(display_mode::tui|log|daemon) on matches and std::nullopt
otherwise, and adjust call sites to handle the optional (e.g., unwrap with a
default or propagate an error).
In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp`:
- Around line 79-92: The file defines two delay overloads where the explicit
delay(std::chrono::milliseconds) duplicates the template awaitable<void>
delay(std::chrono::duration<Rep, Period>) — remove the redundant
milliseconds-specific overload (the template delay already covers
std::chrono::milliseconds) or if it was intentional keep it but add a clarifying
comment; locate and update the functions named delay, the template
delay(std::chrono::duration<Rep, Period>), and references to
::asio::this_coro::executor / ::asio::steady_timer / use_awaitable accordingly
so only one canonical awaitable delay implementation remains.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4b8fbd99-d41a-496a-aff8-eb010d42f77d
⛔ Files ignored due to path filters (255)
.coderabbit.yamlis excluded by none and included by noneCMakeLists.txtis excluded by!**/CMakeLists.txtand included by noneconan.lockis excluded by!**/*.lock,!conan.lockand included by noneconanfile.pyis excluded by!**/conanfile.pyand included by nonedata/utxo_bloom.datis excluded by!**/*.dat,!data/**,!**/*.datand included by nonesrc/CMakeLists.txtis excluded by!**/CMakeLists.txtand included by nonesrc/blockchain/CMakeLists.txtis excluded by!src/blockchain/**,!**/CMakeLists.txtand included by nonesrc/blockchain/conanfile.pyis excluded by!src/blockchain/**,!**/conanfile.pyand included by nonesrc/blockchain/include/kth/blockchain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/header_index.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/block_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/fast_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/safe_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/block_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/header_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_pool.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_base.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_chain_state.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/settings.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/utxo_builder.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_header.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/interface/block_chain.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/block_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/header_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_pool.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_base.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_chain_state.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/settings.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/utxo_bloom_embed.S.inis excluded by!src/blockchain/**,!**/*.S.inand included by nonesrc/blockchain/src/utxo_builder.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_header.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/test/header_index.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/blockchain/test/header_organizer.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/c-api/conanfile.pyis excluded by!src/c-api/**,!**/conanfile.pyand included by nonesrc/c-api/console/main.cppis excluded by!src/c-api/**and included by nonesrc/c-api/console/print_headers.cppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/chain/chain_other.his excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/conversions.hppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/primitives.his excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_async.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_other.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_sync.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction_list.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/node.cppis excluded by!src/c-api/**and included by nonesrc/consensus/conanfile.pyis excluded by!src/consensus/**,!**/conanfile.pyand included by nonesrc/consensus/src/bch-rules/coins.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/primitives/token.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/vm_limits.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/util/strencodings.his excluded by!src/consensus/**and included by nonesrc/consensus/src/btc-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/database/CMakeLists.txtis excluded by!src/database/**,!**/CMakeLists.txtand included by nonesrc/database/conanfile.pyis excluded by!src/database/**,!**/conanfile.pyand included by nonesrc/database/include/kth/database/block_store.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/block_undo.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/data_base.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/block_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/header_abla_entry.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/header_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/history_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/internal_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/internal_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/property_code.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/reorg_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/spend_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_unconfirmed_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxo_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxoz_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_pos.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_seq.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/header_index.hppis excluded by!src/database/**and included by nonesrc/database/src/block_store.cppis excluded by!src/database/**and included by nonesrc/database/src/block_undo.cppis excluded by!src/database/**and included by nonesrc/database/src/data_base.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/header_abla_entry.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/utxoz_database.cppis excluded by!src/database/**and included by nonesrc/database/src/flat_file_seq.cppis excluded by!src/database/**and included by nonesrc/database/src/header_index.cppis excluded by!src/database/**and included by nonesrc/database/src/settings.cppis excluded by!src/database/**and included by nonesrc/database/test/data_base.cppis excluded by!src/database/**,!**/test/**and included by nonesrc/database/tools/utxoz_fingerprint/utxoz_fingerprint.cppis excluded by!src/database/**,!**/tools/**and included by nonesrc/domain/CMakeLists.txtis excluded by!src/domain/**,!**/CMakeLists.txtand included by nonesrc/domain/bench/hash/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/bench/merkle/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/conanfile.pyis excluded by!src/domain/**,!**/conanfile.pyand included by nonesrc/domain/include/kth/domain/chain/block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/block_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/light_block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/config/parser.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/constants/common.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/messages.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/send_addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/version.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/multi_crypto_support.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/version.hppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/light_block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/output_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/send_addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/test/chain/light_block.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/domain/test/message/addrv2_bchn_comparison.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/infrastructure/CMakeLists.txtis excluded by!**/CMakeLists.txtand included bysrc/infrastructure/**src/infrastructure/conanfile.pyis excluded by!**/conanfile.pyand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/resubscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/subscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/test/task_group.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/async_channel.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/awaitable_helpers.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/coroutine_smoke_test.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/threadpool.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/network/CMakeLists.txtis excluded by!src/network/**,!**/CMakeLists.txtand included by nonesrc/network/conanfile.pyis excluded by!src/network/**,!**/conanfile.pyand included by nonesrc/network/include/kth/network.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/acceptor.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/banlist.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/channel.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/connector.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/ping.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/pong.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/hosts.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/message_subscriber.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/net_permissions.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/normalized_address.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p_node.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_database.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_manager.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_record.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_address_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_events.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_60001.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_reject_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_seed_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_timer.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols_coro.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/proxy.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_batch.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_inbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_manual.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_outbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_seed.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/settings.hppis excluded by!src/network/**and included by nonesrc/network/src/acceptor.cppis excluded by!src/network/**and included by nonesrc/network/src/banlist.cppis excluded by!src/network/**and included by nonesrc/network/src/channel.cppis excluded by!src/network/**and included by nonesrc/network/src/connector.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/ping.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/pong.cppis excluded by!src/network/**and included by nonesrc/network/src/hosts.cppis excluded by!src/network/**and included by nonesrc/network/src/message_subscriber.cppis excluded by!src/network/**and included by nonesrc/network/src/net_permissions.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p_node.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_database.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_manager.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_session.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_address_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_events.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_60001.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_reject_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_seed_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_timer.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols_coro.cppis excluded by!src/network/**and included by nonesrc/network/src/proxy.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_batch.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_inbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_manual.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_outbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_seed.cppis excluded by!src/network/**and included by nonesrc/network/src/settings.cppis excluded by!src/network/**and included by nonesrc/network/test/p2p_node.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_database.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_manager.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_session.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/protocols_coro.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/test_helpers.hppis excluded by!src/network/**,!**/test/**and included by nonesrc/node-exe/CMakeLists.txtis excluded by!src/node-exe/**,!**/CMakeLists.txtand included by nonesrc/node-exe/conanfile.pyis excluded by!src/node-exe/**,!**/conanfile.pyand included by nonesrc/node-exe/src/main.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.hppis excluded by!src/node-exe/**and included by nonesrc/node/CMakeLists.txtis excluded by!src/node/**,!**/CMakeLists.txtand included by nonesrc/node/conanfile.pyis excluded by!src/node/**,!**/conanfile.pyand included by nonesrc/node/data/bn.cfgis excluded by!src/node/**and included by nonesrc/node/include/kth/node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/executor/executor.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/full_node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_inbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_manual.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_outbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/settings.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/block_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/chunk_coordinator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/header_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/messages.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/orchestrator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/user_agent.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservation.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservations.hppis excluded by!src/node/**and included by nonesrc/node/src/executor/executor.cppis excluded by!src/node/**and included by nonesrc/node/src/full_node.cppis excluded by!src/node/**and included by nonesrc/node/src/parser.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_header_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_out.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_header_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_inbound.cppis excluded by!src/node/**and included by none
📒 Files selected for processing (45)
src/infrastructure/include/kth/infrastructure.hppsrc/infrastructure/include/kth/infrastructure/compiler_constraints.hppsrc/infrastructure/include/kth/infrastructure/config/authority.hppsrc/infrastructure/include/kth/infrastructure/config/endpoint.hppsrc/infrastructure/include/kth/infrastructure/display_mode.hppsrc/infrastructure/include/kth/infrastructure/error.hppsrc/infrastructure/include/kth/infrastructure/handlers.hppsrc/infrastructure/include/kth/infrastructure/log/statsd_sink.hppsrc/infrastructure/include/kth/infrastructure/math/hash.hppsrc/infrastructure/include/kth/infrastructure/message/network_address.hppsrc/infrastructure/include/kth/infrastructure/utility/asio_helper.hppsrc/infrastructure/include/kth/infrastructure/utility/async_channel.hppsrc/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hppsrc/infrastructure/include/kth/infrastructure/utility/broadcaster.hppsrc/infrastructure/include/kth/infrastructure/utility/byte_reader.hppsrc/infrastructure/include/kth/infrastructure/utility/coroutine_config.hppsrc/infrastructure/include/kth/infrastructure/utility/cpu_executor.hppsrc/infrastructure/include/kth/infrastructure/utility/deadline.hppsrc/infrastructure/include/kth/infrastructure/utility/delegates.hppsrc/infrastructure/include/kth/infrastructure/utility/dispatcher.hppsrc/infrastructure/include/kth/infrastructure/utility/resubscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/salted_hashers.hppsrc/infrastructure/include/kth/infrastructure/utility/sequencer.hppsrc/infrastructure/include/kth/infrastructure/utility/stats.hppsrc/infrastructure/include/kth/infrastructure/utility/subscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/synchronizer.hppsrc/infrastructure/include/kth/infrastructure/utility/system_memory.hppsrc/infrastructure/include/kth/infrastructure/utility/task_group.hppsrc/infrastructure/include/kth/infrastructure/utility/threadpool.hppsrc/infrastructure/include/kth/infrastructure/utility/units.hppsrc/infrastructure/include/kth/infrastructure/utility/work.hppsrc/infrastructure/src/config/endpoint.cppsrc/infrastructure/src/log/sink.cppsrc/infrastructure/src/log/statsd_sink.cppsrc/infrastructure/src/message/network_address.cppsrc/infrastructure/src/utility/deadline.cppsrc/infrastructure/src/utility/dispatcher.cppsrc/infrastructure/src/utility/sequencer.cppsrc/infrastructure/src/utility/socket.cppsrc/infrastructure/src/utility/stats.cppsrc/infrastructure/src/utility/system_memory.cppsrc/infrastructure/src/utility/threadpool.cppsrc/infrastructure/src/utility/work.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.h
💤 Files with no reviewable changes (2)
- src/infrastructure/include/kth/infrastructure/log/statsd_sink.hpp
- src/infrastructure/include/kth/infrastructure/config/endpoint.hpp
✅ Files skipped from review due to trivial changes (2)
- src/infrastructure/include/kth/infrastructure/config/authority.hpp
- src/infrastructure/include/kth/infrastructure/error.hpp
🚧 Files skipped from review as they are similar to previous changes (2)
- src/infrastructure/include/kth/infrastructure/message/network_address.hpp
- src/infrastructure/include/kth/infrastructure/math/hash.hpp
| std::unique_ptr<database::block_store> block_store_; | ||
|
|
||
| // UTXO-Z high-performance UTXO database | ||
| database::utxoz_database utxoz_db_; |
There was a problem hiding this comment.
block_chain constructor missing header_index_ and utxoz_db_ initialization
Medium Severity
The block_chain constructor's member initializer list does not initialize header_index_ or utxoz_db_. The header_index_ is declared as a value member (not a pointer), so it will be default-constructed, which may be fine. However, utxoz_db_ is also a value member that gets used in start() without any constructor arguments being passed. If utxoz_database requires specific construction parameters (e.g., a path), this could lead to incorrect state or undefined behavior when open() is called later.
Additional Locations (1)
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
src/infrastructure/include/kth/infrastructure/display_mode.hpp (1)
39-51: Consider returningstd::optionalto distinguish parse failures.The current implementation silently defaults to
display_mode::logwhen parsing fails. This makes it impossible for callers to detect typos in configuration (e.g., "daemonn" → silent fallback tolog). Returningstd::optional<display_mode>would allow callers to handle invalid input explicitly.♻️ Optional refactor with explicit failure handling
-/// Parse display_mode from string (case-insensitive) -inline display_mode parse_display_mode(std::string_view str) noexcept { +/// Parse display_mode from string (case-insensitive), returns nullopt on failure +inline std::optional<display_mode> parse_display_mode(std::string_view str) noexcept { auto eq = [](std::string_view a, std::string_view b) { return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin(), [](char x, char y) { return std::tolower(static_cast<unsigned char>(x)) == std::tolower(static_cast<unsigned char>(y)); }); }; if (eq(str, "tui")) return display_mode::tui; if (eq(str, "log")) return display_mode::log; if (eq(str, "daemon")) return display_mode::daemon; - return display_mode::log; // default + return std::nullopt; }Add
#include <optional>at the top. Callers can then use.value_or(display_mode::log)if they want the default behavior.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp` around lines 39 - 51, Change parse_display_mode to return std::optional<display_mode> instead of always returning display_mode::log: include <optional>, update the signature parse_display_mode(std::string_view) noexcept -> std::optional<display_mode>, keep the case-insensitive comparator, return display_mode::tui/log/daemon on matches and return std::nullopt for unknown strings; update callers of parse_display_mode to handle the optional (e.g., .value_or(display_mode::log) where a default is desired) so typos are no longer silently mapped to log.src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp (1)
79-85:delay()propagates exceptions on cancellation.If the timer is cancelled (e.g., via
steady_timer::cancel()),async_waitwill complete withasio::error::operation_aborted, whichuse_awaitableconverts to an exception. This may be surprising for callers expecting a simple sleep. Consider documenting this behavior or returning an error code.📚 Document cancellation behavior or handle it
Option 1 - Document:
// ----------------------------------------------------------------------------- // delay: Simple async sleep +// Note: Throws asio::system_error if the timer is cancelled. // -----------------------------------------------------------------------------Option 2 - Return error code:
template <typename Rep, typename Period> -awaitable<void> delay(std::chrono::duration<Rep, Period> duration) { +awaitable<std::error_code> delay(std::chrono::duration<Rep, Period> duration) { auto executor = co_await ::asio::this_coro::executor; ::asio::steady_timer timer(executor); timer.expires_after(duration); - co_await timer.async_wait(use_awaitable); + auto [ec] = co_await timer.async_wait(::asio::as_tuple(use_awaitable)); + co_return ec; }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp` around lines 79 - 85, The delay template function (delay) currently co_awaits timer.async_wait(use_awaitable) which will throw when the timer is cancelled (asio::error::operation_aborted); update delay to either document this cancellation behavior or change its contract so callers don’t get exceptions — for a behavioral fix catch the operation_aborted exception around the async_wait and swallow it (returning normally) or return an error/result type instead; reference the delay function, the local ::asio::steady_timer timer, async_wait and use_awaitable and ensure any change preserves the existing executor acquisition (co_await ::asio::this_coro::executor) and timer.expires_after(duration).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/infrastructure/include/kth/infrastructure.hpp`:
- Around line 110-113: The four coroutine-related includes (async_channel.hpp,
awaitable_helpers.hpp, cpu_executor.hpp, task_group.hpp) are pulled into the
umbrella header unconditionally which breaks Emscripten builds; update the
umbrella header that contains these lines so they are only included when not
compiling for Emscripten by wrapping those include statements in a preprocessor
guard (e.g. `#if` !defined(__EMSCRIPTEN__) ... `#endif`), keeping the rest of the
header unchanged and ensuring the symbols async_channel, awaitable_helpers,
cpu_executor, and task_group remain available on non-Emscripten platforms.
In `@src/infrastructure/include/kth/infrastructure/utility/async_channel.hpp`:
- Around line 10-12: The header uses asio::experimental::channel type aliases
(see async_channel.hpp and the aliases referencing asio::experimental::channel)
but does not guard for Emscripten; add an `#if` !defined(__EMSCRIPTEN__) (or
`#ifdef` __EMSCRIPTEN__ alternative) around the include/alias block so when
__EMSCRIPTEN__ is defined you either provide a clear static_assert or exclude
the type aliases entirely; specifically guard the section that depends on
asio::experimental::channel (the type alias declarations) so Emscripten builds
get a clear error message or an empty header instead of cryptic failures.
In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp`:
- Around line 1-12: This header uses Asio coroutine features that aren't
available under Emscripten; wrap the entire coroutine-dependent content of
awaitable_helpers.hpp (everything between the include guard
KTH_INFRASTRUCTURE_AWAITABLE_HELPERS_HPP and its `#endif`) with the same
Emscripten preprocessor guard pattern used in async_channel.hpp (e.g. `#if`
!defined(EMSCRIPTEN) ... `#else` / `#error` or an empty stub branch ... `#endif`) so
the includes (<chrono>, <expected>, <system_error>, and
<kth/infrastructure/utility/asio_helper.hpp>) and any awaitable-related
declarations are excluded when compiling for Emscripten.
---
Nitpick comments:
In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp`:
- Around line 39-51: Change parse_display_mode to return
std::optional<display_mode> instead of always returning display_mode::log:
include <optional>, update the signature parse_display_mode(std::string_view)
noexcept -> std::optional<display_mode>, keep the case-insensitive comparator,
return display_mode::tui/log/daemon on matches and return std::nullopt for
unknown strings; update callers of parse_display_mode to handle the optional
(e.g., .value_or(display_mode::log) where a default is desired) so typos are no
longer silently mapped to log.
In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp`:
- Around line 79-85: The delay template function (delay) currently co_awaits
timer.async_wait(use_awaitable) which will throw when the timer is cancelled
(asio::error::operation_aborted); update delay to either document this
cancellation behavior or change its contract so callers don’t get exceptions —
for a behavioral fix catch the operation_aborted exception around the async_wait
and swallow it (returning normally) or return an error/result type instead;
reference the delay function, the local ::asio::steady_timer timer, async_wait
and use_awaitable and ensure any change preserves the existing executor
acquisition (co_await ::asio::this_coro::executor) and
timer.expires_after(duration).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 41843f29-44a8-4fe3-9ef4-059a633a0a84
⛔ Files ignored due to path filters (255)
.coderabbit.yamlis excluded by none and included by noneCMakeLists.txtis excluded by!**/CMakeLists.txtand included by noneconan.lockis excluded by!**/*.lock,!conan.lockand included by noneconanfile.pyis excluded by!**/conanfile.pyand included by nonedata/utxo_bloom.datis excluded by!**/*.dat,!data/**,!**/*.datand included by nonesrc/CMakeLists.txtis excluded by!**/CMakeLists.txtand included by nonesrc/blockchain/CMakeLists.txtis excluded by!src/blockchain/**,!**/CMakeLists.txtand included by nonesrc/blockchain/conanfile.pyis excluded by!src/blockchain/**,!**/conanfile.pyand included by nonesrc/blockchain/include/kth/blockchain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/header_index.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/block_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/fast_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/safe_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/block_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/header_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_pool.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_base.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_chain_state.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/settings.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/utxo_builder.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_header.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/interface/block_chain.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/block_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/header_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_pool.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_base.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_chain_state.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/settings.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/utxo_bloom_embed.S.inis excluded by!src/blockchain/**,!**/*.S.inand included by nonesrc/blockchain/src/utxo_builder.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_header.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/test/header_index.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/blockchain/test/header_organizer.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/c-api/conanfile.pyis excluded by!src/c-api/**,!**/conanfile.pyand included by nonesrc/c-api/console/main.cppis excluded by!src/c-api/**and included by nonesrc/c-api/console/print_headers.cppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/chain/chain_other.his excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/conversions.hppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/primitives.his excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_async.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_other.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_sync.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction_list.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/node.cppis excluded by!src/c-api/**and included by nonesrc/consensus/conanfile.pyis excluded by!src/consensus/**,!**/conanfile.pyand included by nonesrc/consensus/src/bch-rules/coins.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/primitives/token.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/vm_limits.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/util/strencodings.his excluded by!src/consensus/**and included by nonesrc/consensus/src/btc-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/database/CMakeLists.txtis excluded by!src/database/**,!**/CMakeLists.txtand included by nonesrc/database/conanfile.pyis excluded by!src/database/**,!**/conanfile.pyand included by nonesrc/database/include/kth/database/block_store.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/block_undo.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/data_base.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/block_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/header_abla_entry.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/header_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/history_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/internal_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/internal_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/property_code.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/reorg_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/spend_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_unconfirmed_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxo_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxoz_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_pos.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_seq.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/header_index.hppis excluded by!src/database/**and included by nonesrc/database/src/block_store.cppis excluded by!src/database/**and included by nonesrc/database/src/block_undo.cppis excluded by!src/database/**and included by nonesrc/database/src/data_base.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/header_abla_entry.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/utxoz_database.cppis excluded by!src/database/**and included by nonesrc/database/src/flat_file_seq.cppis excluded by!src/database/**and included by nonesrc/database/src/header_index.cppis excluded by!src/database/**and included by nonesrc/database/src/settings.cppis excluded by!src/database/**and included by nonesrc/database/test/data_base.cppis excluded by!src/database/**,!**/test/**and included by nonesrc/database/tools/utxoz_fingerprint/utxoz_fingerprint.cppis excluded by!src/database/**,!**/tools/**and included by nonesrc/domain/CMakeLists.txtis excluded by!src/domain/**,!**/CMakeLists.txtand included by nonesrc/domain/bench/hash/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/bench/merkle/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/conanfile.pyis excluded by!src/domain/**,!**/conanfile.pyand included by nonesrc/domain/include/kth/domain/chain/block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/block_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/light_block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/config/parser.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/constants/common.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/messages.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/send_addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/version.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/multi_crypto_support.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/version.hppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/light_block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/output_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/send_addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/test/chain/light_block.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/domain/test/message/addrv2_bchn_comparison.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/infrastructure/CMakeLists.txtis excluded by!**/CMakeLists.txtand included bysrc/infrastructure/**src/infrastructure/conanfile.pyis excluded by!**/conanfile.pyand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/resubscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/subscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/test/task_group.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/async_channel.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/awaitable_helpers.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/coroutine_smoke_test.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/threadpool.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/network/CMakeLists.txtis excluded by!src/network/**,!**/CMakeLists.txtand included by nonesrc/network/conanfile.pyis excluded by!src/network/**,!**/conanfile.pyand included by nonesrc/network/include/kth/network.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/acceptor.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/banlist.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/channel.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/connector.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/ping.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/pong.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/hosts.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/message_subscriber.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/net_permissions.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/normalized_address.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p_node.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_database.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_manager.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_record.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_address_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_events.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_60001.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_reject_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_seed_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_timer.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols_coro.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/proxy.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_batch.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_inbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_manual.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_outbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_seed.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/settings.hppis excluded by!src/network/**and included by nonesrc/network/src/acceptor.cppis excluded by!src/network/**and included by nonesrc/network/src/banlist.cppis excluded by!src/network/**and included by nonesrc/network/src/channel.cppis excluded by!src/network/**and included by nonesrc/network/src/connector.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/ping.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/pong.cppis excluded by!src/network/**and included by nonesrc/network/src/hosts.cppis excluded by!src/network/**and included by nonesrc/network/src/message_subscriber.cppis excluded by!src/network/**and included by nonesrc/network/src/net_permissions.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p_node.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_database.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_manager.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_session.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_address_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_events.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_60001.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_reject_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_seed_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_timer.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols_coro.cppis excluded by!src/network/**and included by nonesrc/network/src/proxy.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_batch.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_inbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_manual.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_outbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_seed.cppis excluded by!src/network/**and included by nonesrc/network/src/settings.cppis excluded by!src/network/**and included by nonesrc/network/test/p2p_node.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_database.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_manager.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_session.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/protocols_coro.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/test_helpers.hppis excluded by!src/network/**,!**/test/**and included by nonesrc/node-exe/CMakeLists.txtis excluded by!src/node-exe/**,!**/CMakeLists.txtand included by nonesrc/node-exe/conanfile.pyis excluded by!src/node-exe/**,!**/conanfile.pyand included by nonesrc/node-exe/src/main.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.hppis excluded by!src/node-exe/**and included by nonesrc/node/CMakeLists.txtis excluded by!src/node/**,!**/CMakeLists.txtand included by nonesrc/node/conanfile.pyis excluded by!src/node/**,!**/conanfile.pyand included by nonesrc/node/data/bn.cfgis excluded by!src/node/**and included by nonesrc/node/include/kth/node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/executor/executor.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/full_node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_inbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_manual.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_outbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/settings.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/block_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/chunk_coordinator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/header_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/messages.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/orchestrator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/user_agent.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservation.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservations.hppis excluded by!src/node/**and included by nonesrc/node/src/executor/executor.cppis excluded by!src/node/**and included by nonesrc/node/src/full_node.cppis excluded by!src/node/**and included by nonesrc/node/src/parser.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_header_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_out.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_header_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_inbound.cppis excluded by!src/node/**and included by none
📒 Files selected for processing (45)
src/infrastructure/include/kth/infrastructure.hppsrc/infrastructure/include/kth/infrastructure/compiler_constraints.hppsrc/infrastructure/include/kth/infrastructure/config/authority.hppsrc/infrastructure/include/kth/infrastructure/config/endpoint.hppsrc/infrastructure/include/kth/infrastructure/display_mode.hppsrc/infrastructure/include/kth/infrastructure/error.hppsrc/infrastructure/include/kth/infrastructure/handlers.hppsrc/infrastructure/include/kth/infrastructure/log/statsd_sink.hppsrc/infrastructure/include/kth/infrastructure/math/hash.hppsrc/infrastructure/include/kth/infrastructure/message/network_address.hppsrc/infrastructure/include/kth/infrastructure/utility/asio_helper.hppsrc/infrastructure/include/kth/infrastructure/utility/async_channel.hppsrc/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hppsrc/infrastructure/include/kth/infrastructure/utility/broadcaster.hppsrc/infrastructure/include/kth/infrastructure/utility/byte_reader.hppsrc/infrastructure/include/kth/infrastructure/utility/coroutine_config.hppsrc/infrastructure/include/kth/infrastructure/utility/cpu_executor.hppsrc/infrastructure/include/kth/infrastructure/utility/deadline.hppsrc/infrastructure/include/kth/infrastructure/utility/delegates.hppsrc/infrastructure/include/kth/infrastructure/utility/dispatcher.hppsrc/infrastructure/include/kth/infrastructure/utility/resubscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/salted_hashers.hppsrc/infrastructure/include/kth/infrastructure/utility/sequencer.hppsrc/infrastructure/include/kth/infrastructure/utility/stats.hppsrc/infrastructure/include/kth/infrastructure/utility/subscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/synchronizer.hppsrc/infrastructure/include/kth/infrastructure/utility/system_memory.hppsrc/infrastructure/include/kth/infrastructure/utility/task_group.hppsrc/infrastructure/include/kth/infrastructure/utility/threadpool.hppsrc/infrastructure/include/kth/infrastructure/utility/units.hppsrc/infrastructure/include/kth/infrastructure/utility/work.hppsrc/infrastructure/src/config/endpoint.cppsrc/infrastructure/src/log/sink.cppsrc/infrastructure/src/log/statsd_sink.cppsrc/infrastructure/src/message/network_address.cppsrc/infrastructure/src/utility/deadline.cppsrc/infrastructure/src/utility/dispatcher.cppsrc/infrastructure/src/utility/sequencer.cppsrc/infrastructure/src/utility/socket.cppsrc/infrastructure/src/utility/stats.cppsrc/infrastructure/src/utility/system_memory.cppsrc/infrastructure/src/utility/threadpool.cppsrc/infrastructure/src/utility/work.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.h
💤 Files with no reviewable changes (2)
- src/infrastructure/include/kth/infrastructure/log/statsd_sink.hpp
- src/infrastructure/include/kth/infrastructure/config/endpoint.hpp
✅ Files skipped from review due to trivial changes (1)
- src/infrastructure/include/kth/infrastructure/config/authority.hpp
🚧 Files skipped from review as they are similar to previous changes (3)
- src/infrastructure/include/kth/infrastructure/error.hpp
- src/infrastructure/include/kth/infrastructure/message/network_address.hpp
- src/infrastructure/include/kth/infrastructure/math/hash.hpp
src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp
Show resolved
Hide resolved
3b4385d to
b5fbccf
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
src/infrastructure/include/kth/infrastructure/display_mode.hpp (1)
39-50: Avoid silently coercing invalid values tolog.Line 50 defaults unknown input to
display_mode::log, which can hide CLI/config typos. Prefer a strict parser (std::optional<display_mode>) and apply fallback at the call site with warning/error context.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp` around lines 39 - 50, The parser parse_display_mode currently returns display_mode::log for unknown inputs which silently coerces invalid values; change parse_display_mode to return std::optional<display_mode> (return std::nullopt for unknown strings) and update callers to apply the fallback or emit warnings/errors in context; keep the case-insensitive comparison logic and the mapping for "tui","log","daemon" but remove the unconditional defaulting inside parse_display_mode so callers of parse_display_mode can decide the fallback behavior.src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp (1)
12-17: Add<utility>to make this header self-contained.The header uses
std::move(lines 43, 51, 68, 76) andstd::forward(line 97) but does not directly include<utility>. Add it to avoid fragility from transitive includes in a public header.♻️ Proposed fix
`#include` <chrono> `#include` <expected> `#include` <system_error> +#include <utility>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp` around lines 12 - 17, The header awaitable_helpers.hpp relies on std::move and std::forward but doesn't include <utility>, making it fragile; add the missing include by inserting `#include` <utility> alongside the other headers at the top of awaitable_helpers.hpp so functions that use std::move (around lines noted) and std::forward compile when this header is used directly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp`:
- Around line 32-34: The current preprocessor check and the constexpr that
assign __cplusplus can false-fail on MSVC; update the compile-time standard
detection to prefer _MSVC_LANG when present. Replace the preprocessor condition
that compares __cplusplus with 202302L to use (defined(_MSVC_LANG) ? _MSVC_LANG
: __cplusplus), and similarly change the constexpr that currently stores
__cplusplus to use that same conditional expression so MSVC reports the actual
standard via _MSVC_LANG while other compilers continue to use __cplusplus.
In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp`:
- Around line 8-11: Add an explicit `#include` <cctype> to the header so calls to
std::tolower are guaranteed to be declared; locate the include block (currently
containing <algorithm>, <cstdint>, <string>, <string_view>) and add <cctype>
there to ensure portability for the uses of std::tolower in the file (references
to std::tolower around the display mode parsing logic).
---
Nitpick comments:
In `@src/infrastructure/include/kth/infrastructure/display_mode.hpp`:
- Around line 39-50: The parser parse_display_mode currently returns
display_mode::log for unknown inputs which silently coerces invalid values;
change parse_display_mode to return std::optional<display_mode> (return
std::nullopt for unknown strings) and update callers to apply the fallback or
emit warnings/errors in context; keep the case-insensitive comparison logic and
the mapping for "tui","log","daemon" but remove the unconditional defaulting
inside parse_display_mode so callers of parse_display_mode can decide the
fallback behavior.
In `@src/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hpp`:
- Around line 12-17: The header awaitable_helpers.hpp relies on std::move and
std::forward but doesn't include <utility>, making it fragile; add the missing
include by inserting `#include` <utility> alongside the other headers at the top
of awaitable_helpers.hpp so functions that use std::move (around lines noted)
and std::forward compile when this header is used directly.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 864d6685-a10c-45b7-8788-b59d60c05c6e
⛔ Files ignored due to path filters (255)
.coderabbit.yamlis excluded by none and included by noneCMakeLists.txtis excluded by!**/CMakeLists.txtand included by noneconan.lockis excluded by!**/*.lock,!conan.lockand included by noneconanfile.pyis excluded by!**/conanfile.pyand included by nonedata/utxo_bloom.datis excluded by!**/*.dat,!data/**,!**/*.datand included by nonesrc/CMakeLists.txtis excluded by!**/CMakeLists.txtand included by nonesrc/blockchain/CMakeLists.txtis excluded by!src/blockchain/**,!**/CMakeLists.txtand included by nonesrc/blockchain/conanfile.pyis excluded by!src/blockchain/**,!**/conanfile.pyand included by nonesrc/blockchain/include/kth/blockchain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/header_index.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/block_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/fast_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/interface/safe_chain.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/block_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/header_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_organizer.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/pools/transaction_pool.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_base.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_chain_state.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/populate/populate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/settings.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/utxo_builder.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_block.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_header.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/include/kth/blockchain/validate/validate_transaction.hppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/interface/block_chain.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/block_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/header_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_organizer.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/pools/transaction_pool.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_base.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_chain_state.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/populate/populate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/settings.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/utxo_bloom_embed.S.inis excluded by!src/blockchain/**,!**/*.S.inand included by nonesrc/blockchain/src/utxo_builder.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_block.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_header.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/src/validate/validate_transaction.cppis excluded by!src/blockchain/**and included by nonesrc/blockchain/test/header_index.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/blockchain/test/header_organizer.cppis excluded by!src/blockchain/**,!**/test/**and included by nonesrc/c-api/conanfile.pyis excluded by!src/c-api/**,!**/conanfile.pyand included by nonesrc/c-api/console/main.cppis excluded by!src/c-api/**and included by nonesrc/c-api/console/print_headers.cppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/chain/chain_other.his excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/conversions.hppis excluded by!src/c-api/**and included by nonesrc/c-api/include/kth/capi/primitives.his excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_async.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_other.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/chain_sync.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/chain/mempool_transaction_list.cppis excluded by!src/c-api/**and included by nonesrc/c-api/src/node.cppis excluded by!src/c-api/**and included by nonesrc/consensus/conanfile.pyis excluded by!src/consensus/**,!**/conanfile.pyand included by nonesrc/consensus/src/bch-rules/coins.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/primitives/token.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/script/vm_limits.his excluded by!src/consensus/**and included by nonesrc/consensus/src/bch-rules/util/strencodings.his excluded by!src/consensus/**and included by nonesrc/consensus/src/btc-rules/script/interpreter.cppis excluded by!src/consensus/**and included by nonesrc/database/CMakeLists.txtis excluded by!src/database/**,!**/CMakeLists.txtand included by nonesrc/database/conanfile.pyis excluded by!src/database/**,!**/conanfile.pyand included by nonesrc/database/include/kth/database/block_store.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/block_undo.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/data_base.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/block_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/header_abla_entry.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/header_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/history_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/internal_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/internal_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/property_code.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/databases/reorg_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/spend_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/transaction_unconfirmed_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxo_database.ippis excluded by!src/database/**,!**/*.ippand included by nonesrc/database/include/kth/database/databases/utxoz_database.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_pos.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/flat_file_seq.hppis excluded by!src/database/**and included by nonesrc/database/include/kth/database/header_index.hppis excluded by!src/database/**and included by nonesrc/database/src/block_store.cppis excluded by!src/database/**and included by nonesrc/database/src/block_undo.cppis excluded by!src/database/**and included by nonesrc/database/src/data_base.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/header_abla_entry.cppis excluded by!src/database/**and included by nonesrc/database/src/databases/utxoz_database.cppis excluded by!src/database/**and included by nonesrc/database/src/flat_file_seq.cppis excluded by!src/database/**and included by nonesrc/database/src/header_index.cppis excluded by!src/database/**and included by nonesrc/database/src/settings.cppis excluded by!src/database/**and included by nonesrc/database/test/data_base.cppis excluded by!src/database/**,!**/test/**and included by nonesrc/database/tools/utxoz_fingerprint/utxoz_fingerprint.cppis excluded by!src/database/**,!**/tools/**and included by nonesrc/domain/CMakeLists.txtis excluded by!src/domain/**,!**/CMakeLists.txtand included by nonesrc/domain/bench/hash/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/bench/merkle/benchmarks.cppis excluded by!src/domain/**and included by nonesrc/domain/conanfile.pyis excluded by!src/domain/**,!**/conanfile.pyand included by nonesrc/domain/include/kth/domain/chain/block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/block_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/header_basis.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/chain/light_block.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/config/parser.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/constants/common.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/messages.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/send_addrv2.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/message/version.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/multi_crypto_support.hppis excluded by!src/domain/**and included by nonesrc/domain/include/kth/domain/version.hppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/block_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/header_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/light_block.cppis excluded by!src/domain/**and included by nonesrc/domain/src/chain/output_basis.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/src/message/send_addrv2.cppis excluded by!src/domain/**and included by nonesrc/domain/test/chain/light_block.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/domain/test/message/addrv2_bchn_comparison.cppis excluded by!src/domain/**,!**/test/**and included by nonesrc/infrastructure/CMakeLists.txtis excluded by!**/CMakeLists.txtand included bysrc/infrastructure/**src/infrastructure/conanfile.pyis excluded by!**/conanfile.pyand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/resubscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/include/kth/infrastructure/impl/utility/subscriber.ippis excluded by!**/*.ippand included bysrc/infrastructure/**src/infrastructure/test/task_group.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/async_channel.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/awaitable_helpers.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/coroutine_smoke_test.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/infrastructure/test/utility/threadpool.cppis excluded by!**/test/**and included bysrc/infrastructure/**src/network/CMakeLists.txtis excluded by!src/network/**,!**/CMakeLists.txtand included by nonesrc/network/conanfile.pyis excluded by!src/network/**,!**/conanfile.pyand included by nonesrc/network/include/kth/network.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/acceptor.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/banlist.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/channel.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/connector.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/ping.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/handlers/pong.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/hosts.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/message_subscriber.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/net_permissions.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/normalized_address.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/p2p_node.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_database.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_manager.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_record.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/peer_session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_address_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_events.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_ping_60001.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_reject_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_seed_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_timer.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_31402.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols/protocol_version_70002.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/protocols_coro.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/proxy.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_batch.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_inbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_manual.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_outbound.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/sessions/session_seed.hppis excluded by!src/network/**and included by nonesrc/network/include/kth/network/settings.hppis excluded by!src/network/**and included by nonesrc/network/src/acceptor.cppis excluded by!src/network/**and included by nonesrc/network/src/banlist.cppis excluded by!src/network/**and included by nonesrc/network/src/channel.cppis excluded by!src/network/**and included by nonesrc/network/src/connector.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/ping.cppis excluded by!src/network/**and included by nonesrc/network/src/handlers/pong.cppis excluded by!src/network/**and included by nonesrc/network/src/hosts.cppis excluded by!src/network/**and included by nonesrc/network/src/message_subscriber.cppis excluded by!src/network/**and included by nonesrc/network/src/net_permissions.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p.cppis excluded by!src/network/**and included by nonesrc/network/src/p2p_node.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_database.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_manager.cppis excluded by!src/network/**and included by nonesrc/network/src/peer_session.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_address_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_events.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_ping_60001.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_reject_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_seed_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_timer.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_31402.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols/protocol_version_70002.cppis excluded by!src/network/**and included by nonesrc/network/src/protocols_coro.cppis excluded by!src/network/**and included by nonesrc/network/src/proxy.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_batch.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_inbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_manual.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_outbound.cppis excluded by!src/network/**and included by nonesrc/network/src/sessions/session_seed.cppis excluded by!src/network/**and included by nonesrc/network/src/settings.cppis excluded by!src/network/**and included by nonesrc/network/test/p2p_node.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_database.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_manager.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/peer_session.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/protocols_coro.cppis excluded by!src/network/**,!**/test/**and included by nonesrc/network/test/test_helpers.hppis excluded by!src/network/**,!**/test/**and included by nonesrc/node-exe/CMakeLists.txtis excluded by!src/node-exe/**,!**/CMakeLists.txtand included by nonesrc/node-exe/conanfile.pyis excluded by!src/node-exe/**,!**/conanfile.pyand included by nonesrc/node-exe/src/main.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.cppis excluded by!src/node-exe/**and included by nonesrc/node-exe/src/tui_dashboard.hppis excluded by!src/node-exe/**and included by nonesrc/node/CMakeLists.txtis excluded by!src/node/**,!**/CMakeLists.txtand included by nonesrc/node/conanfile.pyis excluded by!src/node/**,!**/conanfile.pyand included by nonesrc/node/data/bn.cfgis excluded by!src/node/**and included by nonesrc/node/include/kth/node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/executor/executor.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/full_node.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_double_spend_proof_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_in.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/protocols/protocol_transaction_out.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_block_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_header_sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_inbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_manual.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sessions/session_outbound.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/settings.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/block_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/chunk_coordinator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/header_tasks.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/messages.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/sync/orchestrator.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/user_agent.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservation.hppis excluded by!src/node/**and included by nonesrc/node/include/kth/node/utility/reservations.hppis excluded by!src/node/**and included by nonesrc/node/src/executor/executor.cppis excluded by!src/node/**and included by nonesrc/node/src/full_node.cppis excluded by!src/node/**and included by nonesrc/node/src/parser.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_double_spend_proof_out.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_header_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_in.cppis excluded by!src/node/**and included by nonesrc/node/src/protocols/protocol_transaction_out.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_block_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_header_sync.cppis excluded by!src/node/**and included by nonesrc/node/src/sessions/session_inbound.cppis excluded by!src/node/**and included by none
📒 Files selected for processing (45)
src/infrastructure/include/kth/infrastructure.hppsrc/infrastructure/include/kth/infrastructure/compiler_constraints.hppsrc/infrastructure/include/kth/infrastructure/config/authority.hppsrc/infrastructure/include/kth/infrastructure/config/endpoint.hppsrc/infrastructure/include/kth/infrastructure/display_mode.hppsrc/infrastructure/include/kth/infrastructure/error.hppsrc/infrastructure/include/kth/infrastructure/handlers.hppsrc/infrastructure/include/kth/infrastructure/log/statsd_sink.hppsrc/infrastructure/include/kth/infrastructure/math/hash.hppsrc/infrastructure/include/kth/infrastructure/message/network_address.hppsrc/infrastructure/include/kth/infrastructure/utility/asio_helper.hppsrc/infrastructure/include/kth/infrastructure/utility/async_channel.hppsrc/infrastructure/include/kth/infrastructure/utility/awaitable_helpers.hppsrc/infrastructure/include/kth/infrastructure/utility/broadcaster.hppsrc/infrastructure/include/kth/infrastructure/utility/byte_reader.hppsrc/infrastructure/include/kth/infrastructure/utility/coroutine_config.hppsrc/infrastructure/include/kth/infrastructure/utility/cpu_executor.hppsrc/infrastructure/include/kth/infrastructure/utility/deadline.hppsrc/infrastructure/include/kth/infrastructure/utility/delegates.hppsrc/infrastructure/include/kth/infrastructure/utility/dispatcher.hppsrc/infrastructure/include/kth/infrastructure/utility/resubscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/salted_hashers.hppsrc/infrastructure/include/kth/infrastructure/utility/sequencer.hppsrc/infrastructure/include/kth/infrastructure/utility/stats.hppsrc/infrastructure/include/kth/infrastructure/utility/subscriber.hppsrc/infrastructure/include/kth/infrastructure/utility/synchronizer.hppsrc/infrastructure/include/kth/infrastructure/utility/system_memory.hppsrc/infrastructure/include/kth/infrastructure/utility/task_group.hppsrc/infrastructure/include/kth/infrastructure/utility/threadpool.hppsrc/infrastructure/include/kth/infrastructure/utility/units.hppsrc/infrastructure/include/kth/infrastructure/utility/work.hppsrc/infrastructure/src/config/endpoint.cppsrc/infrastructure/src/log/sink.cppsrc/infrastructure/src/log/statsd_sink.cppsrc/infrastructure/src/message/network_address.cppsrc/infrastructure/src/utility/deadline.cppsrc/infrastructure/src/utility/dispatcher.cppsrc/infrastructure/src/utility/sequencer.cppsrc/infrastructure/src/utility/socket.cppsrc/infrastructure/src/utility/stats.cppsrc/infrastructure/src/utility/system_memory.cppsrc/infrastructure/src/utility/threadpool.cppsrc/infrastructure/src/utility/work.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.cppsrc/infrastructure/third-party/bitcoin-core/crypto/sha256.h
💤 Files with no reviewable changes (2)
- src/infrastructure/include/kth/infrastructure/log/statsd_sink.hpp
- src/infrastructure/include/kth/infrastructure/config/endpoint.hpp
✅ Files skipped from review due to trivial changes (1)
- src/infrastructure/include/kth/infrastructure/error.hpp
🚧 Files skipped from review as they are similar to previous changes (3)
- src/infrastructure/include/kth/infrastructure/message/network_address.hpp
- src/infrastructure/include/kth/infrastructure/math/hash.hpp
- src/infrastructure/include/kth/infrastructure/config/authority.hpp
src/infrastructure/include/kth/infrastructure/compiler_constraints.hpp
Outdated
Show resolved
Hide resolved
11d473c to
3ce6bda
Compare
Complete rewrite of the Knuth node networking and sync layers using C++23 coroutines, replacing the legacy callback-based architecture. - Coroutine migration (Phases 0-7): asio thread_pool, peer_session, peer_manager, protocol functions, p2p_node, legacy removal - CSP-based sync: orchestrator, chunk_coordinator, parallel download - Fast IBD: merkle-only validation, parallel storage, zero-copy UTXO builder - Flat file block storage (blk*.dat/rev*.dat) replacing LMDB for blocks - UTXO-Z integration with bloom filter optimization (2x speedup) - BIP155 addrv2, peer_database with reputation tracking - header_index: SoA in-memory index with skip-pointer traversal
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 3 total unresolved issues (including 2 from previous reviews).
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
| map.bits.count, map.bits.high, | ||
| map.timestamp.count, map.timestamp_retarget, configured_flags_, | ||
| parent_idx, index.get_height(parent_idx)); | ||
| } |
There was a problem hiding this comment.
Debug logging for height 32256 left in production
Low Severity
Two spdlog::warn blocks guarded by if (height == 32256) with "DEBUG" in the message are left in build_chain_state_data and accept_full. These are clearly temporary debugging statements for a specific block height that were not removed before committing. They emit warn-level log noise during normal sync for every node that processes that height.


Overview
Complete rewrite of the Knuth node networking and sync layers using C++23 coroutines, replacing the legacy callback-based architecture. This branch (
version1) is the integration branch for incremental merges towardmaster.Architecture Changes
Coroutine Migration (Phases 0–7)
asio::thread_pool,async_channel,awaitable_helpersinfrastructurepeer_sessionreplacing proxy/channel with concurrent read/write/timer loopspeer_managerreplacing pending collections (strand-based, no mutex)p2p_nodeunified networking classNetworking
task_groupnursery pattern for peer lifecycle managementpeer_supervisor: manages all peer tasks with automatic cleanuppeer_database: unified peer management with reputation tracking (replaces hosts + banlist)Sync System (CSP Pattern)
std::variantchannelsStorage
blk*.dat/rev*.datreplacing LMDB for block dataheader_index: SoA in-memory index (~137 MB for 1M+ blocks) with skip-pointer traversalPerformance
Status
Dependencies
Note
High Risk
High risk because it rewires core blockchain interfaces to coroutine-based APIs, introduces new header indexing/UTXO storage paths (including optional embedded bloom and compact mode), and changes build/dependency configuration that can affect runtime correctness and packaging.
Overview
Refactors the blockchain module away from the legacy
safe_chain/fast_chaincallback interfaces into a unifiedblock_chainAPI built around C++23asiocoroutines,std::expected, and broadcaster-based subscriptions, adding explicit support for headers-first sync and fast IBD workflows (chunk validation/storage and header organization).Adds new storage/acceleration building blocks: a
header_indexre-export, a newheader_organizer+validate_header, and a newutxo_builderwith a zero-copy/raw parsing path for UTXO-Z deltas plus optional embedded UTXO bloom and UTXO-Z compact mode controlled via new CMake/Conan options. Build and packaging are updated accordingly (new CMake options likeKTH_ASIO_STANDALONE,KTH_WITH_JEMALLOC,KTH_WITH_STATS; new Conan depsutxoz,asio,simdjson,ftxui; exports now includedata/*; and some tests/TSAN targets are restructured/guarded).Written by Cursor Bugbot for commit be8c3a5. This will update automatically on new commits. Configure here.
Summary by CodeRabbit
New Features
Chores