-
Notifications
You must be signed in to change notification settings - Fork 38.6k
test: interface_ipc.py minor fixes and cleanup #34003
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Use context managers to destroy block templates. Previously, block templates were not being destroyed before disconnecting because the destroy coroutines were called but never awaited. It's not necessary to explicitly destroy the templates since they will get garbage collected asynchronously, but it's good to destroy them to make the test more predictable, and to make the destroy calls that are present actually do something. This change also removes `await waitnext` expressions without changing behavior, because the previous code was misleading about what order waitNext calls were executed. This change is easiest to review ignoring whitespace. Co-authored-by: Sjors Provoost <[email protected]>
|
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/34003. ReviewsSee the guideline for information on the review process.
If your review is incorrectly listed, please copy-paste 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. |
|
cc @Sjors |
I take advantage of that in #33922, but I'll figure out a way to rebase if needed. E.g. I can just add another test with multiple templates. I tested on macOS 26.1 that the tests still pass. Can you split this into a few commits as it's quite a long list of changes now. |
|
Updated d179f71 -> 6ef092c ( re: #34003 (comment)
I think this shouldn't change #33922 too much. You should be able to just add the check for nonzero memory usage inside the
Yes, I split off a minimal change just introducing the context managers as the first commit, since it changes a lot of indentation. It should be pretty easy to review ignoring whitespace. The second commit contains all the other changes and should be more straightforward now. I could split it up more if desired, but it might be actually more work to review if the same lines change multiple times, so I kept it together for now. |
sedited
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK 6ef092c
Thanks for the cleanup! Have another suggestion for saving a few lines and naming clarity:
Diff
diff --git a/test/functional/interface_ipc.py b/test/functional/interface_ipc.py
index 804f7f8f64..f8f3a76ec7 100755
--- a/test/functional/interface_ipc.py
+++ b/test/functional/interface_ipc.py
@@ -176,2 +176 @@ class IPCInterfaceTest(BitcoinTestFramework):
- template3 = await template2.waitNext(ctx, waitoptions)
- assert_equal(template3._has("result"), False)
+ assert_equal((await template2.waitNext(ctx, waitoptions))._has("result"), False)
@@ -181,2 +180,2 @@ class IPCInterfaceTest(BitcoinTestFramework):
- template4 = await stack.enter_async_context(destroying((await template2.waitNext(ctx, waitoptions)).result, ctx))
- block3 = await self.parse_and_deserialize_block(template4, ctx)
+ template3 = await stack.enter_async_context(destroying((await template2.waitNext(ctx, waitoptions)).result, ctx))
+ block3 = await self.parse_and_deserialize_block(template3, ctx)
@@ -187,2 +186,2 @@ class IPCInterfaceTest(BitcoinTestFramework):
- template5 = await stack.enter_async_context(destroying((await template4.waitNext(ctx, waitoptions)).result, ctx))
- block4 = await self.parse_and_deserialize_block(template5, ctx)
+ template4 = await stack.enter_async_context(destroying((await template3.waitNext(ctx, waitoptions)).result, ctx))
+ block4 = await self.parse_and_deserialize_block(template4, ctx)
@@ -194,3 +193,3 @@ class IPCInterfaceTest(BitcoinTestFramework):
- template6 = await stack.enter_async_context(destroying((await template5.waitNext(ctx, waitoptions)).result, ctx))
- block4 = await self.parse_and_deserialize_block(template6, ctx)
- assert_equal(len(block4.vtx), 3)
+ template5 = await stack.enter_async_context(destroying((await template4.waitNext(ctx, waitoptions)).result, ctx))
+ block5 = await self.parse_and_deserialize_block(template5, ctx)
+ assert_equal(len(block5.vtx), 3)
@@ -199,2 +198 @@ class IPCInterfaceTest(BitcoinTestFramework):
- template7 = await template6.waitNext(ctx, waitoptions)
- assert_equal(template7._has("result"), False)
+ assert_equal((await template5.waitNext(ctx, waitoptions))._has("result"), False)
@@ -209,2 +207 @@ class IPCInterfaceTest(BitcoinTestFramework):
- template7 = await template6.waitNext(ctx, new_waitoptions)
- assert_equal(template7._has("result"), False)
+ assert_equal((await template5.waitNext(ctx, new_waitoptions))._has("result"), False)
@@ -215 +212 @@ class IPCInterfaceTest(BitcoinTestFramework):
- template6.interruptWait()
+ template5.interruptWait()
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Concept ACK 6ef092c
I'm new to this test, I built the bitcoin-node executable using -DENABLE_IPC=ON and ran the test using venv as mentioned in the readme file. I spent some time trying to understand the interfaces involving capnp.
The changes seem to clean the test quite a bit and makes it easier to go through.
|
Concept ACK #34003 I ran the interface_ipc.py test locally and it passes. The PR cleans up the test by fixing broken checks, missing await calls, and variable naming. I’m new to PR reviews, but from what I can tell, the changes seem correct and improve readability. I don’t see any issues with the changes. |
There are a few things that are incorrect or messy in the interface_ipc.py test.
This commit tries to clean them up:
- isTestChain and isInitialBlockDownload asserts were not checking the results
of those calls, only that calls were, made because they were not checking the
responses' .result member.
- A lot of result accesses like `template.result` `mining.result` were repeated
unnecessarily because variables like `template` and `mining` were assigned
response objects instead of result objects. These variables are now changed
to point directly to results.
- Some coroutine calls were assigned to temporary `wait` before being awaited.
This was unnecessarily confusing and would make code not run in top-down
order.
- `to_dict` calls were being made to check if result variables were unset. This
was inefficient and indirect because it iterates over all fields in response
structs instead of just checking whether the result field is present. The
to_dict calls are now replaced with more direct `_has('result')` calls.
- The `res` variables used to hold various responses did not have descriptive
names. These are replaced with clearer names.
Co-authored-by: rkrux <[email protected]>
As pointed out by Sjors in bitcoin#34003 (comment) and bitcoin#34003 (comment) the original intention of having waitNext and waitTipChanged calls in the test was to ensure that if new blocks were connected or fees were increased *during* the waits, that the calls would wake up and return. But the tests were written incorrectly, to generate blocks and transactions before the wait calls instead of during the calls. So the tests were less meaningful then they should be. There was also a similar problem in the interruptWait test. The test was intended to test the interruptWait method, but it was never actually calling the method due to a missing await keyword. Instead it was testing that miniwallet.send_self_transfer would interrupt the wait. This commit fixes these issues by introducing a wait_and_do() helper function to start parallel tasks and trigger an action after a wait call is started. Co-authored-by: Sjors Provoost <[email protected]>
As pointed out by Sjors in bitcoin#34003 (comment) and bitcoin#34003 (comment) the intention of having waitNext calls in the test was to ensure that if fees increased, or new block was connected *during* the waitNext calls, that the calls would wake up and return. But the tests were written incorrectly, to generate transactions in blocks before the waitNext calls instead of during the calls. So the tests were less meaningful then they should be. There was also a similar problem in the interruptWait test. The test was intended to test the interruptWait method, but it was never actually calling the method due to a missing await keyword. Instead it was testing that miniwallet.send_self_transfer would interrupt the wait. This commit fixes these issues by introducing a wait_and_do() helper function to start parallel tasks and trigger an action after a waitNext call is started.
ryanofsky
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the reviews!
Updated 6ef092c -> c358910 (pr/pyipc.2 -> pr/pyipc.3, compare) applying suggestions and adding a new commit to test actions during waitNext calls instead of before them.
I tried to do the same thing with the waitTipChanged call as well, but for some reason waitTipChanged always seems to return right away even when the tip has not changed, and I'm not sure why that is, so I left it alone for now. Change I tried was:
- self.generate(self.nodes[0], 1)
- newblockref = (await mining.waitTipChanged(ctx, blockref.result.hash)).result
+ newblockref = (await wait_and_do(mining.waitTipChanged(ctx, blockref.result.hash), lambda: self.generate(self.nodes[0], 1))).result|
ACK a5e61b1 Though it would be nice to also fix this:
Because the timeout argument defaults to 0 when called from Python. diff --git a/test/functional/interface_ipc.py b/test/functional/interface_ipc.py
index 913aea16de..5242d61c1e 100755
--- a/test/functional/interface_ipc.py
+++ b/test/functional/interface_ipc.py
@@ -162,8 +162,10 @@ class IPCInterfaceTest(BitcoinTestFramework):
current_block_height = self.nodes[0].getchaintips()[0]["height"]
assert blockref.result.height == current_block_height
self.log.debug("Mine a block")
- self.generate(self.nodes[0], 1)
- newblockref = (await mining.waitTipChanged(ctx, blockref.result.hash)).result
+ newblockref = (await wait_and_do(
+ mining.waitTipChanged(ctx, blockref.result.hash, timeout),
+ lambda: self.generate(self.nodes[0], 1),
+ )).result
assert_equal(len(newblockref.hash), block_hash_size)
assert_equal(newblockref.height, current_block_height + 1)
self.log.debug("Wait for timeout")(I find it more readable to have the |
|
Nice suggestion! Updated c358910 -> d8fe5f0 ( |
|
ACK d8fe5f0 |
sedited
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK d8fe5f0
rkrux
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Post-merge now as it got merged while I was reviewing.
ACK d8fe5f0
I have focussed only on the changes in this PR and have limited understanding of the mining/ipc domain.
| async def wait_and_do(wait_fn, do_fn): | ||
| """Call wait_fn, then sleep, then call do_fn in a parallel task. Wait for | ||
| both tasks to complete.""" | ||
| wait_started = asyncio.Event() | ||
| result = None | ||
|
|
||
| async def wait(): | ||
| nonlocal result | ||
| wait_started.set() | ||
| result = await wait_fn | ||
|
|
||
| async def do(): | ||
| await wait_started.wait() | ||
| await asyncio.sleep(0.1) | ||
| # Let do_fn be either a callable or an awaitable object | ||
| if inspect.isawaitable(do_fn): | ||
| await do_fn | ||
| else: | ||
| do_fn() | ||
|
|
||
| await asyncio.gather(wait(), do()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In d8fe5f0 "test: improve interface_ipc.py waitNext tests"
All are nits now I believe.
- I don't suppose the following is guaranteed? When event is set, then the wait of
dois also over that makes it call the sleep in parallel. Reworded slightly to highlight the broader intent of thewait_and_dofunction.
Call wait_fn, then sleep,
-
From an event's POV, it is set in
wait()and waited for indo(); suggesteds/wait/setterands/do/waiter. -
s/wait_started/event_overbecause I got confused bywait_started.set()that could also suggest that the event wait starts now when instead it gets over at this stage.
diff --git a/test/functional/interface_ipc.py b/test/functional/interface_ipc.py
index 7c8f51a81c..0da75d25cd 100755
--- a/test/functional/interface_ipc.py
+++ b/test/functional/interface_ipc.py
@@ -40,18 +40,18 @@ async def wait_next_template(template, stack, ctx, opts):
return await stack.enter_async_context(destroying((await template.waitNext(ctx, opts)).result, ctx))
async def wait_and_do(wait_fn, do_fn):
- """Call wait_fn, then sleep, then call do_fn in a parallel task. Wait for
- both tasks to complete."""
- wait_started = asyncio.Event()
+ """Call wait_fn and do_fn in parallel tasks while ensuring do_fn is
+ called after wait_fn is started. Wait for both tasks to complete."""
+ event_over = asyncio.Event()
result = None
- async def wait():
+ async def setter():
nonlocal result
- wait_started.set()
+ event_over.set()
result = await wait_fn
- async def do():
- await wait_started.wait()
+ async def waiter():
+ await event_over.wait()
await asyncio.sleep(0.1)
# Let do_fn be either a callable or an awaitable object
if inspect.isawaitable(do_fn):
@@ -59,7 +59,7 @@ async def wait_and_do(wait_fn, do_fn):
else:
do_fn()
- await asyncio.gather(wait(), do())
+ await asyncio.gather(setter(), waiter())
return result
class IPCInterfaceTest(BitcoinTestFramework):There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
re: #34003 (comment)
Thanks for looking into this. The async code here is pretty confusing, so it's good to think through what it's doing and try to clarify things.
- I don't suppose the following is guaranteed? When event is set, then the wait of
dois also over that makes it call the sleep in parallel.
Actually the opposite should be true and setting the event happens first. When the event is set, wait_fn has not been awaited yet (meaning no waitNext or waitTipChange call has started), the sleep hasn't started yet, and do_fn has not been called.
In practice two orders are possible:
waitNextorwaitTipChangecall starts, and the sleep(0.1) is long enough thatdo_fn()is called during the remote wait and interrupts it, causing it to return.waitNextorwaitTipChangecall starts, but the request is slow or the sleep(0.1) is short enough thatdo_fn()runs first and causes the remote wait to return right away without even blocking.
A third scenario where the remote wait times out is also technically possible but should not happen because the wait timeout should be significantly longer than the sleep(0.1) here.
The main purpose of the wait_started event is to make it impossible for do_fn() to be called before the wait() coroutine starts executing, which would be bad because do_fn() can do anything and can potentially block the thread.
Using wait_started also makes it more likely that the do_fn() runs after wait_fn() has started waiting, but it can't guarantee this, because our wait functions to not provide any signal of when they have begun to wait.
Looking at the suggested diff, I think "ensuring do_fn is called after wait_fn is started" would not be accurate because we can't ensure that. Similarly setter is probably not as a good a name as wait since main purpose of the coroutine is to start the wait, and setting the event is an implementation detail. Also the event is set when the wait should be starting, not when it is over so wait_started is probably a better name than event_over.
As pointed out by Sjors in bitcoin#34003 (comment) and bitcoin#34003 (comment) the original intention of having waitNext and waitTipChanged calls in the test was to ensure that if new blocks were connected or fees were increased *during* the waits, that the calls would wake up and return. But the tests were written incorrectly, to generate blocks and transactions before the wait calls instead of during the calls. So the tests were less meaningful then they should be. There was also a similar problem in the interruptWait test. The test was intended to test the interruptWait method, but it was never actually calling the method due to a missing await keyword. Instead it was testing that miniwallet.send_self_transfer would interrupt the wait. This commit fixes these issues by introducing a wait_and_do() helper function to start parallel tasks and trigger an action after a wait call is started. Co-authored-by: Sjors Provoost <[email protected]>
|
The first commit in #33965 improves the |
…4ddc2dced57 94ddc2dced57 Merge bitcoin/bitcoin#34113: refactor: [rpc] Remove confusing and brittle integral casts c575990651d6 Merge bitcoin/bitcoin#34147: scripted-diff: refactor: wallet: Delete duplicate IsCrypted() eb0594e23f0c Merge bitcoin/bitcoin#33891: kernel: Expose reusable `PrecomputedTransactionData` in script validation e7033605775c Merge bitcoin/bitcoin#32997: index: Deduplicate HashKey / HeightKey handling ec4ff99a22b1 Merge bitcoin/bitcoin#33892: policy: allow <minrelay txns in package context if paid for by cpfp 48c9ba1e974b Merge bitcoin/bitcoin#34137: test: Avoid hard time.sleep(1) in feature_init.py 11ce5cf7997e scripted-diff: refactor: wallet: Delete IsCrypted 44e006d43831 [kernel] Expose reusable PrecomputedTransactionData in script valid fa727e3ec984 test: Avoid hard time.sleep(1) in feature_init.py d861c3820528 Merge bitcoin/bitcoin#33636: wallet: Expand MuSig test coverage and follow-ups 25636500c232 Merge bitcoin/bitcoin#32737: rpc, doc: clarify the response of listtransactions RPC d018876696cf Merge bitcoin/bitcoin#34039: test: address self-announcement 5bbc7c8cc1f2 Merge bitcoin/bitcoin#33810: ci: Add IWYU job 695e2b94ecd9 Merge bitcoin/bitcoin#33353: log: show reindex progress in `ImportBlocks` 1f151e73c00a Merge bitcoin/bitcoin#32929: qa: Clarify assert_start_raises_init_error output 315fdb406658 Merge bitcoin/bitcoin#34079: kernel: Remove non-kernel module includes d3a479cb077d kernel: Move BlockInfo to a kernel file d69a582e72ea kernel: Remove some unnecessary non-kernel includes e44dec027cee add release note about supporing non-TRUC <minrelay txns 7f295e1d9b44 Merge bitcoin/bitcoin#34084: scripted-diff: [doc] Unify stale copyright headers 5e7931af3573 Merge bitcoin/bitcoin#34095: refactor: enable `readability-container-contains` clang-tidy rule c80fd910f96c Merge bitcoin/bitcoin#33732: ci: Call docker exec from Python script to fix word splitting acba51101bbc Merge bitcoin/bitcoin#34107: build: Update minimum required Boost version fa66e2d07a4b refactor: [rpc] Remove confusing and brittle integral casts 74d6efe9c28b Merge bitcoin/bitcoin#34106: doc: add missing copyright headers 0c862bc7ea28 Merge bitcoin/bitcoin#32545: Replace cluster linearization algorithm with SFL 1e94e562f76e refactor: enable `readability-container-contains` clang-tidy rule fd9f1accbda9 Fix compilation for old Boost versions 75bdb925f404 clusterlin: drop support for improvable chunking (simplification) 91399a79122c clusterlin: remove unused MergeLinearizations (cleanup) 5ce280074512 clusterlin: randomize equal-feerate parts of linearization (privacy) 13aad26b7848 clusterlin: randomize various decisions in SFL (feature) ddbfa4dfac7b clusterlin: keep FIFO queue of improvable chunks (preparation) 3efc94d6564d clusterlin: replace cluster linearization with SFL (feature) 6a8fa821b80c clusterlin: add support for loading existing linearization (feature) da48ed9f348a clusterlin: ReadLinearization for non-topological (tests) c461259fb629 clusterlin: add class implementing SFL state (preparation) f480c1e71777 build: Update minimum required Boost version 95bfe7d574cf clusterlin: replace benchmarks with SFL-hard ones (bench) 86dd550a9b70 clusterlin: add known-correct optimal linearization tests (tests) aeb7ccb937bb doc: add missing copyright headers 68a7cb8f8be8 contrib: output copyright in generate-seeds.py 516ae5ede44a Merge bitcoin/bitcoin#31533: fuzz: Add fuzz target for block index tree and related validation events 9272fd517fd3 Merge bitcoin/bitcoin#34105: kernel: revert accidentally removed copyright header 85314dc0bf87 kernel: revert accidentally removed copyright header fa4cb13b5203 test: [doc] Manually unify stale headers 1841bf9cb67b test: address self-announcement 1ed8e7616527 rpc, doc: clarify the response of listtransactions RPC 09a1fa190ea3 Merge bitcoin/bitcoin#34094: chore: bump checkout to v6 80b1b5917dd1 Merge bitcoin/bitcoin#34088: log: Use `__func__` for -logsourcelocations 3a2807ad953c Merge bitcoin/bitcoin#33875: qa: Account for unset errno in ConnectionResetError 8d38b6f5f10b Merge bitcoin/bitcoin#34091: fuzz: doc: remove any mention to `address_deserialize_v2` cd98caea438a Update ci.yml ab513103df8d Merge bitcoin/bitcoin#33192: refactor: unify container presence checks 56750c4f87d0 iwyu, clang-format: Sort includes 2c78814e0e18 ci: Add IWYU job 94e4f04d7cf4 cmake: Fix target name 0f81e005197f cmake: Make `codegen` target dependent on `generate_build_info` 73f7844cdb1e iwyu: Add patch to prefer C++ headers over C counterparts 7a65437e2370 iwyu: Add patch to prefer angled brackets over quotes for includes facd3d56ccbe log: Use `__func__` for -logsourcelocations fe0e31f1efca Merge bitcoin/bitcoin#34053: lint: Remove confusing, redundant, and brittle lint-spelling e5c600dc0e06 Merge bitcoin/bitcoin#34063: Make `transaction_indentifier` hex string constructor evaluated at comptime 41f2cc6d3d59 Merge bitcoin-core/gui#919: move-only: MAX_BLOCK_TIME_GAP to src/qt 7c7cd8c296a5 Merge bitcoin/bitcoin#34089: contrib: asmap-tool.py - Don't write binary to TTY e3a4cb127f0d Merge bitcoin/bitcoin#34080: ci: Pin native tests on cross-builds to same commit a005fdff6c7a Merge bitcoin/bitcoin#34074: A few followups after introducing `/rest/blockpart/` endpoint caf4843a59a9 fuzz: doc: remove any mention to address_deserialize_v2 fa5ed16aa4d9 move-only: MAX_BLOCK_TIME_GAP to src/qt 356883f0e48b qa-tests: Log expected output in debug 7427a03b5ac9 qa-tests: Add test for timeouts due to missing init errors d7f703c1f1a8 refactor(qa-tests): Extract InternalDurationTestMixin for use in next commit 69bcfcad8c3d fix(qa-tests): Bring back decoding of exception field fb43b2f8cc4c qa: Improve assert_start_raises_init_error output 59b93f11e860 rest: print also HTTP response reason in case of an error 7fe94a04934a rest: add a test for unsuported `/blockpart/` request type fa5f29774872 scripted-diff: [doc] Unify stale copyright headers faa8ee62f5c1 ci: Pin native tests on cross-builds to same commit db2d39f64297 fuzz: add subtest for re-downloading a previously pruned block 45f5b2dac330 fuzz: Add fuzzer for block index c011e3aa5426 test: Wrap validation functions with TestChainstateManager 13891a8a685d Merge bitcoin/bitcoin#34050: fuzz: exercise `ComputeMerkleRoot` without `mutated` parameter ab643efc0a70 Merge bitcoin/bitcoin#34003: test: interface_ipc.py minor fixes and cleanup 4f11ef058b08 Merge bitcoin/bitcoin#30214: refactor: Improve assumeutxo state representation cbafd3ddf8a2 Merge bitcoin/bitcoin#34060: test: fix race condition in p2p_v2_misbehaving.py peerid assertion 55d0d19b5c02 rest: deduplicate `interface_rest.py` negative tests 89eb531024d9 rest: update release notes for `/blockpart/` endpoint 41bf8f2d5ece Merge bitcoin-core/gui#877: Add a menu action to restore then migrate a legacy wallet 2210feb4466e Merge bitcoin/bitcoin#34051: log: Remove brittle and confusing LogPrintLevel 58251bf9fa4b Merge bitcoin/bitcoin#34061: fuzz: Fix bugs in `clusterlin_postlinearize_tree` target 41118e17f875 blockstorage: simplify partial block read validation 599effdeab4d rest: reformat `uri_prefixes` initializer list 5ac35795206d refactor: Add compile-time-checked hex txid fa8a5d215c5a log: Remove brittle and confusing LogPrintLevel fac24bbec85f test: Clarify logging_SeverityLevels test f2731676619d ipc: separate log statements per level 94c51ae54072 libevent: separate log statements per level a70a14a3f4f4 refactor: Separate out logic for building a tree-shaped dependency graph ce29d7d6262c fuzz: Fix variable in `clusterlin_postlinearize_tree` check 876e2849b4ec fuzz: Fix incorrect loop bounds in `clusterlin_postlinearize_tree` 09dfa4d3f8df test: fix race condition in p2p_v2_misbehaving.py peerid assertion 938d7aacabd0 Merge bitcoin/bitcoin#33657: rest: allow reading partial block data from storage 82be652e40ec doc: Improve ChainstateManager documentation, use consistent terms 597b8be223d4 Merge bitcoin/bitcoin#34025: net: Waste less time in socket handling af455dcb39db refactor: Simplify pruning functions ae85c495f1b5 refactor: Delete ChainstateManager::GetAll() method 6a572dbda92c refactor: Add ChainstateManager::ActivateBestChains() method 491d827d5284 refactor: Add ChainstateManager::m_chainstates member e514fe611681 refactor: Delete ChainstateManager::SnapshotBlockhash() method ee35250683ab refactor: Delete ChainstateManager::IsSnapshotValidated() method d9e82299fc4e refactor: Delete ChainstateManager::IsSnapshotActive() method 4dfe38391276 refactor: Convert ChainstateRole enum to struct 352ad27fc1b1 refactor: Add ChainstateManager::ValidatedChainstate() method a229cb9477e6 refactor: Add ChainstateManager::CurrentChainstate() method a9b7f5614c24 refactor: Add Chainstate::StoragePath() method 840bd2ef230e refactor: Pass chainstate parameters to MaybeCompleteSnapshotValidation 1598a15aedb9 refactor: Deduplicate Chainstate activation code 9fe927b6d654 refactor: Add Chainstate m_assumeutxo and m_target_utxohash members 6082c84713f4 refactor: Add Chainstate::m_target_blockhash member de00e87548f7 test: Fix broken chainstatemanager_snapshot_init check fa904fc683c0 lint: Remove confusing, redundant, and brittle lint-spelling 14371fd1fca5 gui: Add a menu item to restore then migrate a wallet file f11a7d248cf5 gui: Add restore_and_migrate function to restore then migrate a wallet 16ab6dfc1074 gui: Move actual migration part of migrate() to its own function 4ec2d18a0734 wallet, interfaces, gui: Expose load_after_restore parameter d155fc12a0c7 Merge bitcoin/bitcoin#32414: validation: periodically flush dbcache during reindex-chainstate 07135290c172 rest: allow reading partial block data from storage 4e2af1c06547 blockstorage: allow reading partial block data from storage f2fd1aa21c76 blockstorage: return an error code from `ReadRawBlock()` 5be20c380dcb Merge bitcoin/bitcoin#34033: scripted-diff: Unify error and warning log formatting b31f7866952a Merge bitcoin/bitcoin#34045: test: Log IP of download server in get_previous_releases.py 7e9de20c0c14 fuzz: exercise `ComputeMerkleRoot` without mutated parameter b26762bdcb94 Merge bitcoin/bitcoin#33805: merkle: migrate `path` arg to reference and drop unused args 0f6d8a347aec Merge bitcoin/bitcoin#30442: precalculate SipHash constant salt XORs c2975f26d69f Merge bitcoin/bitcoin#33602: [IBD] coins: reduce lookups in dbcache layer propagation cdaf25f9c3e5 test: Log IP of download server in get_previous_releases.py c1f0a89d9cae Merge bitcoin/bitcoin#34040: test: Detect truncated download in get_previous_releases.py fa75480c84ff test: Detect truncated download in get_previous_releases.py 56ce78d5f62c Merge bitcoin/bitcoin#34031: net: Remove "tor" as a network specification 500862b2d4a1 Merge bitcoin/bitcoin#33423: qa: Improvements to debug_assert_log + busy_wait_for_debug_log 5f5c1ea01955 net: Cache -capturemessages setting cca113f5b022 Merge bitcoin/bitcoin#34008: log: don't rate-limit "new peer" with -debug=net 2c44c41984e0 Merge bitcoin/bitcoin#33553: validation: Improve warnings in case of chain corruption 6eb5ba569141 refactor: extract shared `SipHash` state into `SipHashState` 118d22ddb4ba optimization: cache `PresaltedSipHasher` in `CBlockHeaderAndShortTxIDs` 9ca52a4cbece optimization: migrate `SipHashUint256` to `PresaltedSipHasher` ec11b9fede2a optimization: introduce `PresaltedSipHasher` for repeated hashing d23d49ee3f23 Merge bitcoin/bitcoin#31823: tests: Add witness commitment if we have a witness transaction in `FullBlockTest.update_block()` 20330548cf5f refactor: extract `SipHash` C0-C3 constants to class scope 9f9eb7fbc053 test: rename k1/k2 to k0/k1 in `SipHash` consistency tests 29ed608dc75e Merge bitcoin/bitcoin#33961: script: Add a separate ScriptError for empty pubkeys encountered in Tapscript d2a199bca73b Merge bitcoin/bitcoin#33909: doc, ci: Make the max number of commits tested explicit dbc892806912 Merge bitcoin/bitcoin#33993: init: point out -stopatheight may be imprecise d4d184eda9c0 log: don't rate-limit "new peer" with -debug=net e7ac5a133cc3 doc: add release note for 34031 c4c70a256ed8 netbase: Remove "tor" as a network specification fa89f60e31d1 scripted-diff: LogPrintLevel(*,BCLog::Level::*,*) -> LogError()/LogWarning() fa6c7a1954ea scripted-diff: LogPrintLevel(*,BCLog::Level::Debug,*) -> LogDebug() d8fe5f0326c5 test: improve interface_ipc.py waitNext tests a5e61b1917af test: interface_ipc.py minor fixes and cleanup d5c8199b7904 Merge bitcoin/bitcoin#34006: Add util::Expected (std::expected) 77248e849699 Merge bitcoin/bitcoin#33771: refactor: C++20 operators 36073d56db0d Merge bitcoin/bitcoin#33952: depends: update freetype and document remaining `bitcoin-qt` runtime libs f09ae5f96fe8 Merge bitcoin/bitcoin#33950: guix: reduce allowed exported symbols cea443e24618 net: Pass time to InactivityChecks fuctions 89dc82295ebd Merge bitcoin/bitcoin#29641: scripted-diff: Use LogInfo over LogPrintf eb19a2dac5c7 Merge bitcoin/bitcoin#34017: fuzz: Add a test case for `ParseByteUnits()` faa23738fc25 refactor: Enable clang-tidy bugprone-unused-return-value fa114be27b17 Add util::Expected (std::expected) e68517208b4c Merge bitcoin/bitcoin#33995: depends: Propagate native C compiler to `sqlite` package 091cae6fdf89 Merge bitcoin/bitcoin#33939: contrib: Count entry differences in asmap-tool diff summary 57b888ce0ebd fuzz: Add a test case for `ParseByteUnits()` b8e66b901d56 Merge bitcoin/bitcoin#33858: test: add unit test coverage for the empty leaves path in MerkleComputation 0c9ab0f8f8c8 Merge bitcoin/bitcoin#33956: net: fix use-after-free with v2->v1 reconnection logic fa4395dffd43 refactor: Remove unused LogPrintf fa05181d904d scripted-diff: LogPrintf -> LogInfo 5646e6c0d358 index: restrict index helper function to namespace 032f3503e3fe index, refactor: deduplicate LookUpOne a67d3eb91d5e index: deduplicate Hash / Height handling 9890058b37b8 Merge bitcoin/bitcoin#33723: chainparams: remove dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us 9e02f7808909 Merge bitcoin/bitcoin#33774: cmake: Move IPC tests to `ipc/test` ad452a1e655e Merge bitcoin/bitcoin#33528: wallet: don't consider unconfirmed TRUC coins with ancestors ff06e2468a5d init: point out -stopatheight may be imprecise ded11fb04d82 test: fix interface_ipc.py template destruction 9a29b2d331ee Merge bitcoin/bitcoin#33857: doc: Add `x86_64-w64-mingw32ucrt` triplet to `depends/README.md` 69e66efe45a0 Merge bitcoin/bitcoin#32882: index: remove unnecessary locator cleaning in BaseIndex::Init() d9319b06cf82 refactor: unify container presence checks - non-trivial counts 039307554eb3 refactor: unify container presence checks - trivial counts 8bb9219b6301 refactor: unify container presence checks - find 6581ac5d9f93 Merge bitcoin/bitcoin#33996: contrib: fix manpage generation 39ca01525977 Merge bitcoin/bitcoin#33140: test: Avoid shutdown race in NetworkThread e9536faaee2b contrib: fix manpage generation bcf794d5f35b Merge bitcoin/bitcoin#30455: test: assumeutxo: add missing tests in wallet_assumeutxo.py af0e6a65c928 Merge bitcoin/bitcoin#33702: contrib: Remove brittle, confusing and redundant UTF8 encoding from Python IO 4b4711369880 validation: Reword CheckForkWarningConditions and call it also during IBD and at startup 2f51951d03cc p2p: Add warning message when receiving headers for blocks cached as invalid 4c784b25c478 Merge bitcoin/bitcoin#33985: fuzz: gate mempool entry based on weight 710031ebef83 Revert "guix: sqlite wants tcl" 4cf5ea6c3d2a depends: Propagate native C compiler to `sqlite` package ce771726f3e7 Merge bitcoin/bitcoin#33960: log: Use more severe log level (warn/err) where appropriate cb7d5bfe4a59 test, assumeutxo: loading a wallet (backup) on a pruned node 7a365244f839 test, refactor snapshot import and background validation e0ba6bbed97b Merge bitcoin/bitcoin#33591: Cluster mempool followups b8d279a81c16 doc: add comment to explain correctness of GatherClusters() aba7500a30ee Fix parameter name in getmempoolcluster rpc 6c1325a0913e Rename weight -> clusterweight in RPC output, and add doc explaining mempool terminology bc2eb931da30 Require mempool lock to be held when invoking TRUC checks 957ae232414b Improve comments for getTransactionAncestry to reference cluster counts instead of descendants d97d6199ce50 Fix comment to reference cluster limits, not chain limits a1b341ef9875 Sanity check feerate diagram in CTxMemPool::check() 23d6f457c4c0 rpc: improve getmempoolcluster output d2dcd37aac1e Avoid using mapTx.modify() to update modified fees d84ffc24d2dc doc: add release notes snippet for cluster mempool b0417ba94437 doc: Add design notes for cluster mempool and explain new mempool limits 804329400a73 fuzz: gate mempool entry based on weight 2d88966e43c6 miner: replace "package" with "chunk" 6f3e8eb3001a Add a GetFeePerVSize() accessor to CFeeRate, and use it in the BlockAssembler b5f245f6f219 Remove unused DEFAULT_ANCESTOR_SIZE_LIMIT_KVB and DEFAULT_DESCENDANT_SIZE_LIMIT_KVB 1dac54d506b5 Use cluster size limit instead of ancestor size limit in txpackage unit test 04f65488ca3e Use cluster size limit instead of ancestor/descendant size limits when sanity checking TRUC policy limits 634291a7dc44 Use cluster limits instead of ancestor/descendant limits when sanity checking package policy limits fc18ef1f3f33 Remove ancestor and descendant vsize limits from MemPoolLimits ed8e819121d7 Warn user if using -limitancestorsize/-limitdescendantsize that the options have no effect 80d8df2d47c2 Invoke removeUnchecked() directly in removeForBlock() 9292570f4cb8 Rewrite GetChildren without sets 3e39ea8c3070 Rewrite removeForReorg to avoid using sets a3c31dfd71de scripted-diff: rename AddToMempool -> TryAddToMempool a5a7905d83df Simplify removeRecursive 01d8520038ea Remove unused argument to RemoveStaged ec8eb013a9bf doc: Add `x86_64-w64-mingw32ucrt` triplet to `depends/README.md` 48496caa1235 ci: Remove redundant `DEP_OPTS` from “Windows-cross UCRT” job b5a7a685bba3 ci: Make the max number of commits tested explicit 9d5021a05bd3 script: add SCRIPT_ERR_TAPSCRIPT_EMPTY_PUBKEY 7b90b4f5bb10 guix: reduce allowed exported symbols 41e657aacfa6 guix: add bitcoin-qt runtime libs doc in symbol-check ef4ce19a1545 depends: freetype 2.11.1 fa45a1503eee log: Use LogWarning for non-critical logs fa0018d01102 log: Use LogError for fatal errors e7e51952dc24 contrib: Avoid outputting binary data to TTY 22229de7288f doc: Fix typo in init log 167df7a98c85 net: fix use-after-free with v2->v1 reconnection logic fd4ce55121e7 contrib: Count entry differences in asmap-tool diff summary 1488315d76ee policy: Allow any transaction version with < minrelay fad61185861a test: Fix "typo" in written invalid content fab085c15f72 contrib: Use text=True in subprocess over manual encoding handling fa71c15f8610 scripted-diff: Bump copyright headers after encoding changes fae612424b3e contrib: Remove confusing and redundant encoding from IO fa7d72bd1be9 lint: Drop check to enforce encoding to be specified in Python scripts faf39d8539c9 test: Clarify that Python UTF-8 mode is the default today for most systems fa83e3a81ddb lint: Do not allow locale dependent shell scripts 217dbbbb5e38 test: Add musig failure scenarios fa336053aada Move ci_exec to the Python script fa83555d163f ci: Require rsync to pass eeee02ea53dd ci: Untangle CI_EXEC bash function fa21fd1dc2e5 ci: Move macos snippet under DANGER_RUN_CI_ON_HOST fa37559ac5b7 ci: Document the retry script in PATH 666675e95fe8 ci: Move folder creation and docker kill to Python script bc64013e6fad Remove unused variable (cacheMap) in mempool c9519c260b7a musig: Check session id reuse e755614be586 sign: Remove duplicate sigversion check 0f7f0692ca1e musig: Move MUSIG_CHAINCODE to musig.cpp a7c96f874de1 tests: Add witness commitment if we have a witness transaction in FullBlockTest.update_block() 76e0e6087d03 qa: Account for errno not always being set for ConnectionResetError ffcae82a6810 test: exercise TransactionMerklePath with empty block; targets the MerkleComputation empty-leaves path that was only reached by fuzz tests 24ed820d4f0d merkle: remove unused `mutated` arg from `BlockWitnessMerkleRoot` 63d640fa6a70 merkle: remove unused `proot` and `pmutated` args from `MerkleComputation` be270551df30 merkle: migrate `path` arg of `MerkleComputation` to a reference 866bbb98fd36 cmake, test: Improve locality of `bitcoin_ipc_test` library description ae2e438b257f cmake: Move IPC tests to `ipc/test` 48840bfc2d7b refactor: Prefer `<=>` over multiple relational operators 5a0f49bd2661 refactor: Remove all `operator!=` definitions 0ac969cddfdb validation: don't reallocate cache for short-lived CCoinsViewCache c8f5e446dc95 coins: reduce lookups in dbcache layer propagation b0c706795ce6 Remove unreliable seed from chainparams.cpp, and the associated README dcd42d6d8f16 [test] wallet send 3 generation TRUC e753fadfd01c [wallet] never try to spend from unconfirmed TRUC that already has ancestors fa6db79302d2 test: Avoid shutdown race in NetworkThread a1f762302096 qa: Only complain about expected messages that were not found 1e54125e2e00 refactor(qa): Avoid unnecessary string operations a9021101dc63 qa: Replace always-escaped regexps with "X in Y" 5c16e4631c00 doc: Remove no longer correct comment facd01e6ffbb refactor: remove redundant locator cleanup in BaseIndex::Init() d7de5b109f69 logs: show reindex progress in `ImportBlocks` c1e554d3e583 refactor: consolidate 3 separate locks into one block 41479ed1d23e test: add test for periodic flush inside ActivateBestChain 84820561dcb2 validation: periodically flush dbcache during reindex-chainstate git-subtree-dir: libbitcoinkernel-sys/bitcoin git-subtree-split: 94ddc2dced5736612e358a3b80f2bc718fbd8161
…dc2dced 94ddc2dced Merge bitcoin/bitcoin#34113: refactor: [rpc] Remove confusing and brittle integral casts c575990651 Merge bitcoin/bitcoin#34147: scripted-diff: refactor: wallet: Delete duplicate IsCrypted() eb0594e23f Merge bitcoin/bitcoin#33891: kernel: Expose reusable `PrecomputedTransactionData` in script validation e703360577 Merge bitcoin/bitcoin#32997: index: Deduplicate HashKey / HeightKey handling ec4ff99a22 Merge bitcoin/bitcoin#33892: policy: allow <minrelay txns in package context if paid for by cpfp 48c9ba1e97 Merge bitcoin/bitcoin#34137: test: Avoid hard time.sleep(1) in feature_init.py 11ce5cf799 scripted-diff: refactor: wallet: Delete IsCrypted 44e006d438 [kernel] Expose reusable PrecomputedTransactionData in script valid fa727e3ec9 test: Avoid hard time.sleep(1) in feature_init.py d861c38205 Merge bitcoin/bitcoin#33636: wallet: Expand MuSig test coverage and follow-ups 25636500c2 Merge bitcoin/bitcoin#32737: rpc, doc: clarify the response of listtransactions RPC d018876696 Merge bitcoin/bitcoin#34039: test: address self-announcement 5bbc7c8cc1 Merge bitcoin/bitcoin#33810: ci: Add IWYU job 695e2b94ec Merge bitcoin/bitcoin#33353: log: show reindex progress in `ImportBlocks` 1f151e73c0 Merge bitcoin/bitcoin#32929: qa: Clarify assert_start_raises_init_error output 315fdb4066 Merge bitcoin/bitcoin#34079: kernel: Remove non-kernel module includes d3a479cb07 kernel: Move BlockInfo to a kernel file d69a582e72 kernel: Remove some unnecessary non-kernel includes e44dec027c add release note about supporing non-TRUC <minrelay txns 7f295e1d9b Merge bitcoin/bitcoin#34084: scripted-diff: [doc] Unify stale copyright headers 5e7931af35 Merge bitcoin/bitcoin#34095: refactor: enable `readability-container-contains` clang-tidy rule c80fd910f9 Merge bitcoin/bitcoin#33732: ci: Call docker exec from Python script to fix word splitting acba51101b Merge bitcoin/bitcoin#34107: build: Update minimum required Boost version fa66e2d07a refactor: [rpc] Remove confusing and brittle integral casts 74d6efe9c2 Merge bitcoin/bitcoin#34106: doc: add missing copyright headers 0c862bc7ea Merge bitcoin/bitcoin#32545: Replace cluster linearization algorithm with SFL 1e94e562f7 refactor: enable `readability-container-contains` clang-tidy rule fd9f1accbd Fix compilation for old Boost versions 75bdb925f4 clusterlin: drop support for improvable chunking (simplification) 91399a7912 clusterlin: remove unused MergeLinearizations (cleanup) 5ce2800745 clusterlin: randomize equal-feerate parts of linearization (privacy) 13aad26b78 clusterlin: randomize various decisions in SFL (feature) ddbfa4dfac clusterlin: keep FIFO queue of improvable chunks (preparation) 3efc94d656 clusterlin: replace cluster linearization with SFL (feature) 6a8fa821b8 clusterlin: add support for loading existing linearization (feature) da48ed9f34 clusterlin: ReadLinearization for non-topological (tests) c461259fb6 clusterlin: add class implementing SFL state (preparation) f480c1e717 build: Update minimum required Boost version 95bfe7d574 clusterlin: replace benchmarks with SFL-hard ones (bench) 86dd550a9b clusterlin: add known-correct optimal linearization tests (tests) aeb7ccb937 doc: add missing copyright headers 68a7cb8f8b contrib: output copyright in generate-seeds.py 516ae5ede4 Merge bitcoin/bitcoin#31533: fuzz: Add fuzz target for block index tree and related validation events 9272fd517f Merge bitcoin/bitcoin#34105: kernel: revert accidentally removed copyright header 85314dc0bf kernel: revert accidentally removed copyright header fa4cb13b52 test: [doc] Manually unify stale headers 1841bf9cb6 test: address self-announcement 1ed8e76165 rpc, doc: clarify the response of listtransactions RPC 09a1fa190e Merge bitcoin/bitcoin#34094: chore: bump checkout to v6 80b1b5917d Merge bitcoin/bitcoin#34088: log: Use `__func__` for -logsourcelocations 3a2807ad95 Merge bitcoin/bitcoin#33875: qa: Account for unset errno in ConnectionResetError 8d38b6f5f1 Merge bitcoin/bitcoin#34091: fuzz: doc: remove any mention to `address_deserialize_v2` cd98caea43 Update ci.yml ab513103df Merge bitcoin/bitcoin#33192: refactor: unify container presence checks 56750c4f87 iwyu, clang-format: Sort includes 2c78814e0e ci: Add IWYU job 94e4f04d7c cmake: Fix target name 0f81e00519 cmake: Make `codegen` target dependent on `generate_build_info` 73f7844cdb iwyu: Add patch to prefer C++ headers over C counterparts 7a65437e23 iwyu: Add patch to prefer angled brackets over quotes for includes facd3d56cc log: Use `__func__` for -logsourcelocations fe0e31f1ef Merge bitcoin/bitcoin#34053: lint: Remove confusing, redundant, and brittle lint-spelling e5c600dc0e Merge bitcoin/bitcoin#34063: Make `transaction_indentifier` hex string constructor evaluated at comptime 41f2cc6d3d Merge bitcoin-core/gui#919: move-only: MAX_BLOCK_TIME_GAP to src/qt 7c7cd8c296 Merge bitcoin/bitcoin#34089: contrib: asmap-tool.py - Don't write binary to TTY e3a4cb127f Merge bitcoin/bitcoin#34080: ci: Pin native tests on cross-builds to same commit a005fdff6c Merge bitcoin/bitcoin#34074: A few followups after introducing `/rest/blockpart/` endpoint caf4843a59 fuzz: doc: remove any mention to address_deserialize_v2 fa5ed16aa4 move-only: MAX_BLOCK_TIME_GAP to src/qt 356883f0e4 qa-tests: Log expected output in debug 7427a03b5a qa-tests: Add test for timeouts due to missing init errors d7f703c1f1 refactor(qa-tests): Extract InternalDurationTestMixin for use in next commit 69bcfcad8c fix(qa-tests): Bring back decoding of exception field fb43b2f8cc qa: Improve assert_start_raises_init_error output 59b93f11e8 rest: print also HTTP response reason in case of an error 7fe94a0493 rest: add a test for unsuported `/blockpart/` request type fa5f297748 scripted-diff: [doc] Unify stale copyright headers faa8ee62f5 ci: Pin native tests on cross-builds to same commit db2d39f642 fuzz: add subtest for re-downloading a previously pruned block 45f5b2dac3 fuzz: Add fuzzer for block index c011e3aa54 test: Wrap validation functions with TestChainstateManager 13891a8a68 Merge bitcoin/bitcoin#34050: fuzz: exercise `ComputeMerkleRoot` without `mutated` parameter ab643efc0a Merge bitcoin/bitcoin#34003: test: interface_ipc.py minor fixes and cleanup 4f11ef058b Merge bitcoin/bitcoin#30214: refactor: Improve assumeutxo state representation cbafd3ddf8 Merge bitcoin/bitcoin#34060: test: fix race condition in p2p_v2_misbehaving.py peerid assertion 55d0d19b5c rest: deduplicate `interface_rest.py` negative tests 89eb531024 rest: update release notes for `/blockpart/` endpoint 41bf8f2d5e Merge bitcoin-core/gui#877: Add a menu action to restore then migrate a legacy wallet 2210feb446 Merge bitcoin/bitcoin#34051: log: Remove brittle and confusing LogPrintLevel 58251bf9fa Merge bitcoin/bitcoin#34061: fuzz: Fix bugs in `clusterlin_postlinearize_tree` target 41118e17f8 blockstorage: simplify partial block read validation 599effdeab rest: reformat `uri_prefixes` initializer list 5ac3579520 refactor: Add compile-time-checked hex txid fa8a5d215c log: Remove brittle and confusing LogPrintLevel fac24bbec8 test: Clarify logging_SeverityLevels test f273167661 ipc: separate log statements per level 94c51ae540 libevent: separate log statements per level a70a14a3f4 refactor: Separate out logic for building a tree-shaped dependency graph ce29d7d626 fuzz: Fix variable in `clusterlin_postlinearize_tree` check 876e2849b4 fuzz: Fix incorrect loop bounds in `clusterlin_postlinearize_tree` 09dfa4d3f8 test: fix race condition in p2p_v2_misbehaving.py peerid assertion 938d7aacab Merge bitcoin/bitcoin#33657: rest: allow reading partial block data from storage 82be652e40 doc: Improve ChainstateManager documentation, use consistent terms 597b8be223 Merge bitcoin/bitcoin#34025: net: Waste less time in socket handling af455dcb39 refactor: Simplify pruning functions ae85c495f1 refactor: Delete ChainstateManager::GetAll() method 6a572dbda9 refactor: Add ChainstateManager::ActivateBestChains() method 491d827d52 refactor: Add ChainstateManager::m_chainstates member e514fe6116 refactor: Delete ChainstateManager::SnapshotBlockhash() method ee35250683 refactor: Delete ChainstateManager::IsSnapshotValidated() method d9e82299fc refactor: Delete ChainstateManager::IsSnapshotActive() method 4dfe383912 refactor: Convert ChainstateRole enum to struct 352ad27fc1 refactor: Add ChainstateManager::ValidatedChainstate() method a229cb9477 refactor: Add ChainstateManager::CurrentChainstate() method a9b7f5614c refactor: Add Chainstate::StoragePath() method 840bd2ef23 refactor: Pass chainstate parameters to MaybeCompleteSnapshotValidation 1598a15aed refactor: Deduplicate Chainstate activation code 9fe927b6d6 refactor: Add Chainstate m_assumeutxo and m_target_utxohash members 6082c84713 refactor: Add Chainstate::m_target_blockhash member de00e87548 test: Fix broken chainstatemanager_snapshot_init check fa904fc683 lint: Remove confusing, redundant, and brittle lint-spelling 14371fd1fc gui: Add a menu item to restore then migrate a wallet file f11a7d248c gui: Add restore_and_migrate function to restore then migrate a wallet 16ab6dfc10 gui: Move actual migration part of migrate() to its own function 4ec2d18a07 wallet, interfaces, gui: Expose load_after_restore parameter d155fc12a0 Merge bitcoin/bitcoin#32414: validation: periodically flush dbcache during reindex-chainstate 07135290c1 rest: allow reading partial block data from storage 4e2af1c065 blockstorage: allow reading partial block data from storage f2fd1aa21c blockstorage: return an error code from `ReadRawBlock()` 5be20c380d Merge bitcoin/bitcoin#34033: scripted-diff: Unify error and warning log formatting b31f786695 Merge bitcoin/bitcoin#34045: test: Log IP of download server in get_previous_releases.py 7e9de20c0c fuzz: exercise `ComputeMerkleRoot` without mutated parameter b26762bdcb Merge bitcoin/bitcoin#33805: merkle: migrate `path` arg to reference and drop unused args 0f6d8a347a Merge bitcoin/bitcoin#30442: precalculate SipHash constant salt XORs c2975f26d6 Merge bitcoin/bitcoin#33602: [IBD] coins: reduce lookups in dbcache layer propagation cdaf25f9c3 test: Log IP of download server in get_previous_releases.py c1f0a89d9c Merge bitcoin/bitcoin#34040: test: Detect truncated download in get_previous_releases.py fa75480c84 test: Detect truncated download in get_previous_releases.py 56ce78d5f6 Merge bitcoin/bitcoin#34031: net: Remove "tor" as a network specification 500862b2d4 Merge bitcoin/bitcoin#33423: qa: Improvements to debug_assert_log + busy_wait_for_debug_log 5f5c1ea019 net: Cache -capturemessages setting cca113f5b0 Merge bitcoin/bitcoin#34008: log: don't rate-limit "new peer" with -debug=net 2c44c41984 Merge bitcoin/bitcoin#33553: validation: Improve warnings in case of chain corruption 6eb5ba5691 refactor: extract shared `SipHash` state into `SipHashState` 118d22ddb4 optimization: cache `PresaltedSipHasher` in `CBlockHeaderAndShortTxIDs` 9ca52a4cbe optimization: migrate `SipHashUint256` to `PresaltedSipHasher` ec11b9fede optimization: introduce `PresaltedSipHasher` for repeated hashing d23d49ee3f Merge bitcoin/bitcoin#31823: tests: Add witness commitment if we have a witness transaction in `FullBlockTest.update_block()` 20330548cf refactor: extract `SipHash` C0-C3 constants to class scope 9f9eb7fbc0 test: rename k1/k2 to k0/k1 in `SipHash` consistency tests 29ed608dc7 Merge bitcoin/bitcoin#33961: script: Add a separate ScriptError for empty pubkeys encountered in Tapscript d2a199bca7 Merge bitcoin/bitcoin#33909: doc, ci: Make the max number of commits tested explicit dbc8928069 Merge bitcoin/bitcoin#33993: init: point out -stopatheight may be imprecise d4d184eda9 log: don't rate-limit "new peer" with -debug=net e7ac5a133c doc: add release note for 34031 c4c70a256e netbase: Remove "tor" as a network specification fa89f60e31 scripted-diff: LogPrintLevel(*,BCLog::Level::*,*) -> LogError()/LogWarning() fa6c7a1954 scripted-diff: LogPrintLevel(*,BCLog::Level::Debug,*) -> LogDebug() d8fe5f0326 test: improve interface_ipc.py waitNext tests a5e61b1917 test: interface_ipc.py minor fixes and cleanup d5c8199b79 Merge bitcoin/bitcoin#34006: Add util::Expected (std::expected) 77248e8496 Merge bitcoin/bitcoin#33771: refactor: C++20 operators 36073d56db Merge bitcoin/bitcoin#33952: depends: update freetype and document remaining `bitcoin-qt` runtime libs f09ae5f96f Merge bitcoin/bitcoin#33950: guix: reduce allowed exported symbols cea443e246 net: Pass time to InactivityChecks fuctions 89dc82295e Merge bitcoin/bitcoin#29641: scripted-diff: Use LogInfo over LogPrintf eb19a2dac5 Merge bitcoin/bitcoin#34017: fuzz: Add a test case for `ParseByteUnits()` faa23738fc refactor: Enable clang-tidy bugprone-unused-return-value fa114be27b Add util::Expected (std::expected) e68517208b Merge bitcoin/bitcoin#33995: depends: Propagate native C compiler to `sqlite` package 091cae6fdf Merge bitcoin/bitcoin#33939: contrib: Count entry differences in asmap-tool diff summary 57b888ce0e fuzz: Add a test case for `ParseByteUnits()` b8e66b901d Merge bitcoin/bitcoin#33858: test: add unit test coverage for the empty leaves path in MerkleComputation 0c9ab0f8f8 Merge bitcoin/bitcoin#33956: net: fix use-after-free with v2->v1 reconnection logic fa4395dffd refactor: Remove unused LogPrintf fa05181d90 scripted-diff: LogPrintf -> LogInfo 5646e6c0d3 index: restrict index helper function to namespace 032f3503e3 index, refactor: deduplicate LookUpOne a67d3eb91d index: deduplicate Hash / Height handling 9890058b37 Merge bitcoin/bitcoin#33723: chainparams: remove dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us 9e02f78089 Merge bitcoin/bitcoin#33774: cmake: Move IPC tests to `ipc/test` ad452a1e65 Merge bitcoin/bitcoin#33528: wallet: don't consider unconfirmed TRUC coins with ancestors ff06e2468a init: point out -stopatheight may be imprecise ded11fb04d test: fix interface_ipc.py template destruction 9a29b2d331 Merge bitcoin/bitcoin#33857: doc: Add `x86_64-w64-mingw32ucrt` triplet to `depends/README.md` 69e66efe45 Merge bitcoin/bitcoin#32882: index: remove unnecessary locator cleaning in BaseIndex::Init() d9319b06cf refactor: unify container presence checks - non-trivial counts 039307554e refactor: unify container presence checks - trivial counts 8bb9219b63 refactor: unify container presence checks - find 6581ac5d9f Merge bitcoin/bitcoin#33996: contrib: fix manpage generation 39ca015259 Merge bitcoin/bitcoin#33140: test: Avoid shutdown race in NetworkThread e9536faaee contrib: fix manpage generation bcf794d5f3 Merge bitcoin/bitcoin#30455: test: assumeutxo: add missing tests in wallet_assumeutxo.py af0e6a65c9 Merge bitcoin/bitcoin#33702: contrib: Remove brittle, confusing and redundant UTF8 encoding from Python IO 4b47113698 validation: Reword CheckForkWarningConditions and call it also during IBD and at startup 2f51951d03 p2p: Add warning message when receiving headers for blocks cached as invalid 4c784b25c4 Merge bitcoin/bitcoin#33985: fuzz: gate mempool entry based on weight 710031ebef Revert "guix: sqlite wants tcl" 4cf5ea6c3d depends: Propagate native C compiler to `sqlite` package ce771726f3 Merge bitcoin/bitcoin#33960: log: Use more severe log level (warn/err) where appropriate cb7d5bfe4a test, assumeutxo: loading a wallet (backup) on a pruned node 7a365244f8 test, refactor snapshot import and background validation e0ba6bbed9 Merge bitcoin/bitcoin#33591: Cluster mempool followups b8d279a81c doc: add comment to explain correctness of GatherClusters() aba7500a30 Fix parameter name in getmempoolcluster rpc 6c1325a091 Rename weight -> clusterweight in RPC output, and add doc explaining mempool terminology bc2eb931da Require mempool lock to be held when invoking TRUC checks 957ae23241 Improve comments for getTransactionAncestry to reference cluster counts instead of descendants d97d6199ce Fix comment to reference cluster limits, not chain limits a1b341ef98 Sanity check feerate diagram in CTxMemPool::check() 23d6f457c4 rpc: improve getmempoolcluster output d2dcd37aac Avoid using mapTx.modify() to update modified fees d84ffc24d2 doc: add release notes snippet for cluster mempool b0417ba944 doc: Add design notes for cluster mempool and explain new mempool limits 804329400a fuzz: gate mempool entry based on weight 2d88966e43 miner: replace "package" with "chunk" 6f3e8eb300 Add a GetFeePerVSize() accessor to CFeeRate, and use it in the BlockAssembler b5f245f6f2 Remove unused DEFAULT_ANCESTOR_SIZE_LIMIT_KVB and DEFAULT_DESCENDANT_SIZE_LIMIT_KVB 1dac54d506 Use cluster size limit instead of ancestor size limit in txpackage unit test 04f65488ca Use cluster size limit instead of ancestor/descendant size limits when sanity checking TRUC policy limits 634291a7dc Use cluster limits instead of ancestor/descendant limits when sanity checking package policy limits fc18ef1f3f Remove ancestor and descendant vsize limits from MemPoolLimits ed8e819121 Warn user if using -limitancestorsize/-limitdescendantsize that the options have no effect 80d8df2d47 Invoke removeUnchecked() directly in removeForBlock() 9292570f4c Rewrite GetChildren without sets 3e39ea8c30 Rewrite removeForReorg to avoid using sets a3c31dfd71 scripted-diff: rename AddToMempool -> TryAddToMempool a5a7905d83 Simplify removeRecursive 01d8520038 Remove unused argument to RemoveStaged ec8eb013a9 doc: Add `x86_64-w64-mingw32ucrt` triplet to `depends/README.md` 48496caa12 ci: Remove redundant `DEP_OPTS` from “Windows-cross UCRT” job b5a7a685bb ci: Make the max number of commits tested explicit 9d5021a05b script: add SCRIPT_ERR_TAPSCRIPT_EMPTY_PUBKEY 7b90b4f5bb guix: reduce allowed exported symbols 41e657aacf guix: add bitcoin-qt runtime libs doc in symbol-check ef4ce19a15 depends: freetype 2.11.1 fa45a1503e log: Use LogWarning for non-critical logs fa0018d011 log: Use LogError for fatal errors e7e51952dc contrib: Avoid outputting binary data to TTY 22229de728 doc: Fix typo in init log 167df7a98c net: fix use-after-free with v2->v1 reconnection logic fd4ce55121 contrib: Count entry differences in asmap-tool diff summary 1488315d76 policy: Allow any transaction version with < minrelay fad6118586 test: Fix "typo" in written invalid content fab085c15f contrib: Use text=True in subprocess over manual encoding handling fa71c15f86 scripted-diff: Bump copyright headers after encoding changes fae612424b contrib: Remove confusing and redundant encoding from IO fa7d72bd1b lint: Drop check to enforce encoding to be specified in Python scripts faf39d8539 test: Clarify that Python UTF-8 mode is the default today for most systems fa83e3a81d lint: Do not allow locale dependent shell scripts 217dbbbb5e test: Add musig failure scenarios fa336053aa Move ci_exec to the Python script fa83555d16 ci: Require rsync to pass eeee02ea53 ci: Untangle CI_EXEC bash function fa21fd1dc2 ci: Move macos snippet under DANGER_RUN_CI_ON_HOST fa37559ac5 ci: Document the retry script in PATH 666675e95f ci: Move folder creation and docker kill to Python script bc64013e6f Remove unused variable (cacheMap) in mempool c9519c260b musig: Check session id reuse e755614be5 sign: Remove duplicate sigversion check 0f7f0692ca musig: Move MUSIG_CHAINCODE to musig.cpp a7c96f874d tests: Add witness commitment if we have a witness transaction in FullBlockTest.update_block() 76e0e6087d qa: Account for errno not always being set for ConnectionResetError ffcae82a68 test: exercise TransactionMerklePath with empty block; targets the MerkleComputation empty-leaves path that was only reached by fuzz tests 24ed820d4f merkle: remove unused `mutated` arg from `BlockWitnessMerkleRoot` 63d640fa6a merkle: remove unused `proot` and `pmutated` args from `MerkleComputation` be270551df merkle: migrate `path` arg of `MerkleComputation` to a reference 866bbb98fd cmake, test: Improve locality of `bitcoin_ipc_test` library description ae2e438b25 cmake: Move IPC tests to `ipc/test` 48840bfc2d refactor: Prefer `<=>` over multiple relational operators 5a0f49bd26 refactor: Remove all `operator!=` definitions 0ac969cddf validation: don't reallocate cache for short-lived CCoinsViewCache c8f5e446dc coins: reduce lookups in dbcache layer propagation b0c706795c Remove unreliable seed from chainparams.cpp, and the associated README dcd42d6d8f [test] wallet send 3 generation TRUC e753fadfd0 [wallet] never try to spend from unconfirmed TRUC that already has ancestors fa6db79302 test: Avoid shutdown race in NetworkThread a1f7623020 qa: Only complain about expected messages that were not found 1e54125e2e refactor(qa): Avoid unnecessary string operations a9021101dc qa: Replace always-escaped regexps with "X in Y" 5c16e4631c doc: Remove no longer correct comment facd01e6ff refactor: remove redundant locator cleanup in BaseIndex::Init() d7de5b109f logs: show reindex progress in `ImportBlocks` c1e554d3e5 refactor: consolidate 3 separate locks into one block 41479ed1d2 test: add test for periodic flush inside ActivateBestChain 84820561dc validation: periodically flush dbcache during reindex-chainstate git-subtree-dir: libbitcoinkernel-sys/bitcoin git-subtree-split: 94ddc2dced5736612e358a3b80f2bc718fbd8161
As pointed out by Sjors in bitcoin#34003 (comment) and bitcoin#34003 (comment) the original intention of having waitNext and waitTipChanged calls in the test was to ensure that if new blocks were connected or fees were increased *during* the waits, that the calls would wake up and return. But the tests were written incorrectly, to generate blocks and transactions before the wait calls instead of during the calls. So the tests were less meaningful then they should be. There was also a similar problem in the interruptWait test. The test was intended to test the interruptWait method, but it was never actually calling the method due to a missing await keyword. Instead it was testing that miniwallet.send_self_transfer would interrupt the wait. This commit fixes these issues by introducing a wait_and_do() helper function to start parallel tasks and trigger an action after a wait call is started. Co-authored-by: Sjors Provoost <[email protected]>
This PR cleans up the
interface_ipc.pytest, fixing broken checks, fixing missing await calls, removing to_dict calls, renaming variables, reducing.resultaccesses, and giving template objects explicit lifetimes. More details are in the commit messages.The first commit changes a lot of indentation so is easiest to review ignoring whitespace.