All the updates per the release process, except asmap.
Assumeutxo snapshots are available at https://achow101.com/files/utxo-snapshots/
All the updates per the release process, except asmap.
Assumeutxo snapshots are available at https://achow101.com/files/utxo-snapshots/
<!--e57a25ab6845829454e8d69fc972939a-->
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
<!--006a51241073e994b41acfe9ec718e94-->
For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/36196.
<!--021abf342d371248e50ceaed478a90ca-->
See the guideline and AI policy for information on the review process.
If your review is incorrectly listed, please copy-paste <code><!--meta-tag:bot-skip--></code> into the comment that the bot should ignore.
<!--5faf32d7da4f0f540f40219e4f7537a3-->
The asmap benchmark thinks that the address 3fff::1 belongs to AS16509. Not sure if the bug is in the asmap file or our parser.
Edit:
Hmm
::/2 AS16509
I think it's the asmap file.
Dropped the asmap update. I believe this is just an encoding issue where asmap-tool is not accounting for prefixes that are not supposed to be reachable. All asmaps more recent than the current embedding contain the problematic mapping.
I am looking into it and working on a fix for handling it better in core. While we aren't filtering this new-ish RFC 9637 explicitly in kartograf I think the mapping is introduced by the --fill the encoding.
#36201 should hopefully show that the CI is fixed through https://github.com/bitcoin/bitcoin/pull/36199
While we aren't filtering this new-ish RFC 9637 explicitly in kartograf I think the mapping is introduced by the
--fillthe encoding.
fwiw:
I'll (have my agent) generate the UTXO snapshot torrents...
utxo-965000.dat:
magnet:?xt=urn:btih:fa9e6c5e8e2c1eceb6867cb4b8923f8891e6d69b&dn=utxo-965000.dat&xl=9468312119&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.bitcoin.sprovoost.nl%3A6969
utxo-signet-320000.dat:
magnet:?xt=urn:btih:27e140a6d93aee27e6d15c4623cae4c275f315db&dn=utxo-signet-320000.dat&xl=3273449689&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.bitcoin.sprovoost.nl%3A6969
utxo-testnet3-5125000.dat:
magnet:?xt=urn:btih:513ec6334a0bac6a01fb289820e1c88b63b80993&dn=utxo-testnet3-5125000.dat&xl=13932901311&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.bitcoin.sprovoost.nl%3A6969
utxo-testnet4-150000.dat:
magnet:?xt=urn:btih:9c772a052840afb227a722715cfb547f0b1606af&dn=utxo-testnet4-150000.dat&xl=869730622&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.bitcoin.sprovoost.nl%3A6969
27e140a6d93aee27e6d15c4623cae4c275f315db
(may take a bit before they're seeding)
221 | @@ -222,8 +222,8 @@ class CMainParams : public CChainParams { 222 | 223 | // Generated by headerssync-params.py on 2026-02-25. 224 | m_headers_sync_params = HeadersSyncParams{ 225 | - .commitment_period = 641, 226 | - .redownload_buffer_size = 15218, // 15218/641 = ~23.7 commitments 227 | + .commitment_period = 620, 228 | + .redownload_buffer_size = 15724, // 15724/620 = ~25.4 commitments
These appear to be the old signet values. I'm getting:
// Generated by headerssync-params.py on 2026-09-10.
m_headers_sync_params = HeadersSyncParams{
.commitment_period = 649,
.redownload_buffer_size = 15400, // 15400/649 = ~23.7 commitments
};
oops fixed
Reproduced ACK fed50258f8f07d5549f2b53689671ca1412b2d63
ACK fed50258f8f07d5549f2b53689671ca1412b2d63
Re fcfc1df041b8cecbc2bb4bf6836f5ba643f298a5 contrib: Update fixed seeds:
All onion nodes were replaced. The new list is better (92% reachable vs 44%), but we should avoid complete swaps. Since -onlynet=onion implies -fixedseeds=1, this hardcoded list, from a single maintainer, is all it has to bootstrap with.
This happens often (cc @achow101, @virtu) and can't be explained by random drift. The problem might be that we sort by uptime first, with thousands of 100.00% results, which are then sorted by lastsuccess. If the crawler moves in a predictable circle, then we'll get a different slice each update.
<img width="2900" height="1860" alt="cohorts" src="https://github.com/user-attachments/assets/176b2f45-3b73-4252-a07c-53809411c1e7" />
In any case, it seems better to draw randomly from "good enough", and maybe not replace existing entries that are good enough.
Otherwise the update looks good. I randomly sampled the removed nodes to see if they're indeed missing, and the added nodes to see if they're reachable:
| class | added | kept | removed |
|---|---|---|---|
| ipv4 (all entries) | 375/428 (87%) | 81/84 (96%) | 169/428 (39%) |
| ipv6 (all entries) | 185/280 (66%) | 135/232 (58%) | 69/280 (24%) |
| onion (sample of 128) | 119/128 (92%) | none kept | 57/128 (44%) |
| i2p (sample of 96; kept sample 24) | 87/96 (90%) | 22/24 (91%) | 51/96 (53%) |
| cjdns (all entries) | 4/5 (80%) | 3/4 (75%) | 0/7 (0%) |
If the crawler moves in a predictable circle, then we'll get a different slice each update.
It's not quite a circle, but it is probably predictable. It crawls the least recently seen nodes first, which would end up crawling in roughly the same order over time. But this is true for all networks, it does not discriminate which network to crawl.
In any case, it seems better to draw randomly from "good enough", and maybe not replace existing entries that are good enough.
makeseeds.py does not use the existing seeds file, it produces a new result each time it is run. That there is overlap is because some nodes are consistently good. I don't think we want the fixed seeds to remain too static, turnover is good in this case.
There already is a shuffle at the beginning of script. I suppose another shuffle before the final truncation could be done to break any list order biases caused by the filtering and sorts.
post-merge tACK, I've validated the new chainparams and headerssync against my own nodes. I'll be hosting the new torrent snapshot files at https://bitcoin-snapshots.jaonoctus.dev.
m_assumeutxo_data @ 965'000hash_serializedm_chain_tx_countblockhashchainTxData @ 966'143nTimetx_countdTxRateconsensus.nMinimumChainWork @ 966'143consensus.defaultAssumeValid @ 966'143<details>
<summary>Details</summary>
$ bitcoin-cli getblockhash 965000
00000000000000000001595977e6000ce56129f5c9b4073e31ccc30b90b97da9
$ bitcoin-cli getblockhash 966143
00000000000000000000748969ec33043c0e52a763c6dd5193861f559f2c72e3
# tip: 965'000
$ bitcoin-cli gettxoutsetinfo hash_serialized_3
{
"height": 965000,
"bestblock": "00000000000000000001595977e6000ce56129f5c9b4073e31ccc30b90b97da9",
"txouts": 165734792,
"bogosize": 12980812534,
"hash_serialized_3": "4a8d794337118c0c615b574f817c7306c687584a537184b8d233df42bf477ec2",
"total_amount": 20077898.00887204,
"transactions": 114686949,
"disk_size": 14048020123
}
# tip: 965'000
$ bitcoin-cli getchaintxstats 4096
{
"time": 1788244455,
"txcount": 1429611231,
"window_final_block_hash": "00000000000000000001595977e6000ce56129f5c9b4073e31ccc30b90b97da9",
"window_final_block_height": 965000,
"window_block_count": 4096,
"window_interval": 2458636,
"window_tx_count": 19105090,
"txrate": 7.770605327506797
}
# tip: 966'143
$ bitcoin-cli getchaintxstats 4096
{
"time": 1788925573,
"txcount": 1434982600,
"window_final_block_hash": "00000000000000000000748969ec33043c0e52a763c6dd5193861f559f2c72e3",
"window_final_block_height": 966143,
"window_block_count": 4096,
"window_interval": 2448529,
"window_tx_count": 19225322,
"txrate": 7.851784479579372
}
$ bitcoin-cli getblockheader 00000000000000000000748969ec33043c0e52a763c6dd5193861f559f2c72e3
{
"hash": "00000000000000000000748969ec33043c0e52a763c6dd5193861f559f2c72e3",
"confirmations": 339,
"height": 966143,
"version": 703627264,
"versionHex": "29f08000",
"merkleroot": "d615bfd60f843daa3278f821fa363aeab618948d45492ca1f502eee442fdd839",
"time": 1788925573,
"mediantime": 1788922141,
"nonce": 1319004212,
"bits": "1702355e",
"target": "00000000000000000002355e0000000000000000000000000000000000000000",
"difficulty": 127450789715843.1,
"chainwork": "000000000000000000000000000000000000000145ec036acc5ba740052af1a0",
"nTx": 5367,
"previousblockhash": "000000000000000000011476fd50a9970a2a8dfbb506c290e953b683f4e768fd",
"nextblockhash": "000000000000000000010a8fffd5112dba2e1910198d003453da3be093e4c2d0"
}
$ bitcoin-cli dumptxoutset utxo-965000.dat latest
{
"coins_written": 165734792,
"base_hash": "00000000000000000001595977e6000ce56129f5c9b4073e31ccc30b90b97da9",
"base_height": 965000,
"path": "utxo-965000.dat",
"txoutset_hash": "4a8d794337118c0c615b574f817c7306c687584a537184b8d233df42bf477ec2",
"nchaintx": 1429611231
}
$ sha256sum utxo-965000.dat
89351f7106051c0685880f9c64026e993335308de63ae6980e94ba3fafdc7dda utxo-965000.dat
</details>
m_assumeutxo_data @ 150'000hash_serializedm_chain_tx_countblockhashchainTxData @ 151'604nTimetx_countdTxRateconsensus.nMinimumChainWork @ 151'604consensus.defaultAssumeValid @ 151'604<details>
<summary>Details</summary>
$ bitcoin-cli getblockhash 150000
0000000000d9877342754dea8ec1eb24631517d38e3443c370465ee53a8b7434
$ bitcoin-cli getblockhash 151604
0000000021df65b91665a342e26ceb05e54826ad7d8fcd40316230058fa3b865
# tip: 150'000
$ bitcoin-cli gettxoutsetinfo hash_serialized_3
{
"height": 150000,
"bestblock": "0000000000d9877342754dea8ec1eb24631517d38e3443c370465ee53a8b7434",
"txouts": 14228512,
"bogosize": 1171834910,
"hash_serialized_3": "ca068cae50679d7c947454bbe4f0e6aeec1fbe2c6c2735a08bb988623649f950",
"total_amount": 7499549.94974240,
"transactions": 9354619,
"disk_size": 1046376511
}
# tip: 150'000
$ bitcoin-cli getchaintxstats 4096
{
"time": 1787845213,
"txcount": 14810011,
"window_final_block_hash": "0000000000d9877342754dea8ec1eb24631517d38e3443c370465ee53a8b7434",
"window_final_block_height": 150000,
"window_block_count": 4096,
"window_interval": 2714568,
"window_tx_count": 315032,
"txrate": 0.1160523516080643
}
# tip: 151'604
$ bitcoin-cli getchaintxstats 4096
{
"time": 1788932739,
"txcount": 14825119,
"window_final_block_hash": "0000000021df65b91665a342e26ceb05e54826ad7d8fcd40316230058fa3b865",
"window_final_block_height": 151604,
"window_block_count": 4096,
"window_interval": 2745926,
"window_tx_count": 315301,
"txrate": 0.1148250171344748
}
$ bitcoin-cli getblockheader 0000000021df65b91665a342e26ceb05e54826ad7d8fcd40316230058fa3b865
{
"hash": "0000000021df65b91665a342e26ceb05e54826ad7d8fcd40316230058fa3b865",
"confirmations": 1,
"height": 151604,
"version": 536870912,
"versionHex": "20000000",
"merkleroot": "dd822c3e35c622c59413d639db6c0b965eda25964068a63036e23dab815fa822",
"time": 1788932739,
"mediantime": 1788929136,
"nonce": 1499302512,
"bits": "1d00ffff",
"target": "00000000ffff0000000000000000000000000000000000000000000000000000",
"difficulty": 1,
"chainwork": "000000000000000000000000000000000000000000000e346a558455ade8eca9",
"nTx": 5,
"previousblockhash": "0000000000abf052f9ece5ee86baf0501203e797715a1d7d6cc556217e58b096"
}
$ bitcoin-cli dumptxoutset utxo-testnet4-150000.dat latest
{
"coins_written": 14228512,
"base_hash": "0000000000d9877342754dea8ec1eb24631517d38e3443c370465ee53a8b7434",
"base_height": 150000,
"path": "utxo-testnet4-150000.dat",
"txoutset_hash": "ca068cae50679d7c947454bbe4f0e6aeec1fbe2c6c2735a08bb988623649f950",
"nchaintx": 14810011
}
$ sha256sum utxo-testnet4-150000.dat
c685c448acca66a4c4135fb528f47cf1209c8e7757b2a4a3c229bb9a3f98271b utxo-testnet4-150000.dat
</details>
m_assumeutxo_data @ 5'125'000hash_serializedm_chain_tx_countblockhashchainTxData @ 5'128'859nTimetx_countdTxRateconsensus.nMinimumChainWork @ 5'128'859consensus.defaultAssumeValid @ 5'128'859<details>
<summary>Details</summary>
$ bitcoin-cli getblockhash 5125000
00000000000009ad1946e21cb4f1a6323ee99c89017b59d5166472672b868133
$ bitcoin-cli getblockhash 5128859
00000000b318a3703d14a844c55ef507f4c2fc8f8766e24271fd43c180c51637
# tip: 5'125'000
$ bitcoin-cli gettxoutsetinfo hash_serialized_3
{
"height": 5125000,
"bestblock": "00000000000009ad1946e21cb4f1a6323ee99c89017b59d5166472672b868133",
"txouts": 236459793,
"bogosize": 18989414716,
"hash_serialized_3": "d05430f34c9b7dd7eb98c0718cdf03782bcce8273847557d68ac2efc1365d4b8",
"total_amount": 20999099.26924807,
"transactions": 152269864,
"disk_size": 16730227054
}
# tip: 5'125'000
$ bitcoin-cli getchaintxstats 4096
{
"time": 1787189783,
"txcount": 536708663,
"window_final_block_hash": "00000000000009ad1946e21cb4f1a6323ee99c89017b59d5166472672b868133",
"window_final_block_height": 5125000,
"window_block_count": 4096,
"window_interval": 411914,
"window_tx_count": 10520,
"txrate": 0.02553931160387848
}
# tip: 5'128'859
$ bitcoin-cli getchaintxstats 4096
{
"time": 1788932318,
"txcount": 536748780,
"window_final_block_hash": "00000000b318a3703d14a844c55ef507f4c2fc8f8766e24271fd43c180c51637",
"window_final_block_height": 5128859,
"window_block_count": 4096,
"window_interval": 1772014,
"window_tx_count": 40875,
"txrate": 0.02306697351149596
}
$ bitcoin-cli getblockheader 00000000b318a3703d14a844c55ef507f4c2fc8f8766e24271fd43c180c51637
{
"hash": "00000000b318a3703d14a844c55ef507f4c2fc8f8766e24271fd43c180c51637",
"confirmations": 1,
"height": 5128859,
"version": 536870912,
"versionHex": "20000000",
"merkleroot": "81b24fd622e74a21b7887d67d7493d0b96cbec7ba1756aebd0d522f21b6f3608",
"time": 1788932318,
"mediantime": 1788927513,
"nonce": 1103855859,
"bits": "1d00ffff",
"target": "00000000ffff0000000000000000000000000000000000000000000000000000",
"difficulty": 1,
"chainwork": "0000000000000000000000000000000000000000000017f49f702147f10c0eb6",
"nTx": 23,
"previousblockhash": "00000000a963e65ef181a5ca63397dd473a2f5fd39e981d18fb5447aef0e7bfd"
}
$ bitcoin-cli dumptxoutset utxo-testnet3-5125000.dat latest
{
"coins_written": 236459793,
"base_hash": "00000000000009ad1946e21cb4f1a6323ee99c89017b59d5166472672b868133",
"base_height": 5125000,
"path": "utxo-testnet3-5125000.dat",
"txoutset_hash": "d05430f34c9b7dd7eb98c0718cdf03782bcce8273847557d68ac2efc1365d4b8",
"nchaintx": 536708663
}
$ sha256sum utxo-testnet3-5125000.dat
00835fd8d0ca9d399a596108b4d6895d69d953073d4816779fa80ed93e7bf5fe utxo-testnet3-5125000.dat
</details>
m_assumeutxo_data @ 320'000hash_serializedm_chain_tx_countblockhashchainTxData @ 321'295nTimetx_countdTxRateconsensus.nMinimumChainWork @ 321'295consensus.defaultAssumeValid @ 321'295<details>
<summary>Details</summary>
$ bitcoin-cli getblockhash 320000
0000000740ae66b284da84387dcfa14d7b1385b0bad482005ba4e770ea6c4b95
$ bitcoin-cli getblockhash 321295
00000002a5e0ba0498f1e9f4591af0b66b63c654665efe65206fd0ae7bbaf923
# tip: 320'000
$ bitcoin-cli gettxoutsetinfo hash_serialized_3
{
"height": 320000,
"bestblock": "0000000740ae66b284da84387dcfa14d7b1385b0bad482005ba4e770ea6c4b95",
"txouts": 75018455,
"bogosize": 5945547366,
"hash_serialized_3": "1aaf72ecb376cc16957fbb8d5d406bfd6e3165510e2fc83879b6d14cd20b4462",
"total_amount": 13249726.78735621,
"transactions": 12255818,
"disk_size": 4324652547
}
# tip: 320'000
$ bitcoin-cli getchaintxstats 4096
{
"time": 1788098687,
"txcount": 32079110,
"window_final_block_hash": "0000000740ae66b284da84387dcfa14d7b1385b0bad482005ba4e770ea6c4b95",
"window_final_block_height": 320000,
"window_block_count": 4096,
"window_interval": 2404848,
"window_tx_count": 1314106,
"txrate": 0.5464403571452333
}
# tip: 321'295
$ bitcoin-cli getchaintxstats 4096
{
"time": 1788925860,
"txcount": 32273793,
"window_final_block_hash": "00000002a5e0ba0498f1e9f4591af0b66b63c654665efe65206fd0ae7bbaf923",
"window_final_block_height": 321295,
"window_block_count": 4096,
"window_interval": 2496313,
"window_tx_count": 992925,
"txrate": 0.3977566114505673
}
$ bitcoin-cli getblockheader 00000002a5e0ba0498f1e9f4591af0b66b63c654665efe65206fd0ae7bbaf923
{
"hash": "00000002a5e0ba0498f1e9f4591af0b66b63c654665efe65206fd0ae7bbaf923",
"confirmations": 1,
"height": 321295,
"version": 536870912,
"versionHex": "20000000",
"merkleroot": "d1d699854ed73c8226ef116ddcdb37f973e6774c24728d9b4db7b46155bdbd91",
"time": 1788925860,
"mediantime": 1788923464,
"nonce": 443711962,
"bits": "1d1419ac",
"target": "0000001419ac0000000000000000000000000000000000000000000000000000",
"difficulty": 0.0497497897201228,
"chainwork": "00000000000000000000000000000000000000000000000000001090e9dc1520",
"nTx": 329,
"previousblockhash": "00000006e54e5b115c6ad9791003b7693ca938d24a8b7ad2d3f71291e713fd0b"
}
$ bitcoin-cli dumptxoutset utxo-signet-320000.dat latest
{
"coins_written": 75018455,
"base_hash": "0000000740ae66b284da84387dcfa14d7b1385b0bad482005ba4e770ea6c4b95",
"base_height": 320000,
"path": "utxo-signet-320000.dat",
"txoutset_hash": "1aaf72ecb376cc16957fbb8d5d406bfd6e3165510e2fc83879b6d14cd20b4462",
"nchaintx": 32079110
}
$ sha256sum utxo-signet-320000.dat
0a546b040c00336e132174c352e06ea48eb9d6451baa99720bc849c1a92a2ee1 utxo-signet-320000.dat
</details>
Milestone
32.0