contrib: add tool to convert compact-serialized UTXO set to SQLite database #27432

pull theStack wants to merge 2 commits into bitcoin:master from theStack:add-utxo_to_sqlite-conversion-tool changing 4 files +320 −0
  1. theStack commented at 5:59 pm on April 6, 2023: contributor

    Problem description

    There is demand from users to get the UTXO set in form of a SQLite database (#24628). Bitcoin Core currently only supports dumping the UTXO set in a binary compact-serialized format, which was crafted specifically for AssumeUTXO snapshots (see PR #16899), with the primary goal of being as compact as possible. Previous PRs tried to extend the dumptxoutset RPC with new formats, either in human-readable form (e.g. #18689, #24202), or most recently, directly as SQLite database (#24952). Both are not optimal: due to the huge size of the ever-growing UTXO set with already more than 80 million entries on mainnet, human-readable formats are practically useless, and very likely one of the first steps would be to put them in some form of database anyway. Directly adding SQLite3 dumping support on the other hand introduces an additional dependency to the non-wallet part of bitcoind and the risk of increased maintenance burden (see e.g. #24952 (comment), #24628 (comment)).

    Proposed solution

    This PR follows the “external tooling” route by adding a simple Python script for achieving the same goal in a two-step process (first create compact-serialized UTXO set via dumptxoutset, then convert it to SQLite via the new script). Executive summary:

    • single file, no extra dependencies (sqlite3 is included in Python’s standard library [1])
    • ~150 LOC, mostly deserialization/decompression routines ported from the Core codebase and (probably the most difficult part) a little elliptic curve / finite field math to decompress pubkeys (essentialy solving the secp256k1 curve equation y^2 = x^3 + 7 for y given x, respecting the proper polarity as indicated by the compression tag)
    • creates a database with only one table utxos with the following schema: (txid TEXT, vout INT, value INT, coinbase INT, height INT, scriptpubkey TEXT)
    • the resulting file has roughly 2x the size of the compact-serialized UTXO set (this is mostly due to encoding txids and scriptpubkeys as hex-strings rather than bytes)

    [1] note that there are some rare cases of operating systems like FreeBSD though, where the sqlite3 module has to installed explicitly (see #26819)

    A functional test is also added that creates UTXO set entries with various output script types (standard and also non-standard, for e.g. large scripts) and verifies that the UTXO sets of both formats match by comparing corresponding MuHashes. One MuHash is supplied by the bitcoind instance via gettxoutsetinfo muhash, the other is calculated in the test by reading back the created SQLite database entries and hashing them with the test framework’s MuHash3072 module.

    Manual test instructions

    I’d suggest to do manual tests also by comparing MuHashes. For that, I’ve written a go tool some time ago which would calculate the MuHash of a sqlite database in the created format (I’ve tried to do a similar tool in Python, but it’s painfully slow).

     0$ [run bitcoind instance with -coinstatsindex]
     1$ ./src/bitcoin-cli dumptxoutset ~/utxos.dat
     2$ ./src/bitcoin-cli gettxoutsetinfo muhash <block height returned in previous call>
     3(outputs MuHash calculated from node)
     4
     5$ ./contrib/utxo-tools/utxo_to_sqlite.py ~/utxos.dat ~/utxos.sqlite
     6$ git clone https://github.com/theStack/utxo_dump_tools
     7$ cd utxo_dump_tools/calc_utxo_hash
     8$ go run calc_utxo_hash.go ~/utxos.sqlite
     9(outputs MuHash calculated from the SQLite UTXO set)
    10
    11=> verify that both MuHashes are equal
    

    For a demonstration what can be done with the resulting database, see #24952#pullrequestreview-956290477 for some example queries. Thanks go to LarryRuane who gave me to the idea of rewriting this script in Python and adding it to contrib.

  2. DrahtBot commented at 5:59 pm on April 6, 2023: 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
    Concept ACK jamesob, dunxen, pablomartin4btc, Sjors
    Stale ACK willcl-ark, ajtowns

    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 Scripts and tools on Apr 6, 2023
  4. pinheadmz commented at 6:01 pm on April 6, 2023: member
    This also closes #21670 ;-)
  5. theStack commented at 6:03 pm on April 6, 2023: contributor
    Pinging users who worked on or reviewed / expressed interest in the previous attempt to solve this issue (PR #24952): @dunxen @0xB10C @jamesob @prusnak @willcl-ark @w0xlt @jonatack @brunoerg @laanwj @fanquake
  6. theStack force-pushed on Apr 6, 2023
  7. theStack force-pushed on Apr 6, 2023
  8. in contrib/utxo-tools/utxo_to_sqlite.py:89 in 3ce180ac2d outdated
    84+    return bytes([4]) + x.to_bytes(32, 'big') + y.to_bytes(32, 'big')
    85+
    86+
    87+def main():
    88+    parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
    89+    parser.add_argument('infile',  help='filename of compact-serialized UTXO set (input)')
    


    willcl-ark commented at 8:33 pm on April 7, 2023:

    Whitepsace nit (unless it was deliberate to align with following line):

    0    parser.add_argument('infile', help='filename of compact-serialized UTXO set (input)')
    

    theStack commented at 10:47 pm on January 6, 2024:
    Done.
  9. bitcoin deleted a comment on Apr 12, 2023
  10. achow101 commented at 7:43 pm on April 20, 2023: member

    the resulting file has roughly 2x the size of the compact-serialized UTXO set (this is mostly due to encoding txids and scriptpubkeys as hex-strings rather than bytes)

    What is the rationale for encoding as text rather than bytes? SQLite can store byte values as BLOBs.

  11. theStack commented at 8:45 pm on April 20, 2023: contributor

    the resulting file has roughly 2x the size of the compact-serialized UTXO set (this is mostly due to encoding txids and scriptpubkeys as hex-strings rather than bytes)

    What is the rationale for encoding as text rather than bytes? SQLite can store byte values as BLOBs.

    Fair question. There was already some discussion in #24952 about whether to store txids/scriptPubKeys as TEXT or BLOB, see #24952#pullrequestreview-952102140, #24952 (comment) and #24952 (comment). The two main points were:

    • conversion from this database to json/csv etc should be as simple as possible, and ideally “select * from utxos” should already lead to human-readable output. Converting would then be as trivial as a short one-liner sqlite3 -json utxo.db "SELECT * FROM utxos" > utxo.json, without even having to specify the columns
    • more annoying: if using BLOB for the txid, we would have to decide if we store the txid in little or big endian byte order. Big endian would be more natural, as that’s how we internally store the txid and also serialize it on the wire, but we show everything in little endian byte order in Bitcoin Core, so a simple “select hex(txid) from utxos” would just show the txid in the wrong order, and something like “reverse(…)” doesn’t exist in SQLite (though some hacky workarounds have been proposed: #24952 (comment) and #24952 (comment)). There remains the possibility to just store the txid in little endian order, but that’s the opposite of what we do in leveldb or in the serialization of outpoints, so it could lead to huge confusion for users if not clearly documented. For TEXT the order is clear, it’s just stored what is shown everywhere in Bitcoin Core and all wallets, block explorers etc.

    Considering the scriptPubKey column individually, there is no good reason to use TEXT rather than BLOB, but I went for TEXT mostly for consistency reasons, to not mix TEXT and BLOB in different columns when it’s both binary data.

    That said, I’m also very open also for using BLOB instead, it’s just a matter of trade-offs.

  12. ajtowns commented at 2:29 pm on July 27, 2023: contributor

    Approach ACK. Seems like a fine idea to me.

    What is the rationale for encoding as text rather than bytes? SQLite can store byte values as BLOBs.

    It’s a python conversion script: can’t you just add a command-line option for the resulting db to have hex txids or big/little endian blobs if there’s user demand for it? Hex encoding seems a fine default to me, for what it’s worth.

    If people end up wanting lots of different options (convert scriptPubKeys to addresses? some way to update the db to a new state, rather than just create a new one?) maybe it would make sense for this script to have its own repo even; but while it stays simple/small, seems fine for contrib.

  13. jamesob commented at 2:33 pm on July 27, 2023: contributor
    Concept ACK, will test soon
  14. dunxen commented at 5:08 pm on July 27, 2023: contributor
    Concept ACK
  15. in contrib/utxo-tools/utxo_to_sqlite.py:190 in 3ce180ac2d outdated
    139+            elapsed = time.time() - start_time
    140+            print(f"{coin_idx} coins converted [{coin_idx/num_utxos*100:.2f}%], " +
    141+                  f"{elapsed:.3f}s passed since start")
    142+
    143+    if f.read(1) != b'':  # EOF should be reached by now
    144+        print(f"WARNING: input file {args.infile} has not reached EOF yet!")
    


    willcl-ark commented at 6:50 pm on July 31, 2023:
    nit: should we sys.exit(1) here too?

    theStack commented at 10:53 pm on January 6, 2024:
    Done. Also, moved this condition down to after the written coin statistic output, as it is still useful to see in the EOF-not-reached-yet case.
  16. willcl-ark approved
  17. willcl-ark commented at 6:59 pm on July 31, 2023: member

    tACK 3ce180ac2d

    Left two nits which don’t need addressing unless being re-touched, but overall this works well in testing and seems like a useful contrib script. Converting the output to json also worked as described in the comments above.

  18. achow101 requested review from josibake on Sep 20, 2023
  19. pablomartin4btc commented at 2:42 am on October 13, 2023: member
    Concept ACK
  20. DrahtBot requested review from jamesob on Oct 13, 2023
  21. DrahtBot requested review from ajtowns on Oct 13, 2023
  22. DrahtBot added the label CI failed on Oct 25, 2023
  23. theStack force-pushed on Jan 6, 2024
  24. theStack force-pushed on Jan 6, 2024
  25. DrahtBot removed the label CI failed on Jan 6, 2024
  26. theStack commented at 10:54 pm on January 6, 2024: contributor

    Could mark as draft while CI is red?

    Sorry for the extra-late reply, missed this message and the CI fail. Rebased on master and resolved the silent merge conflict (caused by the module move test_framework.muhash -> test_framework.crypto.muhash in #28374). Also fixed the Windows CI issue by closing the sqlite connections properly with explicit con.close() calls (see e.g. #28204). CI is green now.

    What is the rationale for encoding as text rather than bytes? SQLite can store byte values as BLOBs.

    It’s a python conversion script: can’t you just add a command-line option for the resulting db to have hex txids or big/little endian blobs if there’s user demand for it? Hex encoding seems a fine default to me, for what it’s worth.

    Good idea, planning to tackle this as a follow-up.

  27. DrahtBot added the label CI failed on Jan 13, 2024
  28. theStack force-pushed on Jan 22, 2024
  29. DrahtBot removed the label CI failed on Jan 22, 2024
  30. achow101 referenced this in commit ef6329f052 on Mar 13, 2024
  31. fjahr commented at 1:08 pm on March 14, 2024: contributor
    Unfortunately, this will need to be updated again once #29612 is in, so probably best to put it on hold until then.
  32. theStack commented at 1:11 pm on March 14, 2024: contributor

    Unfortunately, this will need to be updated again once #29612 is in, so probably best to put it on hold until then.

    Good point, changed to draft state for now.

  33. theStack marked this as a draft on Mar 14, 2024
  34. theStack force-pushed on Mar 31, 2024
  35. DrahtBot commented at 10:33 pm on March 31, 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/23283557207

  36. DrahtBot added the label CI failed on Mar 31, 2024
  37. theStack force-pushed on Apr 1, 2024
  38. Sjors commented at 2:48 pm on April 3, 2024: member
    Concept ACK
  39. in contrib/utxo-tools/utxo_to_sqlite.py:77 in 254633a1b4 outdated
    49+    return n
    50+
    51+
    52+def decompress_script(f):
    53+    """Equivalent of `DecompressScript()` (see compressor module)."""
    54+    size = read_varint(f)  # sizes 0-5 encode compressed script types
    


    Sjors commented at 2:50 pm on April 3, 2024:
    TIL we compress certain standard scriptPubKey types.
  40. DrahtBot added the label Needs rebase on May 2, 2024
  41. theStack force-pushed on May 5, 2024
  42. theStack commented at 9:15 am on May 5, 2024: contributor
    Rebased on #29612, supporting the latest format with enhanced metadata (magic bytes, version, network magic, block height, block hash, coins count).
  43. theStack force-pushed on May 5, 2024
  44. DrahtBot removed the label Needs rebase on May 5, 2024
  45. DrahtBot removed the label CI failed on May 5, 2024
  46. theStack marked this as ready for review on May 5, 2024
  47. DrahtBot added the label Needs rebase on May 23, 2024
  48. theStack force-pushed on May 23, 2024
  49. DrahtBot removed the label Needs rebase on May 23, 2024
  50. ajtowns commented at 5:08 am on May 29, 2024: contributor

    utACK 0a89179d62a5b2c5ebc20b806122bb50fc199cba – no deep review, but being able to mess around with the utxo set as an sqlite dump is handy, and adding a script to contrib seems low risk.

    As at height 844861, the raw dump is ~12GB and the sqlite version is ~25GB, so having a bunch of free space is helpful if you want to try it out.

  51. DrahtBot requested review from pablomartin4btc on May 29, 2024
  52. DrahtBot requested review from willcl-ark on May 29, 2024
  53. DrahtBot requested review from Sjors on May 29, 2024
  54. DrahtBot added the label Needs rebase on Jun 17, 2024
  55. theStack force-pushed on Jun 18, 2024
  56. theStack commented at 0:34 am on June 18, 2024: contributor
    Rebased on master (resolving a trivial merging conflict in the test runner list after the merge of #28984).
  57. DrahtBot removed the label Needs rebase on Jun 18, 2024
  58. Sjors commented at 8:17 am on June 18, 2024: member

    Just tried with the mainnet block 840,000 snapshot from #28553:

     0sha256sum ../utxo-snapshots/utxo-840000.dat
     19db649785fcddd8b1fe83a5009fe5c9be1901e8c322298cacc8a2d96ace4807e  ../utxo-snapshots/utxo-840000.dat
     2
     3contrib/utxo-tools/utxo_to_sqlite.py ../utxo-snapshots/utxo-840000.dat ../utxo-snapshots/utxo-840000.sqlite
     4UTXO Snapshot for Mainnet at block height 840000 [0000000000000000...], contains 176948713 coins
     5Traceback (most recent call last):
     6  File "/home/sjors/dev/bitcoin/contrib/utxo-tools/utxo_to_sqlite.py", line 180, in <module>
     7    main()
     8  File "/home/sjors/dev/bitcoin/contrib/utxo-tools/utxo_to_sqlite.py", line 151, in main
     9    scriptpubkey = decompress_script(f).hex()
    10  File "/home/sjors/dev/bitcoin/contrib/utxo-tools/utxo_to_sqlite.py", line 73, in decompress_script
    11    return bytes([65]) + decompress_pubkey(compressed_pubkey) + bytes([0xac])
    12  File "/home/sjors/dev/bitcoin/contrib/utxo-tools/utxo_to_sqlite.py", line 89, in decompress_pubkey
    13    assert pow(y, 2, P) == rhs, f"pubkey is not on curve ({compressed_pubkey.hex()})"
    14AssertionError: pubkey is not on curve (02fcf4e32ffe3e7c998f2795f30b851d5ffde45d000059e866f2793c9cbd735b29)
    

    Python 3.9.18 on Ubuntu 24.04 on an AMD.

    Ditto on Intel macOS 14.5.

    Verbose log: https://zerobin.org/?d2b0aaa5e8799896#GHnT9EXJHVEqdLrGBGg5bDL2TT1hUfaASQWh3x1xrcH3

    Ideally we’d test this script against every UTXO ever created, but extracting those efficiently requires its own raw block file parsing script :-)

  59. theStack commented at 8:45 am on June 18, 2024: contributor

    @Sjors: Thanks for testing. Interesting, IIUC it’s not possible to compress the serialization of a not-on-the-curve-pubkey, so I strongly assume there must be a bug somewhere in the decompress_pubkey routine. Will investigate in a bit, and put the PR into draft state until this is fixed.

    Ideally we’d test this script against every UTXO ever created, but extracting those efficiently requires its own raw block file parsing script :-)

    Agree that would be very nice.

  60. theStack marked this as a draft on Jun 18, 2024
  61. theStack force-pushed on Jun 18, 2024
  62. theStack commented at 3:13 pm on June 18, 2024: contributor
    Fixed the bug reported in #27432 (comment). The problem was that the prevout index and the coins per txid are compact-size encoded (since #29612), but this script assumed varint-encoding. Since txs with a huge number of ouputs (>252) are rather rare, this apparently only pops up occassionally. Ready for review again.
  63. theStack marked this as ready for review on Jun 18, 2024
  64. Sjors commented at 6:02 pm on June 18, 2024: member

    TOTAL: 176948713 coins written to ../utxo-snapshots/utxo-840000.sqlite

    It’s about 25 GB. Not sure if it’s supposed to be deterministic, but here you go:

    099450bac6e081e03751c064034b3d10e17b463ca56dfc35797fc6b5fe0de8ac4  ../utxo-snapshots/utxo-840000.sqlite
    

    Sanity check for the contents:

     0$ sqlite3 -readonly ../utxo-snapshots/utxo-840000.sqlite .dump | head -n10
     1PRAGMA foreign_keys=OFF;
     2BEGIN TRANSACTION;
     3CREATE TABLE utxos(txid TEXT, vout INT, value INT, coinbase INT, height INT, scriptpubkey TEXT);
     4INSERT INTO utxos VALUES('d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000',0,100000,0,684110,'76a914a35277c3ceb9c38da206be006e8c7ff8e94fc52988ac');
     5INSERT INTO utxos VALUES('d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000',2,330,0,684110,'0020160d0000000000f0558db21dc3e8d765044120f3b6d18c22f5957ad83382521f');
     6INSERT INTO utxos VALUES('d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000',3,330,0,684110,'00203f52bab5928e8e9388d8fe3c6c536faf8006b97a090501d035ef0eb9136d3868');
     7INSERT INTO utxos VALUES('d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000',4,330,0,684110,'00201698e842e20fa57ff8f72e6bf1533138fc0d0f41201b8b959b924ea19a53c809');
     8INSERT INTO utxos VALUES('d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000',5,330,0,684110,'002019ae7a5b46cb44f12058461629eebf7b8b300d72f6017367e85ddb26f4c52f03');
     9INSERT INTO utxos VALUES('d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000',6,330,0,684110,'0020d254536c698495436ab0868c11773c7066c2860a1d411f34ee36284fa706aa0b');
    10INSERT INTO utxos VALUES('d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000',7,330,0,684110,'002014b9a95a60f0dc7ebea06daec866076d1868974a6060b53fc6f1614492d634c3');
    
  65. DrahtBot added the label CI failed on Jun 18, 2024
  66. theStack commented at 0:17 am on June 19, 2024: contributor

    It’s about 25 GB. Not sure if it’s supposed to be deterministic, but here you go:

    099450bac6e081e03751c064034b3d10e17b463ca56dfc35797fc6b5fe0de8ac4  ../utxo-snapshots/utxo-840000.sqlite
    

    Pretty sure that the .sqlite file as a whole is not deterministic, as there are e.g. different page sizes supported (similar to BDB) and the header seems to include the concrete SQLite version that was used to create the file, see https://www.sqlite.org/fileformat.html#the_database_header

    What could work for comparing is hashing the dump of the actual data, i.e..

    0$ sqlite3 -csv utxo.sqlite "select * from utxos" | sha256sum
    

    or, to compare it directly with bitcoind, calculate the MuHash via the calc_utxo_hash tool as shown in the PR description (haven’t run it in the while, but it should still work as the SQLite file format hasn’t changed).

  67. DrahtBot removed the label CI failed on Jun 19, 2024
  68. Sjors commented at 7:09 am on June 19, 2024: member

    That results in 32de3c3dc85e602878f9e5b7e6ebcd7fe917d4345f7a07c0bfd4c82b4b5639db.

    So your other approach would be to use all the CSV fields to calculate the MuHash for the entire UTXO set at block 840,000 and then compare that to the muhash value of gettxoutsetinfo muhash 840000 (with -coinstatsindex enabled)? Happy to try if someone gives me an incantation to paste…

  69. theStack commented at 10:05 am on June 19, 2024: contributor

    So your other approach would be to use all the CSV fields to calculate the MuHash for the entire UTXO set at block 840,000 and then compare that to the muhash value of gettxoutsetinfo muhash 840000 (with -coinstatsindex enabled)? Happy to try if someone gives me an incantation to paste…

    See the last section in this PR’s description above (“Manual test instructions”). It involves starting bitcoind with -coinstatsindex, creating the dump via dumptxoutset, converting the dump to sqlite (with the tool introduced in this PR), and as last step running an external MuHash calculating tool that directly accepts the sqlite format (so no conversion to CSV format needed). I just tried it with signet on height 200674 and the MuHashes match, would be nice to verify it on mainnet too.

  70. Sjors commented at 12:08 pm on June 19, 2024: member
    Ah nice, I’ll try that (tomorrow probably).
  71. Sjors commented at 1:26 pm on July 23, 2024: member
    Both gettxoutsetinfo muhash 840000 and your calc_utxo_hash.go script processing the .sqlite file find the same hash: ba56574e1b9a9f64ff9091b1baec407b35c9c34634c923e60467bc5e4265a637
  72. DrahtBot added the label CI failed on Jul 29, 2024
  73. DrahtBot commented at 2:14 am on July 29, 2024: contributor

    🚧 At least one of the CI tasks failed. Debug: https://github.com/bitcoin/bitcoin/runs/26375699750

    Make sure to run all tests locally, according to the documentation.

    The failure may happen due to a number of reasons, for example:

    • Possibly 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.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

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

  74. theStack force-pushed on Aug 10, 2024
  75. theStack commented at 10:22 pm on August 10, 2024: contributor

    Rebased on master, with the following changes:

    • adapted to the new snapshot format (VERSION=2, see #30598)
    • extended the netmagic table with Testnet4 (see #29775)
    • extended the test to also create a pay-to-anchor UTXO (see #30352)
    • print out the supposed snapshot height after processing all coins, by tracking the maximum height (see #30598 (comment))
  76. DrahtBot removed the label CI failed on Aug 10, 2024
  77. in Makefile.am:45 in df0d0b35cd outdated
    40@@ -41,7 +41,8 @@ DIST_CONTRIB = \
    41 	       $(top_srcdir)/test/sanitizer_suppressions/ubsan \
    42 	       $(top_srcdir)/contrib/linearize/linearize-data.py \
    43 	       $(top_srcdir)/contrib/linearize/linearize-hashes.py \
    44-	       $(top_srcdir)/contrib/signet/miner
    45+	       $(top_srcdir)/contrib/signet/miner \
    46+	       $(top_srcdir)/contrib/utxo-tools/utxo_to_sqlite.py
    


    hebasto commented at 3:22 pm on August 30, 2024:
    While rebasing and migrating to CMake, changes to this file can be discarded. No changes to CMake files are needed, as the “dist” target is no longer used. It will work with CMake just fine.

    fanquake commented at 3:25 pm on August 30, 2024:
    What is the CMake equivalent of make dist ? If someone wants to test that it works.

    hebasto commented at 3:31 pm on August 30, 2024:
    cmake --build build --target package_source could work, but CPack functionality is not integrated in the current implementation.

    maflcko commented at 3:32 pm on August 30, 2024:

    What is the CMake equivalent of make dist ? If someone wants to test that it works.

    git archive --prefix="${DISTNAME}/" --output="$GIT_ARCHIVE" HEAD :sweat_smile:


    fanquake commented at 3:35 pm on August 30, 2024:

    cmake –build build –target package_source could work

    Right, this doesn’t currently do anything.

    I was just confused by what you meant by "It will work with CMake just fine." above. Given that this functionality doesn’t seem to be implemented. So currently there’s no way for someone to actually generate a source tarball?


    hebasto commented at 3:49 pm on August 30, 2024:

    So currently there’s no way for someone to actually generate a source tarball?

    Correct.

  78. theStack force-pushed on Aug 30, 2024
  79. theStack commented at 11:24 pm on August 30, 2024: contributor
    Rebased on master for cmake, dropped the DIST_CONTRIB entry in Makefile.am as suggested (thanks @hebasto!). The merge conflict with #30664 should be gone with this.
  80. Sjors commented at 8:25 am on September 2, 2024: member
    Retested #27432 (comment) with 17dedb57ab8a9c24558b9d7d613a924c9f9c87fa, still works!
  81. DrahtBot added the label CI failed on Sep 6, 2024
  82. maflcko commented at 2:43 pm on September 18, 2024: member

    On CI:

    0[0m[0;31mtool_utxo_to_sqlite.py                                   |  Failed  | 2 s
    
  83. contrib: add tool to convert compact-serialized UTXO set to SQLite database 9c78d48a1d
  84. test: add test for utxo-to-sqlite conversion script 5848a51682
  85. theStack force-pushed on Sep 19, 2024
  86. theStack commented at 3:20 pm on September 19, 2024: contributor
    Rebased on master and adapted the dumptxoutset call in the test to the new interface (see #29553).
  87. DrahtBot removed the label CI failed on Sep 19, 2024
  88. DrahtBot added the label CI failed on Dec 12, 2024
  89. DrahtBot commented at 7:17 pm on December 12, 2024: contributor

    🚧 At least one of the CI tasks failed. Debug: https://github.com/bitcoin/bitcoin/runs/30384737989

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly 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.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

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


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-12-22 00:12 UTC

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