-
Notifications
You must be signed in to change notification settings - Fork 38.6k
interfaces: enable cancelling running waitNext calls
#33676
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
interfaces: enable cancelling running waitNext calls
#33676
Conversation
waitNext calls waitNext calls
|
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/33676. 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. |
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.
Code review 0e0cf1822416956b6853e593517f4a9fab157a62. This looks very good and I did not see any issues at a quick glance. I think I might suggest shortening interruptWaitNext to interruptWait, but no strong opinion.
0e0cf18 to
f4e63cc
Compare
furszy
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.
Concept ACK. Will review soon.
Eunovo
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.
Concept ACK f4e63cc
I took a first look and left some nits. I'll take a second look.
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.
Code review ACK f4e63cc807f8c34a780604bd3802739c37209b75. Thanks for the PR! This should be very helpful and close a significant gap in the mining interface, so clients are not forced to use shorter timeouts or keep around extra waitNext threads they don't actually need.
I do think there is a minor race condition that would be good to address here, but it could also be addressed in a followup:
In current implementation if a client makes a waitNext call followed by an interruptWait call, because the waitNext call is asynchronous while the interruptWait call is synchronous, it means InterruptWait could set waiting = false before waitNext() sets waiting = true, and the interrupt might be ignored. This could be a real problem because the clients wouldn't have a good way of knowing whether a particular interruptWait call was effective and if they needed to make another one.
Would recommend changing the implementation slightly to avoid this. Could replace bool waiting{false} variable with an bool m_interrupt_wait{false} variable as eunovo suggested. And instead of having the WaitAndCreateNewBlock method set waiting = true when it is first called, instead of have it set interrupt_wait = false before it returns. This might make the WaitAndCreateNewBlock implementation a little more complicated, but should be nicer for clients because they can rely on interruptWait causing the current waitNext call to return even if hasn't started waiting yet.
- This method can be used to cancel a running waitNext(). - This commit also adds a test case for interruptWait method
f4e63cc to
dcb56fd
Compare
|
Thanks @Eunovo and @ryanofsky I've fixed the comments in latest push diff |
furszy
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.
Code ACK dcb56fd
nit:
is there any way you could verify that there is someone waiting before setting interrupt_wait? It seems fragile to be able to interrupt a procedure that hasn't started.
Quick idea; could provide an optional flag. So the value exists whenever someone is waiting on it and is destroyed ( Index: src/node/interfaces.cpp
===================================================================
diff --git a/src/node/interfaces.cpp b/src/node/interfaces.cpp
--- a/src/node/interfaces.cpp (revision dcb56fd4cb59e6857c110dd87019459989dc1ec3)
+++ b/src/node/interfaces.cpp (date 1761593941511)
@@ -932,7 +932,7 @@
const std::unique_ptr<CBlockTemplate> m_block_template;
- bool m_interrupt_wait{false};
+ std::optional<bool> m_interrupt_wait{std::nullopt};
ChainstateManager& chainman() { return *Assert(m_node.chainman); }
KernelNotifications& notifications() { return *Assert(m_node.notifications); }
NodeContext& m_node;
Index: src/node/miner.cpp
===================================================================
diff --git a/src/node/miner.cpp b/src/node/miner.cpp
--- a/src/node/miner.cpp (revision dcb56fd4cb59e6857c110dd87019459989dc1ec3)
+++ b/src/node/miner.cpp (date 1761594250147)
@@ -453,9 +453,10 @@
block.hashMerkleRoot = BlockMerkleRoot(block);
}
-void InterruptWait(KernelNotifications& kernel_notifications, bool& interrupt_wait)
+void InterruptWait(KernelNotifications& kernel_notifications, std::optional<bool>& interrupt_wait)
{
LOCK(kernel_notifications.m_tip_block_mutex);
+ if (!interrupt_wait) throw std::runtime_error("Interrupt requested while no wait operation is active");
interrupt_wait = true;
kernel_notifications.m_tip_block_cv.notify_all();
}
@@ -466,7 +467,7 @@
const std::unique_ptr<CBlockTemplate>& block_template,
const BlockWaitOptions& options,
const BlockAssembler::Options& assemble_options,
- bool& interrupt_wait)
+ std::optional<bool>& interrupt_wait)
{
// Delay calculating the current template fees, just in case a new block
// comes in before the next tick.
@@ -483,6 +484,7 @@
bool tip_changed{false};
{
WAIT_LOCK(kernel_notifications.m_tip_block_mutex, lock);
+ interrupt_wait = false;
// Note that wait_until() checks the predicate before waiting
kernel_notifications.m_tip_block_cv.wait_until(lock, std::min(now + tick, deadline), [&]() EXCLUSIVE_LOCKS_REQUIRED(kernel_notifications.m_tip_block_mutex) {
AssertLockHeld(kernel_notifications.m_tip_block_mutex);
@@ -491,10 +493,10 @@
// method on BlockTemplate and no template could have been
// generated before a tip exists.
tip_changed = Assume(tip_block) && tip_block != block_template->block.hashPrevBlock;
- return tip_changed || chainman.m_interrupt || interrupt_wait;
+ return tip_changed || chainman.m_interrupt || (!interrupt_wait || interrupt_wait.value());
});
if (interrupt_wait) {
- interrupt_wait = false;
+ interrupt_wait.reset();
return nullptr;
}
}
Index: src/node/miner.h
===================================================================
diff --git a/src/node/miner.h b/src/node/miner.h
--- a/src/node/miner.h (revision dcb56fd4cb59e6857c110dd87019459989dc1ec3)
+++ b/src/node/miner.h (date 1761594137149)
@@ -240,7 +240,7 @@
/* Interrupt the current wait for the next block template. */
-void InterruptWait(KernelNotifications& kernel_notifications, bool& interrupt_wait);
+void InterruptWait(KernelNotifications& kernel_notifications, std::optional<bool>& interrupt_wait);
/**
* Return a new block template when fees rise to a certain threshold or after a
* new tip; return nullopt if timeout is reached.
@@ -251,7 +251,7 @@
const std::unique_ptr<CBlockTemplate>& block_template,
const BlockWaitOptions& options,
const BlockAssembler::Options& assemble_options,
- bool& interrupt_wait);
+ std::optional<bool>& interrupt_wait);
/* Locks cs_main and returns the block hash and block height of the active chain if it exists; otherwise, returns nullopt.*/
std::optional<BlockRef> GetTip(ChainstateManager& chainman);Note: Still, I might have gone too far and this might not be needed. Could enforce this rule at the API doc level too. |
|
re: #33676 (review), #33676 (comment)
I think this would just re-introduce the race condition we were trying to get rid of. The waitNext call is asynchronous and there's no way for a client to know if a waitNext is active or not. They can only know if they've made a call, not whether the IPC request has been sent to the socket, or whether server has received the request, or whether the server has started to execute the call after receiving it. In theory, the server could send notifications to the client as execution progresses, or let the client query the current state, or throw exceptions in certain states, but these approaches would add complexity and expose clients to information they couldn't use reliably and probably shouldn't have. It should be simpler to just decide I will say that current implementation will not work well if clients make multiple |
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.
Code review ACK dcb56fd, just tweaking semantics slightly since last review so if an interruptWait call is made shortly after a waitNext call it will reliably cause the waitNext call to return right away without blocking, even if the waitNext call had not begun to execute or wait yet.
|
Code review ACK dcb56fd |
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.
Looks Good. I left some comments on the tests.
| return tip_changed || chainman.m_interrupt || interrupt_wait; | ||
| }); | ||
| if (interrupt_wait) { | ||
| interrupt_wait = false; |
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.
The test doesn't break when this line is commented out.
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.
Interesting (that should never happen), can you share the logs and steps to reproduce?
I can verify that it failed for me.
2025-10-28T18:42:24.302035Z TestFramework (INFO): PRNG seed is: 1841123518053179096
2025-10-28T18:42:24.302446Z TestFramework (INFO): Initializing test directory /var/folders/dj/d8p8jhd172n7wnq81ryfl6rc0000gn/T/bitcoin_func_test_kcqf80gj
2025-10-28T18:42:25.106568Z TestFramework (INFO): Running echo test
2025-10-28T18:42:25.113270Z TestFramework (INFO): Running mining test
2025-10-28T18:42:31.292648Z TestFramework (ERROR): Unexpected exception
Traceback (most recent call last):
File "/Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin-wait/test/functional/test_framework/test_framework.py", line 142, in main
self.run_test()
~~~~~~~~~~~~~^^
File "/Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin-wait/build/test/functional/interface_ipc.py", line 255, in run_test
self.run_mining_test()
~~~~~~~~~~~~~~~~~~~~^^
File "/Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin-wait/build/test/functional/interface_ipc.py", line 251, in run_mining_test
asyncio.run(capnp.run(async_routine()))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.7/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py", line 195, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.7/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.7/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "capnp/lib/capnp.pyx", line 1965, in run
File "capnp/lib/capnp.pyx", line 1966, in capnp.lib.capnp.run
File "/Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin-wait/build/test/functional/interface_ipc.py", line 207, in async_routine
assert_equal(result.to_dict(), {})
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
File "/Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin-wait/test/functional/test_framework/util.py", line 78, in assert_equal
raise AssertionError("not(%s == %s)\n in particular not(%s == %s)" % (thing1, thing2, d1, d2))
AssertionError: not({'result': <capnp.lib.capnp._DynamicCapabilityClient object at 0x104bea930>} == {})
in particular not({'result': <capnp.lib.capnp._DynamicCapabilityClient object at 0x104bea930>} == {})
2025-10-28T18:42:31.355024Z TestFramework (INFO): Not stopping nodes as test failed. The dangling processes will be cleaned up later.
2025-10-28T18:42:31.355217Z TestFramework (WARNING): Not cleaning up dir /var/folders/dj/d8p8jhd172n7wnq81ryfl6rc0000gn/T/bitcoin_func_test_kcqf80gj
2025-10-28T18:42:31.355287Z TestFramework (ERROR): Test failed. Test logging available at /var/folders/dj/d8p8jhd172n7wnq81ryfl6rc0000gn/T/bitcoin_func_test_kcqf80gj/test_framework.log
2025-10-28T18:42:31.355462Z TestFramework (ERROR):
2025-10-28T18:42:31.355687Z TestFramework (ERROR): Hint: Call /Users/abubakarismail/Desktop/Work/bitcoin-dev/bitcoin-wait/test/functional/combine_logs.py '/var/folders/dj/d8p8jhd172n7wnq81ryfl6rc0000gn/T/bitcoin_func_test_kcqf80gj' to consolidate all logs
2025-10-28T18:42:31.355759Z TestFramework (ERROR):
2025-10-28T18:42:31.355809Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
2025-10-28T18:42:31.355892Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues
2025-10-28T18:42:31.355942Z TestFramework (ERROR):
[node 0] Cleaning up leftover process
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.
Comment out line 497 and rebuild. The interface_ipc tests still pass successfully. They fail if you modify them to use two waitNext calls as shown below:
diff --git a/test/functional/interface_ipc.py b/test/functional/interface_ipc.py
index 0c9de28da0..a3dc559008 100755
--- a/test/functional/interface_ipc.py
+++ b/test/functional/interface_ipc.py
@@ -199,10 +199,14 @@ class IPCInterfaceTest(BitcoinTestFramework):
wait_task = asyncio.create_task(wait_for_block())
interrupt_task = asyncio.create_task(interrupt_wait())
+ wait2_task = asyncio.create_task(wait_for_block())
result = await wait_task
await interrupt_task
assert_equal(result.to_dict(), {})
+ result2 = await wait2_task
+ block5 = await self.parse_and_deserialize_block(result2, ctx)
+ assert_equal(len(block5.vtx), 4)
current_block_height = self.nodes[0].getchaintips()[0]["height"]
check_opts = self.capnp_modules['mining'].BlockCheckOptions()
This verifies that the second waitNext call completes after the interrupt
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 your swift response, you highlighted multiple lines, so I commented them all that’s why it failed for me.
It should pass because we still return (The issue with commenting that line is that subsequent wait for same block template will return instantly). We can add a test case to verify that after interrupting a wait, you can wait again.
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.
It should pass because we still return (The issue with commenting that line is that subsequent wait for same block template will return instantly). We can add a test case to verify that after interrupting a wait, you can wait again.
Yes. I commented out the line on purpose to discover ways to improve the tests.
| template6.result.interruptWait() | ||
| miniwallet.send_self_transfer(fee_rate=10, from_node=self.nodes[0]) | ||
|
|
||
| wait_task = asyncio.create_task(wait_for_block()) |
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.
You can also add a test that interrupts before calling waitNext and check that waitNext returns immediately.
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.
Good idea, will do if retouching.
|
Concept ACK Can there ever only be one |
|
re: #33676 (comment)
There can be multiple waitNext() calls and the current implementation of interruptWait() will interrupt exactly one of them arbitrarily. I speculated on how this could be improved in #33676 (comment), if there is a use-case for multiple waitNext calls. But I don't think there is a good use-case, so it might be a good if the current interruptWait implemention is a soft discouragment for trying to use multiple simultaneous wait calls with the same block creation options from the same client. |
|
I also can't think of a use case, but maybe we should fail if a client (accidentally) tries? |
|
Yes, I think it’s a good idea to prevent multiple calls to waitNext if there is no explicit use case, or have interruptWait identify and cancel a targeted wait? |
I think I like the current implementation more than either of these two ideas, because they both seem like they would bring unneeded complexity. It seems ok to allow multiple wait calls, since they should work perfectly well, even if there is not a very convenient way to cancel them. If it ever becomes important for interruptWait to provide other ways of cancelling it could be added when that becomes apparent. |
bitcoin/bitcoin#33676 adds interruptWait() to the Mining interface. Call this method for quicker shutdown. This change is backward compatible with the currently released version Bitcoin Core v30. If the new IPC method doesn't exist, it falls back to the previous behavior of just waiting for waitNext() to return after -sv2interval.
|
I successfully tested this PR against my Template Provider implementation, see https://github.com/Sjors/sv2-tp/pull/57. |
bitcoin/bitcoin#33676 adds interruptWait() to the Mining interface. Call this method for quicker shutdown. This change is backward compatible with the currently released version Bitcoin Core v30. If the new IPC method doesn't exist, it falls back to the previous behavior of just waiting for waitNext() to return after -sv2interval.
Sjors
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.
tACK dcb56fd
I left some suggestions for extra clarity.
|
|
||
| self.log.debug("interruptWait should abort the current wait") | ||
| wait_started = asyncio.Event() | ||
| async def wait_for_block(): |
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.
nit: you could move these helper methods out of the test:
diff --git a/test/functional/interface_ipc.py b/test/functional/interface_ipc.py
index 0c9de28da0..7a447eba92 100755
--- a/test/functional/interface_ipc.py
+++ b/test/functional/interface_ipc.py
@@ -82,10 +82,20 @@ class IPCInterfaceTest(BitcoinTestFramework):
coinbase_data = BytesIO((await block_template.result.getCoinbaseTx(ctx)).result)
tx = CTransaction()
tx.deserialize(coinbase_data)
return tx
+ async def wait_for_block(self, template, waitoptions, ctx, wait_started):
+ wait_started.set()
+ return await template.result.waitNext(ctx, waitoptions)
+
+ async def interrupt_wait(self, template, miniwallet, wait_started):
+ await wait_started.wait() # Wait for confirmation wait started
+ await asyncio.sleep(0.1) # Minimal buffer
+ template.result.interruptWait()
+ miniwallet.send_self_transfer(fee_rate=10, from_node=self.nodes[0])
+
def run_echo_test(self):
self.log.info("Running echo test")
async def async_routine():
ctx, init = await self.make_capnp_init_ctx()
self.log.debug("Create Echo proxy object")
@@ -182,25 +192,15 @@ class IPCInterfaceTest(BitcoinTestFramework):
template7 = await template6.result.waitNext(ctx, waitoptions)
assert_equal(template7.to_dict(), {})
self.log.debug("interruptWait should abort the current wait")
wait_started = asyncio.Event()
- async def wait_for_block():
- new_waitoptions = self.capnp_modules['mining'].BlockWaitOptions()
- new_waitoptions.timeout = waitoptions.timeout * 60 # 1 minute wait
- new_waitoptions.feeThreshold = 1
- wait_started.set()
- return await template6.result.waitNext(ctx, new_waitoptions)
- async def interrupt_wait():
- await wait_started.wait() # Wait for confirmation wait started
- await asyncio.sleep(0.1) # Minimal buffer
- template6.result.interruptWait()
- miniwallet.send_self_transfer(fee_rate=10, from_node=self.nodes[0])
-
- wait_task = asyncio.create_task(wait_for_block())
- interrupt_task = asyncio.create_task(interrupt_wait())
+ waitoptions.timeout = waitoptions.timeout * 60 # 1 minute wait
+ waitoptions.feeThreshold = 1
+ wait_task = asyncio.create_task(self.wait_for_block(template6, waitoptions, ctx, wait_started))
+ interrupt_task = asyncio.create_task(self.interrupt_wait(template6, miniwallet, wait_started))
result = await wait_task
await interrupt_task
assert_equal(result.to_dict(), {})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 will do when retouching.
|
|
||
| result = await wait_task | ||
| await interrupt_task | ||
| assert_equal(result.to_dict(), {}) |
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.
Is this checking that the response to waitNext() is a null template?
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.
Yes.
| return tip_changed || chainman.m_interrupt; | ||
| return tip_changed || chainman.m_interrupt || interrupt_wait; | ||
| }); | ||
| if (interrupt_wait) { |
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.
It's somewhat unintuitive that we're waiting for a local variable to change. It might be more clear if we make a trivial struct TemplateNotifications and have this line check template_notifications.m_interrupt_wait instead. It's more clear that something called "notifications" can change from under us.
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: #33676 (comment)
It's somewhat unintuitive that we're waiting for a local variable to change. It might be more clear if we make a trivial struct
TemplateNotificationsand have this line checktemplate_notifications.m_interrupt_waitinstead. It's more clear that something called "notifications" can change from under us.
I feel like it's not that confusing once you notice it's declared as outside reference (bool& interrupt_wait), but a struct could be useful. Another solution could be to make to use a pointer (bool* interrupt_wait) to make it more obvious that it points to something. Any approach seems fine to me.
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.
I’m a bit on the fence here a referenced parameter already signals that the value comes from elsewhere, also prevents nullptr input (must be initialized).
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.
I also don't think a pointer is much more clear than a reference.
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.
Probably providing a "wait context" struct (which could be a shared pointer) would be slightly more appropriate, as it clearly indicates that it is specifically used in this workflow. Rather than a ref bool which is not so clear.
Still, we might be overthinking this. I think we can continue as is for now too.
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 dcb56fd
…354d1ce5c47 b354d1ce5c47 Merge bitcoin/bitcoin#33820: kernel: trim Chain interface a4e96cae7d3d Merge bitcoin/bitcoin#33042: refactor: inline constant return values from `dbwrapper` write methods 8c2710b0415f Merge bitcoin/bitcoin#32517: rpc: add "ischange: true" to decoded tx outputs in wallet gettransaction response 1fe851a4781a Merge bitcoin/bitcoin#32180: p2p: Advance pindexLastCommonBlock early after connecting blocks 5f0303b93fa7 Merge bitcoin/bitcoin#33443: log: reduce excessive "rolling back/forward" messages during block replay f4903dddc9ea Merge bitcoin/bitcoin#33433: Bugfix: QA: rpc_bind: Skip nonloopback test if no such address is found 06e9458869ee Merge bitcoin/bitcoin#32856: Update `minisketch` subtree 66978a1a9537 kernel: remove btck_chain_get_tip 4dd7e6dc48ed kernel: remove btck_chain_get_genesis 490cb056f651 Merge bitcoin/bitcoin#33785: util: Allow `Assert` (et al.) in contexts without __func__ dcd0099a765e Merge bitcoin/bitcoin#33826: scripted-diff: Remove obsolete comment 01adbbcd9c50 Merge bitcoin/bitcoin#33827: doc: Correct `pkgin` command usage on NetBSD eec21bc7c8bf Merge bitcoin/bitcoin#33536: doc: reference fuzz coverage steps in quick-start 035f934e02f9 Merge bitcoin/bitcoin#33823: ci: Use cmake --preset=dev-mode in test-each-commit task ddd2afac1073 Merge bitcoin/bitcoin#33676: interfaces: enable cancelling running `waitNext` calls dee7eec64389 doc: mention coverage build in quickstart section 0698c6b494de doc: Correct `pkgin` command usage on NetBSD 36724205fc1f scripted-diff: Remove obsolete comment ca1ce52a0f1e Merge bitcoin/bitcoin#33825: refactor: Add missing include in bitcoinkernel_wrapper.h fa1e8d8bad92 refactor: Add missing include in bitcoinkernel_wrapper.h fa6db67369fb ci: [refactor] Extract build_dir constant in ci-test-each-commit-exec.py fa95e6cdc1c5 ci: Use cmake --preset=dev-mode in test-each-commit task 513a0da2e0c8 Merge bitcoin/bitcoin#33818: ci: Extend tidy job to cover kernel code 5d0a40d607d4 ci: Extend tidy job to cover kernel code 93e79181da8c Merge bitcoin/bitcoin#33786: script: remove dead code in `CountWitnessSigOps` 3c4bec62239d Merge bitcoin/bitcoin#33782: test: remove obsolete `get_{key,multisig}` helpers from wallet_util.py 4b12beedaef5 Merge bitcoin/bitcoin#33793: test: move create_malleated_version() to messages.py for reuse 0b45e6db1058 Merge bitcoin/bitcoin#33789: doc: add cmake help option in Windows build docs 2b9c3511986b Merge bitcoin/bitcoin#33768: refactor: remove dead branches in `SingletonClusterImpl` fad6efd3bef1 refactor: Use STR_INTERNAL_BUG macro where possible fada379589a1 doc: Remove unused bugprone-lambda-function-name suppression 2bd155e6ee7e test: move create_malleated_version() to messages.py for reuse 9577daa3b88a doc: Add cmake help option in Windows build instructions fae1d99651e2 refactor: Use const reference to std::source_location fa5fbcd61563 util: Allow Assert() in contexts without __func__ 24bcad3d4df5 refactor: remove dead code in `CountWitnessSigOps` ec8516ceb756 test: remove obsolete `get_{key,multisig}` helpers from wallet_util.py 2d23820ee116 refactor: remove dead branches in `SingletonClusterImpl` 060bb5550824 rpc: add decoded tx details to gettransaction with extra wallet fields ad1c3bdba547 [move only] move DecodeTxDoc() to a common util file for sharing d633db541664 rpc: add "ischange: true" in wallet gettransaction decoded tx output dcb56fd4cb59 interfaces: add interruptWait method c235aa468b0d Update minisketch subtree to latest upstream 4543a3bde26f Squashed 'src/minisketch/' changes from ea8f66b1ea..d1bd01e189 01cc20f3307c test: improve coverage for a resolved stalling situation 9af6daf07ed0 test: remove magic number when checking for blocks that have arrived 3069d66dcac0 p2p: During block download, adjust pindexLastCommonBlock better 1fc7a81f1f5f log: reduce excessive messages during block replay 79b4c276e7b9 Bugfix: QA: rpc_bind: Skip nonloopback test if no such address is found 743abbcbde9e refactor: inline constant return value of `BlockTreeDB::WriteBatchSync` and `BlockManager::WriteBlockIndexDB` and `BlockTreeDB::WriteFlag` e030240e9094 refactor: inline constant return value of `CDBWrapper::Erase` and `BlockTreeDB::WriteReindexing` cdab9480e9e3 refactor: inline constant return value of `CDBWrapper::Write` d1847cf5b5af refactor: inline constant return value of `TxIndex::DB::WriteTxs` 50b63a5698e5 refactor: inline constant return value of `CDBWrapper::WriteBatch` git-subtree-dir: libbitcoinkernel-sys/bitcoin git-subtree-split: b354d1ce5c47997aa2f93910e05c0f8daa8736eb
c66e988754 Merge bitcoin/bitcoin#33865: cmake: Specify Windows plugin path in `test_bitcoin-qt` property e221b25246 Merge bitcoin/bitcoin#33860: depends: drop Qt patches dfde31f2ec Merge bitcoin/bitcoin#33864: scripted-diff: fix leftover references to `policy/fees.h` 0dd8d5c237 cmake: Specify Windows plugin path in `test_bitcoin-qt` property b0a3887154 scripted-diff: fix leftover references to `policy/fees.h` 48d4b936e0 Merge bitcoin/bitcoin#33511: init: Fix Ctrl-C shutdown hangs during wait calls 3c3c6adb72 Merge bitcoin/bitcoin#33745: mining: check witness commitment in submitBlock e652b69b8d Merge bitcoin/bitcoin#33003: test: add option to skip large re-org test in feature_block 3789215f73 Merge bitcoin/bitcoin#33724: refactor: Return uint64_t from GetSerializeSize d4e2a45833 Merge bitcoin/bitcoin#33750: doc: document fingerprinting risk when operating node on multiple networks 47618446a0 Merge bitcoin/bitcoin#33853: kernel: Allow null arguments for serialized data 3e9aca6f1b depends: drop qtbase-moc-ignore-gcc-macro.patch qt patch 0da5a82700 depends: drop unused qt patch d0da953773 Merge bitcoin/bitcoin#32482: build: add `-W*-whitespace` f450761f83 Merge bitcoin/bitcoin#33842: build: Bump g++ minimum supported version to 12 fa9f29a4a7 doc: Recommend latest Debian stable or Ubuntu LTS fa1711ee0d doc: Add GCC-12 min release notes faa8be75c9 ci: Enable experimental kernel stuff in G++-12 task (previous releases) fabce97b30 test: Remove gccbug_90348 test case fa3854e432 test: Remove unused fs::create_directories test fa9dacdbde util: [refactor] Remove unused create_directories workaround 138726a6f8 Merge bitcoin/bitcoin#33850: depends: drop qtbase_avoid_native_float16 qt patch 1c3d5c8ffd Merge bitcoin/bitcoin#33840: test: [refactor] Use reference over ptr to chainman 40dcbf580d build: add -Wtrailing-whitespace=any a3ac59a431 ci: Enable experimental kernel stuff in ASan task 5b89956eeb kernel: Allow null arguments for serialized data 169f93d2ac depends: drop qtbase_avoid_native_float16 qt patch d7659cd7e6 build: add -Wleading-whitespace=spaces d86650220a cmake: Disable `-Wtrailing-whitespace` warnings for RCC-generated files aabc5ca6ed cmake: Switch from AUTORCC to `qt6_add_resources` 25ae14c339 subprocess: replace tab with space 0c2b9dadd5 scripted-diff: remove whitespace in sha256_sse4.cpp 4da084fbc9 scripted-diff: change whitespace to spaces in univalue e6caf150b3 ci: add moreutils to lint job a7e8067610 Merge bitcoin/bitcoin#33181: guix: build for Linux HOSTS with `-static-libgcc` b354d1ce5c Merge bitcoin/bitcoin#33820: kernel: trim Chain interface fa807f78ae build: Bump g++ minimum supported version to 12 a4e96cae7d Merge bitcoin/bitcoin#33042: refactor: inline constant return values from `dbwrapper` write methods 8c2710b041 Merge bitcoin/bitcoin#32517: rpc: add "ischange: true" to decoded tx outputs in wallet gettransaction response 1fe851a478 Merge bitcoin/bitcoin#32180: p2p: Advance pindexLastCommonBlock early after connecting blocks 5f0303b93f Merge bitcoin/bitcoin#33443: log: reduce excessive "rolling back/forward" messages during block replay f4903dddc9 Merge bitcoin/bitcoin#33433: Bugfix: QA: rpc_bind: Skip nonloopback test if no such address is found 7a4901c902 test, refactor: Fix `-Warray-bounds` warning 06e9458869 Merge bitcoin/bitcoin#32856: Update `minisketch` subtree 66978a1a95 kernel: remove btck_chain_get_tip 4dd7e6dc48 kernel: remove btck_chain_get_genesis faf2759c8c test: [refactor] Use reference over ptr to chainman 490cb056f6 Merge bitcoin/bitcoin#33785: util: Allow `Assert` (et al.) in contexts without __func__ dcd0099a76 Merge bitcoin/bitcoin#33826: scripted-diff: Remove obsolete comment 01adbbcd9c Merge bitcoin/bitcoin#33827: doc: Correct `pkgin` command usage on NetBSD eec21bc7c8 Merge bitcoin/bitcoin#33536: doc: reference fuzz coverage steps in quick-start 035f934e02 Merge bitcoin/bitcoin#33823: ci: Use cmake --preset=dev-mode in test-each-commit task ddd2afac10 Merge bitcoin/bitcoin#33676: interfaces: enable cancelling running `waitNext` calls dee7eec643 doc: mention coverage build in quickstart section 0698c6b494 doc: Correct `pkgin` command usage on NetBSD 36724205fc scripted-diff: Remove obsolete comment ca1ce52a0f Merge bitcoin/bitcoin#33825: refactor: Add missing include in bitcoinkernel_wrapper.h fa1e8d8bad refactor: Add missing include in bitcoinkernel_wrapper.h fa6db67369 ci: [refactor] Extract build_dir constant in ci-test-each-commit-exec.py fa95e6cdc1 ci: Use cmake --preset=dev-mode in test-each-commit task 513a0da2e0 Merge bitcoin/bitcoin#33818: ci: Extend tidy job to cover kernel code 5d0a40d607 ci: Extend tidy job to cover kernel code 93e79181da Merge bitcoin/bitcoin#33786: script: remove dead code in `CountWitnessSigOps` 3c4bec6223 Merge bitcoin/bitcoin#33782: test: remove obsolete `get_{key,multisig}` helpers from wallet_util.py 4b12beedae Merge bitcoin/bitcoin#33793: test: move create_malleated_version() to messages.py for reuse 0b45e6db10 Merge bitcoin/bitcoin#33789: doc: add cmake help option in Windows build docs 2b9c351198 Merge bitcoin/bitcoin#33768: refactor: remove dead branches in `SingletonClusterImpl` fad6efd3be refactor: Use STR_INTERNAL_BUG macro where possible fada379589 doc: Remove unused bugprone-lambda-function-name suppression f06c6e1898 guix: build for Linux HOSTS with -static-libgcc 1bdf4695b0 guix: patch store paths out of libunwind 078a72c35f guix: move static-libc++ into CMAKE_EXE_LINKER_FLAGS flags 2bd155e6ee test: move create_malleated_version() to messages.py for reuse 5c5704e730 Merge bitcoin/bitcoin#33791: kernel: Use enumeration type for flags argument ed5720509f kernel: Use enumeration type for flags argument 50d106a4d6 Merge bitcoin/bitcoin#33781: clang-tidy: Remove no longer needed NOLINT ffd7ca3c46 Merge bitcoin/bitcoin#33780: guix: disable libsanitizer in Linux GCC build 9577daa3b8 doc: Add cmake help option in Windows build instructions fae1d99651 refactor: Use const reference to std::source_location fa5fbcd615 util: Allow Assert() in contexts without __func__ 24bcad3d4d refactor: remove dead code in `CountWitnessSigOps` 33389f1144 Merge bitcoin-core/gui#899: Modernize custom filtering ec8516ceb7 test: remove obsolete `get_{key,multisig}` helpers from wallet_util.py 038849e2e0 clang-tidy: Remove no longer needed NOLINT 5c41fa2918 guix: disable libsanitizer in Linux GCC build 4da01123df Merge bitcoin/bitcoin#30595: kernel: Introduce C header API 96614fff63 Merge bitcoin/bitcoin#33714: random: scope environ extern to macOS, BSDs and Illumos 4e9bd579d3 Merge bitcoin/bitcoin#33045: depends: disable variables, rules and suffixes. 5ffa63d681 Merge bitcoin/bitcoin#33626: ci: run native fuzz with MSAN job 75baff98fc Merge bitcoin/bitcoin#33744: ci: Fix lint runner selection (and docker cache) 2593ed1b5f Merge bitcoin/bitcoin#33574: doc: update Guix INSTALL.md 1cd8d9fe5c Merge bitcoin/bitcoin#33445: ci: Update Clang in "tidy" job 56329beaee Merge bitcoin/bitcoin#32301: test: cover invalid codesep positions for signature in taproot 1e6e32fa8a ci: run native fuzz with MSAN job 3784d15bcd ci: use LLVM libcxx 21.1.5 6c7a34f3b0 kernel: Add Purpose section to header documentation 7e9f00bcc1 kernel: Allowing reducing exports 7990463b10 kernel: Add pure kernel bitcoin-chainstate 36ec9a3ea2 Kernel: Add functions for working with outpoints 5eec7fa96a kernel: Add block hash type and block tree utility functions to C header f5d5d1213c kernel: Add function to read block undo data from disk to C header 09d0f62638 kernel: Add functions to read block from disk to C header a263a4caf2 kernel: Add function for copying block data to C header b30e15f432 kernel: Add functions for the block validation state to C header aa262da7bc kernel: Add validation interface to C header d27e27758d kernel: Add interrupt function to C header 1976b13be9 kernel: Add import blocks function to C header a747ca1f51 kernel: Add chainstate load options for in-memory dbs in C header 070e77732c kernel: Add options for reindexing in C header ad80abc73d kernel: Add block validation to C header cb1590b05e kernel: Add chainstate loading when instantiating a ChainstateManager e2c1bd3d71 kernel: Add chainstate manager option for setting worker threads 65571c36a2 kernel: Add chainstate manager object to C header c62f657ba3 kernel: Add notifications context option to C header 9e1bac4585 kernel: Add chain params context option to C header 337ea860df kernel: Add kernel library context object 28d679bad9 kernel: Add logging to kernel library C header 2cf136dec4 kernel: Introduce initial kernel C header API e15e8cbada qt: Modernize custom filtering 745eb053a4 Merge bitcoin-core/gui#901: Add createwallet, createwalletdescriptor, and migratewallet to history filter 52b1595850 depends: disable builtin variables 8b5a28fa78 depends: disable builtin rules and suffixes. 7632e0ba31 ci: fix configure docker action inputs 746d36cc80 Merge bitcoin/bitcoin#33754: ci: gha: Set debug_pull_request_number_str annotation 2d23820ee1 refactor: remove dead branches in `SingletonClusterImpl` e346ecae83 Add eclipse, partitioning, and fingerprinting note to i2p.md 25c45bb0d0 Merge bitcoin/bitcoin#33567: node: change a tx-relay on/off flag to enum 422b468229 Merge bitcoin/bitcoin#33683: refactor/doc: Add blockman param to GetTransaction doc comment da6f041e39 Merge bitcoin/bitcoin#31645: [IBD] coins: increase default UTXO flush batch size to 32 MiB 832a57673a Merge bitcoin/bitcoin#33749: test: ipc: resolve symlinks in `which capnp` 3cd4263bf6 Merge bitcoin/bitcoin#33753: test: Format strings in `test_runner` 78d4d36730 test: Format strings in `*.rs` fa9d0f994b ci: gha: Set debug_pull_request_number_str annotation 6eaa00fe20 test: clarify submitBlock() mutates the template 862bd43283 mining: ensure witness commitment check in submitBlock 00d1b6ef4b doc: clarify UpdateUncommittedBlockStructures 305384a037 Merge bitcoin/bitcoin#33746: ci: Add missing python3-dev package for riscv64 8eda7210eb Merge bitcoin/bitcoin#33743: fuzz: refactor memcpy to std::ranges::copy to work around ubsan warn 19a6a3e75e Add eclipse, partitioning, and fingerprinting note in tor.md 51093d6ae1 test: resolve symlinks in which result for capnp fa6c0bedd3 refactor: Return uint64_t from GetSerializeSize fad0c8680e refactor: Use uint64_t over size_t for serialized-size values fa4f388fc9 refactor: Use fixed size ints over (un)signed ints for serialized values 6f359695c3 Merge bitcoin/bitcoin#33698: test: Use same rpc timeout for authproxy and cli c281bb6837 Merge bitcoin/bitcoin#32924: test: add valid tx test with minimum-sized ECDSA signature (8 bytes DER-encoded) facf8b771a ci: Add missing python3-dev package for riscv64 b4d0288c46 doc: update Guix INSTALL.md 0b3b8a3be1 ci: fix lint docker caching fa4b52bd16 fuzz: refactor memcpy to std::ranges::copy to work around ubsan warn 72511fd02e Merge bitcoin/bitcoin#33555: build: Bump clang minimum supported version to 17 060bb55508 rpc: add decoded tx details to gettransaction with extra wallet fields ad1c3bdba5 [move only] move DecodeTxDoc() to a common util file for sharing d633db5416 rpc: add "ischange: true" in wallet gettransaction decoded tx output 79d6f458e2 random: scope environ extern to macOS, BSDs and Illumos 292ea0eb89 Merge bitcoin/bitcoin#33677: ci: Retry image building once on failure dd82c6c5d0 Merge bitcoin/bitcoin#33693: ci: use pycapnp 2.2.1 3bb30658e6 Merge bitcoin/bitcoin#32380: Modernize use of UTF-8 in Windows code 5a58d4915e Merge bitcoin/bitcoin#33546: test: add functional test for `TestShell` (matching doc example) 1abc8fa308 Merge bitcoin/bitcoin#33218: refactor: rename `fees.{h,cpp}` to `fees/block_policy_estimator.{h,cpp}` de15e52f09 Merge bitcoin/bitcoin#32867: doc: mention key removal in rpc interface modification 5d784bebaf clang-tidy: Disable `ArrayBound` check in src/ipc and src/test 5efdb0ef30 ci: Update Clang in "tidy" job fa01f38e53 move-only: Move CBlockFileInfo to kernel namespace fa2bbc9e4c refactor: [rpc] Remove cast when reporting serialized size fa364af89b test: Remove outdated comment 24434c1284 Merge bitcoin/bitcoin#31308: ci, iwyu: Treat warnings as errors for specific directories 27cd7f5049 Merge bitcoin/bitcoin#33185: guix: update time-machine to 5cb84f2013c5b1e48a7d0e617032266f1e6059e2 80bb7012be Merge bitcoin/bitcoin#31514: wallet: allow label for non-ranged external descriptor (if `internal=false`) & disallow label for ranged descriptors 5e1f626ac3 Merge bitcoin/bitcoin#32504: test: descriptor: cover invalid multi/multi_a cases dcb56fd4cb interfaces: add interruptWait method 56e9703968 Merge bitcoin/bitcoin#29640: Fix tiebreak when loading blocks from disk (and add tests for comparing chain ties) 53b34c80c6 ci: use pycapnp 2.2.1 in mac native job 865432869c ci: remove Python version comment from mac config 9bd9ec00b2 Merge bitcoin/bitcoin#33688: test: Update BIP324 test vectors 1a7fb5eeee fees: return current block height in estimateSmartFee ab49480d9b fees: rename fees_args to block_policy_estimator_args 06db08a435 fees: refactor: rename fees to block_policy_estimator 6dfdd7e034 fees: refactor: rename policy_fee_tests.cpp to feerounder_tests.cpp f54ffb4bc1 Merge bitcoin/bitcoin#32813: clang-format: make formatting deterministic for different formatter versions 1916c51cd8 Merge bitcoin/bitcoin#33210: fuzz: enhance wallet_fees by mocking mempool stuff 0eb554728c Merge bitcoin/bitcoin#33336: log: print every script verification state change c6c4edf324 Merge bitcoin/bitcoin#32983: rpc: refactor: use string_view in Arg/MaybeArg 00ad998d95 Merge bitcoin/bitcoin#33252: p2p: add `DifferenceFormatter` fuzz target and invariant check 1a1f46c228 refactor/doc: Add blockman param to `GetTransaction` doc comment and reorder out param 66667d6512 test: Use same rpc timeout for authproxy and cli 5555bce994 ci: Document why IN_GETOPT_BIN env var is needed on macOS fabe516440 ci: Export the container id in python script f6ba97cea1 Merge bitcoin/bitcoin#33666: ci: Drop libFuzzer from msan fuzz task af78d36512 Merge bitcoin/bitcoin#32588: util: Abort on failing CHECK_NONFATAL in debug builds 51877f2fc5 test: Update BIP324 test vectors 161864a038 Merge bitcoin/bitcoin#32579: p2p: Correct unrealistic headerssync unit test behavior 70a6fb5e5a Merge bitcoin/bitcoin#33172: test: p2p block malleability 99cb2054bd Merge bitcoin/bitcoin#33600: refactor: Construct g_verify_flag_names on first use 211bf6c975 Merge bitcoin/bitcoin#33566: miner: fix empty mempool case for waitNext() 944e5ff848 doc: mention key removal in rpc interface modification d32f9525e4 Merge bitcoin/bitcoin#33679: test: set number of RPC server threads to 2 1c85d06232 Merge bitcoin/bitcoin#32266: depends: Avoid `warning: "_FORTIFY_SOURCE" redefined` for `libevent` 11684c9ce2 Merge bitcoin/bitcoin#33674: ci: Doc ASLR workaround for sanitizer tasks e9cd45e3d3 test: set number of RPC server threads to 2 fa6aa9f42f ci: Retry image building once on failure fa4dbe04d7 ci: Allow overwriting check option in run() helper fa8e4de5c3 ci: Use os.environ[key] access when value must be set 7d27af98c7 Merge bitcoin/bitcoin#33461: ci: add Valgrind fuzz 1569bcc387 Merge bitcoin/bitcoin#33639: ci: Only write docker build images to Cirrus cache 98c4994d0f Merge bitcoin/bitcoin#33570: randomenv: Fix MinGW dllimport warning for `environ` c211d18322 Merge bitcoin/bitcoin#33670: test: Use unassigned p2p_port instead of hardcoded 60000 in p2p_i2p_ports.py e4b04630bc ci: add Valgrind fuzz 3fee0754a2 Merge bitcoin/bitcoin#33550: Fix windows libc++ `fs::path` `fstream` compile errors fa0e36156c ci: Doc ASLR workaround for sanitizer tasks fa20275db3 test: Use unassigned p2p_port instead of hardcoded 60000 in p2p_i2p_ports.py c862936d16 Merge bitcoin/bitcoin#33370: ci: use Mold linker for asan-lsan-ubsan-integer-no-depends-usdt workflow fabe0e07de ci: Only write docker build images to Cirrus cache fab64a5d6f ci: Move buildx command to python script fa72a2bd5c ci: Remove unused MAYBE_CPUSET fa70e23de7 ci: Drop libFuzzer from msan fuzz task abe7cbfe1a Merge bitcoin/bitcoin#33470: build: Move CMAKE_SKIP_INSTALL_RPATH from CMake to Guix script 689ec28d1d Merge bitcoin/bitcoin#33633: test: [move-only] binary utils to utils.py 0eeae4d174 Merge bitcoin/bitcoin#33625: Update secp256k1 subtree to latest master 4b41f99d57 build: Move CMAKE_SKIP_INSTALL_RPATH from CMake to Guix script d30f149360 Merge bitcoin/bitcoin#33630: doc: correct topology requirements in submitpackage helptext 3d22282564 [doc] correct topology requirements in submitpackage helptext e744fd1249 Merge bitcoin/bitcoin#33641: Update leveldb subtree to latest master 4371740beb Merge bitcoin/bitcoin#33642: doc: archive release notes for v28.3 ceea24b921 doc: archive release notes for v28.3 54ffe3de5b Update leveldb subtree to latest master f21162d819 Squashed 'src/leveldb/' changes from aba469ad6a..cad64b151d e14451ac87 Merge bitcoin/bitcoin#33469: TxGraph: change m_excluded_clusters f76e1ae389 Merge bitcoin/bitcoin#32313: coins: fix `cachedCoinsUsage` accounting in `CCoinsViewCache` 59c4898994 guix: remove python-pydantic-core input from LIEF 9f2a6927d3 guix: use Clang & LLVM 19 for macOS build 9570ddbec9 guix: update time-machine to 5cb84f2013c5b1e48a7d0e617032266f1e6059e2 7b5cc276aa guix: patch around riscv issue with newer (2.40+) binutils 91b5cbaabb ci: use Debian Trixie for macOS cross job fa75ef4328 test: Move export_env_build_path to util.py fa9f495308 test: Move get_binary_paths and Binaries to util.py 40e7d4cd0d Merge bitcoin/bitcoin#33549: ci: Add macOS cross task for arm64-apple-darwin ea17618c11 Merge bitcoin/bitcoin#33480: ci: Turn CentOS config into Alpine musl config b1f8a13702 Merge bitcoin/bitcoin#33624: test: P2SH sig ops are only counted with `SCRIPT_VERIFY_P2SH` 879c21045e Update secp256k1 subtree to latest master 3cbf7cb3e6 Squashed 'src/secp256k1/' changes from b9313c6e1a..d543c0d917 2f7a50f67c Merge bitcoin/bitcoin#33462: ci: add libcpp hardening flags to macOS fuzz job 07a926474b node: change a tx-relay on/off flag to enum 48aa0e98d0 Merge bitcoin/bitcoin#29675: wallet: Be able to receive and spend inputs involving MuSig2 aggregate keys db4bde0b03 Merge bitcoin/bitcoin#33517: multiprocess: Fix high overhead from message logging 3a10d700bc test: P2SH sig ops are only counted with `SCRIPT_VERIFY_P2SH` flag 9314113b29 Merge bitcoin/bitcoin#33610: doc: archive release notes for v29.2 9b43428c96 TxGraph: change m_excluded_clusters 6e1adbbaa1 Merge bitcoin/bitcoin#33612: test: change log rate limit version gate fdcf67de80 Merge bitcoin/bitcoin#33157: cluster mempool: control/optimize TxGraph memory usage 7b544341c0 test: change log rate limit version gate from 299900 to 290100 9610b0d1e2 randomenv: Fix MinGW dllimport warning for `environ` 6c4fe401e9 Merge bitcoin/bitcoin#33508: ci: fix buildx gha cache authentication on forks 8f7673257a miner: fix empty mempool case for waitNext() c11a3dcc88 doc: archive release notes for v29.2 64a7c7cbb9 Merge bitcoin/bitcoin#33558: ci: Use native platform for win-cross task 93b56e95c0 Merge bitcoin/bitcoin#33601: doc: archive release notes for v30.0 c235aa468b Update minisketch subtree to latest upstream 4543a3bde2 Squashed 'src/minisketch/' changes from ea8f66b1ea..d1bd01e189 563747971b Merge bitcoin/bitcoin#33580: depends: Use $(package)_file_name when downloading from the fallback 24d861da78 coins: only adjust `cachedCoinsUsage` on `EmplaceCoinInternalDANGER` insert d7c9d6c291 coins: fix `cachedCoinsUsage` accounting to prevent underflow 39cf8bb3d0 refactor: remove redundant usage tracking from `CoinsViewCacheCursor` 67cff8bec9 refactor: assert newly-created parent cache entry has zero memory usage 023cd5a546 txgraph: add SingletonClusterImpl (mem optimization) e346250732 txgraph: give Clusters a range of intended tx counts (preparation) e93b0f09cc txgraph: abstract out creation of empty Clusters (refactor) 6baf12621f txgraph: comment fixes (doc fix) 726b995739 txgraph: make Cluster an abstract class (refactor) 2602d89edd txgraph: avoid accessing other Cluster internals (refactor) 04c808ac4c txgraph: expose memory usage estimate function (feature) 7680bb8fd4 txgraph: keep track of Cluster memory usage (preparation) 4ba562e5f4 txgraph: keep data structures compact (mem optimization) bb5cb222ae depgraph: add memory usage control (feature) b1637a90de txgraph: avoid holes in DepGraph positions (mem optimization) 2b1d302508 txgraph: move some sanity checks from Cluster to TxGraphImpl (refactor) d40302fbaf txgraph: Make level of Cluster implicit (optimization) 8d6e49158e doc: archive release notes for v30.0 4e352efa2c qt: add createwallet, createwalletdescriptor, and migratewallet to history filter 0626b90f50 multiprocess: align our logging with libmultiprocess's 9d068225ee multiprocess: update multiprocess EventLoop construction to use options d2987102dd Merge bitcoin/bitcoin#33573: doc: bump the template macOS version f6567527d8 doc: bump the template macOS version faa9d10c84 refactor: Construct g_verify_flag_names on first use becf150013 Merge bitcoin/bitcoin#33518: Update libmultiprocess subtree to support reduced logging 01cc20f330 test: improve coverage for a resolved stalling situation 9af6daf07e test: remove magic number when checking for blocks that have arrived 3069d66dca p2p: During block download, adjust pindexLastCommonBlock better cd1b7fa1ff Merge bitcoin/bitcoin#33577: Revert "depends: Update URL for `qrencode` package source tarball" fa0fa0f700 refactor: Revert "disable self-assign warning for tests" faed118fb3 build: Bump clang minimum supported version to 17 6b4a92b0fa Merge bitcoin/bitcoin#33568: doc: how to update a subtree 90b2884ce4 Merge bitcoin/bitcoin#33581: ci: Properly include $FILE_ENV in DEPENDS_HASH d44b860cd0 Merge bitcoin/bitcoin#33584: ci: upgrade GitHub Action to download-artifact@v5 57f7c68821 test: add functional test for `TestShell` (matching doc example) 53874f7934 doc: test: update TestShell example instructions/options b35341b9ba Update ci.yml ceeb53adcd ci: Properly include $FILE_ENV in DEPENDS_HASH 671b774d1b depends: Use $(package)_file_name when downloading from the fallback e4335a3192 Revert "depends: Update URL for `qrencode` package source tarball" a89a822e6e Revert "depends: Use hash instead of file name for package download stamp" fad5a7101c ci: Add macOS cross task for arm64 fa8c750a0a ci: Refactor get_previous_releases step in win-test-cross task e4c04f7759 ci: add libcpp hardening flags to macOS fuzz job a1226bc760 doc: how to update a subtree eda91b07fd Merge commit '0f01e1577f7c6734eb345139a12aba329ef22a5f' into pr/subtree-6 0f01e1577f Squashed 'src/ipc/libmultiprocess/' changes from 47d79db8a552..a4f929696490 fa6fd16f36 ci: Use native platform for win-cross task 53e4951a5b Switch to ANSI Windows API in `fsbridge::fopen()` function dbe770d921 Switch to ANSI Windows API in `Win32ErrorString()` function 06d0be4e22 Remove no longer necessary `WinCmdLineArgs` class f366408492 cmake: Set process code page to UTF-8 on Windows dccbb17806 Set minimum supported Windows version to 1903 (May 2019 Update) c864a4c194 Simplify fs::path by dropping filename() and make_preferred() overloads b0113afd44 Fix windows libc++ fs::path fstream compile errors b63428ac9c rpc: refactor: use more (Maybe)Arg<std::string_view> 037830ca0d refactor: increase string_view usage b3bf18f0ba rpc: refactor: use string_view in Arg/MaybeArg 45bd891465 log: split assumevalid ancestry-failure-reason message 6c13a38ab5 log: separate script verification reasons f2ea6f04e7 refactor: untangle assumevalid decision branches 9bc298556c validation: log initial script verification state 4fad4e992c test: add assumevalid scenarios scaffold c25a5e670b init: Signal m_tip_block_cv on Ctrl-C 6a29f79006 test: Test SIGTERM handling during waitforblockheight call ac599c4a9c test: Test MuSig2 in the wallet 68ef954c4c wallet: Keep secnonces in DescriptorScriptPubKeyMan 4a273edda0 sign: Create MuSig2 signatures for known MuSig2 aggregate keys 258db93889 sign: Add CreateMuSig2AggregateSig bf69442b3f sign: Add CreateMuSig2PartialSig 512b17fc56 sign: Add CreateMuSig2Nonce 82ea67c607 musig: Add MuSig2AggregatePubkeys variant that validates the aggregate d99a081679 psbt: MuSig2 data in Fill/FromSignatureData 4d8b4f5336 signingprovider: Add musig2 secnonces c06a1dc86f Add MuSig2SecNonce class for secure allocation of musig nonces 9baff05e49 sign: Include taproot output key's KeyOriginInfo in sigdata 4b24bfeab9 pubkey: Return tweaks from BIP32 derivation bc706955d7 ci: expose all ACTIONS_* vars 444409ff2b ci: Reduce Alpine musl task to md runner size fa6b2e9efe ci: Turn centos config into alpine musl config 1fc7a81f1f log: reduce excessive messages during block replay 79b4c276e7 Bugfix: QA: rpc_bind: Skip nonloopback test if no such address is found 91ac64b0a6 log: reword `signature validations` to `script verification` in `assumevalid` log f14876213a musig: Move synthetic xpub construction to its own function f031536f2d ci: use Mold linker for asan-lsan-ubsan-integer-no-depends-usdt workflow cc5dda1de3 headerssync: Make HeadersSyncState more flexible and move constants 8fd1c2893e test(headerssync): Test returning of pow_validated_headers behavior 7b00643ef5 test(headerssync): headers_sync_chainwork test improvements 04eeb9578c doc(test): Improve comments fe896f8faa refactor(test): Store HeadersSyncState on the stack f03686892a refactor(test): Break up headers_sync_state e984618d0b refactor(headerssync): Process spans of headers a4ac9915a9 refactor(headerssync): Extract test constants ahead of breakup into functions 02d2b5a11c ci, iwyu: Treat warnings as errors for specific directories 57a3eac387 refactor: Fix includes in `index` directory bdb8eadcdc refactor: Fix includes in `crypto` directory 56f2a689a2 ci: Do not patch `leveldb` to workaround UB in "tidy" CI job 65a10fc3c5 p2p: add assertion for BlockTransactionsRequest indexes 58be359f6b fuzz: add a target for DifferenceFormatter Class 13f36c020f clang-format: regenerate configs 5ded99a7f0 fuzz: MockMempoolMinFee in wallet_fees c9a7a198d9 test: move MockMempoolMinFee to util/txmempool adf67eb21b fuzz: create FeeEstimatorTestingSetup to set fee_estimator ff10a37e99 fuzz: mock CBlockPolicyEstimator in wallet_fuzz f591c3beca fees: make estimateSmartFee/HighestTargetTracked virtual for mocking b6f8c48946 coins: increase default `dbbatchsize` to 32 MiB 8bbb7b8bf8 refactor: Extract default batch size into kernel d0e1bbad01 test: repeat block malleability test with relayable block over P2P 19273d0705 fuzz: set mempool options in wallet_fees 81e5c8385b test: cover invalid codesep positions for signature in taproot 743abbcbde refactor: inline constant return value of `BlockTreeDB::WriteBatchSync` and `BlockManager::WriteBlockIndexDB` and `BlockTreeDB::WriteFlag` e030240e90 refactor: inline constant return value of `CDBWrapper::Erase` and `BlockTreeDB::WriteReindexing` cdab9480e9 refactor: inline constant return value of `CDBWrapper::Write` d1847cf5b5 refactor: inline constant return value of `TxIndex::DB::WriteTxs` 50b63a5698 refactor: inline constant return value of `CDBWrapper::WriteBatch` fb8720f1e0 sign: Refactor Schnorr sighash computation out of CreateSchnorrSig a4cfddda64 tests: Clarify why musig derivation adds a pubkey and xpub 39a63bf2e7 descriptors: Add a doxygen comment for has_hardened output_parameter 2320184d0e descriptors: Fix meaning of any_key_parsed 0465574c12 test: Fixes send_blocks_and_test docs 09c95f21e7 test: Adds block tiebreak over restarts tests 18524b072e Make nSequenceId init value constants 8b91883a23 Set the same best tip on restart if two candidates have the same work 5370bed21e test: add functional test for complex reorgs ab145cb3b4 Updates CBlockIndexWorkComparator outdated comment fa37153288 util: Abort on failing CHECK_NONFATAL in debug builds fa0dc4bdff test: Allow testing of check failures faeb58fe66 refactor: Set G_ABORT_ON_FAILED_ASSUME when G_FUZZING_BUILD 8810642b57 test: add option to skip large re-org test in feature_block 5fa81e239a test: add valid tx test with minimum-sized ECDSA signature (8 bytes DER-encoded) 58e55b17e6 test: descriptor: cover invalid multi/multi_a cases 664657ed13 bugfix: disallow label for ranged descriptors & allow external non-ranged descriptors to have label fe71a4b139 depends: Avoid `warning: "_FORTIFY_SOURCE" redefined` for `libevent` REVERT: 81cec737e6 kernel: Fix bitcoin-chainstate for windows REVERT: 1826c485dd kernel: Add Purpose section to header documentation REVERT: d7e618aa98 kernel: Allowing reducing exports REVERT: fb7f524133 kernel: Add pure kernel bitcoin-chainstate REVERT: dd0bdf279e Kernel: Add functions for working with outpoints REVERT: eaa6abfc73 kernel: Add block hash type and block tree utility functions to C header REVERT: 824ddf2885 kernel: Add function to read block undo data from disk to C header REVERT: 76cab0768b kernel: Add functions to read block from disk to C header REVERT: e41f6f459a kernel: Add function for copying block data to C header REVERT: 39c647647a kernel: Add functions for the block validation state to C header REVERT: 8a19a9d607 kernel: Add validation interface to C header REVERT: 38a990dd48 kernel: Add interrupt function to C header REVERT: fee8f6ff38 kernel: Add import blocks function to C header REVERT: c29a6b87cc kernel: Add chainstate load options for in-memory dbs in C header REVERT: e788b3ba06 kernel: Add options for reindexing in C header REVERT: 2707fc515c kernel: Add block validation to C header REVERT: 51a24c4004 kernel: Add chainstate loading when instantiating a ChainstateManager REVERT: ea01a8caf3 kernel: Add chainstate manager option for setting worker threads REVERT: add5904e0a kernel: Add chainstate manager object to C header REVERT: 37a3395d27 kernel: Add notifications context option to C header REVERT: d838a934be kernel: Add chain params context option to C header REVERT: dc58ae9fc0 kernel: Add kernel library context object REVERT: 7744997596 kernel: Add logging to kernel library C header REVERT: dc504f57b3 kernel: Introduce initial kernel C header API git-subtree-dir: bitcoinkernel/bitcoin git-subtree-split: c66e988754391a094af93ef2a9127200d093b669
0690514d4f Merge bitcoin/bitcoin#33770: init: Require explicit -asmap filename b2f88b53e0 Merge bitcoin/bitcoin#33286: doc: update multisig tutorial to use multipath descriptors 313cdd2bfb Merge bitcoin/bitcoin#33915: test: Retry download in get_previous_releases.py 17072f7005 Merge bitcoin/bitcoin#33912: clang-format: Set PackConstructorInitializers: CurrentLine 6b2d17b132 Merge bitcoin/bitcoin#33888: ci: Re-enable LINT_CI_SANITY_CHECK_COMMIT_SIG ac71df4338 Merge bitcoin/bitcoin#33870: refactor: remove incorrect lifetimebounds 6cdb51c14e Merge bitcoin/bitcoin#33887: doc: Improve CI docs on env and qemu-user-static 29c37651c7 Merge bitcoin/bitcoin#33880: test: Fix race condition in IPC interface block progation test 32368cd3e9 Merge bitcoin/bitcoin#33905: ci: Consistenly only cache on the default branch e55c49f851 Merge bitcoin/bitcoin#33851: depends: update xcb-util packages to latest versions a07bd8415d Merge bitcoin/bitcoin#33824: ci: Enable experimental kernel stuff in most CI tasks via `dev-mode` f541b92cf2 depends: expat 2.7.3 fad06f3bb4 test: retry download in get_previous_releases.py 2ebf4356e6 depends: libxcb 1.17.0 ba7ac870a3 depends: xcb_proto 1.17.0 fad0c76d0a clang-format: Set PackConstructorInitializers: CurrentLine 42d0692f91 depends: libxcb-util-cursor 0.1.6 25b85919ab depends: libxcb 1.15 d129384ca9 depends: libxcb-util-wm 0.4.2 0b857ae9e5 depends: libxcb-util-renderutil 0.3.10 35e50488b2 depends: libxcb-util-keysyms 0.4.1 74b68ad28b depends: libxcb-util-image 0.4.1 5bc0dde85d depends: libxcb-util 0.4.1 8d07292c28 depends: libXau 1.0.12 1af46cff94 Merge bitcoin/bitcoin#33896: clang-format: Set InsertNewlineAtEOF: true 27ac11ea0a Merge bitcoin/bitcoin#33867: kernel: handle null or empty directories in implementation 2578e6fc0f test: Fix race condition in IPC interface block propagation test 288b8c30be doc: Drop (default: none) from -i2psam description 509dc91db1 Merge bitcoin/bitcoin#33026: test, refactor: Embedded ASMap [1/3]: Selected minor preparatory work b126f98194 Merge bitcoin-core/gui#910: Added test coverage for qt gui#901 console history filter 7d7b829c36 Merge bitcoin-core/gui#908: Remove HD seed reference from blank wallet tooltip 53b72372da Merge bitcoin/bitcoin#31734: miniscript: account for all `StringType` variants in `Miniscriptdescriptor::ToString()` a7f9bbe4c5 Merge bitcoin/bitcoin#32821: rpc: Handle -named argument parsing where '=' character is used 55555db055 doc: Add missing --platform=linux to docker build command fa0ce4c148 ci: Re-enable LINT_CI_SANITY_CHECK_COMMIT_SIG faa0973de2 ci: [refactor] Rename CIRRUS_PR env var to LINT_CI_IS_PR fa411f938e ci: Consistenly only cache on the default branch 552eb90071 doc: CI - Describe qemu-user-static usage 2afbbddee5 doc: CI - Clarify how important `env -i` is and why 2444488f6a Merge bitcoin/bitcoin#33894: net: Remove unused `local_socket_bytes` variable in `CConnman::GetAddresses()` fa1bf6818f clang-format: Set InsertNewlineAtEOF: true 115d298a9f Merge bitcoin/bitcoin#33872: init: completely remove `-maxorphantx` option a90f3922ff Merge bitcoin/bitcoin#32419: psbt: clarify PSBT, PSBTInput, PSBTOutput unserialization flows 4d893c0f46 net: Remove unused `local_socket_bytes` variable in `CConnman::GetAddresses()` fa1dacaebe ci: Move lint exec snippet to stand-alone py file ead849c9f1 Merge bitcoin/bitcoin#33886: test: Remove tests violating hardened std::span c03081fdb4 Merge bitcoin/bitcoin#33776: ci: Lint follow-ups fadb4f63cb test: Remove tests violating hardened std::span 6e21558160 Merge bitcoin/bitcoin#33869: refactor: Avoid -W*-whitespace in git archive c8715aca95 Merge bitcoin/bitcoin#33247: build: Remove CMAKE_SKIP_BUILD_RPATH and SKIP_BUILD_RPATH settings ee5de407e3 Merge bitcoin/bitcoin#33537: guix: build `bitcoin-qt` with static libxcb & utils 024a787350 Merge bitcoin/bitcoin#33876: doc: Update NetBSD Build Guide c66e988754 Merge bitcoin/bitcoin#33865: cmake: Specify Windows plugin path in `test_bitcoin-qt` property c29eaeeaf9 doc: Update NetBSD Build Guide 7f318e1dd0 test: Add better coverage for Autofile size() e221b25246 Merge bitcoin/bitcoin#33860: depends: drop Qt patches b7af960eb8 refactor: Add AutoFile::size ec0f75862e refactor: Modernize logging in util/asmap.cpp 606a251e0a tests: add unit test vectors for asmap interpreter 6657bcbdb4 kernel: allow null data_directory 0aebdac95d init: completely remove `-maxorphantx` option 99d012ec80 refactor: return reference instead of pointer f743e6c5dd refactor: add missing LIFETIMEBOUND annotation for parameter fa95353902 ci: Run macos tasks in a git archive, not git checkout 141117f5e8 refactor: remove incorrect LIFETIMEBOUND annotations fae3618fd6 ci: Annotate all check runs with the pull request number faf05d637d ci: Retry lint image building once after failure 96963b888e depends: static libxcb ad06843fab depends: avoid qdbusviewer in Qt build 6848ed56dc depends: apply Qt patches to fix static libxcb use dfde31f2ec Merge bitcoin/bitcoin#33864: scripted-diff: fix leftover references to `policy/fees.h` 5f1b016beb depends: static libxcb-util-image 98a2fbbe70 depends: static libxkbcommon 1412baf772 depends: static libxcb-util-wm a4009dadf4 depends: static libxcb-keysyms bcfb8679b3 depends: static libxcb-render-util faf99ae379 refactor: Avoid -W*-whitespace in git archive 2594d5a189 build: Remove CMAKE_SKIP_BUILD_RPATH and SKIP_BUILD_RPATH settings 310e4979b3 qt: Added test coverage for qt gui#901 console history filter 0dd8d5c237 cmake: Specify Windows plugin path in `test_bitcoin-qt` property b0a3887154 scripted-diff: fix leftover references to `policy/fees.h` 48d4b936e0 Merge bitcoin/bitcoin#33511: init: Fix Ctrl-C shutdown hangs during wait calls 3c3c6adb72 Merge bitcoin/bitcoin#33745: mining: check witness commitment in submitBlock e652b69b8d Merge bitcoin/bitcoin#33003: test: add option to skip large re-org test in feature_block 3789215f73 Merge bitcoin/bitcoin#33724: refactor: Return uint64_t from GetSerializeSize d4e2a45833 Merge bitcoin/bitcoin#33750: doc: document fingerprinting risk when operating node on multiple networks 47618446a0 Merge bitcoin/bitcoin#33853: kernel: Allow null arguments for serialized data 3e9aca6f1b depends: drop qtbase-moc-ignore-gcc-macro.patch qt patch fac4f6de28 ci: Rewrite lint task Bash snippet to Python fa0d37a579 ci: Rewrite Bash to check inputs to Python 0da5a82700 depends: drop unused qt patch fae83611b8 ci: [refactor] Use --preset=dev-mode in mac_native task fadb67b4b4 ci: [refactor] Base nowallet task on --preset=dev-mode 6666980e86 ci: Enable bitcoin-chainstate and test_bitcoin-qt in win64 task d0da953773 Merge bitcoin/bitcoin#32482: build: add `-W*-whitespace` f450761f83 Merge bitcoin/bitcoin#33842: build: Bump g++ minimum supported version to 12 faff7b2312 ci: Enable experimental kernel stuff in i686 task fa1632eecf ci: Enable experimental kernel stuff in mac-cross tasks fad10ff7c9 ci: Enable experimental kernel stuff in armhf task fa9d67c13d ci: Enable experimental kernel stuff in Alpine task fab3fb8302 ci: Enable experimental kernel stuff in s390x task fa7da8a646 ci: Enable experimental kernel stuff in valgrind task fa9c2973d6 ci: Enable experimental kernel stuff in TSan task fad30d4395 ci: Enable experimental kernel stuff in MSan task fa9f29a4a7 doc: Recommend latest Debian stable or Ubuntu LTS fa1711ee0d doc: Add GCC-12 min release notes faa8be75c9 ci: Enable experimental kernel stuff in G++-12 task (previous releases) fabce97b30 test: Remove gccbug_90348 test case fa3854e432 test: Remove unused fs::create_directories test fa9dacdbde util: [refactor] Remove unused create_directories workaround 138726a6f8 Merge bitcoin/bitcoin#33850: depends: drop qtbase_avoid_native_float16 qt patch 1c3d5c8ffd Merge bitcoin/bitcoin#33840: test: [refactor] Use reference over ptr to chainman 40dcbf580d build: add -Wtrailing-whitespace=any a3ac59a431 ci: Enable experimental kernel stuff in ASan task 5b89956eeb kernel: Allow null arguments for serialized data 169f93d2ac depends: drop qtbase_avoid_native_float16 qt patch d7659cd7e6 build: add -Wleading-whitespace=spaces d86650220a cmake: Disable `-Wtrailing-whitespace` warnings for RCC-generated files aabc5ca6ed cmake: Switch from AUTORCC to `qt6_add_resources` 25ae14c339 subprocess: replace tab with space 0c2b9dadd5 scripted-diff: remove whitespace in sha256_sse4.cpp 4da084fbc9 scripted-diff: change whitespace to spaces in univalue e6caf150b3 ci: add moreutils to lint job a7e8067610 Merge bitcoin/bitcoin#33181: guix: build for Linux HOSTS with `-static-libgcc` b354d1ce5c Merge bitcoin/bitcoin#33820: kernel: trim Chain interface fa807f78ae build: Bump g++ minimum supported version to 12 a4e96cae7d Merge bitcoin/bitcoin#33042: refactor: inline constant return values from `dbwrapper` write methods 8c2710b041 Merge bitcoin/bitcoin#32517: rpc: add "ischange: true" to decoded tx outputs in wallet gettransaction response 1fe851a478 Merge bitcoin/bitcoin#32180: p2p: Advance pindexLastCommonBlock early after connecting blocks 5f0303b93f Merge bitcoin/bitcoin#33443: log: reduce excessive "rolling back/forward" messages during block replay f4903dddc9 Merge bitcoin/bitcoin#33433: Bugfix: QA: rpc_bind: Skip nonloopback test if no such address is found 7a4901c902 test, refactor: Fix `-Warray-bounds` warning 06e9458869 Merge bitcoin/bitcoin#32856: Update `minisketch` subtree 66978a1a95 kernel: remove btck_chain_get_tip 4dd7e6dc48 kernel: remove btck_chain_get_genesis faf2759c8c test: [refactor] Use reference over ptr to chainman 490cb056f6 Merge bitcoin/bitcoin#33785: util: Allow `Assert` (et al.) in contexts without __func__ dcd0099a76 Merge bitcoin/bitcoin#33826: scripted-diff: Remove obsolete comment 01adbbcd9c Merge bitcoin/bitcoin#33827: doc: Correct `pkgin` command usage on NetBSD eec21bc7c8 Merge bitcoin/bitcoin#33536: doc: reference fuzz coverage steps in quick-start 035f934e02 Merge bitcoin/bitcoin#33823: ci: Use cmake --preset=dev-mode in test-each-commit task ddd2afac10 Merge bitcoin/bitcoin#33676: interfaces: enable cancelling running `waitNext` calls dee7eec643 doc: mention coverage build in quickstart section 0698c6b494 doc: Correct `pkgin` command usage on NetBSD 36724205fc scripted-diff: Remove obsolete comment ca1ce52a0f Merge bitcoin/bitcoin#33825: refactor: Add missing include in bitcoinkernel_wrapper.h fa1e8d8bad refactor: Add missing include in bitcoinkernel_wrapper.h fa6db67369 ci: [refactor] Extract build_dir constant in ci-test-each-commit-exec.py fa95e6cdc1 ci: Use cmake --preset=dev-mode in test-each-commit task 513a0da2e0 Merge bitcoin/bitcoin#33818: ci: Extend tidy job to cover kernel code 5d0a40d607 ci: Extend tidy job to cover kernel code 93e79181da Merge bitcoin/bitcoin#33786: script: remove dead code in `CountWitnessSigOps` 3c4bec6223 Merge bitcoin/bitcoin#33782: test: remove obsolete `get_{key,multisig}` helpers from wallet_util.py 4b12beedae Merge bitcoin/bitcoin#33793: test: move create_malleated_version() to messages.py for reuse 0b45e6db10 Merge bitcoin/bitcoin#33789: doc: add cmake help option in Windows build docs 2b9c351198 Merge bitcoin/bitcoin#33768: refactor: remove dead branches in `SingletonClusterImpl` fad6efd3be refactor: Use STR_INTERNAL_BUG macro where possible fada379589 doc: Remove unused bugprone-lambda-function-name suppression f06c6e1898 guix: build for Linux HOSTS with -static-libgcc 1bdf4695b0 guix: patch store paths out of libunwind 078a72c35f guix: move static-libc++ into CMAKE_EXE_LINKER_FLAGS flags 2bd155e6ee test: move create_malleated_version() to messages.py for reuse 9577daa3b8 doc: Add cmake help option in Windows build instructions fae1d99651 refactor: Use const reference to std::source_location fa5fbcd615 util: Allow Assert() in contexts without __func__ 24bcad3d4d refactor: remove dead code in `CountWitnessSigOps` ec8516ceb7 test: remove obsolete `get_{key,multisig}` helpers from wallet_util.py 2d23820ee1 refactor: remove dead branches in `SingletonClusterImpl` e346ecae83 Add eclipse, partitioning, and fingerprinting note to i2p.md f6ec3519a3 init: Require explicit -asmap filename 6eaa00fe20 test: clarify submitBlock() mutates the template 862bd43283 mining: ensure witness commitment check in submitBlock 00d1b6ef4b doc: clarify UpdateUncommittedBlockStructures 929f69d0ff qt: Remove HD seed reference from blank wallet tooltip 19a6a3e75e Add eclipse, partitioning, and fingerprinting note in tor.md fa6c0bedd3 refactor: Return uint64_t from GetSerializeSize fad0c8680e refactor: Use uint64_t over size_t for serialized-size values fa4f388fc9 refactor: Use fixed size ints over (un)signed ints for serialized values 060bb55508 rpc: add decoded tx details to gettransaction with extra wallet fields ad1c3bdba5 [move only] move DecodeTxDoc() to a common util file for sharing d633db5416 rpc: add "ischange: true" in wallet gettransaction decoded tx output fa01f38e53 move-only: Move CBlockFileInfo to kernel namespace fa2bbc9e4c refactor: [rpc] Remove cast when reporting serialized size fa364af89b test: Remove outdated comment dcb56fd4cb interfaces: add interruptWait method de7c3587cd doc: Update add checksum instructions in tutorial c235aa468b Update minisketch subtree to latest upstream 4543a3bde2 Squashed 'src/minisketch/' changes from ea8f66b1ea..d1bd01e189 01cc20f330 test: improve coverage for a resolved stalling situation 9af6daf07e test: remove magic number when checking for blocks that have arrived 3069d66dca p2p: During block download, adjust pindexLastCommonBlock better 2a46e94a16 doc: Update multisig-tutorial.md to use multipath descriptors c25a5e670b init: Signal m_tip_block_cv on Ctrl-C f53dbbc505 test: Add functional tests for named argument parsing 694f04e2bd rpc: Handle -named argument parsing where '=' character is used 6a29f79006 test: Test SIGTERM handling during waitforblockheight call 1fc7a81f1f log: reduce excessive messages during block replay 79b4c276e7 Bugfix: QA: rpc_bind: Skip nonloopback test if no such address is found 743abbcbde refactor: inline constant return value of `BlockTreeDB::WriteBatchSync` and `BlockManager::WriteBlockIndexDB` and `BlockTreeDB::WriteFlag` e030240e90 refactor: inline constant return value of `CDBWrapper::Erase` and `BlockTreeDB::WriteReindexing` cdab9480e9 refactor: inline constant return value of `CDBWrapper::Write` d1847cf5b5 refactor: inline constant return value of `TxIndex::DB::WriteTxs` 50b63a5698 refactor: inline constant return value of `CDBWrapper::WriteBatch` 8810642b57 test: add option to skip large re-org test in feature_block d31158d364 psbt: clarify PSBT, PSBTInput, PSBTOutput unserialization flows 28a4fcb03c test: check listdescriptors do not return a mix of hardened derivation marker 975783cb79 descriptor: account for all StringType in MiniscriptDescriptor::ToStringHelper() git-subtree-dir: depend/bitcoin git-subtree-split: 0690514d4f72aac251ee0b876cded9187d42c63e
|
any chance this could get backported? |
|
No strong opinion on whether this should be backported. In |
|
we also have workarounds on stratum-mining/sv2-apps#59 but they're substantially increasing code complexity, which will likely have a negative impact on maintainability on the mid-long term we have stratum-mining/sv2-apps#81 to keep track of this but we'd really appreciate if this got backported instead of landing on v31+ |
- This method can be used to cancel a running waitNext(). - This commit also adds a test case for interruptWait method Github-Pull: bitcoin#33676 Rebased-From: dcb56fd
|
Backported to |
b2cb203 doc: update release notes for 30.x (fanquake) 39d53dd interfaces: add interruptWait method (ismaelsadeeq) 577ddf6 depends: Add patch for Windows11Style plugin (Hennadii Stepanov) a0a2b07 scripted-diff: Remove obsolete comment (Hennadii Stepanov) e2c71c4 doc: Correct `pkgin` command usage on NetBSD (Hennadii Stepanov) c0d851e qt: Modernize custom filtering (Hennadii Stepanov) 34576c4 ci: fix configure docker action inputs (will) 8f8c7cf ci: fix lint docker caching (will) 049bf10 qt: add createwallet, createwalletdescriptor, and migratewallet to history filter (WakeTrainDev) 3afd5a9 miner: fix empty mempool case for waitNext() (Sjors Provoost) 23ac752 bitcoin: Make wrapper not require -m (Ryan Ofsky) cd7937c test: add tool_bitcoin to test bitcoin wrapper behavior (Ryan Ofsky) 42d4847 init: add exe name to bitcoind, bitcoin-node -version output to be able to distinguish these in tests (Ryan Ofsky) 96110f8 [doc] correct topology requirements in submitpackage helptext (glozow) 729e4c2 multiprocess: align our logging with libmultiprocess's (Cory Fields) f8db6f6 multiprocess: update multiprocess EventLoop construction to use options (Cory Fields) 5e38995 test: change log rate limit version gate from 299900 to 290100 (Eugene Siegel) c48d3a6 ci: expose all ACTIONS_* vars (willcl-ark) 73ed57a depends: Use $(package)_file_name when downloading from the fallback (Ava Chow) 72d1141 ci: Use native platform for win-cross task (MarcoFalke) c9fa661 ci: Properly include $FILE_ENV in DEPENDS_HASH (Ava Chow) Pull request description: Backports: * #33229 * #33508 * #33517 * #33558 * #33566 * #33580 * #33581 * #33612 * #33630 * #33676 * #33744 * #33826 * #33827 * #33906 * bitcoin-core/gui#899 * bitcoin-core/gui#901 ACKs for top commit: willcl-ark: ACK b2cb203 marcofleon: Lgtm, ACK b2cb203 Tree-SHA512: cde3584c7ad9bc6034a54527c1f5e84f0c5e314520109342a5cbb3c6c703286e2bed26f2b24fbf0ba7bcc9cbc140d79921e9d63def6b5c4782fd2e208f51948a
This is an attempt to fix #33575 see the issue for background and the usefulness of this feature.
This PR uses one of the suggested approaches: adding a new
interruptWaitNext()method to the mining interface.It introduces a new boolean variable,
m_interrupt_wait, which is set tofalsewhen the thread starts waiting. TheinterruptWaitNext()method wakes the thread and setsm_interrupt_waittotrue.Whenever the thread wakes up, it checks whether the wait was aborted; if so, it simply set
m_interrupt_waitto false and returnnullptr.This PR also adds a functional test for the new method. The test uses
asyncioto spawn two tasks and attempts to ensure that the wait is executed before the interrupt by using an event monitor. It adds a 0.1-second buffer to ensure the wait has started executing.If that buffer elapses without
waitNextexecuting, the test will fail because a transaction is created after the buffer.