rpc: return warnings as an array instead of just a single one #29845

pull stickies-v wants to merge 1 commits into bitcoin:master from stickies-v:2024-04/make-warnings-arr changing 10 files +71 −37
  1. stickies-v commented at 10:29 am on April 10, 2024: contributor

    The RPC documentation for getblockchaininfo, getmininginfo and getnetworkinfo states that “warnings” returns “any network and blockchain warnings”. In practice, only a single warning (i.e. the latest one that is set) is returned, the other ones are ignored.

    Fix that by returning all warnings as an array.

    As a side benefit, clean up the GetWarnings() logic.

    Since this PR changes the RPC result schema, I’ve added release notes. Users can temporarily revert to the old results by using -deprecatedrpc=warnings, until it’s removed in a future version.


    Some historical context from git log:

    • when GetWarnings was introduced in 401926283a200994ecd7df8eae8ced8e0b067c46, it was used in the getinfo RPC, where only a single error/warning was returned (similar to how it is now).
    • later on, “warnings” RPC response fields were introduced, e.g. in ef2a3de25c882396e1776b554878d2784b6b7391, with the description stating that it returned “any network warnings” but in practice still only a single warning was returned
  2. DrahtBot commented at 10:29 am on April 10, 2024: contributor

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

    Code Coverage

    For detailed information about the code coverage, see the test coverage report.

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK achow101, tdb3, TheCharlatan, maflcko
    Concept ACK laanwj

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

    Conflicts

    No conflicts as of last run.

  3. DrahtBot added the label RPC/REST/ZMQ on Apr 10, 2024
  4. DrahtBot commented at 11:32 am on April 10, 2024: contributor

    🚧 At least one of the CI tasks failed. Make sure to run all tests locally, according to the documentation.

    Possibly this is due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    Leave a comment here, if you need help tracking down a confusing failure.

    Debug: https://github.com/bitcoin/bitcoin/runs/23654678747

  5. DrahtBot added the label CI failed on Apr 10, 2024
  6. stickies-v force-pushed on Apr 10, 2024
  7. stickies-v force-pushed on Apr 10, 2024
  8. DrahtBot removed the label CI failed on Apr 10, 2024
  9. in src/warnings.h:19 in 4b821915bf outdated
    18- * - if true, get all warnings separated by <hr />
    19- * - if false, get the most important warning
    20- * @returns the warning string
    21- */
    22-bilingual_str GetWarnings(bool verbose);
    23+/** Return potential problems detected by the node. */
    


    tdb3 commented at 1:16 am on April 15, 2024:

    nit: Looks like the old function comment header used Doxygen syntax. Would recommend keeping this style, but feel free to disregard this nit since the return type seems straightforward, and the function is small/digestible.

     0diff --git a/src/warnings.h b/src/warnings.h
     1index 0b8eb2c9a1..4ae05d4862 100644
     2--- a/src/warnings.h
     3+++ b/src/warnings.h
     4@@ -12,7 +12,10 @@ struct bilingual_str;
     5 
     6 void SetMiscWarning(const bilingual_str& warning);
     7 void SetfLargeWorkInvalidChainFound(bool flag);
     8-/** Return potential problems detected by the node. */
     9+/** Return potential problems detected by the node.
    10+ *
    11+ * [@returns](/bitcoin-bitcoin/contributor/returns/) each warning string as a vector element.
    12+ */
    13 std::vector<bilingual_str> GetWarnings();
    14 
    15 #endif // BITCOIN_WARNINGS_H
    

    stickies-v commented at 4:52 pm on April 15, 2024:
    I generally tend to prefer to doxygen-ify documentation, but in this case I’m not sure the extra line adds anything over the return type and function name, so then is it just unnecessary boilerplate that makes the documentation less instead of more clear? No strong view either way, so will leave this open.
  10. tdb3 commented at 1:46 am on April 15, 2024: contributor

    ACK for 4b821915bf92082043d6cf60efb1a5faea0151db

    Nice addition and great opportunistic cleanup of GetWarnings().

    Built and ran all unit and functional tests (all passed). On signet, tested by running getblockchaininfo with

    • no warnings, by supressing the pre-release warning with if (false && !CLIENT_VERSION_IS_RELEASE) and rebuilding,
    • one warning (the pre-release warning)
    • two warnings, the pre-release warning and date/time warning by manually setting the system clock back two days before starting bitcoind

    All three cases seemed to work without issue. The only difference observed vs master is that when no warnings are present, master returns an empty string of warnings vs this PR returning an empty array. This was touched on in the description of the PR. I agree that adding a -deprecatedrpc option does seem like a bit of overkill. IMHO the release notes addition should help inform users.

    Left one minor nit.

    No warnings:

     0dev@bdev01:~/bitcoin$ src/bitcoin-cli -signet getblockchaininfo
     1{
     2  "chain": "signet",
     3  "blocks": 0,
     4  "headers": 20634,
     5  "bestblockhash": "00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6",
     6  "difficulty": 0.001126515290698186,
     7  "time": 1598918400,
     8  "mediantime": 1598918400,
     9  "verificationprogress": 4.029370408440712e-07,
    10  "initialblockdownload": true,
    11  "chainwork": "000000000000000000000000000000000000000000000000000000000049d414",
    12  "size_on_disk": 7872875,
    13  "pruned": false,
    14  "warnings": [
    15  ]
    16}
    

    One warning:

     0dev@bdev01:~/bitcoin$ src/bitcoin-cli -signet getblockchaininfo
     1{
     2  "chain": "signet",
     3  "blocks": 0,
     4  "headers": 7358,
     5  "bestblockhash": "00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6",
     6  "difficulty": 0.001126515290698186,
     7  "time": 1598918400,
     8  "mediantime": 1598918400,
     9  "verificationprogress": 4.029367626439888e-07,
    10  "initialblockdownload": true,
    11  "chainwork": "000000000000000000000000000000000000000000000000000000000049d414",
    12  "size_on_disk": 2890410,
    13  "pruned": false,
    14  "warnings": [
    15    "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"
    16  ]
    17}
    

    Two warnings:

     0dev@bdev01:~/bitcoin$ src/bitcoin-cli -signet getblockchaininfo
     1{
     2  "chain": "signet",
     3  "blocks": 0,
     4  "headers": 30645,
     5  "bestblockhash": "00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6",
     6  "difficulty": 0.001126515290698186,
     7  "time": 1598918400,
     8  "mediantime": 1598918400,
     9  "verificationprogress": 4.032686769779725e-07,
    10  "initialblockdownload": true,
    11  "chainwork": "000000000000000000000000000000000000000000000000000000000049d414",
    12  "size_on_disk": 12258274,
    13  "pruned": false,
    14  "warnings": [
    15    "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications",
    16    "Please check that your computer's date and time are correct! If your clock is wrong, Bitcoin Core will not work properly."
    17  ]
    18}
    
  11. laanwj commented at 6:31 am on April 16, 2024: member
    This is something that we should have done a long time ago imo. I wouldn’t be surprised if I have an ancient PR doing just this. Concept ACK!
  12. in src/rpc/mining.cpp:454 in 4b821915bf outdated
    450@@ -448,7 +451,7 @@ static RPCHelpMan getmininginfo()
    451     obj.pushKV("networkhashps",    getnetworkhashps().HandleRequest(request));
    452     obj.pushKV("pooledtx",         (uint64_t)mempool.size());
    453     obj.pushKV("chain", chainman.GetParams().GetChainTypeString());
    454-    obj.pushKV("warnings",         GetWarnings(false).original);
    455+    obj.pushKV("warnings",         GetNodeWarnings());
    


    maflcko commented at 6:21 am on April 18, 2024:
    0    obj.pushKV("warnings", GetNodeWarnings());
    

    style nit: Could remove the excessive whitespace to match the previous line, and clang-format?

  13. in src/rpc/net.cpp:713 in 4b821915bf outdated
    709@@ -707,7 +710,7 @@ static RPCHelpMan getnetworkinfo()
    710         }
    711     }
    712     obj.pushKV("localaddresses", localAddresses);
    713-    obj.pushKV("warnings",       GetWarnings(false).original);
    714+    obj.pushKV("warnings",       GetNodeWarnings());
    


    maflcko commented at 6:21 am on April 18, 2024:
    style nit: Could remove the excessive whitespace to match the previous line, and clang-format?
  14. in src/rpc/util.cpp:1370 in 4b821915bf outdated
    1352+{
    1353+    UniValue warnings{UniValue::VARR};
    1354+    for (const auto& warning : GetWarnings()) {
    1355+        warnings.push_back(warning.original);
    1356+    }
    1357+
    


    maflcko commented at 6:23 am on April 18, 2024:
    0    for (auto&& warning : GetWarnings()) {
    1        warnings.push_back(std::move(warning.original));
    2    }
    

    style nit: Not that it matters here, also not sure if it compiles, but could move instead of copy? edit: probably needs auto&&.

    style nit: Also, can drop the newline after the for-loop?

  15. in src/warnings.h:22 in 4b821915bf outdated
    21- */
    22-bilingual_str GetWarnings(bool verbose);
    23+/** Return potential problems detected by the node. */
    24+std::vector<bilingual_str> GetWarnings();
    25 
    26 #endif // BITCOIN_WARNINGS_H
    


    maflcko commented at 6:28 am on April 18, 2024:

    unrelated follow-up idea: It seems wrong to have the warnings module in the common library, when it is using globals to keep track of the warnings.

    I guess it would be nice to actually move it to the node library, and node namespace?


    stickies-v commented at 7:47 am on April 18, 2024:
    Agreed, that looks like a nice follow-up. Happy to have a go after this gets merged.

    stickies-v commented at 4:24 pm on April 29, 2024:

    TheCharlatan commented at 7:57 am on May 6, 2024:

    maflcko commented at 9:23 am on May 6, 2024:

    kernel

    I guess it is a bit odd to have g_timeoffset_warning in the kernel, but happy to review either approach.


    stickies-v commented at 10:33 pm on May 7, 2024:

    I guess it would be nice to actually move it to the node library, and node namespace?

    Done in https://github.com/bitcoin/bitcoin/pull/30058

  16. maflcko approved
  17. maflcko commented at 6:33 am on April 18, 2024: member

    Left some stupid style nits. Leave a comment if you want to ignore them or address them.

    very nice. Thanks for fixing this. ACK 4b821915bf92082043d6cf60efb1a5faea0151db 🛏

    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: very nice. Thanks for fixing this. ACK 4b821915bf92082043d6cf60efb1a5faea0151db 🛏
    32C4/MGb7Zt2VKd0SexvYcgZQplu/bak1Sxc/jU7RHsNG2P6rqMRriRgrMxJ5xP/EzEPad6wnaHJycRWZEhfyDA==
    
  18. DrahtBot requested review from laanwj on Apr 18, 2024
  19. stickies-v force-pushed on Apr 18, 2024
  20. stickies-v commented at 7:50 am on April 18, 2024: contributor

    Thanks for the reviews everyone. Force-pushed to address maflcko’s style nits. Otherwise no changes so should be a quick re-review.

    CI failure unrelated: https://github.com/bitcoin/bitcoin/issues/29831

  21. maflcko commented at 8:36 am on April 18, 2024: member

    scanblocks CI failure is known, unrelated, and can be ignored.

    re-ACK 7cad21a8bbd1e0b64a5e586b405c8619b9e701a5 🛵

    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: re-ACK 7cad21a8bbd1e0b64a5e586b405c8619b9e701a5 🛵
    3GVLbcvjQpk/x+zLWutUD7wboY/bIbcwsBYm7+oHZsJpP5GtA9qrMzRn8p2XCYVPsb0tNAcG1G0afsp8e+M4/Ag==
    
  22. DrahtBot requested review from tdb3 on Apr 18, 2024
  23. tdb3 commented at 11:36 am on April 18, 2024: contributor
    ltgm. cr re ACK for 7cad21a8bbd1e0b64a5e586b405c8619b9e701a5
  24. in src/rpc/blockchain.cpp:1262 in 7cad21a8bb outdated
    1258@@ -1260,7 +1259,11 @@ RPCHelpMan getblockchaininfo()
    1259                 {RPCResult::Type::NUM, "pruneheight", /*optional=*/true, "height of the last block pruned, plus one (only present if pruning is enabled)"},
    1260                 {RPCResult::Type::BOOL, "automatic_pruning", /*optional=*/true, "whether automatic pruning is enabled (only present if pruning is enabled)"},
    1261                 {RPCResult::Type::NUM, "prune_target_size", /*optional=*/true, "the target size used by pruning (only present if automatic pruning is enabled)"},
    1262-                {RPCResult::Type::STR, "warnings", "any network and blockchain warnings"},
    1263+                {RPCResult::Type::ARR, "warnings", "any network and blockchain warnings",
    


    achow101 commented at 4:24 pm on April 18, 2024:
    We should stop gratuitously breaking the RPC interface by changing existing field types like this.

    stickies-v commented at 4:51 pm on April 18, 2024:
    What do you suggest? Leave things as is? Concatenate everything into a single string? Both seem less desirable than just fixing the interface, imo. (I use the term fix since the RPC behaves different to how it is documented).

    stickies-v commented at 4:55 pm on April 18, 2024:

    ~Another option is to keep warnings a concatenated STR of all messages , add a all_warnings ARR (open to better name suggestions) field, mark warnings as deprecated and remove it in v29?~

    edit: that’s just a worse way of doing -deprecatedrpc=warnings


    achow101 commented at 5:06 pm on April 18, 2024:

    Another option is to keep warnings a concatenated STR of all messages , add a all_warnings ARR (open to better name suggestions) field, mark warnings as deprecated and remove it in v29?

    Yes, actually. We did this for various warning fields in the wallet in #27279.


    laanwj commented at 5:19 pm on April 18, 2024:
    Yes, that’s usually how these changes are done: add a new field with the new format and a new name, keep or emulate the old format (eg concatenate the warnings), deprecate the old field after a few releases.

    stickies-v commented at 5:35 pm on April 18, 2024:
    I don’t think adding a new field makes sense here. warnings is the best name, unlike #27279 where we upgraded from warning to warnings, this PR is more of a bugfix. Is it fair to assume you’d both be happy with keeping default behaviour as it is in this PR but allowing users to revert warnings to a (concatenated) string with a -deprecatedrpc=warnings option, until we remove it in some future version?

    laanwj commented at 5:49 pm on April 18, 2024:
    i agree that introducing a new name is unfortunate here, as “warnings” is consistent with naming for the wallet warnings a deprecatedrpc flag that switches the format would work, i suppose

    achow101 commented at 5:59 pm on April 18, 2024:
    -deprecatedrpc=warnings is acceptable, but not ideal

    stickies-v commented at 7:19 pm on April 18, 2024:
    I’ve added a -rpcdeprecated=warnings config option and updated the release notes.

    maflcko commented at 9:12 am on April 19, 2024:

    I’d say that a new field, named node_warnings would also be acceptable. There shouldn’t be a need to keep the name in sync with the wallet warnings, as the wallet warnings are of a different topic than the node warnings.

    But happy to re-ACK either approach.

  25. stickies-v force-pushed on Apr 18, 2024
  26. stickies-v commented at 7:20 pm on April 18, 2024: contributor
    Force pushed to add -deprecatedrpc=warnings to address review concerns.
  27. stickies-v force-pushed on Apr 18, 2024
  28. DrahtBot added the label CI failed on Apr 18, 2024
  29. DrahtBot commented at 7:38 pm on April 18, 2024: contributor

    🚧 At least one of the CI tasks failed. Make sure to run all tests locally, according to the documentation.

    Possibly this is due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    Leave a comment here, if you need help tracking down a confusing failure.

    Debug: https://github.com/bitcoin/bitcoin/runs/23994226471

  30. DrahtBot removed the label CI failed on Apr 18, 2024
  31. achow101 commented at 7:44 pm on April 23, 2024: member
    ACK 7b64820da65d9b75b181693223a6aeb9c50b4613
  32. DrahtBot requested review from tdb3 on Apr 23, 2024
  33. DrahtBot requested review from maflcko on Apr 23, 2024
  34. tdb3 commented at 2:19 am on April 25, 2024: contributor

    Approach ACK.

    Re-ran the sanity checks in #29845#pullrequestreview-1999801519 All were successful.

    Tried testing out the -deprecatedrpc=warnings functionality. I’m guessing I’m missing something simple/trivial (or improperly using -deprecatedrpc). When running src/bitcoind -deprecatedrpc=warnings, both curl and bitcoin-cli returned an error:

    curl:

    0$ curl --user __cookie__ --data-binary '{"id": "curltest", "method": "getblockchaininfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:38332/
    1Enter host password for user '__cookie__':
    2{"result":null,"error":{"code":-1,"message":"Internal bug detected: RPC call \"getblockchaininfo\" returned incorrect type:\n{\n    \"warnings\": \"returned type is string, but declared as array in doc\"\n}\nBitcoin Core v27.99.0-7b64820da65d-dirty\nPlease report this issue here: https://github.com/bitcoin/bitcoin/issues\n"},"id":"curltest"}
    

    bitcoin-cli:

    0$ src/bitcoin-cli -signet getblockchaininfo
    1error code: -1
    2error message:
    3Internal bug detected: RPC call "getblockchaininfo" returned incorrect type:
    4{
    5    "warnings": "returned type is string, but declared as array in doc"
    6}
    7Bitcoin Core v27.99.0-7b64820da65d-dirty
    8Please report this issue here: https://github.com/bitcoin/bitcoin/issues
    

    I did some quick searching and also checked for -help output for “deprecatedrpc” for usage (both bitcoind and bitcoin-cli), but didn’t see anything indicating appropriate usage.

  35. stickies-v force-pushed on Apr 25, 2024
  36. stickies-v commented at 12:06 pm on April 25, 2024: contributor

    both curl and bitcoin-cli returned an error:

    I suspect you’re running with -rpcdoccheck, you shouldn’t get any errors without it? I’m not sure if -rpcdoccheck is meant to be an internal-only testing flag (as per #24695), but it doesn’t seem to be documented as such, so I guess better to be safe - force pushed to make the docs contingent on the -rpcdeprecated too.

    Thanks for your diligent re-review!

  37. tdb3 commented at 5:27 pm on April 27, 2024: contributor

    both curl and bitcoin-cli returned an error:

    I suspect you’re running with -rpcdoccheck, you shouldn’t get any errors without it? I’m not sure if -rpcdoccheck is meant to be an internal-only testing flag (as per #24695), but it doesn’t seem to be documented as such, so I guess better to be safe - force pushed to make the docs contingent on the -rpcdeprecated too.

    Thanks for your diligent re-review!

    ACK for 07cb2ca61da2d664fba5a4b1c751d2306a8b92d1

    I hadn’t explicitly been running with -rpcdoccheck, but will look more into it, thanks. Re-ran the tests above (https://github.com/bitcoin/bitcoin/pull/29845#pullrequestreview-1999801519 and #29845#pullrequestreview-2021354156). All worked as expected (below is the output when running curl and bitcoin-cli with src/bitcoind -deprecatedrpc=warnings).

     0$ curl --user __cookie__ --data-binary '{"id": "curltest", "method": "getblockchaininfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:38332/
     1Enter host password for user '__cookie__':
     2{"result":{"chain":"signet","blocks":193052,"headers":193114,"bestblockhash":"00000089592fbaa28b1db9da72361ad09c9b7f743fed75918720d8941b2ce2a4","difficulty":0.003080949497532796,"time":1714194156,"mediantime":1714191581,"verificationprogress":0.9998987458318408,"initialblockdownload":false,"chainwork":"0000000000000000000000000000000000000000000000000000022ea328e71f","size_on_disk":1342889501,"pruned":false,"warnings":"This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"},"error":null,"id":"curltest"}
     3
     4$ src/bitcoin-cli -signet getblockchaininfo
     5{
     6  "chain": "signet",
     7  "blocks": 193052,
     8  "headers": 193114,
     9  "bestblockhash": "00000089592fbaa28b1db9da72361ad09c9b7f743fed75918720d8941b2ce2a4",
    10  "difficulty": 0.003080949497532796,
    11  "time": 1714194156,
    12  "mediantime": 1714191581,
    13  "verificationprogress": 0.9998987116639849,
    14  "initialblockdownload": false,
    15  "chainwork": "0000000000000000000000000000000000000000000000000000022ea328e71f",
    16  "size_on_disk": 1342889501,
    17  "pruned": false,
    18  "warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"
    19}
    
  38. DrahtBot requested review from achow101 on Apr 27, 2024
  39. DrahtBot added the label Needs rebase on Apr 30, 2024
  40. stickies-v force-pushed on May 1, 2024
  41. DrahtBot removed the label Needs rebase on May 1, 2024
  42. rpc: return warnings as an array instead of just a single one
    The RPC documentation for `getblockchaininfo`, `getmininginfo` and
    `getnetworkinfo` states that "warnings" returns "any network and
    blockchain warnings". In practice, only a single warning is returned.
    
    Fix that by returning all warnings as an array.
    
    As a side benefit, cleans up the GetWarnings() logic.
    42fb5311b1
  43. stickies-v force-pushed on May 1, 2024
  44. achow101 commented at 8:10 pm on May 1, 2024: member
    re-ACK 42fb5311b19582361409d65c6fddeadbee14bb97
  45. DrahtBot requested review from tdb3 on May 1, 2024
  46. tdb3 commented at 9:22 pm on May 3, 2024: contributor

    Re ACK for 42fb5311b19582361409d65c6fddeadbee14bb97

    Ran the tests in #29845 (comment) and #29845#pullrequestreview-1999801519 again (no warnings, one warning, two warnings, and with -deprecatedrpc with one warning). All behaved as expected.

  47. TheCharlatan approved
  48. TheCharlatan commented at 8:56 am on May 6, 2024: contributor
    ACK 42fb5311b19582361409d65c6fddeadbee14bb97
  49. in doc/release-notes-29845.md:7 in 42fb5311b1
    0@@ -0,0 +1,8 @@
    1+RPC
    2+---
    3+
    4+- the `warnings` field in `getblockchaininfo`, `getmininginfo` and
    5+  `getnetworkinfo` now returns all the active node warnings as an array
    6+  of strings, instead of just a single warning. The current behaviour
    7+  can temporarily be restored by running bitcoind with configuration
    


    maflcko commented at 9:14 am on May 6, 2024:
    0  can temporarily be restored by running with configuration
    

    nit (only if you re-touch): Could remove the executable name, as it can be bitcoin-qt as well, or a different name.

  50. maflcko approved
  51. maflcko commented at 9:22 am on May 6, 2024: member

    ACK 42fb5311b19582361409d65c6fddeadbee14bb97 🔺

    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: ACK 42fb5311b19582361409d65c6fddeadbee14bb97 🔺
    3DkZcGaegmeNqao4OyqKkZvPK1NSWofgTqWxVDrmqPuY4EZlSajPN8iz8kpunlYESlSl31ykCX/U9HS/4bHoUCQ==
    
  52. achow101 merged this on May 6, 2024
  53. achow101 closed this on May 6, 2024

  54. stickies-v deleted the branch on May 6, 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-06-29 07:13 UTC

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