d68b6abeb844daa907c7d8c103efac4092de34c0 doc: Generate example bitcoin conf for 24.0rc2 (fanquake)
c349096fa26171a6753dc114252d7cecdc9df412 doc: Generate manual pages for 24.0rc2 (fanquake)
e5aec59e0f5c4e7ae1e91e0fe619eec7d8187ea8 build: Bump version to 24.0rc2 (fanquake)
Pull request description:
We are due for an rc2.
Bump version.
Regen manpages.
Regen exmaple bitcoin.conf.
ACKs for top commit:
LarryRuane:
utACK d68b6abeb844daa907c7d8c103efac4092de34c0
jarolrod:
ACK d68b6abeb844daa907c7d8c103efac4092de34c0
hebasto:
ACK d68b6abeb844daa907c7d8c103efac4092de34c0, also verified the diff in `bitcoind -help` output between rc1 and rc2, and its reflection in the last commit.
Tree-SHA512: 258091f68f82b449810f3220170cbb4d22424061a753a3e99edf5df15881885dc74e07c7ba1b45f9b2623cee2dcdaabb82109b0bdce7a30b6623454d5346ddef
e2e4c2969ba753a94587985582123a596f57067b tests: Test that PSBT_OUT_TAP_TREE is included correctly (Andrew Chow)
4d42c3a2401c63084bf94433609240daa366753e psbt: Only include m_tap_tree if it has scripts (Andrew Chow)
d810fde8ea64b71567f8b50895ac76bcb7afbfbc psbt: Change m_tap_tree to store just the tuples (Andrew Chow)
a9419eff0cc21d21755165e66cc0e496aab65650 tests: Test that PSBT_OUT_TAP_TREE is combined correctly (Andrew Chow)
4abd2ab18e26999e2dafcb15a58a7979de90af34 psbt: Fix merging of m_tap_tree (Andrew Chow)
1390c96c8e9c56e0d8348ef056f18e3e04f0f63f [BugFix]: Do not allow deserializing PSBT with empty PSBT_OUT_TAP_TREE (Jeremy Rubin)
9b438f06ecfc3fb21d2c5219b71fb4aa77875b8c refactor: revert m_next_resend to not be std::atomic (stickies-v)
43ced0b436b05ed12489a99bbac89f3b4c9ac035 wallet: only update m_next_resend when actually resending (stickies-v)
fc8f2bfa3abc284ae3c1127fcf36535603ecc891 refactor: carve out tx resend timer logic into ShouldResend (stickies-v)
a6fb674f966df27c09dc3d2b81040ce2965b2d7e refactor: remove unused locks for ResubmitWalletTransactions (stickies-v)
5ad82a09b409d416236092062a4201e238dfd68b index: Improve BaseIndex::BlockUntilSyncedToCurrentChain reliability (Ryan Ofsky)
997faf6b6c774dc87ae730f2f08d7f4f08bdfd04 contrib: Fix capture_output in getcoins.py (willcl-ark)
7e0bcfbfef61cb688bc92a96003c1219cad67935 p2p: ProcessHeadersMessage(): fix received_new_header (Larry Ruane)
c97d924880eaad136c5f7776f05bf887657ccca7 Correct sanity-checking script_size calculation (Pieter Wuille)
da6fba6fe785ba2c54f9b88dd5b1b4ceb02c18c9 docs: Add 371 to bips.md (Andrew Chow)
Pull request description:
Will collect backports for rc2 as they become available. Currently:
* https://github.com/bitcoin/bitcoin/pull/25858
* https://github.com/bitcoin/bitcoin/pull/26124
* https://github.com/bitcoin/bitcoin/pull/26149
* https://github.com/bitcoin/bitcoin/pull/26172
* https://github.com/bitcoin/bitcoin/pull/26205
* https://github.com/bitcoin/bitcoin/pull/26212
* https://github.com/bitcoin/bitcoin/pull/26215
ACKs for top commit:
dergoegge:
ACK e2e4c2969ba753a94587985582123a596f57067b
achow101:
ACK e2e4c2969ba753a94587985582123a596f57067b
instagibbs:
ACK e2e4c2969b
Tree-SHA512: b6374fe202561057dbe1430d4c40f06f721eb568f91e7275ae1ee7747edf780ce64620382d13ecc4b9571d931dc25d226af8284987cf35ff6a6182c5f64eb10c
Instead of having an entire TaprootBuilder which may or may not be
complete, and could potentially have future changes that interact oddly
with taproot tree tuples, have m_tap_tree be just the tuples.
When needed in other a TaprootBuilder for actual use, the tuples will be
added to a a TaprootBuilder that, in the future, can take in whatever
other data is needed as well.
Github-Pull: #25858
Rebased-From: 0577d423adda8e719d7611d03355680c8fbacab8
Merging should be checking that the current PSBTOutput doesn't have a
taptree and the other one's is copied over. The original merging had
this inverted and would remove m_tap_tree if the other did not have it.
Github-Pull: #25858
Rebased-From: 7df6e1bb77a96eac4fbcba424bbe780636b86650
Since m_next_resend is now only called from MaybeResendWalletTxs()
we don't have any potential race conditions anymore, so the usage
of std::atomic can be reverted.
Github-Pull: #26205
Rebased-From: b01682a812f0841170657708ef0e896b904fcd77
We only want to relay our resubmitted transactions once every 12-36h.
By separating the timer update logic out of ResubmitWalletTransactions
and into MaybeResendWalletTxs we avoid non-relay calls (previously in
the separate ReacceptWalletTransactions function) from resetting that
timer.
Github-Pull: #26205
Rebased-From: 9245f456705b285e2d9afcc01a6155e1b3f92fad
Moves the logic of whether or not transactions should actually be
resent out of the function that's resending them. This reduces
responsibilities of ResubmitWalletTransactions and allows
carving out the updating of m_next_resend in a future commit.
Github-Pull: #26205
Rebased-From: 7fbde8af5c06694eecd4ce601109bd826a54bd6f
ReacceptWalletTransactions is replaced by ResubmitWalletTransactions
which already handles acquiring the necessary locks internally.
Github-Pull: #26205
Rebased-From: 01f3534632d18c772901fb6ce22f6394eae96799
Since commit f08c9fb0c6a799e3cb75ca5f763a746471625beb from PR
https://github.com/bitcoin/bitcoin/pull/21726, index
`BlockUntilSyncedToCurrentChain` behavior has been less reliable, and there has
also been a race condition in the `coinstatsindex_initial_sync` unit test.
It seems better for `BlockUntilSyncedToCurrentChain` to actually wait for the
last connected block to be fully processed, than to be able to return before
prune locks are set, so this switches the order of `m_best_block_index =
block;` and `UpdatePruneLock` statements in `SetBestBlockIndex` to make it more
reliable.
Also since commit f08c9fb0c6a799e3cb75ca5f763a746471625beb, there has been a
race condition in the `coinstatsindex_initial_sync` test. Before that commit,
the atomic index best block pointer `m_best_block_index` was updated as the
last step of `BaseIndex::BlockConnected`, so `BlockUntilSyncedToCurrentChain`
could safely be used in tests to wait for the last `BlockConnected`
notification to be finished before stopping and destroying the index. But
after that commit, calling `BlockUntilSyncedToCurrentChain` is no longer
sufficient, and there is a race between the test shutdown code which destroys
the index object and the new code introduced in that commit calling
`AllowPrune()` and `GetName()` on the index object. Reproducibility
instructions for this are in
https://github.com/bitcoin/bitcoin/issues/25365#issuecomment-1259744133
This commit fixes the `coinstatsindex_initial_sync` race condition, even though
it will require an additional change to silence TSAN false positives,
https://github.com/bitcoin/bitcoin/pull/26188, after it is fixed. So this
partially addresses but does not resolve the bug reporting TSAN errors
https://github.com/bitcoin/bitcoin/issues/25365.
There is no known race condition outside of test code currently, because the
bitcoind `Shutdown` function calls `FlushBackgroundCallbacks` not
`BlockUntilSyncedToCurrentChain` to safely shut down.
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
Co-authored-by: MacroFake <falke.marco@gmail.com>
Github-Pull: #26215
Rebased-From: 8891949bdcb25093d3a6703ae8228c3c3687d3a4
Our required Python version 3.6.12 does not support `capture_output` as
a subprocess.run argument; this was added in python 3.7.
We can emulate it by setting stdout and stderr to subprocess.PIPE
Github-Pull: #26212
Rebased-From: be59bd17ec753af7cc763474f2432d12bfc88c2f
Follow-up to #25717. The commit "Utilize anti-DoS headers download
strategy" changed how this bool variable is computed, so that its value
is now the opposite of what it should be.
GitHub-Pull: #26172
Rebased-From: bdcafb913398f0cdaff9c880618f9ebfc85c7693
c1860341a72e7d813bfaa0f2c829850fd6738c90 qt: 24.0rc2 translations update (Hennadii Stepanov)
Pull request description:
This PR pulls the recent translations from the [Transifex.com](https://www.transifex.com/bitcoin/bitcoin) using the [`bitcoin-core/bitcoin-maintainer-tools/update-translations.py`](https://github.com/bitcoin-core/bitcoin-maintainer-tools/blob/main/update-translations.py) tool, and it is supposed to be merged just before `v24.0rc2` tagging.
Top commit has no ACKs.
Tree-SHA512: 4c31452dd36509b0c1f0f5f499b9a3add53409a592d70625c14d7e249de48e7fce65777c9a78882bd37dc345362f45fbae117aa80cec342e6352fc43ad9306c3
2730ed2b0d6c5cd8e029c67074aac11e610b19fd test: Check external coin effective value is used in CoinSelection (Aurèle Oulès)
21f96f40d18e0b052cb4ef24cda7847051ca16d8 wallet: Use correct effective value when checking target (Aurèle Oulès)
Pull request description:
backport of #26203
ACKs for top commit:
jarolrod:
ACK 2730ed2b0d6c5cd8e029c67074aac11e610b19fd
Tree-SHA512: ce84ac8d47861f290a26d572512467e89ec6ac27973d954d76245b6c6fdea01e36f2e0bce41599abfe14d0014335ebd17b990177771803de39406097973186ca
a60d9eb9e6b6a272a3fca8981d89a55955dced55 Bugfix: Wallet: Lock cs_wallet for SignMessage (Luke Dashjr)
Pull request description:
(Clean merge of #26130 to 24.x branch)
Top commit has no ACKs.
Tree-SHA512: 821e19d222cc1eb9a6b957ec87d48cfb00b2c5b8182682ac57d9c76785b667ad9c71444e6bf0f53177c06d5fb39e72dbfc82d7debe4b1597699eefaf3001d08d
fa4ba04c157b83b827f7541fa007710bd6211fe7 fuzz: Remove no-op call to get() (MacroFake)
fa642286b83f29cb0ac0c8d4c7d8eba10600402c fuzz: Avoid timeout in bitdeque fuzz target (MacroFake)
Pull request description:
Identical commit from https://github.com/bitcoin/bitcoin/pull/26012
Not strictly required for 24.x, but I guess it can't hurt to avoid timeouts.
Top commit has no ACKs.
Tree-SHA512: 4d4bfb645e3513bf22cc9c64bdcbde2ad9e28b5a07ab07a02fbfa19df02147b371d2ca794ab3a095c22b66781832055e0de3af908aaead4c26ea12189e05cbe3
68209a7b5c0326e14508d9cf749771605bd6ffe7 rpc: make addpeeraddress work with cjdns addresses (Martin Zumsande)
a8a9ed67cc447d204304ccfd844c45fd76486c6a init: Abort if i2p/cjdns are chosen via -onlynet but unreachable (Martin Zumsande)
Pull request description:
Identical commit from https://github.com/bitcoin/bitcoin/pull/25989
ACKs for top commit:
fanquake:
ACK 68209a7b5c0326e14508d9cf749771605bd6ffe7
Tree-SHA512: eec335df06b4c209cfe3473cb623828effd00c45a5dd605bb920edd265de1c789627482b005a51e89b8fc79cc4c5d26ff1fc306f2e4573897c5c7f083aa22861
fad61573ed547615f73710cb59b2fb0ecafed127 Fix nNextResend data race in ResubmitWalletTransactions (MacroFake)
Pull request description:
Identical commit id from https://github.com/bitcoin/bitcoin/pull/26132
Top commit has no ACKs.
Tree-SHA512: 9404e2e10ba059c412e282abbf9bef581cf5ddcac36cf05da1dff3927b5015e12469238c402c28308a774fdd969d1039e595d5e2caca0902977ae0a72746ff43
faf5bb87dab0984cc2d3ad02da21f3470243d17f doc: Move -permitbaremultisig to the relay help category (MacroFake)
Pull request description:
Identical commit from https://github.com/bitcoin/bitcoin/pull/26119
ACKs for top commit:
glozow:
ACK faf5bb87dab0984cc2d3ad02da21f3470243d17f
jarolrod:
ACK faf5bb87dab0984cc2d3ad02da21f3470243d17f
Tree-SHA512: 42d3fd541703cbea7d2afff54dc7a42dac475c70c59ed124aba59cae6a87898040d964201e6cc6098e202f7b87bfa98513b3efd3c25d9fe52dc0ef55f3540bef
cs_desc_main is typically locked within scope of a cs_wallet lock, but:
CWallet::IsLocked locks cs_wallet
...called from DescriptorScriptPubKeyMan::GetKeys
...called from DescriptorScriptPubKeyMan::GetSigningProvider which locks cs_desc_main first, but has no access to cs_wallet
...called from DescriptorScriptPubKeyMan::SignMessage
...called from CWallet::SignMessage which can access and lock cs_wallet
Resolve the out of order locks by grabbing cs_wallet in CWallet::SignMessage first
ab4a32b8aff14da3f6d116b6a81ad0bb29397f1c doc: update version number in bips.md to v24.0 (fanquake)
bd44c69238e3d147eeb3d77428445850e4cec1e3 doc: Generate example bitcoin conf for 24.0rc1 (fanquake)
06371697600c260e8c22683ad5a4cb6a97977443 doc: Generate manual pages for 24.0rc1 (fanquake)
7869b169f22ab51cca0d840fe51bc53dce2a0f3a build: Bump version to 24.0rc1 (fanquake)
Pull request description:
Bump the version to 24.0rc1
Generate the man pages.
Generate the example bitcoin conf file.
Update the version number in bips.md.
ACKs for top commit:
achow101:
ACK ab4a32b8aff14da3f6d116b6a81ad0bb29397f1c
Tree-SHA512: bb26216a4114b3c7e7a4b44abfee78a119b4b310b36bfac5124aa6cfc2d0a27ad30fa4b0d490fc214281973dde2c220e3c00e99b110ea5c6ccbe906f17ae3c89
c3e536555aa3a7db773170671da1256a2ace2094 Bugfix: Wallet: Return util::Error rather than non-error nullptr when CreateWallet/LoadWallet/RestoreWallet fail (Luke Dashjr)
335ff98c8a64eda38a2a2334102bd253f108c253 Bugfix: Wallet: Wrap RestoreWallet content in a try block to ensure exceptions become returned errors and incomplete wallet directory is removed (Luke Dashjr)
Pull request description:
Bug 1: `copy_file` can throw exceptions, but `RestoreWallet` is expected to return a nullptr with a populated `errors` parameter. This is fixed by wrapping `copy_file` and `LoadWallet` (for good measure) in a `try` block, and converting any exceptions to the intended return style.
Bug 2: `util::Result` turns what would have been a `false` unique_ptr into a `true` nullptr result, which leads to nullptr dereferences in at least the 3 cases of wallet creation/loading/restoring. This is fixed by keeping the pointer as a plain `std::unique_ptr` until actually returning it (ie, after the nullptr check).
Fixes https://github.com/bitcoin-core/gui/issues/661
ACKs for top commit:
achow101:
ACK c3e536555aa3a7db773170671da1256a2ace2094
Tree-SHA512: 4291b3dbbb147acea2e63a704324c9371bc16ecb4237f8753729b0b0a6e55c9758ad61bfe8bd432fd7b0bae95d8b63a9831e61ac8b8d5c0197b550a2e0f4a105
e8cc2e4afc1142aa2b3da19cd5c17deea9963244 Make miniscript string parsing account for exact script size as bound (Pieter Wuille)
4cb8f9a92c0ab5d45f2e545bbc13fc3f2ec611ea Permit delaying duplicate key check in miniscript::Node construction (Pieter Wuille)
Pull request description:
As reported in https://github.com/bitcoin/bitcoin/pull/24860#discussion_r893109311, the current code to construct a `miniscript::Node` could cause a blowup on large fuzzer inputs. This is because:
1. The duplicate key check is redundantly done at parsing time, since we will recursively create miniscript nodes and the constructor will unconditionally look for duplicate across this node's keys and all its sub-nodes'.
2. We don't put an upper bound on the size of the inputs to consider for parsing.
To avoid wasteful computation, and prevent the blowup on some fuzzer inputs, limit the size of reasonable inputs and only perform the check for duplicate keys once when parsing.
Regarding the duplicate key check bypass in the constructor we iterated on different approaches, and eventually settled on passing a dummy argument. Albeit less elegant, all other approaches required getting rid of `std::make_shared` and adding an allocation *per node created*.
This PR contains code from Pieter Wuille (see commits).
Fixes https://github.com/bitcoin/bitcoin/pull/25824.
ACKs for top commit:
darosior:
ACK e8cc2e4afc1142aa2b3da19cd5c17deea9963244 -- it's my own PR but most of the code here was written by sipa. I've reviewed and tested it.
sipa:
ACK e8cc2e4afc1142aa2b3da19cd5c17deea9963244 (for the few parts of the code that aren't mine)
Tree-SHA512: c21de39b3eeb484393758629882fcf8694a9bd1b8f15ae22efcec1582efc9c2309c5a0c2d90f361dd8e233d704a07dcd5fb982f4a48a002c4d8789e1d78bb526