depends: fix multiprocess build on OpenBSD (apply capnp patch, correct SHA256SUM command) #32690

pull theStack wants to merge 2 commits into bitcoin:master from theStack:202506-depends-fix_openbsd_multiprocess_build changing 5 files +151 −2
  1. theStack commented at 12:21 AM on June 6, 2025: contributor

    This PR fixes the multiprocess depends build for OpenBSD by applying upstream patch https://github.com/capnproto/capnproto/pull/2308 and switching the SHA256SUM command to output hash sums in the expected format (the default is BSD format [1], but we need GNU format [2], see commit message for details). Note that the hashing issue is only prevailing for packages defining the $(package)_local_dir variable (introduced in 5d105fb8c3ffa39c3e716c3147ee74795b129113, part of #31741), where the following line of the fetch_local_dir_sha256 function leads to the wrong output: https://github.com/bitcoin/bitcoin/blob/ae024137bda9fe189f4e7ccf26dbaffd44cbbeb6/depends/funcs.mk#L57

    The first commit can be replaced with a simple capnp version bump once this is available in a release.

    Tested on OpenBSD 7.7 (x86_64) via

    $ gmake -C depends MULTIPROCESS=1 NO_BOOST=1 NO_LIBEVENT=1 NO_QT=1 NO_QR=1 NO_WALLET=1 NO_ZMQ=1 NO_USDT=1
    

    [1] example output: SHA256 (/home/thestack/.vimrc) = 6ba69d100e8c5ca0488ded6293d4e5f740a6a5d5ace96cbcf0599c18d27389e4 [2] example output: 6ba69d100e8c5ca0488ded6293d4e5f740a6a5d5ace96cbcf0599c18d27389e4 /home/thestack/.vimrc

  2. depends: add patch to fix capnp build on OpenBSD
    see https://github.com/capnproto/capnproto/pull/2308
    2d938720bd
  3. depends: fix SHA256SUM command on OpenBSD (use GNU mode output)
    On OpenBSD, the `sha256` command by default outputs hashsums on files in
    "BSD" mode, looking like this:
    
    $ sha256 ~/.vimrc
    SHA256 (/home/thestack/.vimrc) = 6ba69d100e8c5ca0488ded6293d4e5f740a6a5d5ace96cbcf0599c18d27389e4
    
    This is not compatible with our depends commands, which expect the
    hashes to be on the first column (to be extracted via `cut -d" " -f1`).
    Fix this by switching to GNU mode output, looking like this:
    
    $ sha256 -r ~/.vimrc
    6ba69d100e8c5ca0488ded6293d4e5f740a6a5d5ace96cbcf0599c18d27389e4 /home/thestack/.vimrc
    
    Without this change, the multiprocess depends build fails with the following output:
    
    $ gmake -C depends MULTIPROCESS=1 NO_BOOST=1 NO_LIBEVENT=1 NO_QT=1 NO_QR=1 NO_WALLET=1 NO_ZMQ=1 NO_USDT=1
    [ ..... ]
    Extracting native_libmultiprocess...
    sha256: /home/thestack/bitcoin/depends/work/build/x86_64-unknown-openbsd7.7/native_libmultiprocess/-2bc902f4693/.src-ipc-libmultiprocess.tar.hash: no properly formatted checksum lines found
    gmake: *** [funcs.mk:342: /home/thestack/bitcoin/depends/work/build/x86_64-unknown-openbsd7.7/native_libmultiprocess/-2bc902f4693/.stamp_extracted] Error 1
    8713e8060d
  4. DrahtBot commented at 12:22 AM on June 6, 2025: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

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

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/32690.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK Sjors, hebasto, fanquake

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

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

    LLM Linter (✨ experimental)

    Possible typos and grammar issues:

    • may also solves -> may also solve [correct verb form]

    <sup>drahtbot_id_4_m</sup>

  5. DrahtBot added the label Build system on Jun 6, 2025
  6. hebasto commented at 8:13 AM on June 6, 2025: member

    Concept ACK 8713e8060d504f561fed705b4aa5af7b96c36e75.

    https://github.com/hebasto/bitcoin-core-nightly/actions/runs/15485455235/job/43599018182 looks good.

  7. hebasto commented at 8:25 AM on June 6, 2025: member

    Why 8713e8060d504f561fed705b4aa5af7b96c36e75 is necessary for libmultiprocess, but not for other packages?

  8. Sjors commented at 9:04 AM on June 6, 2025: member

    I tested this on top of #31802 on a VM running OpenBSD 7.7 (dropping NO_IPC for OpenBSB).

    Without the patch I get a bunch of errors like:

    [  2%] Building CXX object src/kj/CMakeFiles/kj.dir/cidr.c++.o
    /root/src/bitcoin/depends/work/build/aarch64-unknown-openbsd7.7/native_capnp/1.1.0-f5dbdc0b2f0/src/kj/cidr.c++:116:71: error: member access into incomplete type 'const struct sockaddr_in6'
            otherBits = reinterpret_cast<const struct sockaddr_in6*>(addr)->sin6_addr.s6_addr;
    

    With the patch the build still fails:

    gmake -C depends NO_QT=1 NO_QR=1 NO_ZMQ=1 NO_USDT=1
    ...
    [ 95%] Linking CXX executable capnp
    ld: warning: parser.c++(parser.c++.o:(kj::Maybe<decltype(apply(instance<capnp::compiler::CapnpParser::CapnpParser(capnp::Orphanage, capnp::compiler::ErrorReporter&)::'lambda38'(capnp::compiler::(anonymous namespace)::Located<capnp::Text::Reader>&&, kj::Maybe<capnp::Orphan<capnp::compiler::LocatedInteger>>&&, capnp::compiler::(anonymous namespace)::Located<kj::Array<kj::Maybe<capnp::compiler::(anonymous namespace)::Located<capnp::Text::Reader>>>>&&, capnp::Orphan<capnp::compiler::Expression>&&, kj::Array<capnp::Orphan<capnp::compiler::Declaration::AnnotationApplication>>&&)&>(), instance<kj::parse::OutputType_<decltype(instance<kj::parse::Sequence_<kj::parse::TransformOrReject_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)0, &capnp::compiler::Token::Reader::getIdentifier() const>> const&, capnp::compiler::(anonymous namespace)::ExactString>, kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)0, &capnp::compiler::Token::Reader::getIdentifier() const>> const&, kj::parse::Optional_<kj::parse::ParserRef<kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>, capnp::Orphan<capnp::compiler::LocatedInteger>>&>, kj::parse::Transform_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::List<capnp::List<capnp::compiler::Token, (capnp::Kind)3>, (capnp::Kind)6>::Reader, (capnp::compiler::Token::Which)5, &capnp::compiler::Token::Reader::getParenthesizedList() const>> const&, capnp::compiler::(anonymous namespace)::ParseListItems<kj::parse::OneOf_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)0, &capnp::compiler::Token::Reader::getIdentifier() const>> const&, kj::parse::TransformWithLocation_<kj::parse::TransformOrReject_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)4, &capnp::compiler::Token::Reader::getOperator() const>> const&, capnp::compiler::(anonymous namespace)::ExactString>, capnp::compiler::CapnpParser::CapnpParser(capnp::Orphanage, capnp::compiler::ErrorReporter&)::'lambda37'(kj::parse::Span<capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>)>>&>>, kj::parse::TransformOrReject_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)4, &capnp::compiler::Token::Reader::getOperator() const>> const&, capnp::compiler::(anonymous namespace)::ExactString>, kj::parse::ParserRef<kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>, capnp::Orphan<capnp::compiler::Expression>>&, kj::parse::Many_<kj::parse::ParserRef<kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>, capnp::Orphan<capnp::compiler::Declaration::AnnotationApplication>>&, false>>&>()(instance<kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>&>()))>::Type&&>()))> kj::parse::Transform_<kj::parse::Sequence_<kj::parse::TransformOrReject_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)0, &capnp::compiler::Token::Reader::getIdentifier() const>> const&, capnp::compiler::(anonymous namespace)::ExactString>, kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)0, &capnp::compiler::Token::Reader::getIdentifier() const>> const&, kj::parse::Optional_<kj::parse::ParserRef<kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>, capnp::Orphan<capnp::compiler::LocatedInteger>>&>, kj::parse::Transform_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::List<capnp::List<capnp::compiler::Token, (capnp::Kind)3>, (capnp::Kind)6>::Reader, (capnp::compiler::Token::Which)5, &capnp::compiler::Token::Reader::getParenthesizedList() const>> const&, capnp::compiler::(anonymous namespace)::ParseListItems<kj::parse::OneOf_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)0, &capnp::compiler::Token::Reader::getIdentifier() const>> const&, kj::parse::TransformWithLocation_<kj::parse::TransformOrReject_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)4, &capnp::compiler::Token::Reader::getOperator() const>> const&, capnp::compiler::(anonymous namespace)::ExactString>, capnp::compiler::CapnpParser::CapnpParser(capnp::Orphanage, capnp::compiler::ErrorReporter&)::'lambda37'(kj::parse::Span<capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>)>>&>>, kj::parse::TransformOrReject_<kj::parse::TransformOrReject_<kj::parse::Any_ const&, capnp::compiler::(anonymous namespace)::MatchTokenType<capnp::Text::Reader, (capnp::compiler::Token::Which)4, &capnp::compiler::Token::Reader::getOperator() const>> const&, capnp::compiler::(anonymous namespace)::ExactString>, kj::parse::ParserRef<kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>, capnp::Orphan<capnp::compiler::Expression>>&, kj::parse::Many_<kj::parse::ParserRef<kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>, capnp::Orphan<capnp::compiler::Declaration::AnnotationApplication>>&, false>>, capnp::compiler::CapnpParser::CapnpParser(capnp::Orphanage, capnp::compiler::ErrorReporter&)::'lambda38'(capnp::compiler::(anonymous namespace)::Located<capnp::Text::Reader>&&, kj::Maybe<capnp::Orphan<capnp::compiler::LocatedInteger>>&&, capnp::compiler::(anonymous namespace)::Located<kj::Array<kj::Maybe<capnp::compiler::(anonymous namespace)::Located<capnp::Text::Reader>>>>&&, capnp::Orphan<capnp::compiler::Expression>&&, kj::Array<capnp::Orphan<capnp::compiler::Declaration::AnnotationApplication>>&&)>::operator()<kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>>(kj::parse::IteratorInput<capnp::compiler::Token::Reader, capnp::_::IndexingIterator<capnp::List<capnp::compiler::Token, (capnp::Kind)3>::Reader const, capnp::compiler::Token::Reader>>&) const) in archive libcapnpc.a): warning: strcpy() is almost always misused, please use strlcpy()
    ld: error: undefined symbol: std::__throw_bad_array_new_length()
    >>> referenced by module-loader.c++
    >>>               CMakeFiles/capnp_tool.dir/compiler/module-loader.c++.o:(capnp::compiler::ModuleLoader::Impl::loadModule(kj::ReadableDirectory const&, kj::PathPtr))
    >>> referenced by compiler.c++
    >>>               compiler.c++.o:(std::_Hashtable<capnp::compiler::Compiler::Node*, std::pair<capnp::compiler::Compiler::Node* const, unsigned int>, std::allocator<std::pair<capnp::compiler::Compiler::Node* const, unsigned int>>, std::__detail::_Select1st, std::equal_to<capnp::compiler::Compiler::Node*>, std::hash<capnp::compiler::Compiler::Node*>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true>>::_M_rehash(unsigned long, unsigned long const&)) in archive libcapnpc.a
    >>> referenced by compiler.c++
    >>>               compiler.c++.o:(std::_Hashtable<capnp::compiler::Module*, std::pair<capnp::compiler::Module* const, kj::Own<capnp::compiler::Compiler::CompiledModule, std::nullptr_t>>, std::allocator<std::pair<capnp::compiler::Module* const, kj::Own<capnp::compiler::Compiler::CompiledModule, std::nullptr_t>>>, std::__detail::_Select1st, std::equal_to<capnp::compiler::Module*>, std::hash<capnp::compiler::Module*>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true>>::_M_rehash(unsigned long, unsigned long const&)) in archive libcapnpc.a
    >>> referenced 2 more times
    collect2: error: ld returned 1 exit status
    gmake[3]: *** [src/capnp/CMakeFiles/capnp_tool.dir/build.make:122: src/capnp/capnp] Error 1
    gmake[2]: *** [CMakeFiles/Makefile2:480: src/capnp/CMakeFiles/capnp_tool.dir/all] Error 2
    gmake[1]: *** [Makefile:136: all] Error 2
    gmake[1]: Leaving directory '/home/sjors/src/bitcoin/depends/work/build/aarch64-unknown-openbsd7.7/capnp/1.1.0-adf16ebd094'
    gmake: *** [funcs.mk:342: /home/sjors/src/bitcoin/depends/work/build/aarch64-unknown-openbsd7.7/capnp/1.1.0-adf16ebd094/./.stamp_built] Error 2
    gmake: Leaving directory '/home/sjors/src/bitcoin/depends'
    

    (this also happens with just this PR at 8713e8060d504f561fed705b4aa5af7b96c36e75)

    Though maybe there's something wrong with my VM? #32691 In particular, I symlinked egcc and eg++ to /usr/local/bin/g{cc,++}.

  9. in depends/builders/openbsd.mk:4 in 8713e8060d
       0 | @@ -1,7 +1,7 @@
       1 |  build_openbsd_CC = clang
       2 |  build_openbsd_CXX = clang++
       3 |  
       4 | -build_openbsd_SHA256SUM = sha256
       5 | +build_openbsd_SHA256SUM = sha256 -r
    


    hebasto commented at 11:23 AM on June 6, 2025:

    I believe the same applies to FreeBSD as well.


    Sjors commented at 2:11 PM on June 6, 2025:

    I'll spin up a FreeBSD 14.1 VM to try that.


    Sjors commented at 2:30 PM on June 6, 2025:

    FreeBSD depends instruction is also missing gmake and cmake in the list of things to install.

    build_freebsd_SHA256SUM = sha256sum already outputs the format we need.


    hebasto commented at 3:11 PM on June 6, 2025:

    build_freebsd_SHA256SUM = sha256sum already outputs the format we need.

    $ freebsd-version 
    14.2-RELEASE
    $ sha256 ~/.cshrc
    SHA256 (/home/hebasto/.cshrc) = 523d96d41067f380469d4f3d68b540edb63b127e91a9955fb7f6a01c53545258
    

    Sjors commented at 3:30 PM on June 6, 2025:

    sha256sum != sha256 != shasum -a 256

    $ freebsd-version
    14.1-RELEASE
    $ sha256 README.md
    SHA256 (README.md) = 2c98d4dd80b0b50e6668f518ef947135528f076c655a6fa6593111a592898e63
    $ sha256sum README.md
    2c98d4dd80b0b50e6668f518ef947135528f076c655a6fa6593111a592898e63  README.md
    $ shasum -a 256 README.md
    2c98d4dd80b0b50e6668f518ef947135528f076c655a6fa6593111a592898e63  README.md
    

    hebasto commented at 3:45 PM on June 6, 2025:

    I was blind. Sorry for the noise.

  10. fanquake added this to a project on Jun 6, 2025
  11. Sjors commented at 3:41 PM on June 6, 2025: member

    ACK 8713e8060d504f561fed705b4aa5af7b96c36e75

    Switched to an x86_64 based VM and it builds fine. I also ran the Bitcoin Core test suite.

    Can you add a note to the OpenBSD instruction in depends/README.md to also install cmake?

  12. DrahtBot requested review from hebasto on Jun 6, 2025
  13. theStack commented at 3:48 PM on June 6, 2025: contributor

    Why 8713e80 is necessary for libmultiprocess, but not for other packages?

    The libmultiprocess package is the only one which sets the $(package)_local_dir variable, causing execution of the fetch_local_dir_sha256 shell script where the hash is extracted from the file manually, expecting the hash in the first row (=GNU format): https://github.com/bitcoin/bitcoin/blob/ae024137bda9fe189f4e7ccf26dbaffd44cbbeb6/depends/funcs.mk#L57

    Another instance where we do this manual extraction is in the calculation of $(1)_all_file_checksums: https://github.com/bitcoin/bitcoin/blob/ae024137bda9fe189f4e7ccf26dbaffd44cbbeb6/depends/funcs.mk#L62

    But this variable is only a temporary for calculating $(1)_recipe_hash, which is done by feeding the hashing tool from stdin, where the output is as expected [1]: https://github.com/bitcoin/bitcoin/blob/ae024137bda9fe189f4e7ccf26dbaffd44cbbeb6/depends/funcs.mk#L69

    So this was unnoticed, but the recipe hash calculation was not entirely correct, so I'd suggest to backport this commit.

    Note that instances where a hash list is verified via -c are not affected, as this options accepts both the BSD and the GNU formats. Also, if the input to the hashing command is piped in (i.e. coming from stdin), the output is also in the expected format even without specifying -r.

    [1] e.g.

    $ echo "foobar" | sha256
    aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f
    
  14. theStack commented at 3:57 PM on June 6, 2025: contributor

    @Sjors:

    Can you add a note to the OpenBSD instruction in depends/README.md to also install cmake?

    Seems like material for a different PR, considering this affects other BSDs as well, and at first glance it seems there are even other packages missing, like e.g. curl (which AFAIR, is also not part of OpenBSD's base system). Will open a follow-up later.

  15. hebasto approved
  16. hebasto commented at 5:00 PM on June 6, 2025: member

    ACK 8713e8060d504f561fed705b4aa5af7b96c36e75.

  17. fanquake changed the project status on Jun 7, 2025
  18. fanquake referenced this in commit c1d4253d31 on Jun 10, 2025
  19. fanquake approved
  20. fanquake commented at 3:04 PM on June 11, 2025: member

    ACK 8713e8060d504f561fed705b4aa5af7b96c36e75

  21. fanquake merged this on Jun 11, 2025
  22. fanquake closed this on Jun 11, 2025

  23. hebasto referenced this in commit 6fec181427 on Jun 11, 2025
  24. hebasto referenced this in commit 0b11d88e37 on Jun 11, 2025
  25. fanquake commented at 4:25 PM on June 11, 2025: member

    Backported to 29.x in #32690.

  26. fanquake referenced this in commit e8a5b9561c on Jun 11, 2025
  27. fanquake referenced this in commit fe4e8c28d6 on Jun 11, 2025
  28. fanquake commented at 9:44 AM on June 19, 2025: member

    Backported to 29.x in #32690.

    Note that this became a partial backport, just 8713e8060d504f561fed705b4aa5af7b96c36e75.

  29. fanquake referenced this in commit 1b51d750ad on Jun 19, 2025
  30. fanquake changed the project status on Jun 24, 2025
  31. fanquake referenced this in commit 983b268768 on Jun 25, 2025
  32. stringintech referenced this in commit f19e7819e9 on Jul 19, 2025
  33. alexanderwiederin referenced this in commit 9997c3d993 on Jul 25, 2025
  34. alexanderwiederin referenced this in commit 8d6ebb9c4e on Jul 28, 2025
  35. alexanderwiederin referenced this in commit 533a4585b5 on Jul 28, 2025
  36. yuvicc referenced this in commit 22f55cf11d on Aug 26, 2025
  37. bug-castercv502 referenced this in commit d4bd8a1259 on Sep 28, 2025
  38. kwvg referenced this in commit bebc4672da on Oct 24, 2025
  39. kwvg referenced this in commit 120ed7699e on Oct 24, 2025
  40. kwvg referenced this in commit 86f164e8f7 on Oct 24, 2025
  41. kwvg referenced this in commit 569787ea13 on Oct 25, 2025
  42. kwvg referenced this in commit 3450a9878a on Oct 25, 2025
  43. kwvg referenced this in commit 9c843514a4 on Oct 25, 2025
  44. kwvg referenced this in commit 9514c4ae65 on Nov 4, 2025
  45. stickies-v referenced this in commit a19c56cd7c on Nov 4, 2025
  46. kwvg referenced this in commit a166a1e360 on Nov 8, 2025
  47. kwvg referenced this in commit c849a8962d on Nov 12, 2025
  48. kwvg referenced this in commit 44d32a3cd8 on Nov 14, 2025
  49. PastaPastaPasta referenced this in commit 9590d57aaf on Nov 14, 2025
  50. UdjinM6 referenced this in commit 3b41a910fa on Nov 18, 2025
  51. morozow referenced this in commit 2611ca0015 on May 8, 2026
  52. morozow referenced this in commit c81a1e776a on May 8, 2026
  53. Kino1994 referenced this in commit 94b12453aa on Jun 28, 2026
  54. Kino1994 referenced this in commit 0f37c6c41f on Jun 28, 2026
  55. BigcoinBGC referenced this in commit 4bd40b9d5f on Jun 30, 2026
  56. BigcoinBGC referenced this in commit bf74f76da4 on Jun 30, 2026
  57. bitcoin locked this on Jul 30, 2026

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: 2026-08-11 10:51 UTC

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