kernel: Remove protocol.h/netaddress.h/compat.h from kernel headers #28423

pull TheCharlatan wants to merge 7 commits into bitcoin:master from TheCharlatan:rmNetKernel changing 31 files +90 −53
  1. TheCharlatan commented at 7:58 pm on September 6, 2023: contributor

    This removes the non-consensus critical protocol.h and netaddress.h headers from the kernel headers. With this patch, they are no longer required to include in order to use the libbitcoinkernel library. This also allows for the removal of the compat.h header from the kernel headers.

    As an added future benefit it also reduces the number of of kernel headers that include the platform specific bitcoin-config.h.

    For those interested, the currently required kernel headers can be inspected visually with the sourcetrail tool by looking at the required includes of bitcoin-chainstate.cpp.


    This is part of the libbitcoinkernel project, namely its stage 1 step 3: Decouple most non-consensus headers from libbitcoinkernel.

  2. DrahtBot commented at 7:58 pm on September 6, 2023: contributor

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK stickies-v, hebasto, ajtowns, MarcoFalke
    Stale ACK theuni

    If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #bitcoin-core/gui/754 (Add BIP324 “Transport” label to peer details by hebasto)
    • #bitcoin-core/gui/747 (Open fully encrypted wallets by achow101)
    • #28331 (BIP324 integration by sipa)
    • #28248 (p2p: peer connection bug fixes, logic and logging improvements by jonatack)
    • #28142 (wallet: Allow users to create a wallet that encrypts all database records by achow101)
    • #28016 (p2p: gives seednode priority over dnsseed if both are provided by sr-gi)
    • #27260 (Enhanced error messages for invalid network prefix during address parsing. by russeree)
    • #26621 (refactor: Continue moving application data from CNode to Peer by dergoegge)
    • #26114 (net: Make AddrFetch connections to fixed seeds by mzumsande)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

  3. DrahtBot added the label Validation on Sep 6, 2023
  4. TheCharlatan marked this as ready for review on Sep 6, 2023
  5. in src/messageheader.h:29 in 8e2f988074 outdated
    21+    static constexpr size_t MESSAGE_SIZE_SIZE = 4;
    22+    static constexpr size_t CHECKSUM_SIZE = 4;
    23+    static constexpr size_t MESSAGE_SIZE_OFFSET = MESSAGE_START_SIZE + COMMAND_SIZE;
    24+    static constexpr size_t CHECKSUM_OFFSET = MESSAGE_SIZE_OFFSET + MESSAGE_SIZE_SIZE;
    25+    static constexpr size_t HEADER_SIZE = MESSAGE_START_SIZE + COMMAND_SIZE + MESSAGE_SIZE_SIZE + CHECKSUM_SIZE;
    26+    typedef unsigned char MessageStartChars[MESSAGE_START_SIZE];
    


    ajtowns commented at 11:14 pm on September 6, 2023:
    Would it make more sense to pull MessageStartChars alone into kernel/chainparams.h, and just add a static_assert(sizeof(MessageStartChars) == MESSAGE_START_SIZE); here?

    TheCharlatan commented at 5:22 am on September 7, 2023:
    Yes, that works too and I went through such an iteration. I thought adding such logic might be a bit less desirable though than just straight up moving these simple definitions and keeping the lines that are actually changed to ~0, especially since the kernel code uses definitions to both MessageStartChars and its size.

    ajtowns commented at 6:30 pm on September 7, 2023:
    I guess I look at it more as “chainparams provides a 4 byte magic number” and “other things (p2p, wallet, block store) use those magic numbers to help stop you using a different chain than you intended to”. That seems like a sensible thing for chainparams to do; but it’s just that one line, all the other stuff in this header is p2p protocol things which don’t seem interesting for the kernel?

    TheCharlatan commented at 7:05 pm on September 7, 2023:
    I don’t mind either way, this is a simple change. To be clear, is your intention: Move MESSAGE_START_SIZE and the MessageStartChars to kernel/chainparams.h, then include kernel/chainparams.h as needed?

    theuni commented at 7:41 pm on September 7, 2023:

    I believe the two approaches work just fine together? https://github.com/theuni/bitcoin/commit/23b992e661650e87f572895ee4bad0e6e5e5196a

    Edit: If you take that, please use less stupid names than I did :p


    ajtowns commented at 7:43 pm on September 7, 2023:
    What @theuni said.

    TheCharlatan commented at 8:42 pm on September 7, 2023:

    If you take that, please use less stupid names than I did :p

    Pretty sure I won’t :P

  6. TheCharlatan force-pushed on Sep 7, 2023
  7. bitcoin deleted a comment on Sep 7, 2023
  8. TheCharlatan force-pushed on Sep 7, 2023
  9. DrahtBot added the label CI failed on Sep 7, 2023
  10. DrahtBot removed the label CI failed on Sep 7, 2023
  11. TheCharlatan renamed this:
    kernel: Remove protocol.h/netaddress.h from kernel headers
    kernel: Remove protocol.h/netaddress.h/compat.h from kernel headers
    on Sep 7, 2023
  12. theuni commented at 4:11 pm on September 7, 2023: member

    This removes the non-consensus critical protocol.h and netaddress.h headers from the kernel headers.

    Very nice. Concept ACK.

  13. TheCharlatan force-pushed on Sep 7, 2023
  14. TheCharlatan commented at 9:18 pm on September 7, 2023: contributor

    Updated d4cc87f9624f38e90698f320f427204d504e4d36 -> 978baafe99bdd699940e305cd5501b4e21409ca3 (rmNetKernel_0 -> rmNetKernel_1, compare)

    • Addressed @ajtowns’s comment, moving only the required typedef and constant to the kernel includes now.
    • Reverted the creation of messageheader.h. With the current patch I am not sure what utility this would still provide.
  15. TheCharlatan force-pushed on Sep 7, 2023
  16. theuni approved
  17. theuni commented at 8:00 pm on September 8, 2023: member

    ACK 978baafe99bdd699940e305cd5501b4e21409ca3

    I didn’t mind the additional messageheader.h split before, but without it this way is fine too.

    The GetDefaultPort()’s are awkward in their new home, but I don’t have a better suggestion.

  18. in src/netaddress.cpp:24 in 978baafe99 outdated
    20@@ -20,6 +21,17 @@
    21 #include <iterator>
    22 #include <tuple>
    23 
    24+uint16_t GetDefaultPort(const CChainParams& params, Network net)
    


    ajtowns commented at 3:56 am on September 9, 2023:
    I think both these would make more sense in CConnman which is the only place that uses them; particularly if we gave it its own CChainParams& m_params to drop all the Params() calls.

    TheCharlatan commented at 10:36 am on September 9, 2023:
    Thanks, that makes more sense, yes.
  19. ajtowns commented at 4:04 am on September 9, 2023: contributor
    ACK 978baafe99bdd699940e305cd5501b4e21409ca3
  20. TheCharlatan force-pushed on Sep 9, 2023
  21. TheCharlatan commented at 8:11 am on September 9, 2023: contributor

    Updated 978baafe99bdd699940e305cd5501b4e21409ca3 -> 197de6a98657bf1279ac22aa38cde8dc79129088 (rmNetKernel_1 -> rmNetKernel_2, compare)

    • Addressed @ajtowns’s comment, moving GetDefaultPort functions to CConnman instead.
  22. ajtowns commented at 5:21 am on September 10, 2023: contributor
    ACK 197de6a98657bf1279ac22aa38cde8dc79129088
  23. DrahtBot requested review from theuni on Sep 10, 2023
  24. in src/validation.cpp:4536 in 197de6a986 outdated
    4532@@ -4532,11 +4533,11 @@ void ChainstateManager::LoadExternalBlockFile(
    4533             unsigned int nSize = 0;
    4534             try {
    4535                 // locate a header
    4536-                unsigned char buf[CMessageHeader::MESSAGE_START_SIZE];
    4537+                unsigned char buf[MessageStartMagic::MESSAGE_START_SIZE];
    


    stickies-v commented at 10:16 am on September 11, 2023:

    nit: use the typedef?

    0                MessageStartMagic::MessageStartChars buf;
    
  25. theuni approved
  26. theuni commented at 1:42 pm on September 11, 2023: member

    ACK 197de6a98657bf1279ac22aa38cde8dc79129088.

    I would’ve preferred to see the Params change in CConnman split into a separate commit, as the implications of that aren’t 100% clear to me (Mostly: can we trickle m_params down anywhere else now?).

    But it looks correct and is an improvement on top of the original PR.

  27. in src/kernel/messagestartmagic.h:13 in f77f73e91d outdated
     8+#include <cstddef>
     9+
    10+namespace MessageStartMagic {
    11+static constexpr size_t MESSAGE_START_SIZE = 4;
    12+typedef unsigned char MessageStartChars[MESSAGE_START_SIZE];
    13+} // namespace MessageStartMagic
    


    maflcko commented at 3:12 pm on September 11, 2023:

    nit: Seems a bit verbose, both here and in code that uses it. Shorter would be to just use using MessageStartMagic = std::array<uint8_t, 4>;.

    This would allow to replace MessageStartMagic::MessageStartChars with just MessageStartMagic and MessageStartMagic::MESSAGE_START_SIZE with just std::tuple_size_v<MessageStartMagic> (or a call to obj.size(), if an object exists)?


    TheCharlatan commented at 9:17 am on September 12, 2023:
    This looks like a larger refactor to me now that I have implemented this suggestion. Is there an easy way to make std::array<uint8_t, 4> behave with our serialization?

    maflcko commented at 9:24 am on September 12, 2023:
    You can cherry-pick something like faf06e908455244a4a32da6caa679bae5a062691 (or just squash it)
  28. maflcko commented at 3:15 pm on September 11, 2023: member
    lgtm, left a nit
  29. in src/util/time.h:9 in 197de6a986 outdated
    5@@ -6,8 +6,6 @@
    6 #ifndef BITCOIN_UTIL_TIME_H
    7 #define BITCOIN_UTIL_TIME_H
    8 
    9-#include <compat/compat.h>
    


    maflcko commented at 3:22 pm on September 11, 2023:

    According to iwyu:

    0util/time.h should add these lines:
    1#include <sys/time.h>  // for timeval
    2#include <ctime>       // for time_t
    

    Seems the only reason this compiles is because those are exported from chrono, which seems fragile to rely on, no?


    theuni commented at 3:27 pm on September 11, 2023:

    Ah yes, nice catch. MillisToTimeval() is the problem here. Ideally that should be moved away as timeval isn’t api safe.

    Edit: Not the highest prio though, as it’s a struct and the forward-declare is fine.


    maflcko commented at 3:27 pm on September 11, 2023:
    Ah nvm. std::time_t is part of the public interface of chrono, so the include isn’t needed. And the timeval type is fwd-declared, so this seems like a bug in iwyu.
  30. stickies-v approved
  31. stickies-v commented at 4:35 pm on September 11, 2023: contributor

    ACK 197de6a98657bf1279ac22aa38cde8dc79129088

    Not super happy about the GetDefaultPort situation, but I can’t think of a better solution in this PR either.

  32. TheCharlatan commented at 7:55 pm on September 11, 2023: contributor
    Thank you for the reviews, will try to address the remaining nits.
  33. hebasto commented at 10:10 am on September 12, 2023: member
    Concept ACK.
  34. hebasto approved
  35. hebasto commented at 10:52 am on September 12, 2023: member
    Approach ACK 197de6a98657bf1279ac22aa38cde8dc79129088.
  36. TheCharlatan force-pushed on Sep 12, 2023
  37. TheCharlatan commented at 1:29 pm on September 12, 2023: contributor

    Updated 197de6a98657bf1279ac22aa38cde8dc79129088 -> 4ce0ead928965971d082bfbe2a991703f2f5c827 (rmNetKernel_2 -> rmNetKernel_3, compare)

    • Addressed @MarcoFalke’s comment, adding a commit for serializing the array as well as a commit for migrating from the raw array to the std::array type.
    • Addressed @theuni’s comment, splitting up the commit into the m_params member and moving the GetDefaultPort functions.
    • Addressed @stickies-v’s comment, using the MessageStartMagic type directly.
  38. TheCharlatan force-pushed on Sep 12, 2023
  39. TheCharlatan force-pushed on Sep 12, 2023
  40. in src/protocol.h:30 in 4ce0ead928 outdated
    26@@ -26,14 +27,14 @@
    27 class CMessageHeader
    28 {
    29 public:
    30-    static constexpr size_t MESSAGE_START_SIZE = 4;
    31+    using MessageStartChars = MessageStartMagic;
    


    stickies-v commented at 4:03 pm on September 12, 2023:
    nit: I would be okay with dropping this and renaming the 6 places where we use MessageStartChars
  41. in src/serialize.h:288 in 4ce0ead928 outdated
    202@@ -203,6 +203,7 @@ template<typename Stream> inline void Serialize(Stream& s, int64_t a ) { ser_wri
    203 template<typename Stream> inline void Serialize(Stream& s, uint64_t a) { ser_writedata64(s, a); }
    204 template<typename Stream, int N> inline void Serialize(Stream& s, const char (&a)[N]) { s.write(MakeByteSpan(a)); }
    205 template<typename Stream, int N> inline void Serialize(Stream& s, const unsigned char (&a)[N]) { s.write(MakeByteSpan(a)); }
    206+template <typename Stream, typename B, std::size_t N> void Serialize(Stream& s, const std::array<B, N>& a) { (void)/* force byte-type */UCharCast(a.data()); s.write(MakeByteSpan(a)); }
    


    stickies-v commented at 4:13 pm on September 12, 2023:
    nit: ser, that’s a long line

    TheCharlatan commented at 8:25 pm on September 12, 2023:
    Seemed awkward to format this line, but leave the others. I think I’ll leave this as is.

    ajtowns commented at 11:34 pm on September 13, 2023:
    Might be clearer as { s.write(AsBytes(UCharSpanCast(Span(a)))); } ? I think that has all the same restrictions as you get with the dummy UCharCast.

    maflcko commented at 7:42 am on September 14, 2023:
    Sure, as long as you keep the comment. Otherwise I fear that someone will remove the UChar(Span)Cast because “it isn’t needed” and “everything still compiles”.

    ajtowns commented at 7:51 am on September 14, 2023:
    Yeah. Might be another place where C++20 concepts would be good – concept BytesLike = requires (B& b) { UCharCast(b) } and template<typename Stream, BytesLike B, ..> or so.

    maflcko commented at 7:56 am on September 14, 2023:
    Yes, should be possible, see #27927 (review), but IIRC it also changes the compiler error message
  42. in src/wallet/db.cpp:139 in 4ce0ead928 outdated
    135@@ -136,7 +136,7 @@ bool IsSQLiteFile(const fs::path& path)
    136     }
    137 
    138     // Check the application id matches our network magic
    139-    return memcmp(Params().MessageStart(), app_id, 4) == 0;
    140+    return memcmp(Span{Params().MessageStart()}.data(), app_id, 4) == 0;
    


    stickies-v commented at 4:28 pm on September 12, 2023:

    nit: missing include, but do we need span? (+ in sqlite.cpp)

    0    return memcmp(Params().MessageStart().data(), app_id, 4) == 0;
    
  43. DrahtBot requested review from theuni on Sep 12, 2023
  44. DrahtBot requested review from ajtowns on Sep 12, 2023
  45. stickies-v approved
  46. stickies-v commented at 4:43 pm on September 12, 2023: contributor
    re-ACK 4ce0ead928965971d082bfbe2a991703f2f5c827
  47. TheCharlatan force-pushed on Sep 12, 2023
  48. TheCharlatan commented at 8:31 pm on September 12, 2023: contributor

    Updated 4ce0ead928965971d082bfbe2a991703f2f5c827 -> d4170ca919c7f32735774d6f71ad74e04e5fcb25 (rmNetKernel_3 -> rmNetKernel_4, compare)

    • Addressed @stickies-v’s comment, but took another approach by reverting back to the original name. This should keep things consistent and churn low.
    • Addressed @stickies-v’s comment, removing useless Span wrapping. I had the impression this was some minimal required sugar to get msvc to accept the type.
  49. [refactor] Allow std::array<std::byte, N> in serialize.h
    This is already possible for C-style arrays, so allow it for C++11
    std::array as well.
    37e2b01113
  50. DrahtBot added the label CI failed on Sep 12, 2023
  51. [refactor] Define MessageStartChars as std::array 9be330b654
  52. kernel: Move MessageStartChars to its own file
    The protocol.h file contains many non-consensus related definitions and
    should thus not be part of the libbitcoinkernel. This commit makes
    protocol.h no longer a required include for users of the
    libbitcoinkernel.
    
    This commit is part of the libbitcoinkernel project, namely its stage 1
    step 3: Decouple most non-consensus headers from libbitcoinkernel.
    
    Co-Authored-By: Cory Fields <cory-nospam-@coryfields.com>
    534b314a74
  53. [refactor] Add missing includes for next commit f0d1d8b35c
  54. [refactor] Add CChainParams member to CConnman
    This is done in preparation to the next commit, but has the nice
    effect of removing one further data structure relying on the global
    `Params()`.
    2b08c55f01
  55. [refactor] Remove netaddress.h from kernel headers
    Move functions requiring the netaddress.h include out of
    libbitcoinkernel source files.
    
    The netaddress.h file contains many non-consensus related definitions
    and should thus not be part of the libbitcoinkernel. This commit makes
    netaddress.h no longer a required include for users of the
    libbitcoinkernel.
    
    This commit is part of the libbitcoinkernel project, namely its stage 1
    step 3: Decouple most non-consensus headers from libbitcoinkernel.
    36193af47c
  56. [refactor] Remove compat.h from kernel headers
    This commit makes compat.h no longer a required include for users of the
    libbitcoinkernel. Including compat.h imports a bunch of
    platform-specific definitions.
    
    This commit is part of the libbitcoinkernel project, namely its stage 1
    step 3: Decouple most non-consensus headers from libbitcoinkernel.
    d506765199
  57. TheCharlatan force-pushed on Sep 12, 2023
  58. TheCharlatan commented at 8:57 pm on September 12, 2023: contributor

    Rebased d4170ca919c7f32735774d6f71ad74e04e5fcb25 -> d5067651991f3e6daf456ba13c7036ddc4545352 (rmNetKernel_4 -> rmNetKernel_5, compare)

    • Fixed silent merge conflict with #28196
  59. DrahtBot removed the label CI failed on Sep 12, 2023
  60. stickies-v commented at 0:41 am on September 13, 2023: contributor
    re-ACK d506765
  61. in src/serialize.h:305 in d506765199
    301@@ -301,6 +302,7 @@ template<typename Stream> inline void Unserialize(Stream& s, int64_t& a ) { a =
    302 template<typename Stream> inline void Unserialize(Stream& s, uint64_t& a) { a = ser_readdata64(s); }
    303 template<typename Stream, int N> inline void Unserialize(Stream& s, char (&a)[N]) { s.read(MakeWritableByteSpan(a)); }
    304 template<typename Stream, int N> inline void Unserialize(Stream& s, unsigned char (&a)[N]) { s.read(MakeWritableByteSpan(a)); }
    305+template <typename Stream, typename B, std::size_t N> void Unserialize(Stream& s, std::array<B, N>& a) { (void)/* force byte-type */UCharCast(a.data()); s.read(MakeWritableByteSpan(a)); }
    


    hebasto commented at 2:23 pm on September 13, 2023:

    37e2b011136ca1cf00dfb9e575d12f0d035a6a2c

    Add std::array objects to serialize_tests.cpp?


    TheCharlatan commented at 8:57 pm on September 13, 2023:

    Would this be enough for you? Can otherwise do it in a follow-up.

    0diff --git a/src/test/serialize_tests.cpp b/src/test/serialize_tests.cpp
    1index 2f2bb6698c..28d276076e 100644
    2--- a/src/test/serialize_tests.cpp
    3+++ b/src/test/serialize_tests.cpp
    4@@ -87,2 +87,4 @@ BOOST_AUTO_TEST_CASE(sizes)
    5     BOOST_CHECK_EQUAL(GetSerializeSize(bool(0), 0), 1U);
    6+    BOOST_CHECK_EQUAL(GetSerializeSize(std::array<uint8_t, 1>{0}, 0), 1U);
    7+    BOOST_CHECK_EQUAL(GetSerializeSize(std::array<uint8_t, 2>{0, 0}, 0), 2U);
    8 }
    

    hebasto commented at 10:34 pm on September 13, 2023:
    Sorry, I had to be clear in my initial comment that it was a suggestion for a follow-up.
  62. in src/kernel/messagestartchars.h:11 in d506765199
     6+#define BITCOIN_KERNEL_MESSAGESTARTCHARS_H
     7+
     8+#include <array>
     9+#include <cstdint>
    10+
    11+using MessageStartChars = std::array<uint8_t, 4>;
    


    hebasto commented at 2:27 pm on September 13, 2023:
    Why not std::byte?

    TheCharlatan commented at 7:33 pm on September 13, 2023:
    I didn’t want to change this data type, since I am not familiar enough with all its users to say what side effects this may have. Also I think unsigned char would convey the meaning of the type better than std::byte, given that we do use it for string representations.

    theuni commented at 7:37 pm on September 13, 2023:

    Agreed, this PR has crept enough already :)

    (Though imo std::byte makes sense as a follow-up, considering this will likely end up exposed as part of some api)

    Edit: IIRC the magic numbers were intentionally chosen to as much as possible not look like typical strings.


    ajtowns commented at 10:44 pm on September 13, 2023:
    We already do maths on this in a sense, in that we convert it to an int32_t for the app_id in wallet/sqlite.cpp. Not seeing what the benefit in switching to std::byte here would be.
  63. hebasto approved
  64. hebasto commented at 2:36 pm on September 13, 2023: member
    ACK d5067651991f3e6daf456ba13c7036ddc4545352.
  65. in src/protocol.h:29 in d506765199
    27@@ -26,14 +28,12 @@
    28 class CMessageHeader
    29 {
    30 public:
    31-    static constexpr size_t MESSAGE_START_SIZE = 4;
    


    ajtowns commented at 11:21 pm on September 13, 2023:
    Defining this as std::tuple_size_v<MessageStartChars> seems like it would’ve touched fewer lines
  66. ajtowns commented at 11:38 pm on September 13, 2023: contributor
    utACK d5067651991f3e6daf456ba13c7036ddc4545352
  67. in src/net.cpp:733 in 9be330b654 outdated
    729@@ -730,7 +730,7 @@ V1Transport::V1Transport(const NodeId node_id, int nTypeIn, int nVersionIn) noex
    730     m_node_id(node_id), hdrbuf(nTypeIn, nVersionIn), vRecv(nTypeIn, nVersionIn)
    731 {
    732     assert(std::size(Params().MessageStart()) == std::size(m_magic_bytes));
    733-    std::copy(std::begin(Params().MessageStart()), std::end(Params().MessageStart()), m_magic_bytes);
    734+    m_magic_bytes = Params().MessageStart();
    


    maflcko commented at 9:07 am on September 14, 2023:
    nit in 9be330b654cfbd792620295f3867f592059d6a7a: Not sure if it compiles, but could use an constructor initializer for this?
  68. in src/protocol.cpp:95 in 9be330b654 outdated
    91@@ -92,7 +92,7 @@ const static std::vector<std::string> g_all_net_message_types{
    92 
    93 CMessageHeader::CMessageHeader(const MessageStartChars& pchMessageStartIn, const char* pszCommand, unsigned int nMessageSizeIn)
    94 {
    95-    memcpy(pchMessageStart, pchMessageStartIn, MESSAGE_START_SIZE);
    96+    pchMessageStart = pchMessageStartIn;
    


    maflcko commented at 9:09 am on September 14, 2023:
    same?

    maflcko commented at 9:11 am on September 14, 2023:
    This would allow to make it const, I guess. Which makes sense to do, because it is public. But that seems unrelated and better put into a follow-up.
  69. in src/kernel/chainparams.h:10 in 534b314a74 outdated
     6@@ -7,9 +7,9 @@
     7 #define BITCOIN_KERNEL_CHAINPARAMS_H
     8 
     9 #include <consensus/params.h>
    10+#include <kernel/messagestartchars.h>
    


    maflcko commented at 9:22 am on September 14, 2023:

    iwyu nit in 534b314a7401d44f51aabd4565f97be9ee411740: Can probably export those two and chaintype.h ?

    This would allow dropping the include from stuff like blockstorage.cpp and validation.cpp again, because that already includes chainparams.

  70. maflcko approved
  71. maflcko commented at 9:28 am on September 14, 2023: member

    left some style nits, better to be left as-is for a follow-up

    lgtm ACK d5067651991f3e6daf456ba13c7036ddc4545352 🍛

    Signature:

    0untrusted comment: signature from minisign secret key on empty file; verify via: minisign -Vm "${path_to_any_empty_file}" -P RWTRmVTMeKV5noAMqVlsMugDDCyyTSbA3Re5AkUrhvLVln0tSaFWglOw -x "${path_to_this_whole_four_line_signature_blob}"
    1RUTRmVTMeKV5npGrKx1nqXCw5zeVHdtdYURB/KlyA/LMFgpNCs+SkW9a8N95d+U4AP1RJMi+krxU1A3Yux4bpwZNLvVBKy0wLgM=
    2trusted comment: lgtm ACK d5067651991f3e6daf456ba13c7036ddc4545352 🍛
    3lStXnLnO5f5mgzKS9vTXRcRE1E6bMezm8Whu8+/ejq9XWm3C/d0zha2XRO2Zh+Qup7wt0W56hpPWA2AteHA/CQ==
    
  72. fanquake commented at 9:44 am on September 14, 2023: member
    Going to merge this shortly. The 324 integration PR will have to be rebased, but it looks like that will be pushed to again in any case (to address comments). The comments left here can be addressed in a followup PR.
  73. fanquake merged this on Sep 14, 2023
  74. fanquake closed this on Sep 14, 2023

  75. TheCharlatan commented at 7:56 pm on September 14, 2023: contributor
    Added the following comments to the kernel project tracking issue TODOs: #28423 (review) #28423 (review) #28423 (review) #28423 (review) #28423 (review)
  76. Frank-GER referenced this in commit a202eda9b4 on Sep 19, 2023
  77. fanquake referenced this in commit 8992a34ee4 on Nov 14, 2023
  78. bitcoin locked this on Sep 13, 2024

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-11-21 09:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me