Mempool: Do not enforce TRUC checks on reorg#33504
Conversation
|
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. Code Coverage & BenchmarksFor details see: https://corecheck.dev/bitcoin/bitcoin/pulls/33504. ReviewsSee the guideline for information on the review process.
If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update. ConflictsReviewers, this pull request conflicts with the following ones:
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first. |
|
https://github.com/bitcoin/bitcoin/actions/runs/18108538923/job/51529011305?pr=33504#step:8:1778: Error processing input "/Users/runner/work/bitcoin/bitcoin/ci/scratch/qa-assets/fuzz_corpora/tx_pool/93f59991917f0dc980deabf80d553cf4573ebdd5"
test/util/txmempool.cpp:191 CheckMempoolTRUCInvariants: Assertion `entry.GetCountWithDescendants() <= TRUC_DESCENDANT_LIMIT' failed.
Error processing input "/Users/runner/work/bitcoin/bitcoin/ci/scratch/qa-assets/fuzz_corpora/tx_pool/93f59991917f0dc980deabf80d553cf4573ebdd5"
⚠️ Failure generated from target with exit code 1: ['/Users/runner/work/bitcoin/bitcoin/ci/scratch/build-aarch64-apple-darwin23.6.0/bin/fuzz', PosixPath('/Users/runner/work/bitcoin/bitcoin/ci/scratch/qa-assets/fuzz_corpora/tx_pool')] |
a6cd2cb to
62f6c78
Compare
|
@fanquake thanks, TRUC topology is no longer actually being stopped when limits are bypassed(when a reorg happens), so invariants checks for TRUC may fail now. I now removed the bypass_limits flags from all but one harness because they're not actually being used to model reorgs. If we want to fuzz reorgs, we should do that instead. |
Using bypass_limits=true is essentially fuzzing part of a reorg only, and results in TRUC invariants unable to be checked. Remove most instances of bypassing limits, leaving one harness able to do so.
Not enforcing TRUC topology on reorg was the intended behavior, but the appropriate bypass argument was not checked. This mistake means we could potentially invalidate a long chain of perfectly incentive-compatible transactions that were made historically, including subsequent non-TRUC transactions, all of which may have been very high feerate. Lastly, it wastes CPU cycles doing topology checks since this behavior cannot actually enforce the topology in general for the reorg setting.
62f6c78 to
06df14b
Compare
Using bypass_limits=true is essentially fuzzing part of a reorg only, and results in TRUC invariants unable to be checked. Remove most instances of bypassing limits, leaving one harness able to do so. Github-Pull: bitcoin#33504 Rebased-From: bbe8e90
Not enforcing TRUC topology on reorg was the intended behavior, but the appropriate bypass argument was not checked. This mistake means we could potentially invalidate a long chain of perfectly incentive-compatible transactions that were made historically, including subsequent non-TRUC transactions, all of which may have been very high feerate. Lastly, it wastes CPU cycles doing topology checks since this behavior cannot actually enforce the topology in general for the reorg setting. Github-Pull: bitcoin#33504 Rebased-From: 26e71c2
Github-Pull: bitcoin#33504 Rebased-From: 06df14b
|
ACK 06df14b |
glozow
left a comment
There was a problem hiding this comment.
ACK 06df14b
We don't re-check TRUC rules for descendants of reorged transactions because (1) there would be a performance hit and (2) we'd prefer to keep those fee-paying transactions: #28948 (comment). I agree it makes sense to also skip the ones in blocks themselves for similar reasons, especially as there are miners that don't apply the TRUC rules - it'd be good to re-mine their transactions if there are reorgs.
| // have a non-TRUC and non-BIP125 descendant is due to a reorg. | ||
| } else { | ||
| return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "TRUC-violation", err->first); | ||
| if (!args.m_bypass_limits) { |
There was a problem hiding this comment.
While PackageTRUCChecks isn't in the reorg calling path, I think it would be cleaner and more future-proof to also gate that using if (!args.m_bypass_limits). There are Assumes in that function relying on the fact that SingleTRUCChecks is called first.
If you'd prefer not to, I'd recommend a comment in the commit message explaining that PackageTRUCChecks are not gated here because reorgs do not ever go through AcceptMultipleTransactions.
| def test_truc_reorg(self): | ||
| node = self.nodes[0] | ||
| self.log.info("Test that, during a reorg, TRUC rules are not enforced") | ||
| tx_v2_block = self.wallet.send_self_transfer(from_node=node, version=2) |
There was a problem hiding this comment.
Suggestion for a few more within-block test cases, if you're interested (can also just open a followup, have some other test ideas as well)
diff --git a/test/functional/mempool_truc.py b/test/functional/mempool_truc.py
index 098631b5c41..58c69f07819 100755
--- a/test/functional/mempool_truc.py
+++ b/test/functional/mempool_truc.py
@@ -167,34 +167,76 @@ class MempoolTRUC(BitcoinTestFramework):
self.log.info("Test that, during a reorg, TRUC rules are not enforced")
self.check_mempool([])
+ # TRUC violations across the block + mempool
# Testing 2<-3 versions allowed
tx_v2_block = self.wallet.create_self_transfer(version=2)
-
# Testing 3<-2 versions allowed
tx_v3_block = self.wallet.create_self_transfer(version=3)
-
# Testing overly-large child size
- tx_v3_block2 = self.wallet.create_self_transfer(version=3)
+ tx_v3_large_parent = self.wallet.create_self_transfer(version=3)
+
+ # TRUC violations within the block
+ # 2<-3 versions
+ tx_v2_parent = self.wallet.create_self_transfer(version=2)
+ tx_v3_child = self.wallet.create_self_transfer(utxo_to_spend=tx_v2_parent["new_utxo"], version=3)
+ # 3<-2 versions
+ tx_v3_parent = self.wallet.create_self_transfer(version=3)
+ tx_v2_child = self.wallet.create_self_transfer(utxo_to_spend=tx_v3_parent["new_utxo"], version=2)
# Also create a linear chain of 3 TRUC transactions that will be directly mined, followed by one v2 in-mempool after block is made
tx_chain_1 = self.wallet.create_self_transfer(version=3)
tx_chain_2 = self.wallet.create_self_transfer(utxo_to_spend=tx_chain_1["new_utxo"], version=3)
tx_chain_3 = self.wallet.create_self_transfer(utxo_to_spend=tx_chain_2["new_utxo"], version=3)
- tx_to_mine = [tx_v3_block["hex"], tx_v2_block["hex"], tx_v3_block2["hex"], tx_chain_1["hex"], tx_chain_2["hex"], tx_chain_3["hex"]]
+ # 1-parent-2-child group of TRUC transactions that will be directly mined.
+ tx_1p2c_parent = self.wallet.create_self_transfer_multi(num_outputs=2, version=3)
+ tx_1p2c_child1 = self.wallet.create_self_transfer(utxo_to_spend=tx_1p2c_parent["new_utxos"][0], version=3)
+ tx_1p2c_child2 = self.wallet.create_self_transfer(utxo_to_spend=tx_1p2c_parent["new_utxos"][1], version=3)
+
+ # 2-parent-1-child group of TRUC transactions that will be directly mined.
+ tx_2p1c_parent1 = self.wallet.create_self_transfer(version=3)
+ tx_2p1c_parent2 = self.wallet.create_self_transfer(version=3)
+ tx_2p1c_child = self.wallet.create_self_transfer_multi(utxos_to_spend=[tx_2p1c_parent1["new_utxo"], tx_2p1c_parent2["new_utxo"]], version=3)
+
+ tx_to_mine = [
+ tx_v3_block["hex"], tx_v2_block["hex"], tx_v3_large_parent["hex"],
+ tx_v2_parent["hex"], tx_v3_child["hex"],
+ tx_v3_parent["hex"], tx_v2_child["hex"],
+ tx_chain_1["hex"], tx_chain_2["hex"], tx_chain_3["hex"],
+ tx_1p2c_parent["hex"], tx_1p2c_child1["hex"], tx_1p2c_child2["hex"],
+ tx_2p1c_parent1["hex"], tx_2p1c_parent2["hex"], tx_2p1c_child["hex"]
+ ]
block = self.generateblock(node, output="raw(42)", transactions=tx_to_mine)
self.check_mempool([])
tx_v2_from_v3 = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v3_block["new_utxo"], version=2)
tx_v3_from_v2 = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v2_block["new_utxo"], version=3)
- tx_v3_child_large = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v3_block2["new_utxo"], target_vsize=1250, version=3)
- assert_greater_than(node.getmempoolentry(tx_v3_child_large["txid"])["vsize"], TRUC_CHILD_MAX_VSIZE)
+ tx_v3_large_child = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_v3_large_parent["new_utxo"], target_vsize=1250, version=3)
+ assert_greater_than(node.getmempoolentry(tx_v3_large_child["txid"])["vsize"], TRUC_CHILD_MAX_VSIZE)
+
tx_chain_4 = self.wallet.send_self_transfer(from_node=node, utxo_to_spend=tx_chain_3["new_utxo"], version=2)
- self.check_mempool([tx_v2_from_v3["txid"], tx_v3_from_v2["txid"], tx_v3_child_large["txid"], tx_chain_4["txid"]])
+ self.check_mempool([tx_v2_from_v3["txid"], tx_v3_from_v2["txid"], tx_v3_large_child["txid"], tx_chain_4["txid"]])
# Reorg should have all block transactions re-accepted, ignoring TRUC enforcement
node.invalidateblock(block["hash"])
- self.check_mempool([tx_v3_block["txid"], tx_v2_block["txid"], tx_v3_block2["txid"], tx_v2_from_v3["txid"], tx_v3_from_v2["txid"], tx_v3_child_large["txid"], tx_chain_1["txid"], tx_chain_2["txid"], tx_chain_3["txid"], tx_chain_4["txid"]])
+ self.check_mempool([
+ # 3<-2 block + mempool
+ tx_v3_block["txid"], tx_v2_from_v3["txid"],
+ # 2<-3 block + mempool
+ tx_v2_block["txid"], tx_v3_from_v2["txid"],
+ # oversized child block + mempool
+ tx_v3_large_parent["txid"], tx_v3_large_child["txid"],
+ # 2<-3 within the block
+ tx_v2_parent["txid"], tx_v3_child["txid"],
+ # 3<-2 within the block
+ tx_v3_parent["txid"], tx_v2_child["txid"],
+ # chain of 3 in block + 1 in mempool
+ tx_chain_1["txid"], tx_chain_2["txid"], tx_chain_3["txid"], tx_chain_4["txid"],
+ # 1-parent-2-child in block
+ tx_1p2c_parent["txid"], tx_1p2c_child1["txid"], tx_1p2c_child2["txid"],
+ # 2-parent-1-child in block
+ tx_2p1c_parent1["txid"], tx_2p1c_parent2["txid"], tx_2p1c_child["txid"],
+ ])
@cleanup(extra_args=["-limitdescendantsize=10"])
def test_nondefault_package_limits(self):
There was a problem hiding this comment.
nit: documentation for bypass_limits in validation.h could mention that TRUC rules are not enforced and it's intended for reorgs
There was a problem hiding this comment.
Code review ACK 06df14b
I've reviewed the code and verify that after this PR TRUC rules are not enforced when limit is bypassed only for single transactions validation path.
Few nits on tests which can come in follow-up with glozow suggestions as well.
| # Testing 3<-2 versions allowed | ||
| tx_v3_block = self.wallet.create_self_transfer(version=3) | ||
|
|
||
| # Testing overly-large child size |
There was a problem hiding this comment.
In "test: add more TRUC reorg coverge" 06df14b
What does "Testing overly-large child size" mean here? the tx being created has a normal size
maybe use the pointer as used above 3<-2 (large size)?
| block = self.generateblock(node, output="raw(42)", transactions=tx_to_mine) | ||
|
|
||
| block = self.generate(node, 1) | ||
| self.check_mempool([]) |
There was a problem hiding this comment.
In "test: add more TRUC reorg coverge" 06df14b
This empty mempool check in between the block generation is redundant, because we have not send any transaction to the mempool.
Using bypass_limits=true is essentially fuzzing part of a reorg only, and results in TRUC invariants unable to be checked. Remove most instances of bypassing limits, leaving one harness able to do so. Github-Pull: bitcoin#33504 Rebased-From: bbe8e90
Not enforcing TRUC topology on reorg was the intended behavior, but the appropriate bypass argument was not checked. This mistake means we could potentially invalidate a long chain of perfectly incentive-compatible transactions that were made historically, including subsequent non-TRUC transactions, all of which may have been very high feerate. Lastly, it wastes CPU cycles doing topology checks since this behavior cannot actually enforce the topology in general for the reorg setting. Github-Pull: bitcoin#33504 Rebased-From: 26e71c2
81cec737e68 kernel: Fix bitcoin-chainstate for windows 1826c485ddc kernel: Add Purpose section to header documentation d7e618aa981 kernel: Allowing reducing exports fb7f5241331 kernel: Add pure kernel bitcoin-chainstate dd0bdf279ef Kernel: Add functions for working with outpoints eaa6abfc733 kernel: Add block hash type and block tree utility functions to C header 824ddf2885a kernel: Add function to read block undo data from disk to C header 76cab0768b1 kernel: Add functions to read block from disk to C header e41f6f459a2 kernel: Add function for copying block data to C header 39c647647a2 kernel: Add functions for the block validation state to C header 8a19a9d6070 kernel: Add validation interface to C header 38a990dd482 kernel: Add interrupt function to C header fee8f6ff38b kernel: Add import blocks function to C header c29a6b87ccd kernel: Add chainstate load options for in-memory dbs in C header e788b3ba065 kernel: Add options for reindexing in C header 2707fc515c5 kernel: Add block validation to C header 51a24c4004e kernel: Add chainstate loading when instantiating a ChainstateManager ea01a8caf35 kernel: Add chainstate manager option for setting worker threads add5904e0ac kernel: Add chainstate manager object to C header 37a3395d271 kernel: Add notifications context option to C header d838a934be0 kernel: Add chain params context option to C header dc58ae9fc04 kernel: Add kernel library context object 77449975962 kernel: Add logging to kernel library C header dc504f57b3b kernel: Introduce initial kernel C header API b510893d007 Merge bitcoin/bitcoin#33494: depends: Update URL for `qrencode` package source tarball ec5841888de Merge bitcoin/bitcoin#32513: ci: remove 3rd party js from windows dll gha job d735e2e9b39 Merge bitcoin/bitcoin#32998: Bump SCRIPT_VERIFY flags to 64 bit de1dc6b47ba Merge bitcoin/bitcoin#33515: Improve LastCommonAncestor performance + add tests 919e6d01e93 Merge bitcoin/bitcoin#33489: build: Drop support for EOL macOS 13 452ea592811 Merge bitcoin/bitcoin#33454: net: support overriding the proxy selection in ConnectNode() a33bd767a37 Merge bitcoin/bitcoin#33464: p2p: Use network-dependent timers for inbound inv scheduling 2578da69f41 Merge bitcoin/bitcoin#33485: test: set par=2 in default config for functional test framework 25dbe4bc86d Merge bitcoin/bitcoin#33533: test: addrman: check isTerrible when time is more than 10min in the future cfb0d74698a Merge bitcoin/bitcoin#33121: test: fix p2p_leak_tx.py 86eaa4d6cd5 Merge bitcoin/bitcoin#33482: contrib: fix macOS deployment with no translations 007900ee9b8 Merge bitcoin/bitcoin#33434: depends: static libxcb-cursor 8e47ed6906d test: addrman: check isTerrible when time is more than 10min in the future 3635d62f5a9 chain: make use of pskip in LastCommonAncestor (optimization) 2e09d66fbb7 tests: add unit tests for CBlockIndex::GetAncestor and LastCommonAncestor 156927903d6 ci: Check windows manifests for all executables e1a1b14c935 ci: use a more generic way of finding mt.exe 1ed00a0d39d Merge bitcoin/bitcoin#33504: Mempool: Do not enforce TRUC checks on reorg c76de2eea18 net: support overriding the proxy selection in ConnectNode() 75353a01635 Merge bitcoin/bitcoin#32326: net: improve the interface around FindNode() and avoid a recursive mutex lock 87e7f37918d doc: clarify peer address in getpeerinfo and addnode RPC help 2a4450ccbbe net: change FindNode() to not return a node and rename it 4268abae1a1 net: avoid recursive m_nodes_mutex lock in DisconnectNode() acc7f2a433b Merge bitcoin/bitcoin#33401: ci: Remove bash -c from cmake invocation using eval 1aaaaa078bb fuzz: Drop unused workaround after Apple-Clang bump fadad7a4947 Drop support for EOL macOS 13 50194029e7c ci: Remove bash -c from cmake invocation using eval f41f97240c0 Merge bitcoin/bitcoin#28584: Fuzz: extend CConnman tests cc4a2cc6bdc Merge bitcoin/bitcoin#33453: docs: Undeprecate datacarrier and datacarriersize configuration options 7502d4e9403 Merge bitcoin/bitcoin#33260: test: Use extra_port() helper in feature_bind_extra.py 14ae71f323d test: make notfound_on_unannounced more reliable 99bc552980d test: fix (w)txid confusion in p2p_leak_tx.py 576dd97cb91 test: increase timeout in p2p_leak_tx.py 8f73d952214 Merge bitcoin/bitcoin#33299: wallet: reduce unconditional logging during load 0f7d4ee4e82 p2p: Use different inbound inv timer per network 93a70a42d30 depends: Update URL for `qrencode` package source tarball 6de80512632 depends: Use hash instead of file name for package download stamp 46135d90ea9 depends: Drop redundant check for downloaded file 771978952a9 depends: Fix `$(package)_fetched` target 25212dfdb4c Merge bitcoin/bitcoin#33487: ci: use latest versions of lint deps 06df14ba75b test: add more TRUC reorg coverge 26e71c237d9 Mempool: Do not enforce TRUC checks on reorg bbe8e9063c1 fuzz: don't bypass_limits for most mempool harnesses d4f47f97715 ci: use latest versions of lint deps fc861332b35 wallet, log: reduce unconditional logging during load 3a4d1a25cf9 net: merge AlreadyConnectedToAddress() and FindNode(CNetAddr) d8fe258cd61 Merge bitcoin/bitcoin#33484: doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness) dda5228e02c test: set par=2 in default config for functional test framework ff05bebcc42 doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness) 200150beba6 Merge bitcoin/bitcoin#33313: test/refactor: use test deque to avoid quadratic iteration 7e08445449f Merge bitcoin/bitcoin#33399: key: use static context for libsecp256k1 calls where applicable 7b5261f7ef3 contrib: fix using macdploy script without translations. 65e909dfdd9 Merge bitcoin/bitcoin#33430: rpc: addpeeraddress: throw on invalid IP 31b29f8eb62 Merge bitcoin/bitcoin#33229: multiprocess: Don't require bitcoin -m argument when IPC options are used e62e0a12b33 Merge bitcoin/bitcoin#33230: cli: Handle arguments that can be either JSON or string 7ae0497eef8 ci: remove 3rd party js from windows dll gha job 05d984b1a4f Merge bitcoin/bitcoin#33475: bugfix: miner: fix `addPackageTxs` unsigned integer overflow b807dfcdc59 miner: fix `addPackageTxs` unsigned integer overflow d41b503ae12 Merge bitcoin/bitcoin#33446: rpc: fix getblock(header) returns target for tip 5ae8edbc304 Merge bitcoin/bitcoin#33158: macdeploy: avoid use of `Bitcoin Core` in Linux cross build df67bb6fd84 test: Remove convert_to_json_for_cli 44a493e150a cli: Allow arguments to be both strings and json ad4a49090da Merge bitcoin/bitcoin#33408: msvc: Update vcpkg manifest dd61f08fd52 Merge bitcoin/bitcoin#33031: wallet: Set descriptor cache upgraded flag for migrated wallets 350692e561c Merge bitcoin/bitcoin#33388: test: don't throw from the destructor of DebugLogHelper 94db966a3bb net: use generic network key for addrcache eca50854e1c depends: static libxcb_cursor 89144eb473c Merge bitcoin/bitcoin#33448: net/rpc: Report inv information for debugging eaa1a3cd0b3 Merge bitcoin/bitcoin#33425: ci: remove Clang build from msan fuzz job b77137a5644 ci: link against -lstdc++ in native fuzz with msan job a86e1a6e32d Merge bitcoin/bitcoin#33427: rpc: Always return per-wtxid entries in submitpackage tx-results 6861dadfcb1 Merge bitcoin/bitcoin#33459: doc: remove unrelated `bitcoin-wallet` binary from `libbitcoin_ipc` description 3b3ab3a50a0 Merge bitcoin/bitcoin#33302: ci: disable cirrus cache in 32bit arm job 2738b63e025 test: validate behaviour of getpeerinfo last_inv_sequence and inv_to_send fbde8d9a81d doc: remove unrelated `bitcoin-wallet` binary from `libbitcoin_ipc` description 34fefb63358 Merge bitcoin/bitcoin#33435: system: improve handling around GetTotalRAM() 56791b58295 test: split out `system_ram_tests` to signal when total ram cannot be determined 337a6e73861 system: improve handling around GetTotalRAM() 451ba9ada41 datacarrier: Undeprecate configuration option 77b2ebb8118 rpc/net: report per-peer last_inv_sequence bf7996cbc3b rpc: fix getblock(header) returns target for tip 4c3c1f42cf7 test: add block 2016 to mock mainnet 953544d0286 Merge bitcoin/bitcoin#33429: fuzz: reduce iterations in slow targets df101c97c26 Merge bitcoin/bitcoin#33422: build: Remove lingering Windows registry & shortcuts (#32132 follow-up) 56c6daa64f6 Merge bitcoin/bitcoin#28592: p2p: Increase tx relay rate 79752b9c0b6 build(windows): Remove lingering registry entries and shortcuts upon install cad9a7fd737 rpc: Always return per-wtxid entries in submitpackage tx-results 6a33970fef1 fuzz: Reduce iterations in slow targets edb871cba22 Merge bitcoin/bitcoin#33412: Update libmultiprocess subtree to fix intermittent mptest hang 2427939935f test: forbid copying of DebugLogHelper d6aa266d432 test: don't throw from the destructor of DebugLogHelper eaf2c464758 Merge bitcoin/bitcoin#33378: Remove unnecessary casts when calling socket operations 5aec516b2ce Merge bitcoin/bitcoin#33333: coins: warn on oversized `-dbcache` 316a0c51327 rpc: addpeeraddress: throw on invalid IP 74fa028da1e Merge bitcoin/bitcoin#33420: test: Avoid interface_ipc.py Duplicate ID errors 168360f4ae4 coins: warn on oversized -dbcache 6c720459bee system: add helper for fetching total system memory e9c52272ebd test: Avoid interface_ipc.py Duplicate ID errors c49a43591f8 Merge commit '535fa0ad0d2637f845beae92ea9dbbbbbe377c74' into pr/subtree-5 535fa0ad0d2 Squashed 'src/ipc/libmultiprocess/' changes from 13424cf2ecc1..47d79db8a552 453b0fa286e bitcoin: Make wrapper not require -m 1444ed855f4 Merge bitcoin/bitcoin#33407: cmake: Install `bitcoin` manpage 29e836fae66 test: add tool_bitcoin to test bitcoin wrapper behavior 0972f550402 init: add exe name to bitcoind, bitcoin-node -version output to be able to distinguish these in tests 2b0cd1f3fb2 Merge bitcoin/bitcoin#33395: net: do not apply whitelist permissions to onion inbounds ef20c2d11d9 build, msvc: Update vcpkg manifest baseline 1ff9e929489 key: use static context for libsecp256k1 calls where applicable f563ce90818 net: Do not apply whitelist permission to onion inbounds 947bed28fe6 Merge bitcoin/bitcoin#33380: test: Add submitblock test in interface_ipc 7584a4fda95 cmake: Install `bitcoin` manpage 67f632b6deb net: remove unnecessary casts in socket operations c4adfbf7062 Merge bitcoin/bitcoin#33373: depends: systemtap 5.3 5aa3d3135d2 Merge bitcoin/bitcoin#33391: test: Prevent disk space warning during node_init_tests bdf01c6f612 test: Prevent disk space warning during node_init_tests 0a26731c4cc test: Add submitblock test in interface_ipc 2d6a0c46491 Merge bitcoin/bitcoin#33379: cmake: Fix regression in `secp256k1.cmake` 9193c3e4340 cmake: Fix regression in `secp256k1.cmake` 28efd724b47 depends: systemtap 5.3 75e6984ec8c test/refactor: use test deque to avoid quadratic iteration 652424ad162 test: additional test coverage for script_verify_flags 00c253d4941 ci: disable cirrus cache in 32bit arm job ff18b6bbaf3 ci: refactor docker action to return provider str 8e434a84999 macdeploy: rename macOS output to bitcoin-macos-app.zip 05353d9cf08 macdeploy: combine appname & -zip arguments fabc2615af2 test: Use extra_port() helper in feature_bind_extra.py 417437eb01a script/verify_flags: extend script_verify_flags to 64 bits 3cbbcb66efc script/interpreter: make script_verify_flag_name an ordinary enum bddcadee82d script/verify_flags: make script_verify_flags type safe a5ead122fe0 script/interpreter: introduce script_verify_flags typename 4577fb2b1e0 rpc: have getdeploymentinfo report script verify flags a3986935f07 validation: export GetBlockScriptFlags() 5db8cd2d37e Move mapFlagNames and FormatScriptFlags logic to script/interpreter.h adefb51c543 rpc/net: add per-peer inv_to_send sizes 88b0647f027 wallet: Always write last hardened cache flag in migrated wallets 8a08eef645e tests: Check that the last hardened cache upgrade occurs 0802398e749 fuzz: make it possible to mock (fuzz) CThreadInterrupt 6d9e5d130d2 fuzz: add CConnman::SocketHandler() to the tests 3265df63a48 fuzz: add CConnman::InitBinds() to the tests 91cbf4dbd86 fuzz: add CConnman::CreateNodeFromAcceptedSocket() to the tests 50da7432ec1 fuzz: add CConnman::OpenNetworkConnection() to the tests e6a917c8f8e fuzz: add Fuzzed NetEventsInterface and use it in connman tests e883b377688 fuzz: set the output argument of FuzzedSock::Accept() b81f37031c8 p2p: Increase tx relay rate REVERT: 2ac9d60c54a kernel: Fix bitcoin-chainstate for windows REVERT: 08e2a7ebbb9 kernel: Add Purpose section to header documentation REVERT: 9d95715fe46 kernel: Allowing reducing exports REVERT: 241f306df61 kernel: Add pure kernel bitcoin-chainstate REVERT: 3ed3d6b9c25 kernel: Add functions to get the block hash from a block REVERT: 3fe143dc6c3 kernel: Add block index utility functions to C header REVERT: 224dbec1ce5 kernel: Add function to read block undo data from disk to C header REVERT: 4e5b9c66d36 kernel: Add functions to read block from disk to C header REVERT: e4ef0011f7e kernel: Add function for copying block data to C header REVERT: 3e7711d271d kernel: Add functions for the block validation state to C header REVERT: 984305a1afb kernel: Add validation interface to C header REVERT: ff1fe96997b kernel: Add interrupt function to C header REVERT: b45d0abbea2 kernel: Add import blocks function to C header REVERT: dc939ae9471 kernel: Add chainstate load options for in-memory dbs in C header REVERT: 0ea93d86242 kernel: Add options for reindexing in C header REVERT: 5817e2e79bd kernel: Add block validation to C header REVERT: 32d9e4a547b kernel: Add chainstate loading when instantiating a ChainstateManager REVERT: e3c03bae40b kernel: Add chainstate manager option for setting worker threads REVERT: f6978da0f73 kernel: Add chainstate manager object to C header REVERT: 63d6e4fade2 kernel: Add notifications context option to C header REVERT: ee9c2c7ceac kernel: Add chain params context option to C header REVERT: 2919e083e1b kernel: Add kernel library context object REVERT: 7967ffa7476 kernel: Add logging to kernel library C header REVERT: c76dcaafbc7 kernel: Introduce initial kernel C header API git-subtree-dir: depend/bitcoin git-subtree-split: 81cec737e68b91f5edf90179b81aa620a5a68677
4da01123df0f Merge bitcoin/bitcoin#30595: kernel: Introduce C header API 96614fff6327 Merge bitcoin/bitcoin#33714: random: scope environ extern to macOS, BSDs and Illumos 4e9bd579d3ed Merge bitcoin/bitcoin#33045: depends: disable variables, rules and suffixes. 5ffa63d6814d Merge bitcoin/bitcoin#33626: ci: run native fuzz with MSAN job 75baff98fcf9 Merge bitcoin/bitcoin#33744: ci: Fix lint runner selection (and docker cache) 2593ed1b5f4b Merge bitcoin/bitcoin#33574: doc: update Guix INSTALL.md 1cd8d9fe5cd5 Merge bitcoin/bitcoin#33445: ci: Update Clang in "tidy" job 56329beaee27 Merge bitcoin/bitcoin#32301: test: cover invalid codesep positions for signature in taproot 1e6e32fa8a64 ci: run native fuzz with MSAN job 3784d15bcd50 ci: use LLVM libcxx 21.1.5 6c7a34f3b0bd kernel: Add Purpose section to header documentation 7e9f00bcc174 kernel: Allowing reducing exports 7990463b1059 kernel: Add pure kernel bitcoin-chainstate 36ec9a3ea232 Kernel: Add functions for working with outpoints 5eec7fa96aa3 kernel: Add block hash type and block tree utility functions to C header f5d5d1213cc4 kernel: Add function to read block undo data from disk to C header 09d0f626388a kernel: Add functions to read block from disk to C header a263a4caf231 kernel: Add function for copying block data to C header b30e15f4329a kernel: Add functions for the block validation state to C header aa262da7bcfa kernel: Add validation interface to C header d27e27758d51 kernel: Add interrupt function to C header 1976b13be9c8 kernel: Add import blocks function to C header a747ca1f516e kernel: Add chainstate load options for in-memory dbs in C header 070e77732cdb kernel: Add options for reindexing in C header ad80abc73df3 kernel: Add block validation to C header cb1590b05efd kernel: Add chainstate loading when instantiating a ChainstateManager e2c1bd3d713f kernel: Add chainstate manager option for setting worker threads 65571c36a265 kernel: Add chainstate manager object to C header c62f657ba330 kernel: Add notifications context option to C header 9e1bac45852d kernel: Add chain params context option to C header 337ea860dfda kernel: Add kernel library context object 28d679bad9fd kernel: Add logging to kernel library C header 2cf136dec4ce kernel: Introduce initial kernel C header API 745eb053a41c Merge bitcoin-core/gui#901: Add createwallet, createwalletdescriptor, and migratewallet to history filter 52b1595850f6 depends: disable builtin variables 8b5a28fa7893 depends: disable builtin rules and suffixes. 7632e0ba312a ci: fix configure docker action inputs 746d36cc80f0 Merge bitcoin/bitcoin#33754: ci: gha: Set debug_pull_request_number_str annotation 25c45bb0d0bd Merge bitcoin/bitcoin#33567: node: change a tx-relay on/off flag to enum 422b468229f1 Merge bitcoin/bitcoin#33683: refactor/doc: Add blockman param to GetTransaction doc comment da6f041e39ef Merge bitcoin/bitcoin#31645: [IBD] coins: increase default UTXO flush batch size to 32 MiB 832a57673af7 Merge bitcoin/bitcoin#33749: test: ipc: resolve symlinks in `which capnp` 3cd4263bf664 Merge bitcoin/bitcoin#33753: test: Format strings in `test_runner` 78d4d36730d4 test: Format strings in `*.rs` fa9d0f994b45 ci: gha: Set debug_pull_request_number_str annotation 305384a0372a Merge bitcoin/bitcoin#33746: ci: Add missing python3-dev package for riscv64 8eda7210eb33 Merge bitcoin/bitcoin#33743: fuzz: refactor memcpy to std::ranges::copy to work around ubsan warn 51093d6ae1d4 test: resolve symlinks in which result for capnp 6f359695c36c Merge bitcoin/bitcoin#33698: test: Use same rpc timeout for authproxy and cli c281bb6837b0 Merge bitcoin/bitcoin#32924: test: add valid tx test with minimum-sized ECDSA signature (8 bytes DER-encoded) facf8b771a19 ci: Add missing python3-dev package for riscv64 b4d0288c467f doc: update Guix INSTALL.md 0b3b8a3be1a0 ci: fix lint docker caching fa4b52bd1618 fuzz: refactor memcpy to std::ranges::copy to work around ubsan warn 72511fd02e72 Merge bitcoin/bitcoin#33555: build: Bump clang minimum supported version to 17 79d6f458e230 random: scope environ extern to macOS, BSDs and Illumos 292ea0eb8982 Merge bitcoin/bitcoin#33677: ci: Retry image building once on failure dd82c6c5d09f Merge bitcoin/bitcoin#33693: ci: use pycapnp 2.2.1 3bb30658e631 Merge bitcoin/bitcoin#32380: Modernize use of UTF-8 in Windows code 5a58d4915e5c Merge bitcoin/bitcoin#33546: test: add functional test for `TestShell` (matching doc example) 1abc8fa308d2 Merge bitcoin/bitcoin#33218: refactor: rename `fees.{h,cpp}` to `fees/block_policy_estimator.{h,cpp}` de15e52f09d4 Merge bitcoin/bitcoin#32867: doc: mention key removal in rpc interface modification 5d784bebaff5 clang-tidy: Disable `ArrayBound` check in src/ipc and src/test 5efdb0ef3056 ci: Update Clang in "tidy" job 24434c1284b8 Merge bitcoin/bitcoin#31308: ci, iwyu: Treat warnings as errors for specific directories 27cd7f504944 Merge bitcoin/bitcoin#33185: guix: update time-machine to 5cb84f2013c5b1e48a7d0e617032266f1e6059e2 80bb7012be8e Merge bitcoin/bitcoin#31514: wallet: allow label for non-ranged external descriptor (if `internal=false`) & disallow label for ranged descriptors 5e1f626ac30f Merge bitcoin/bitcoin#32504: test: descriptor: cover invalid multi/multi_a cases 56e9703968e2 Merge bitcoin/bitcoin#29640: Fix tiebreak when loading blocks from disk (and add tests for comparing chain ties) 53b34c80c631 ci: use pycapnp 2.2.1 in mac native job 865432869c0d ci: remove Python version comment from mac config 9bd9ec00b238 Merge bitcoin/bitcoin#33688: test: Update BIP324 test vectors 1a7fb5eeeef3 fees: return current block height in estimateSmartFee ab49480d9be4 fees: rename fees_args to block_policy_estimator_args 06db08a43568 fees: refactor: rename fees to block_policy_estimator 6dfdd7e034dd fees: refactor: rename policy_fee_tests.cpp to feerounder_tests.cpp f54ffb4bc141 Merge bitcoin/bitcoin#32813: clang-format: make formatting deterministic for different formatter versions 1916c51cd855 Merge bitcoin/bitcoin#33210: fuzz: enhance wallet_fees by mocking mempool stuff 0eb554728ca9 Merge bitcoin/bitcoin#33336: log: print every script verification state change c6c4edf324a3 Merge bitcoin/bitcoin#32983: rpc: refactor: use string_view in Arg/MaybeArg 00ad998d9545 Merge bitcoin/bitcoin#33252: p2p: add `DifferenceFormatter` fuzz target and invariant check 1a1f46c22859 refactor/doc: Add blockman param to `GetTransaction` doc comment and reorder out param 66667d651229 test: Use same rpc timeout for authproxy and cli 5555bce994b6 ci: Document why IN_GETOPT_BIN env var is needed on macOS fabe516440c9 ci: Export the container id in python script f6ba97cea1d3 Merge bitcoin/bitcoin#33666: ci: Drop libFuzzer from msan fuzz task af78d3651299 Merge bitcoin/bitcoin#32588: util: Abort on failing CHECK_NONFATAL in debug builds 51877f2fc5eb test: Update BIP324 test vectors 161864a038ea Merge bitcoin/bitcoin#32579: p2p: Correct unrealistic headerssync unit test behavior 70a6fb5e5ab5 Merge bitcoin/bitcoin#33172: test: p2p block malleability 99cb2054bdfe Merge bitcoin/bitcoin#33600: refactor: Construct g_verify_flag_names on first use 211bf6c97503 Merge bitcoin/bitcoin#33566: miner: fix empty mempool case for waitNext() 944e5ff848f6 doc: mention key removal in rpc interface modification d32f9525e484 Merge bitcoin/bitcoin#33679: test: set number of RPC server threads to 2 1c85d062321c Merge bitcoin/bitcoin#32266: depends: Avoid `warning: "_FORTIFY_SOURCE" redefined` for `libevent` 11684c9ce2c1 Merge bitcoin/bitcoin#33674: ci: Doc ASLR workaround for sanitizer tasks e9cd45e3d3c7 test: set number of RPC server threads to 2 fa6aa9f42faa ci: Retry image building once on failure fa4dbe04d782 ci: Allow overwriting check option in run() helper fa8e4de5c31d ci: Use os.environ[key] access when value must be set 7d27af98c7cf Merge bitcoin/bitcoin#33461: ci: add Valgrind fuzz 1569bcc387fe Merge bitcoin/bitcoin#33639: ci: Only write docker build images to Cirrus cache 98c4994d0f36 Merge bitcoin/bitcoin#33570: randomenv: Fix MinGW dllimport warning for `environ` c211d1832211 Merge bitcoin/bitcoin#33670: test: Use unassigned p2p_port instead of hardcoded 60000 in p2p_i2p_ports.py e4b04630bcf5 ci: add Valgrind fuzz 3fee0754a2ec Merge bitcoin/bitcoin#33550: Fix windows libc++ `fs::path` `fstream` compile errors fa0e36156cba ci: Doc ASLR workaround for sanitizer tasks fa20275db32c test: Use unassigned p2p_port instead of hardcoded 60000 in p2p_i2p_ports.py c862936d16a6 Merge bitcoin/bitcoin#33370: ci: use Mold linker for asan-lsan-ubsan-integer-no-depends-usdt workflow fabe0e07de1a ci: Only write docker build images to Cirrus cache fab64a5d6fd7 ci: Move buildx command to python script fa72a2bd5c80 ci: Remove unused MAYBE_CPUSET fa70e23de75b ci: Drop libFuzzer from msan fuzz task abe7cbfe1a4e Merge bitcoin/bitcoin#33470: build: Move CMAKE_SKIP_INSTALL_RPATH from CMake to Guix script 689ec28d1d1e Merge bitcoin/bitcoin#33633: test: [move-only] binary utils to utils.py 0eeae4d174a4 Merge bitcoin/bitcoin#33625: Update secp256k1 subtree to latest master 4b41f99d57d8 build: Move CMAKE_SKIP_INSTALL_RPATH from CMake to Guix script d30f149360d1 Merge bitcoin/bitcoin#33630: doc: correct topology requirements in submitpackage helptext 3d222825642b [doc] correct topology requirements in submitpackage helptext e744fd1249bf Merge bitcoin/bitcoin#33641: Update leveldb subtree to latest master 4371740bebfa Merge bitcoin/bitcoin#33642: doc: archive release notes for v28.3 ceea24b92153 doc: archive release notes for v28.3 54ffe3de5b1d Update leveldb subtree to latest master f21162d81933 Squashed 'src/leveldb/' changes from aba469ad6a..cad64b151d e14451ac8733 Merge bitcoin/bitcoin#33469: TxGraph: change m_excluded_clusters f76e1ae38991 Merge bitcoin/bitcoin#32313: coins: fix `cachedCoinsUsage` accounting in `CCoinsViewCache` 59c4898994bd guix: remove python-pydantic-core input from LIEF 9f2a6927d3a9 guix: use Clang & LLVM 19 for macOS build 9570ddbec9cb guix: update time-machine to 5cb84f2013c5b1e48a7d0e617032266f1e6059e2 7b5cc276aa0a guix: patch around riscv issue with newer (2.40+) binutils 91b5cbaabbca ci: use Debian Trixie for macOS cross job fa75ef4328f6 test: Move export_env_build_path to util.py fa9f495308af test: Move get_binary_paths and Binaries to util.py 40e7d4cd0d7f Merge bitcoin/bitcoin#33549: ci: Add macOS cross task for arm64-apple-darwin ea17618c1167 Merge bitcoin/bitcoin#33480: ci: Turn CentOS config into Alpine musl config b1f8a13702e8 Merge bitcoin/bitcoin#33624: test: P2SH sig ops are only counted with `SCRIPT_VERIFY_P2SH` 879c21045eba Update secp256k1 subtree to latest master 3cbf7cb3e6ac Squashed 'src/secp256k1/' changes from b9313c6e1a..d543c0d917 2f7a50f67cdb Merge bitcoin/bitcoin#33462: ci: add libcpp hardening flags to macOS fuzz job 07a926474b5a node: change a tx-relay on/off flag to enum 48aa0e98d0b7 Merge bitcoin/bitcoin#29675: wallet: Be able to receive and spend inputs involving MuSig2 aggregate keys db4bde0b0347 Merge bitcoin/bitcoin#33517: multiprocess: Fix high overhead from message logging 3a10d700bc18 test: P2SH sig ops are only counted with `SCRIPT_VERIFY_P2SH` flag 9314113b295a Merge bitcoin/bitcoin#33610: doc: archive release notes for v29.2 9b43428c9687 TxGraph: change m_excluded_clusters 6e1adbbaa157 Merge bitcoin/bitcoin#33612: test: change log rate limit version gate fdcf67de8033 Merge bitcoin/bitcoin#33157: cluster mempool: control/optimize TxGraph memory usage 7b544341c002 test: change log rate limit version gate from 299900 to 290100 9610b0d1e28a randomenv: Fix MinGW dllimport warning for `environ` 6c4fe401e908 Merge bitcoin/bitcoin#33508: ci: fix buildx gha cache authentication on forks 8f7673257a1a miner: fix empty mempool case for waitNext() c11a3dcc8895 doc: archive release notes for v29.2 64a7c7cbb975 Merge bitcoin/bitcoin#33558: ci: Use native platform for win-cross task 93b56e95c028 Merge bitcoin/bitcoin#33601: doc: archive release notes for v30.0 563747971be4 Merge bitcoin/bitcoin#33580: depends: Use $(package)_file_name when downloading from the fallback 24d861da7894 coins: only adjust `cachedCoinsUsage` on `EmplaceCoinInternalDANGER` insert d7c9d6c2914a coins: fix `cachedCoinsUsage` accounting to prevent underflow 39cf8bb3d0d9 refactor: remove redundant usage tracking from `CoinsViewCacheCursor` 67cff8bec909 refactor: assert newly-created parent cache entry has zero memory usage 023cd5a5469a txgraph: add SingletonClusterImpl (mem optimization) e34625073253 txgraph: give Clusters a range of intended tx counts (preparation) e93b0f09cc2a txgraph: abstract out creation of empty Clusters (refactor) 6baf12621f66 txgraph: comment fixes (doc fix) 726b995739ab txgraph: make Cluster an abstract class (refactor) 2602d89edd04 txgraph: avoid accessing other Cluster internals (refactor) 04c808ac4c47 txgraph: expose memory usage estimate function (feature) 7680bb8fd48d txgraph: keep track of Cluster memory usage (preparation) 4ba562e5f4e4 txgraph: keep data structures compact (mem optimization) bb5cb222ae55 depgraph: add memory usage control (feature) b1637a90deb8 txgraph: avoid holes in DepGraph positions (mem optimization) 2b1d30250877 txgraph: move some sanity checks from Cluster to TxGraphImpl (refactor) d40302fbaf41 txgraph: Make level of Cluster implicit (optimization) 8d6e49158e3a doc: archive release notes for v30.0 4e352efa2ce7 qt: add createwallet, createwalletdescriptor, and migratewallet to history filter 0626b90f507d multiprocess: align our logging with libmultiprocess's 9d068225ee2b multiprocess: update multiprocess EventLoop construction to use options d2987102dd13 Merge bitcoin/bitcoin#33573: doc: bump the template macOS version f6567527d8da doc: bump the template macOS version faa9d10c84bc refactor: Construct g_verify_flag_names on first use becf15001318 Merge bitcoin/bitcoin#33518: Update libmultiprocess subtree to support reduced logging cd1b7fa1ff7c Merge bitcoin/bitcoin#33577: Revert "depends: Update URL for `qrencode` package source tarball" fa0fa0f70087 refactor: Revert "disable self-assign warning for tests" faed118fb30f build: Bump clang minimum supported version to 17 6b4a92b0fab8 Merge bitcoin/bitcoin#33568: doc: how to update a subtree 90b2884ce4ba Merge bitcoin/bitcoin#33581: ci: Properly include $FILE_ENV in DEPENDS_HASH d44b860cd09e Merge bitcoin/bitcoin#33584: ci: upgrade GitHub Action to download-artifact@v5 57f7c68821d9 test: add functional test for `TestShell` (matching doc example) 53874f7934d5 doc: test: update TestShell example instructions/options b35341b9ba63 Update ci.yml ceeb53adcd0a ci: Properly include $FILE_ENV in DEPENDS_HASH 671b774d1b58 depends: Use $(package)_file_name when downloading from the fallback e4335a31920c Revert "depends: Update URL for `qrencode` package source tarball" a89a822e6eb5 Revert "depends: Use hash instead of file name for package download stamp" fad5a7101cc3 ci: Add macOS cross task for arm64 fa8c750a0aff ci: Refactor get_previous_releases step in win-test-cross task e4c04f7759b0 ci: add libcpp hardening flags to macOS fuzz job a1226bc760c7 doc: how to update a subtree b510893d0076 Merge bitcoin/bitcoin#33494: depends: Update URL for `qrencode` package source tarball ec5841888de7 Merge bitcoin/bitcoin#32513: ci: remove 3rd party js from windows dll gha job d735e2e9b39a Merge bitcoin/bitcoin#32998: Bump SCRIPT_VERIFY flags to 64 bit de1dc6b47ba7 Merge bitcoin/bitcoin#33515: Improve LastCommonAncestor performance + add tests eda91b07fd9f Merge commit '0f01e1577f7c6734eb345139a12aba329ef22a5f' into pr/subtree-6 0f01e1577f7c Squashed 'src/ipc/libmultiprocess/' changes from 47d79db8a552..a4f929696490 fa6fd16f36e1 ci: Use native platform for win-cross task 53e4951a5b5b Switch to ANSI Windows API in `fsbridge::fopen()` function dbe770d92106 Switch to ANSI Windows API in `Win32ErrorString()` function 06d0be4e22ce Remove no longer necessary `WinCmdLineArgs` class f366408492f6 cmake: Set process code page to UTF-8 on Windows dccbb178065f Set minimum supported Windows version to 1903 (May 2019 Update) 919e6d01e93a Merge bitcoin/bitcoin#33489: build: Drop support for EOL macOS 13 452ea5928112 Merge bitcoin/bitcoin#33454: net: support overriding the proxy selection in ConnectNode() c864a4c1940d Simplify fs::path by dropping filename() and make_preferred() overloads b0113afd44b4 Fix windows libc++ fs::path fstream compile errors a33bd767a37d Merge bitcoin/bitcoin#33464: p2p: Use network-dependent timers for inbound inv scheduling 2578da69f416 Merge bitcoin/bitcoin#33485: test: set par=2 in default config for functional test framework 25dbe4bc86d3 Merge bitcoin/bitcoin#33533: test: addrman: check isTerrible when time is more than 10min in the future cfb0d74698ad Merge bitcoin/bitcoin#33121: test: fix p2p_leak_tx.py 86eaa4d6cd5c Merge bitcoin/bitcoin#33482: contrib: fix macOS deployment with no translations 007900ee9b89 Merge bitcoin/bitcoin#33434: depends: static libxcb-cursor 8e47ed6906d5 test: addrman: check isTerrible when time is more than 10min in the future 3635d62f5a93 chain: make use of pskip in LastCommonAncestor (optimization) 2e09d66fbb7b tests: add unit tests for CBlockIndex::GetAncestor and LastCommonAncestor 156927903d64 ci: Check windows manifests for all executables e1a1b14c9359 ci: use a more generic way of finding mt.exe 1ed00a0d39d5 Merge bitcoin/bitcoin#33504: Mempool: Do not enforce TRUC checks on reorg b63428ac9ce2 rpc: refactor: use more (Maybe)Arg<std::string_view> 037830ca0dbb refactor: increase string_view usage b3bf18f0bac0 rpc: refactor: use string_view in Arg/MaybeArg c76de2eea180 net: support overriding the proxy selection in ConnectNode() 45bd8914658a log: split assumevalid ancestry-failure-reason message 6c13a38ab51c log: separate script verification reasons f2ea6f04e79b refactor: untangle assumevalid decision branches 9bc298556cb0 validation: log initial script verification state 4fad4e992c49 test: add assumevalid scenarios scaffold 75353a016357 Merge bitcoin/bitcoin#32326: net: improve the interface around FindNode() and avoid a recursive mutex lock 87e7f37918d4 doc: clarify peer address in getpeerinfo and addnode RPC help 2a4450ccbbe3 net: change FindNode() to not return a node and rename it 4268abae1a1d net: avoid recursive m_nodes_mutex lock in DisconnectNode() acc7f2a433b1 Merge bitcoin/bitcoin#33401: ci: Remove bash -c from cmake invocation using eval 1aaaaa078bb2 fuzz: Drop unused workaround after Apple-Clang bump fadad7a49477 Drop support for EOL macOS 13 50194029e7c2 ci: Remove bash -c from cmake invocation using eval f41f97240c06 Merge bitcoin/bitcoin#28584: Fuzz: extend CConnman tests cc4a2cc6bdc4 Merge bitcoin/bitcoin#33453: docs: Undeprecate datacarrier and datacarriersize configuration options 7502d4e94038 Merge bitcoin/bitcoin#33260: test: Use extra_port() helper in feature_bind_extra.py 14ae71f323dd test: make notfound_on_unannounced more reliable 99bc552980d9 test: fix (w)txid confusion in p2p_leak_tx.py 576dd97cb91e test: increase timeout in p2p_leak_tx.py ac599c4a9cb3 test: Test MuSig2 in the wallet 68ef954c4c59 wallet: Keep secnonces in DescriptorScriptPubKeyMan 4a273edda0ec sign: Create MuSig2 signatures for known MuSig2 aggregate keys 258db9388994 sign: Add CreateMuSig2AggregateSig bf69442b3f50 sign: Add CreateMuSig2PartialSig 512b17fc56ea sign: Add CreateMuSig2Nonce 82ea67c607cd musig: Add MuSig2AggregatePubkeys variant that validates the aggregate d99a081679e1 psbt: MuSig2 data in Fill/FromSignatureData 4d8b4f53363f signingprovider: Add musig2 secnonces c06a1dc86ff2 Add MuSig2SecNonce class for secure allocation of musig nonces 9baff05e4944 sign: Include taproot output key's KeyOriginInfo in sigdata 4b24bfeab9d6 pubkey: Return tweaks from BIP32 derivation 8f73d9522146 Merge bitcoin/bitcoin#33299: wallet: reduce unconditional logging during load 0f7d4ee4e828 p2p: Use different inbound inv timer per network 93a70a42d30f depends: Update URL for `qrencode` package source tarball 6de80512632a depends: Use hash instead of file name for package download stamp bc706955d740 ci: expose all ACTIONS_* vars 46135d90ea90 depends: Drop redundant check for downloaded file 771978952a98 depends: Fix `$(package)_fetched` target 25212dfdb4cd Merge bitcoin/bitcoin#33487: ci: use latest versions of lint deps 06df14ba75be test: add more TRUC reorg coverge 26e71c237d9d Mempool: Do not enforce TRUC checks on reorg bbe8e9063c15 fuzz: don't bypass_limits for most mempool harnesses d4f47f97715c ci: use latest versions of lint deps fc861332b351 wallet, log: reduce unconditional logging during load 3a4d1a25cf94 net: merge AlreadyConnectedToAddress() and FindNode(CNetAddr) 444409ff2b78 ci: Reduce Alpine musl task to md runner size d8fe258cd610 Merge bitcoin/bitcoin#33484: doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness) dda5228e02ca test: set par=2 in default config for functional test framework ff05bebcc426 doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness) 200150beba66 Merge bitcoin/bitcoin#33313: test/refactor: use test deque to avoid quadratic iteration 7e08445449fc Merge bitcoin/bitcoin#33399: key: use static context for libsecp256k1 calls where applicable 7b5261f7ef3d contrib: fix using macdploy script without translations. 65e909dfdd93 Merge bitcoin/bitcoin#33430: rpc: addpeeraddress: throw on invalid IP 31b29f8eb629 Merge bitcoin/bitcoin#33229: multiprocess: Don't require bitcoin -m argument when IPC options are used e62e0a12b332 Merge bitcoin/bitcoin#33230: cli: Handle arguments that can be either JSON or string 7ae0497eef8f ci: remove 3rd party js from windows dll gha job 05d984b1a4fb Merge bitcoin/bitcoin#33475: bugfix: miner: fix `addPackageTxs` unsigned integer overflow fa6b2e9efece ci: Turn centos config into alpine musl config b807dfcdc592 miner: fix `addPackageTxs` unsigned integer overflow d41b503ae128 Merge bitcoin/bitcoin#33446: rpc: fix getblock(header) returns target for tip 5ae8edbc304a Merge bitcoin/bitcoin#33158: macdeploy: avoid use of `Bitcoin Core` in Linux cross build df67bb6fd84c test: Remove convert_to_json_for_cli 44a493e150a7 cli: Allow arguments to be both strings and json ad4a49090da8 Merge bitcoin/bitcoin#33408: msvc: Update vcpkg manifest dd61f08fd52b Merge bitcoin/bitcoin#33031: wallet: Set descriptor cache upgraded flag for migrated wallets 350692e561ce Merge bitcoin/bitcoin#33388: test: don't throw from the destructor of DebugLogHelper 94db966a3bb5 net: use generic network key for addrcache eca50854e1cb depends: static libxcb_cursor 89144eb473c6 Merge bitcoin/bitcoin#33448: net/rpc: Report inv information for debugging eaa1a3cd0b3d Merge bitcoin/bitcoin#33425: ci: remove Clang build from msan fuzz job b77137a5644e ci: link against -lstdc++ in native fuzz with msan job a86e1a6e32d8 Merge bitcoin/bitcoin#33427: rpc: Always return per-wtxid entries in submitpackage tx-results 6861dadfcb11 Merge bitcoin/bitcoin#33459: doc: remove unrelated `bitcoin-wallet` binary from `libbitcoin_ipc` description 3b3ab3a50a0b Merge bitcoin/bitcoin#33302: ci: disable cirrus cache in 32bit arm job 2738b63e025d test: validate behaviour of getpeerinfo last_inv_sequence and inv_to_send fbde8d9a81d8 doc: remove unrelated `bitcoin-wallet` binary from `libbitcoin_ipc` description 34fefb633584 Merge bitcoin/bitcoin#33435: system: improve handling around GetTotalRAM() 56791b582958 test: split out `system_ram_tests` to signal when total ram cannot be determined 337a6e738616 system: improve handling around GetTotalRAM() 451ba9ada41f datacarrier: Undeprecate configuration option 77b2ebb81182 rpc/net: report per-peer last_inv_sequence bf7996cbc3be rpc: fix getblock(header) returns target for tip 4c3c1f42cf70 test: add block 2016 to mock mainnet 953544d0286b Merge bitcoin/bitcoin#33429: fuzz: reduce iterations in slow targets df101c97c260 Merge bitcoin/bitcoin#33422: build: Remove lingering Windows registry & shortcuts (#32132 follow-up) 56c6daa64f6b Merge bitcoin/bitcoin#28592: p2p: Increase tx relay rate 79752b9c0b6b build(windows): Remove lingering registry entries and shortcuts upon install cad9a7fd7370 rpc: Always return per-wtxid entries in submitpackage tx-results 6a33970fef1b fuzz: Reduce iterations in slow targets edb871cba22a Merge bitcoin/bitcoin#33412: Update libmultiprocess subtree to fix intermittent mptest hang 2427939935f3 test: forbid copying of DebugLogHelper d6aa266d432f test: don't throw from the destructor of DebugLogHelper 91ac64b0a66f log: reword `signature validations` to `script verification` in `assumevalid` log eaf2c464758b Merge bitcoin/bitcoin#33378: Remove unnecessary casts when calling socket operations 5aec516b2ce3 Merge bitcoin/bitcoin#33333: coins: warn on oversized `-dbcache` 316a0c513278 rpc: addpeeraddress: throw on invalid IP 74fa028da1ea Merge bitcoin/bitcoin#33420: test: Avoid interface_ipc.py Duplicate ID errors 168360f4ae47 coins: warn on oversized -dbcache 6c720459beea system: add helper for fetching total system memory e9c52272ebd7 test: Avoid interface_ipc.py Duplicate ID errors 535fa0ad0d26 Squashed 'src/ipc/libmultiprocess/' changes from 13424cf2ecc1..47d79db8a552 c49a43591f88 Merge commit '535fa0ad0d2637f845beae92ea9dbbbbbe377c74' into pr/subtree-5 453b0fa286e5 bitcoin: Make wrapper not require -m 1444ed855f43 Merge bitcoin/bitcoin#33407: cmake: Install `bitcoin` manpage 29e836fae660 test: add tool_bitcoin to test bitcoin wrapper behavior 0972f5504021 init: add exe name to bitcoind, bitcoin-node -version output to be able to distinguish these in tests 2b0cd1f3fb22 Merge bitcoin/bitcoin#33395: net: do not apply whitelist permissions to onion inbounds f14876213aad musig: Move synthetic xpub construction to its own function ef20c2d11d96 build, msvc: Update vcpkg manifest baseline 1ff9e929489e key: use static context for libsecp256k1 calls where applicable f563ce90818d net: Do not apply whitelist permission to onion inbounds 947bed28fe62 Merge bitcoin/bitcoin#33380: test: Add submitblock test in interface_ipc 7584a4fda95d cmake: Install `bitcoin` manpage 67f632b6deb8 net: remove unnecessary casts in socket operations c4adfbf70626 Merge bitcoin/bitcoin#33373: depends: systemtap 5.3 5aa3d3135d25 Merge bitcoin/bitcoin#33391: test: Prevent disk space warning during node_init_tests bdf01c6f6126 test: Prevent disk space warning during node_init_tests 0a26731c4cc1 test: Add submitblock test in interface_ipc 2d6a0c464912 Merge bitcoin/bitcoin#33379: cmake: Fix regression in `secp256k1.cmake` f031536f2d26 ci: use Mold linker for asan-lsan-ubsan-integer-no-depends-usdt workflow cc5dda1de333 headerssync: Make HeadersSyncState more flexible and move constants 8fd1c2893e67 test(headerssync): Test returning of pow_validated_headers behavior 7b00643ef5f9 test(headerssync): headers_sync_chainwork test improvements 04eeb9578c60 doc(test): Improve comments fe896f8faa78 refactor(test): Store HeadersSyncState on the stack f03686892a9c refactor(test): Break up headers_sync_state e984618d0b99 refactor(headerssync): Process spans of headers a4ac9915a95e refactor(headerssync): Extract test constants ahead of breakup into functions 9193c3e4340b cmake: Fix regression in `secp256k1.cmake` d20f10affba8 Merge bitcoin/bitcoin#33268: wallet: Identify transactions spending 0-value outputs, and add tests for anchor outputs in a wallet 28efd724b478 depends: systemtap 5.3 9a5ba154bea1 Merge bitcoin/bitcoin#33310: trace: Workaround GCC bug compiling with old systemtap 853f0d881142 Merge bitcoin/bitcoin#33364: ci: always use tag for LLVM checkout b81445333a10 Merge bitcoin/bitcoin#33243: test: Fix CLI_MAX_ARG_SIZE issues f757da87f59d Merge bitcoin/bitcoin#33332: common: Make arith_uint256 trivially copyable e416dc2fbbb7 Merge bitcoin/bitcoin#33321: kernel: make blockTip index const 75e6984ec8c6 test/refactor: use test deque to avoid quadratic iteration 176fac0f16d5 Merge bitcoin/bitcoin#33141: test: Remove polling loop from test_runner (take 2) 593d5fe37d7a Merge bitcoin/bitcoin#33354: txgraph: use enum Level instead of bool main_only 653a9849d5f9 common: Make arith_uint256 trivially copyable b736052e39f1 ci: always use tag for LLVM checkout 652424ad162b test: additional test coverage for script_verify_flags 00c253d49417 ci: disable cirrus cache in 32bit arm job ff18b6bbaf32 ci: refactor docker action to return provider str d45f3717d2c6 txgraph: use enum Level instead of bool main_only ee42d59d4de9 Merge bitcoin-core/gui#886: Avoid pathological QT text/markdown behavior... 2c8a478db4b8 Merge bitcoin/bitcoin#33231: net: Prevent node from binding to the same `CService` 591eea7b5ac5 Merge bitcoin/bitcoin#33082: wallet, refactor: Remove Legacy check and error 6a371b70c87a gui: Avoid pathological QT text/markdown behavior... 02d2b5a11c92 ci, iwyu: Treat warnings as errors for specific directories 57a3eac387bd refactor: Fix includes in `index` directory c0894a0a2be0 Merge bitcoin/bitcoin#33348: contrib: add bitcoin binary to gen-manpages 53e6db91ef59 contrib: add placeholder manpage for bitcoin binary bdb8eadcdc19 refactor: Fix includes in `crypto` directory 56f2a689a201 ci: Do not patch `leveldb` to workaround UB in "tidy" CI job f5887a8de4c8 contrib: add bitcoin binary to gen-manpages 314c42b55bda Merge bitcoin/bitcoin#33347: build: bump `CLIENT_VERSION_MAJOR` to 30 9f744fffc39d build: bump CLIENT_VERSION_MAJOR to 30 042817ddb84c Merge bitcoin/bitcoin#33346: doc: remove release note fragment 0f0e6fe7f5f4 doc: remove release note fragment 84cf5420398c Merge bitcoin/bitcoin#33275: Release: 30.0 translations update 13809b867ad9 Merge bitcoin/bitcoin#33303: ci: Checkout latest merged pulls e749205f83dd Merge bitcoin/bitcoin#33319: ci: reduce runner sizes on various jobs 9cbd346daa50 Merge bitcoin/bitcoin#33340: Fix benchmark CSV output 4776179be9fb Merge bitcoin/bitcoin#33342: guix: strip binaries in libexec 0ba44d9c38af Merge bitcoin/bitcoin#33296: net: check for empty header before calling FillBlock 1861030bea7f Merge bitcoin/bitcoin#30469: index: Fix coinstats overflow 8b6264768030 test: send duplicate blocktxn message in p2p_compactblocks.py 5e585a0fc4fd net: check for empty header before calling FillBlock cb825a07ac6d Merge bitcoin/bitcoin#33338: net: Add interrupt to pcp retry loop 0b0bd74c3e9a Merge bitcoin/bitcoin#33312: clang-tidy: Disable `UndefinedBinaryOperatorResult` check in `src/ipc` 790b440197bd Fix benchmark CSV output 3cceda9f4855 guix: strip binaries in libexec 3eea9fd39532 Merge bitcoin/bitcoin#33308: doc: fix `LIBRARY_PATH` comment 0b38cc9bf7a3 Merge bitcoin/bitcoin#33339: doc: move release notes to wiki pre branch off b320f5efa175 qt: 30.0 translations update 905c1a77f51c doc: move release notes to wiki pre branch off 2d799590feea Merge bitcoin/bitcoin#33283: contrib: update fixed seeds 188de70c8641 net: Add interrupt to pcp retry loop 9c6fa07b1248 Merge bitcoin/bitcoin#33322: Update libmultiprocess subtree to improve build and logs c76797481155 clang-tidy: Fix critical warnings 54dc34ec2279 index: Remove unused coinstatsindex recovery code 37c4fba1f4c1 index: Check BIP30 blocks when rewinding Coinstatsindex 51df9de8e5b9 doc: Add release note for 30469 bb8d67318329 test: Add coinstatsindex compatibility test b2e8b64ddc35 index, refactor: Append blocks to coinstatsindex without db read 431a076ae6e3 index: Fix coinstatsindex overflow issue fa8f081af31c ci: Checkout latest merged pulls 36e40417de3f Merge bitcoin-core/gui#884: Fix compatibility with `-debuglogfile` command-line option a334bbe9b79d Squashed 'src/ipc/libmultiprocess/' changes from 1b8d4a6f1e54..13424cf2ecc1 a4ee70e5b69c Merge commit 'a334bbe9b79ddf1999003c792bc8945639b7e9c1' into pr/subtree-4 e04cb9c1bdf2 Merge bitcoin/bitcoin#33201: Add functional test for IPC interface 75d9b7247570 kernel: make blockTip index const a341e11ac92b ci: test IPC on additional hosts 6aee573bfcf6 ci: enable IPC tests in CI 8d2ee88fa2a5 tests: add functional tests for IPC interface 3cc9a06c8dd5 test: Add TestNode ipcbind option 3cceb60a7153 test: Provide path to `bitcoin` binary 8c7f0056291d test: add is_ipc_compiled() and skip_if_no_ipc() functions 37c21ebe4078 Merge bitcoin/bitcoin#33309: doc: archive v29.1 release notes 32e2484b67e6 Merge bitcoin/bitcoin#33304: depends: strip when installing qt binaries 4d4789dffad5 net: Prevent node from binding to the same CService 647cdb4f7e80 Merge bitcoin/bitcoin#33311: net: Quiet down logging when router doesn't support natpmp/pcp 589b65f06c33 clang-tidy: Disable `UndefinedBinaryOperatorResult` check in `src/ipc` 4f1a4cbccd78 net: Quiet down logging when router doesn't support natpmp/pcp 93a29ff28301 trace: Workaround GCC bug compiling with old systemtap 5eeb2facbbbb ci: reduce runner sizes on various jobs 61ec8866c639 [doc] archive v29.1 release notes a2a35b58cb95 doc: fix LIBRARY_PATH comment e1ce0c525c7f Merge bitcoin/bitcoin#33291: ci: cd into BASE_BUILD_DIR for GetCMakeLogFiles 84e813a02bb7 index, refactor: DRY coinbase check fab842b32487 index, refactor: Rename ReverseBlock to RevertBlock 2d8f5b91881e Merge bitcoin/bitcoin#33136: ci: Remove redundant RUN_UNIT_TESTS_SEQUENTIAL c9d5f211c119 depends: strip when installing qt fae610d8581a ci: Remove redundant RUN_UNIT_TESTS_SEQUENTIAL 2562fe1b2b63 Merge bitcoin/bitcoin#32159: net, pcp: handle multi-part responses and filter for default route while querying default gateway ed2ff3c63d83 Merge bitcoin/bitcoin#33235: build: set ENABLE_IPC to OFF when fuzzing 88db09bafe9e net: handle multi-part netlink responses 113a4228229b wallet: Add m_cached_from_me to cache "from me" status 609d265ebc51 test: Add a test for anchor outputs in the wallet c40dc822d74a wallet: Throw an error in sendall if the tx size cannot be calculated 39a7dbdd277d wallet: Determine IsFromMe by checking for TXOs of inputs e76c2f7a4111 test: Test wallet 'from me' status change 689a32197638 Merge bitcoin/bitcoin#33220: doc: truc packages allow sub min feerate transactions 9b76eef2d2b4 ci: cd into BASE_BUILD_DIR for GetCMakeLogFiles 8e434a84999c macdeploy: rename macOS output to bitcoin-macos-app.zip 05353d9cf08c macdeploy: combine appname & -zip arguments 939678940f6c contrib: update fixed seeds 6cdd8ee67618 contrib: update makeseeds minblocks b8da9f4034e1 contrib: update makeseeds UA regex ba0b4304ecee Merge bitcoin/bitcoin#32989: ci: Migrate CI to hosted Cirrus Runners 0eb3eae54865 Merge bitcoin/bitcoin#33274: kernel: chainparams & headersync updates for 30.0 fa4885ef2fde test: Remove polling loop from test_runner 7270839af425 doc: truc packages allow sub min feerate transactions 46369583f3a9 Merge bitcoin/bitcoin#33224: doc: unify `datacarriersize` warning with release notes 755152ac819a kernel: add testnet4 assumeutxo param at height 90'000 a6512686e335 kernel: add mainnet assumeutxo param at height 910'000 943de66b5043 kernel: update headersync params 66fb96242648 kernel: update chainTxData c3cb26e02834 kernel: update assumevalid and minimumChainWork b4adae76d466 kernel: update assumed blockchain & chainstate sizes 7e58c94112d0 Merge bitcoin/bitcoin#33269: test: Fixup fill_mempool docstring 65a10fc3c52e p2p: add assertion for BlockTransactionsRequest indexes 58be359f6b24 fuzz: add a target for DifferenceFormatter Class 13f36c020f03 clang-format: regenerate configs 3c5da69a232b ci: remove un-needed lint_run*.sh files 2aa288efdda2 ci: fix annoying docker warning dd1c5903e8d8 ci: add ccache hit-rate warning when < 75% f4272844833d doc: Detail configuration of hosted CI runners 3f339e99e00b ci: dynamically match makejobs with cores 4393ffdd837b ci: remove .cirrus.yml bc41848d00f7 ci: port lint d290a8e6eab7 ci: port msan-depends 9bbae61e3b40 ci: port tsan-depends bf7d5364527c ci: port tidy 549074bc643f ci: port centos-depends-gui 58e38c3a0425 ci: port previous-releases-depends-debug 341196d75c30 ci: port fuzzer-address-undefined-integer-nodepends f2068f26c123 ci: port no-IPC-i686-DEBUG 2a00b12d73bb ci: port nowallet-libbitcoinkernel 9c2514de5343 ci: port mac-cross-gui-notests 2c990d84a3db ci: force reinstall of kernel headers in asan 884251441bb7 ci: update asan-lsan-ubsan f253031cb8e4 ci: port arm 32-bit job 5ded99a7f007 fuzz: MockMempoolMinFee in wallet_fees c9a7a198d9e8 test: move MockMempoolMinFee to util/txmempool adf67eb21baf fuzz: create FeeEstimatorTestingSetup to set fee_estimator ff10a37e9927 fuzz: mock CBlockPolicyEstimator in wallet_fuzz 04e7bfbceb03 ci: update windows-cross job cc1735d77714 ci: add job to determine runner type 020069e6b718 ci: add Cirrus cache host 9c2b96e0d030 ci: have base install run in right dir 18f6be09d02b ci: use docker build cache arg directly 94a09325475d ci: use buildx in ci fdf64e553245 ci: add configure-docker action 33ba073df7a8 ci: add REPO_USE_CIRRUS_RUNNERS b232b0fa5e96 ci: add caching actions b8fcc9fcbcdd ci: add configure environment action f591c3becafc fees: make estimateSmartFee/HighestTargetTracked virtual for mocking fa3f682032a3 test: Fixup fill_mempool docstring 7cc9a087069b Merge bitcoin/bitcoin#33253: Revert compact block cache inefficiencies 084fd68fda2c Merge bitcoin/bitcoin#33258: ci: use LLVM 21 6ff2d423625d Merge bitcoin/bitcoin#33189: rpc: followups for 33106 4d54bb2b92cc Merge bitcoin/bitcoin#33264: threading: reduce the scope of lock in getblocktemplate 9ae23950ef80 Merge bitcoin/bitcoin#33261: ci: return to using dash in CentOS job b6f8c48946cb coins: increase default `dbbatchsize` to 32 MiB 8bbb7b8bf8e3 refactor: Extract default batch size into kernel 493ba0f68831 threading: reduce the scope of lock in getblocktemplate 509ffea40abb ci: return to using dash in CentOS job fabc2615af26 test: Use extra_port() helper in feature_bind_extra.py b7b249d3adfb Revert "[refactor] rewrite vTxHashes as a vector of CTransactionRef" b9300d8d0a74 Revert "refactor: Simplify `extra_txn` to be a vec of CTransactionRef instead of a vec of pair<Wtxid, CTransactionRef>" df5a50e5de20 bench/blockencodings: add compact block reconstruction benchmark 4cf0ae474ba0 ci: use LLVM 21 fa96a4afea2a ci: Enable CI_LIMIT_STACK_SIZE=1 in i686_no_ipc task facfde2cdce6 test: Fix CLI_MAX_ARG_SIZE issues 6ca6f3b37b99 Merge bitcoin/bitcoin#33241: Update libmultiprocess subtree to fix build issues 9703b7e6d563 Merge bitcoin/bitcoin#32592: threading: remove ancient CRITICAL_SECTION macros dd68d0f40b61 Squashed 'src/ipc/libmultiprocess/' changes from b4120d34bad2..1b8d4a6f1e54 323b3fd27283 Merge commit 'dd68d0f40b614474f24469fbe1ba02f8f9146b31' into pr/subtree-3 d3c5e47391e2 wallet, refactor: Remove Legacy check and error 73220fc0f958 Merge bitcoin/bitcoin#33212: index: Don't commit state in BaseIndex::Rewind 46ca7712cb5f threading: remove unused template instantiations b537a6a6dbd3 threading: remove obsolete critsect macros 0d0e0a39b4a5 threading: use a reverse lock rather than manual critsect macros 3ddd554d3181 tests: Add Assertions in reverse_lock tests to exercise thread-safety annotations c88b1cbf57a3 tests: get rid of remaining manual critsect usage 2c223de2af72 Merge bitcoin/bitcoin#33237: doc: use new block_to_connect parameter name 02f6758e0ce8 Merge bitcoin/bitcoin#33233: doc: follow-ups to "Add bitcoin-{node,gui} to release binaries for IPC" 682bd04462d2 Merge bitcoin/bitcoin#33236: doc: Remove wrong and redundant doxygen tag a9701de0c9fd Merge bitcoin/bitcoin#33217: depends: remove xinerama extension from libxcb 78351ed083b1 Merge bitcoin/bitcoin#33222: miner: clamp options instead of asserting de65c86572c5 doc: capnproto instruction for Alpine and Arch 49d1a1a36306 doc: add capnproto-devel to Fedora build instruction a602f6fb7bf5 test: index with an unclean restart after a reorg 01b95ac6f496 index: don't commit state in BaseIndex::Rewind 1c3db0ed8e6f doc: use new block_to_connect parameter name 8333aa530290 Merge bitcoin/bitcoin#32523: wallet: Remove isminetypes eab5518913a6 doc: mark bitcoin-{node,gui} installed in files.md 966666de9a62 doc: Remove wrong and redundant doxygen tag d0e1bbad016c test: repeat block malleability test with relayable block over P2P af4156ab7556 build: set ENABLE_IPC to OFF when fuzzing 2a815d126bc9 doc: link to capnp version bump PR decc3671c88b guix: remove libxcb-xinerama.so.0 from allowed libs 3d9314f3838c depends: remove xinerama extension from libxcb 7d9789401be4 Merge bitcoin/bitcoin#31802: Add bitcoin-{node,gui} to release binaries for IPC 2885bd0e1c4f doc: unify `datacarriersize` warning with release notes be776a1443fd wallet: Remove isminetype 009a69a616cf wallet: Remove ISMINE_USED 6a7aa015747e wallet: Remove COutput::spendable and AvailableCoinsListUnspent 7392b8b084be miner: clamp options instead of asserting 620abe985e51 interfaces, gui: Remove is_mine output parameter from getAddress c0d28c8f5b15 qt: Fix compatibility with `-debuglogfile` command-line option 19273d0705fc fuzz: set mempool options in wallet_fees 81e5c8385b9e test: cover invalid codesep positions for signature in taproot daa40a3ff973 doc fixups for 33106 c568511e8ced test fixup for incremental feerate 636fa219d37f test fixups 9169a50d529e [rpc] expose blockmintxfee via getmininginfo ce7d94a492e6 doc: add release note 71f29d4fa90a doc: update build and dependencies docs for IPC 3cbf747c328f cmake: set ENABLE_IPC by default 32a90e1b9017 ci: use bitcoin-node for one depends job b333cc14d50b ci: build one depends job without multiprocess 16bce9ac4cd0 build: depends makes libmultiprocess by default 417437eb01ac script/verify_flags: extend script_verify_flags to 64 bits 3cbbcb66efc3 script/interpreter: make script_verify_flag_name an ordinary enum bddcadee82da script/verify_flags: make script_verify_flags type safe a5ead122fe06 script/interpreter: introduce script_verify_flags typename 4577fb2b1e09 rpc: have getdeploymentinfo report script verify flags a3986935f073 validation: export GetBlockScriptFlags() 5db8cd2d37eb Move mapFlagNames and FormatScriptFlags logic to script/interpreter.h adefb51c5437 rpc/net: add per-peer inv_to_send sizes 30c6f64eed30 test: Remove unnecessary LoadWallet() calls fb8720f1e09f sign: Refactor Schnorr sighash computation out of CreateSchnorrSig a4cfddda644f tests: Clarify why musig derivation adds a pubkey and xpub 39a63bf2e7e3 descriptors: Add a doxygen comment for has_hardened output_parameter 2320184d0ea8 descriptors: Fix meaning of any_key_parsed 88b0647f027a wallet: Always write last hardened cache flag in migrated wallets 8a08eef645ee tests: Check that the last hardened cache upgrade occurs 0465574c1279 test: Fixes send_blocks_and_test docs 09c95f21e71d test: Adds block tiebreak over restarts tests 18524b072e6b Make nSequenceId init value constants 8b91883a23aa Set the same best tip on restart if two candidates have the same work 5370bed21e0b test: add functional test for complex reorgs ab145cb3b471 Updates CBlockIndexWorkComparator outdated comment fa37153288ca util: Abort on failing CHECK_NONFATAL in debug builds fa0dc4bdffb0 test: Allow testing of check failures faeb58fe6686 refactor: Set G_ABORT_ON_FAILED_ASSUME when G_FUZZING_BUILD 5fa81e239a39 test: add valid tx test with minimum-sized ECDSA signature (8 bytes DER-encoded) 0802398e749c fuzz: make it possible to mock (fuzz) CThreadInterrupt 6d9e5d130d2e fuzz: add CConnman::SocketHandler() to the tests 3265df63a48d fuzz: add CConnman::InitBinds() to the tests 91cbf4dbd864 fuzz: add CConnman::CreateNodeFromAcceptedSocket() to the tests 50da7432ec1e fuzz: add CConnman::OpenNetworkConnection() to the tests e6a917c8f8e0 fuzz: add Fuzzed NetEventsInterface and use it in connman tests e883b3776881 fuzz: set the output argument of FuzzedSock::Accept() 58e55b17e632 test: descriptor: cover invalid multi/multi_a cases 664657ed1343 bugfix: disallow label for ranged descriptors & allow external non-ranged descriptors to have label fe71a4b139f3 depends: Avoid `warning: "_FORTIFY_SOURCE" redefined` for `libevent` 42e99ad77396 net: skip non-route netlink responses 57ce645f05d1 net: filter for default routes in netlink responses b81f37031c8f p2p: Increase tx relay rate REVERT: 1857296c067b kernel: Fix bitcoin-chainstate for windows REVERT: b14455e3fcc5 kernel: Add Purpose section to header documentation REVERT: b6bc17b703dd kernel: Allowing reducing exports REVERT: b1ef48b20730 kernel: Add pure kernel bitcoin-chainstate REVERT: b8e4169e453a kernel: Add functions to get the block hash from a block REVERT: ea03b539a2fa kernel: Add block index utility functions to C header REVERT: 10e8bc695713 kernel: Add function to read block undo data from disk to C header REVERT: 49743bf8c133 kernel: Add functions to read block from disk to C header REVERT: 11588ec6537c kernel: Add function for copying block data to C header REVERT: de24590872f8 kernel: Add functions for the block validation state to C header REVERT: dcba34ad8f86 kernel: Add validation interface to C header REVERT: 527435ebcc73 kernel: Add interrupt function to C header REVERT: c6a3da91764a kernel: Add import blocks function to C header REVERT: f7d879349a61 kernel: Add chainstate load options for in-memory dbs in C header REVERT: 9b0116f0adad kernel: Add options for reindexing in C header REVERT: 4bbd99b03001 kernel: Add block validation to C header REVERT: 8dbc8230f110 kernel: Add chainstate loading when instantiating a ChainstateManager REVERT: f1a9d6f4dfff kernel: Add chainstate manager option for setting worker threads REVERT: 864008a1a71a kernel: Add chainstate manager object to C header REVERT: b160f13ed141 kernel: Add notifications context option to C header REVERT: d465a997f2e9 kernel: Add chain params context option to C header REVERT: e61538b88b32 kernel: Add kernel library context object REVERT: 3963f4c9de73 kernel: Add logging to kernel library C header REVERT: f3acc94b4b7e kernel: Introduce initial kernel C header API git-subtree-dir: depend/bitcoin git-subtree-split: 4da01123df0f4cb7e05c09dbb1c6b00c064beabe
33fbaed policy: don't CheckEphemeralSpends on reorg (Greg Sanders) Pull request description: Similar reasoning to #33504 During a deeper reorg it's possible that a long sequence of dust-having transactions that are connected in a linear fashion. On reorg, this could cause each subsequent "generation" to be rejected. These rejected transactions may contain a large amount of competitive fees via normal means. PreCheck based `PreCheckEphemeralSpends` is left in place because we wouldn't have relayed them prior to the reorg. ACKs for top commit: darosior: re-ACK 33fbaed ismaelsadeeq: reACK 33fbaed sedited: ACK 33fbaed Tree-SHA512: cf0a6945066e9f5f8f9a847394c2c1225facf475a8aa4bc811b436513eff79c0a720d4ad21ba6b0f1cc4dfdd61cf46acb148333ac592b2ee252953732326ad1d
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction. Fix: detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction along with all its descendants. Fix: in filter_final_and_mature, detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction along with all its descendants. Fix: in filter_final_and_mature, detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction along with all its descendants. Fix: in filter_final_and_mature, detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction along with all its descendants. Fix: in filter_final_and_mature, detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction along with all its descendants. Fix: in filter_final_and_mature, detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction along with all its descendants. Fix: in filter_final_and_mature, detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction along with all its descendants. Fix: in filter_final_and_mature, detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
Using bypass_limits=true is essentially fuzzing part of a reorg only, and results in TRUC invariants unable to be checked. Remove most instances of bypassing limits, leaving one harness able to do so. Github-Pull: bitcoin#33504 Rebased-From: bf91a2d
Not enforcing TRUC topology on reorg was the intended behavior, but the appropriate bypass argument was not checked. This mistake means we could potentially invalidate a long chain of perfectly incentive-compatible transactions that were made historically, including subsequent non-TRUC transactions, all of which may have been very high feerate. Lastly, it wastes CPU cycles doing topology checks since this behavior cannot actually enforce the topology in general for the reorg setting. Github-Pull: bitcoin#33504 Rebased-From: e4df298
Github-Pull: bitcoin#33504 Rebased-From: 3fec028
5fdf35d doc: update example bitcoin conf for 30.0rc3 (fanquake) ad8bbca doc: update manual pages for v30.0rc3 (fanquake) 2eb2492 build: bump version to v30.0rc3 (fanquake) 0bcfe23 contrib: fix using macdploy script without translations. (amisha) a6887c7 depends: static libxcb_cursor (fanquake) 979b902 test: add more TRUC reorg coverge (Greg Sanders) d401c89 Mempool: Do not enforce TRUC checks on reorg (Greg Sanders) 308084f fuzz: don't bypass_limits for most mempool harnesses (Greg Sanders) 00b17a9 datacarrier: Undeprecate configuration option (Anthony Towns) 94f253a doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness) (Sebastian Falbesoner) 2684d86 miner: fix `addPackageTxs` unsigned integer overflow (ismaelsadeeq) 729b46a rpc: fix getblock(header) returns target for tip (Sjors Provoost) a24ef55 test: add block 2016 to mock mainnet (Sjors Provoost) Pull request description: Backports: * bitcoin#33434 * bitcoin#33446 * bitcoin#33453 * bitcoin#33475 * bitcoin#33482 * bitcoin#33484 * bitcoin#33504 Includes changes for `v30.0rc3`: * Version bump * Regen manpages * Regen exmaple .conf ACKs for top commit: marcofleon: lgtm ACK 5fdf35d dergoegge: ACK 5fdf35d hebasto: ACK 5fdf35d, I agree on the backported PRs. I've reproduced locally all backports, the manpages update, and the example `bitcoin.conf` updated, and obtained zero diff with this PR. Zero-1729: LGTM ACK 5fdf35d Tree-SHA512: 90bffbb6dfe2b512167b5e08253ea163b714505ec3ef2247d798c40b30713a7db13cf0b5486b5f9e0e5b3ba53108dfaeea47276c40816eeb81065d42bd402379
Using bypass_limits=true is essentially fuzzing part of a reorg only, and results in TRUC invariants unable to be checked. Remove most instances of bypassing limits, leaving one harness able to do so. Github-Pull: bitcoin#33504 Rebased-From: bf91a2d
Not enforcing TRUC topology on reorg was the intended behavior, but the appropriate bypass argument was not checked. This mistake means we could potentially invalidate a long chain of perfectly incentive-compatible transactions that were made historically, including subsequent non-TRUC transactions, all of which may have been very high feerate. Lastly, it wastes CPU cycles doing topology checks since this behavior cannot actually enforce the topology in general for the reorg setting. Github-Pull: bitcoin#33504 Rebased-From: e4df298
Github-Pull: bitcoin#33504 Rebased-From: 3fec028
b5def28 doc: update release notes for 28.x (fanquake) 90a9e4e test: add more TRUC reorg coverge (Greg Sanders) 520fc8e Mempool: Do not enforce TRUC checks on reorg (Greg Sanders) 8930c36 fuzz: don't bypass_limits for most mempool harnesses (Greg Sanders) Pull request description: Backports: * bitcoin#33504 ACKs for top commit: darosior: utACK b5def28. dergoegge: ACK b5def28 instagibbs: ACK b5def28 Tree-SHA512: 50495b75dec6dbbe24686cd7f1e832a79c841d29983d6be415783ba4ad3a1f7657459d491fc214de4d45f60467abc92f1daf75479f3db854fc6b3410368e67fc
Using bypass_limits=true is essentially fuzzing part of a reorg only, and results in TRUC invariants unable to be checked. Remove most instances of bypassing limits, leaving one harness able to do so. Github-Pull: bitcoin#33504 Rebased-From: bf91a2d
Not enforcing TRUC topology on reorg was the intended behavior, but the appropriate bypass argument was not checked. This mistake means we could potentially invalidate a long chain of perfectly incentive-compatible transactions that were made historically, including subsequent non-TRUC transactions, all of which may have been very high feerate. Lastly, it wastes CPU cycles doing topology checks since this behavior cannot actually enforce the topology in general for the reorg setting. Github-Pull: bitcoin#33504 Rebased-From: e4df298
Github-Pull: bitcoin#33504 Rebased-From: 3fec028
e3820d4 doc: update release notes for 29.x (fanquake) 69c4661 test: add more TRUC reorg coverge (Greg Sanders) e439ed1 Mempool: Do not enforce TRUC checks on reorg (Greg Sanders) 54377c7 fuzz: don't bypass_limits for most mempool harnesses (Greg Sanders) cf82bb4 doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness) (Sebastian Falbesoner) ff55cf5 rpc: fix getblock(header) returns target for tip (Sjors Provoost) b29bbb0 test: add block 2016 to mock mainnet (Sjors Provoost) Pull request description: Backports: * bitcoin#33446 * bitcoin#33484 * bitcoin#33504 ACKs for top commit: luke-jr: ACK e3820d4 dergoegge: ACK e3820d4 marcofleon: ACK e3820d4 Tree-SHA512: 27b852177d8502d6c703cb0eeb1e4df9d651c9c8add5fbf6ae4eeb4b8aefc145471f38f9794c0ed276bf7ebba1844ecbaf5a84cb5913ca7d0a546f5216ea3b2d
…emoveForReorg When a transaction with nSequence=0 (BIP68 relative locktime 0) enters the mempool with an unconfirmed parent, CalculatePrevHeights assigns nCoinHeight=tip+1 and the resulting LockPoints are cached with maxInputBlock=genesis. After invalidateblock lowers the tip, TestLockPointValidity returns true for genesis (always on chain), so the stale cached lockpoints are reused. CheckSequenceLocksAtTip then incorrectly determines the lock is not satisfied and removes the transaction along with all its descendants. Fix: in filter_final_and_mature, detect the genesis sentinel (maxInputBlock->nHeight==0 with lp.height>0) which indicates lockpoints computed with mempool parent inputs, and force fresh recalculation via CalculateLockPointsAtTip. This is the same class of issue fixed for TRUC in bitcoin#33504. Closes bitcoin#35007
…eorg ab0e2f1 test: add more TRUC reorg coverge (Greg Sanders) 331063f Mempool: Do not enforce TRUC checks on reorg (Greg Sanders) a31db34 fuzz: don't bypass_limits for most mempool harnesses (Greg Sanders) Pull request description: This was the intended behavior but our tests didn't cover the scenario where in-block transactions themselves violate TRUC topological constraints. The behavior in master will potentially lead to many erroneous evictions during a reorg, where evicted TRUC packages may be very high feerate and make sense to mine all together in the next block and are well within the normal anti-DoS chain limits. This issue exists since the merge of https://github.com/bitcoin/bitcoin/pull/28948/files#diff-97c3a52bc5fad452d82670a7fd291800bae20c7bc35bb82686c2c0a4ea7b5b98R956 ACKs for top commit: sdaftuar: ACK ab0e2f1 glozow: ACK ab0e2f1 ismaelsadeeq: Code review ACK ab0e2f1 Tree-SHA512: bdb6e4dd622ed8b0b11866263fff559fcca6e0ca1c56a884cca9ac4572f0026528a63a9f4c8a0660df2f5efe0766310a30e5df1d6c560f31e4324ea5d4b3c1a8
8e776bb policy: don't CheckEphemeralSpends on reorg (Greg Sanders) Pull request description: Similar reasoning to bitcoin/bitcoin#33504 During a deeper reorg it's possible that a long sequence of dust-having transactions that are connected in a linear fashion. On reorg, this could cause each subsequent "generation" to be rejected. These rejected transactions may contain a large amount of competitive fees via normal means. PreCheck based `PreCheckEphemeralSpends` is left in place because we wouldn't have relayed them prior to the reorg. ACKs for top commit: darosior: re-ACK 8e776bb ismaelsadeeq: reACK 8e776bb sedited: ACK 8e776bb Tree-SHA512: cf0a6945066e9f5f8f9a847394c2c1225facf475a8aa4bc811b436513eff79c0a720d4ad21ba6b0f1cc4dfdd61cf46acb148333ac592b2ee252953732326ad1d
…eorg 3fec028 test: add more TRUC reorg coverge (Greg Sanders) e4df298 Mempool: Do not enforce TRUC checks on reorg (Greg Sanders) bf91a2d fuzz: don't bypass_limits for most mempool harnesses (Greg Sanders) Pull request description: This was the intended behavior but our tests didn't cover the scenario where in-block transactions themselves violate TRUC topological constraints. The behavior in master will potentially lead to many erroneous evictions during a reorg, where evicted TRUC packages may be very high feerate and make sense to mine all together in the next block and are well within the normal anti-DoS chain limits. This issue exists since the merge of https://github.com/bitcoin/bitcoin/pull/28948/files#diff-97c3a52bc5fad452d82670a7fd291800bae20c7bc35bb82686c2c0a4ea7b5b98R956 ACKs for top commit: sdaftuar: ACK 3fec028 glozow: ACK 3fec028 ismaelsadeeq: Code review ACK 3fec028 Tree-SHA512: bdb6e4dd622ed8b0b11866263fff559fcca6e0ca1c56a884cca9ac4572f0026528a63a9f4c8a0660df2f5efe0766310a30e5df1d6c560f31e4324ea5d4b3c1a8
f95291d policy: don't CheckEphemeralSpends on reorg (Greg Sanders) Pull request description: Similar reasoning to bitcoin/bitcoin#33504 During a deeper reorg it's possible that a long sequence of dust-having transactions that are connected in a linear fashion. On reorg, this could cause each subsequent "generation" to be rejected. These rejected transactions may contain a large amount of competitive fees via normal means. PreCheck based `PreCheckEphemeralSpends` is left in place because we wouldn't have relayed them prior to the reorg. ACKs for top commit: darosior: re-ACK f95291d ismaelsadeeq: reACK f95291d sedited: ACK f95291d Tree-SHA512: cf0a6945066e9f5f8f9a847394c2c1225facf475a8aa4bc811b436513eff79c0a720d4ad21ba6b0f1cc4dfdd61cf46acb148333ac592b2ee252953732326ad1d
This was the intended behavior but our tests didn't cover the scenario where in-block transactions themselves violate TRUC topological constraints.
The behavior in master will potentially lead to many erroneous evictions during a reorg, where evicted TRUC packages may be very high feerate and make sense to mine all together in the next block and are well within the normal anti-DoS chain limits.
This issue exists since the merge of https://github.com/bitcoin/bitcoin/pull/28948/files#diff-97c3a52bc5fad452d82670a7fd291800bae20c7bc35bb82686c2c0a4ea7b5b98R956