Commit graph

40975 commits

Author SHA1 Message Date
Sebastian Falbesoner
fe92c15f0c script/sign: avoid duplicated signature verification after signing
`ProduceSignature` already calls `VerifyScript` internally as last step in
order to check whether the signature data is complete. If and only if that is
the case, the `complete` field of the `SignatureData` is set accordingly and
there is no need then to verify the script after again, as we already know that
it would succeed.

This leads to a rough ~20% speed-up for `SignTransaction` for single-input
ECDSA or Taproot inputs, according to the `SignTransaction{ECDSA,Taproot}`
benchmarks.
2024-05-12 18:02:41 +02:00
Sebastian Falbesoner
080089567c bench: add benchmark for SignTransaction 2024-05-12 18:02:37 +02:00
merge-script
b94061902e
Merge bitcoin-core/gui#812: Fix create unsigned transaction fee bump
671b7a3251 gui: fix create unsigned transaction fee bump (furszy)

Pull request description:

  Fixes #810.

  Not much to explain; we were requiring the wallet to be unlocked for the unsigned transaction creation process.
  Fix this by moving the unlock wallet request to the signed transaction creation process.

ACKs for top commit:
  pablomartin4btc:
    tACK 671b7a3251
  hebasto:
    ACK 671b7a3251, tested on Ubuntu 24.04.

Tree-SHA512: 5b9ec5a1b91c014c05c83c63daaa8ba33f9dc1bfa930442315a0913db710df17a1b6bb4ad39f1419a7054f37ebedb7ad52e1c5d3d2fb444b1676162e89a4efd2
2024-05-12 15:30:34 +01:00
merge-script
ee9491369f
Merge bitcoin/bitcoin#29658: Bugfix: GUI: Help messages already have a trailing newline, so don't add an extra one
d1ed09a764 Bugfix: GUI: Help messages already have a trailing newline, so don't add an extra one (Luke Dashjr)

Pull request description:

  Reviewing #29585, I noticed that `bitcoin-qt` adds an extra newline for `-help` and `-version` beyond the other binaries'.

ACKs for top commit:
  hebasto:
    ACK d1ed09a764, tested on Ubuntu 24.04.

Tree-SHA512: 15ee9d1060c2492bb3b04a0ac4cb53f7b959bbe32bce415793da0c221f1c963c8f2bb3996ea07d1a7c192bfc2e23be2cd7d4e5649c592eb3fc03906c2763f1aa
2024-05-12 14:21:21 +01:00
merge-script
3207286680
Merge bitcoin-core/gui#813: Don't permit port in proxy IP option
10c5275ba4 gui: don't permit port in proxy IP option (willcl-ark)

Pull request description:

  Fixes: https://github.com/bitcoin-core/gui/issues/809

  Previously it was possible through the GUI to enter an IP address:port into the "Proxy IP" configuration box. After the node was restarted the errant setting would prevent the node starting back up until manually removed from settings.json.

  Prevent this with a simple check for ":" in the string. This is acceptable here in the GUI setting because we already fail on a hostname such as "http://x.x.x.x", so it won't cause false positives.

ACKs for top commit:
  furszy:
    utACK 10c5275ba4
  hebasto:
    ACK 10c5275ba4, tested on Ubuntu 24.04.

Tree-SHA512: ed83590630cf693680a3221f701ecd18dd08710a17b726dc4978a3a6e330a34fb77d73a4f710c01bcb3faf88b6604ff37bcdbb191ce1623348ca5b92fd6fe9a7
2024-05-11 19:34:12 +01:00
merge-script
182983c6ab
Merge bitcoin-core/gui#788: debugwindow: update session ID tooltip
3bf00e1360 gui: debugwindow: update session ID tooltip (Marnix)

Pull request description:

  When you have a v2 connection, there is always a session ID.

  the _if any_ is a leftover from https://github.com/bitcoin-core/gui/pull/754, where the session ID property initially would always be displayed (transport v1 and v2).
  So the session ID could be empty when you have a v1 connection.

  As now the _Session ID_ property only is displayed for v2 connection, there will always be a session ID.

  master

  ![sessionIDifany](https://github.com/bitcoin-core/gui/assets/93143998/d4d7df43-8281-4b1e-83fc-5a3788d7724e)

  PR

  ![sessionID](https://github.com/bitcoin-core/gui/assets/93143998/221f6831-7d12-4913-be76-325a87baad2e)

  Session ID not shown when transport v1

  ![transportv1](https://github.com/bitcoin-core/gui/assets/93143998/6c067a08-4be4-4ce1-b514-80654ca5cd43)

  <!--
  *** Please remove the following help text before submitting: ***

  Pull requests without a rationale and clear improvement may be closed
  immediately.

  GUI-related pull requests should be opened against
  https://github.com/bitcoin-core/gui
  first. See CONTRIBUTING.md
  -->

  <!--
  Please provide clear motivation for your patch and explain how it improves
  Bitcoin Core user experience or Bitcoin Core developer experience
  significantly:

  * Any test improvements or new tests that improve coverage are always welcome.
  * All other changes should have accompanying unit tests (see `src/test/`) or
    functional tests (see `test/`). Contributors should note which tests cover
    modified code. If no tests exist for a region of modified code, new tests
    should accompany the change.
  * Bug fixes are most welcome when they come with steps to reproduce or an
    explanation of the potential issue as well as reasoning for the way the bug
    was fixed.
  * Features are welcome, but might be rejected due to design or scope issues.
    If a feature is based on a lot of dependencies, contributors should first
    consider building the system outside of Bitcoin Core, if possible.
  * Refactoring changes are only accepted if they are required for a feature or
    bug fix or otherwise improve developer experience significantly. For example,
    most "code style" refactoring changes require a thorough explanation why they
    are useful, what downsides they have and why they *significantly* improve
    developer experience or avoid serious programming bugs. Note that code style
    is often a subjective matter. Unless they are explicitly mentioned to be
    preferred in the [developer notes](/doc/developer-notes.md), stylistic code
    changes are usually rejected.
  -->

  <!--
  Bitcoin Core has a thorough review process and even the most trivial change
  needs to pass a lot of eyes and requires non-zero or even substantial time
  effort to review. There is a huge lack of active reviewers on the project, so
  patches often sit for a long time.
  -->

ACKs for top commit:
  vostrnad:
    ACK 3bf00e1360
  kristapsk:
    ACK 3bf00e1360
  jarolrod:
    ACK 3bf00e1360
  pablomartin4btc:
    tACK 3bf00e1360
  hebasto:
    ACK 3bf00e1360.

Tree-SHA512: 4de0c56c070dc5d1cee73b629bdf3d1778c6d90d512337aa6cfd3eed4ce95cbcfbe5713e2942f6fc22907b2c4d9df7979ba8e9f91f7cc173b42699ea35113f96
2024-05-11 19:13:34 +01:00
merge-script
b47c393d8a
Merge bitcoin/bitcoin#30081: refactor: Remove unused code from subprocess.h header
5a11d3023f refactor, subprocess: Remove unused stream API calls (Hennadii Stepanov)
05b6f8793c refactor, subprocess: Remove unused `Popen::child_created_` data member (Hennadii Stepanov)
9e1ccf55e1 refactor, subprocess: Remove unused `Popen::poll()` (Hennadii Stepanov)
24b53fc84a refactor, subprocess: Remove `Popen::pid()` (Hennadii Stepanov)

Pull request description:

  This PR continues https://github.com/bitcoin/bitcoin/pull/29961.

  Please note that `Popen::poll()` is not required for https://github.com/bitcoin/bitcoin/pull/29868 anymore.

ACKs for top commit:
  theuni:
    Easy code review ACK 5a11d3023f since it's all removals :)
  theStack:
    Code-review ACK 5a11d3023f

Tree-SHA512: 11f984f8384c337782d058afa80011e88087a1b5a3ed6e4678d492e6c232b706a26312463c5dd8c529aa477497c8afca9f54574e0e36e3edd5675bd5d8424bbb
2024-05-11 18:37:49 +08:00
merge-script
4d3f1d08db
Merge bitcoin/bitcoin#29739: build: swap cctools otool for llvm-objdump
7f5ac4520d build: swap otool for (llvm-)objdump (fanquake)

Pull request description:

  This tool is used in GUI packaging on macOS, and also somewhat of a blocker for #21778. The main issue is that some distros don't really ship this tool in a standard ways, i.e Ubuntu only ships `llvm-otool` with a version suffix, i.e `llvm-otool-17`, which makes it hard to find and use. Rather than trying to deal with that mess, switch to using the equivalent LLVM tool (objdump), which is a drop-in replacement.

ACKs for top commit:
  TheCharlatan:
    ACK 7f5ac4520d
  theuni:
    ACK 7f5ac4520d. Tested `make deploy` on native macOS. Looks good.
  hebasto:
    ACK 7f5ac4520d.

Tree-SHA512: ac978043f14fb448010542a4a7ce8c6c74b4cbd90f83b4cb4d0bff55974010f10a70b5354f65b239a8bd961d7a3aca22ca165b42954ca87879b9e0524db5f879
2024-05-11 18:34:42 +08:00
Ava Chow
2cedb42a92
Merge bitcoin/bitcoin#29252: kernel: Remove key module from kernel library
96378fe734 Refactor: Remove ECC_Start and ECC_Stop from key header (TheCharlatan)
41eba5bd71 kernel: Remove key module from kernel library (TheCharlatan)
a08d2b3cb9 tools: Use ECC_Context helper in bitcoin-tx and bitcoin-wallet tools (Ryan Ofsky)
28905c1a64 test: Use ECC_Context helper in bench and fuzz tests (Ryan Ofsky)
538fedde1d common: Add ECC_Context RAII wrapper for ECC_Start/ECC_Stop (Ryan Ofsky)

Pull request description:

  The key module's functionality is not used by the kernel library, but currently kernel users are still required to initialize the key module's `secp256k1_context_sign` global as part of the `kernel::Context` through `ECC_Start`. So move the `ECC_Start` call to the `NodeContext` ctor instead to completely remove the key module from the kernel library.

  The gui tests currently keep multiple `NodeContext` objects in memory, so call `ECC_Stop` manually to avoid triggering an assertion on `ECC_Start`.

  ---

  This PR is part of the [libbitcoinkernel project](https://github.com/bitcoin/bitcoin/issues/27587). It removes a module from the kernel library.

ACKs for top commit:
  achow101:
    ACK 96378fe734
  ryanofsky:
    Code review ACK 96378fe734. Just suggested comment changes since last review.
  theuni:
    utACK 96378fe734

Tree-SHA512: 40be427e8e2c920c0e3ce64a9bdd90551be27a89af11440bfb6ab0dd3a1d1ccb7cf1f82383cd782818cd1bb44d5ae5d2161cf4d78d3127ce4987342007090bab
2024-05-10 13:18:00 -04:00
Ava Chow
7066980273
Merge bitcoin/bitcoin#29948: test: add missing comparison of node1's mempool in MempoolPackagesTest
e912717ff6 test: add missing comparison of node1's mempool in MempoolPackagesTest (umiumi)

Pull request description:

  #29941 Recreated a pull request because there was a conflict. Trying to resolve the conflict but the old one automatically closed.

  Add missing comparison for TODO comments in `mempool_packages.py`

  Also, notice that the ancestor size limits and descendant size limits actually implemented in #21800   ,  so I removed the todo for those two size limits.

ACKs for top commit:
  kevkevinpal:
    ACK [e912717](e912717ff6)
  achow101:
    ACK e912717ff6
  alfonsoromanz:
    Tested ACK e912717ff6. The code looks good to me and the test execution is successful.
  rkrux:
    tACK [e912717](e912717ff6)

Tree-SHA512: 8cb51746b0547369344c9ceef59599bfe9c91d424687af5e24dc6641f9e99fb433515d79c724e71fd3d5e02994f0cef623d3674367b8296b05c3c6fcdde282ef
2024-05-10 12:44:42 -04:00
Hennadii Stepanov
5a11d3023f
refactor, subprocess: Remove unused stream API calls 2024-05-10 14:58:27 +01:00
Hennadii Stepanov
05b6f8793c
refactor, subprocess: Remove unused Popen::child_created_ data member 2024-05-10 14:47:15 +01:00
Hennadii Stepanov
9e1ccf55e1
refactor, subprocess: Remove unused Popen::poll() 2024-05-10 14:47:07 +01:00
Hennadii Stepanov
24b53fc84a
refactor, subprocess: Remove Popen::pid() 2024-05-10 14:42:31 +01:00
Ava Chow
98dd4e712e
Merge bitcoin/bitcoin#30006: test: use sleepy wait-for-log in reindex readonly
fd6a7d3a13 test: use sleepy wait-for-log in reindex readonly (Matthew Zipkin)

Pull request description:

  Also rename the busy wait-for-log method to prevent recurrence. See https://github.com/bitcoin/bitcoin/pull/27039#discussion_r1532578152

ACKs for top commit:
  maflcko:
    utACK fd6a7d3a13
  achow101:
    ACK fd6a7d3a13
  tdb3:
    ACK for fd6a7d3a13
  rkrux:
    ACK [fd6a7d3](fd6a7d3a13)

Tree-SHA512: 7ff0574833df1ec843159b35ee88b8bb345a513ac13ed0b72abd1bf330c454a3f9df4d927871b9e3d37bfcc07542b06ef63acef8e822cd18499adae8cbb0cda8
2024-05-09 18:31:03 -04:00
Ava Chow
24572cf768
Merge bitcoin/bitcoin#29939: test: add MiniWallet tagging support to avoid UTXO mixing, use in fill_mempool
dd8fa86193 test: use tagged ephemeral MiniWallet instance in fill_mempool (Sebastian Falbesoner)
b2037ad4ae test: add MiniWallet tagging support to avoid UTXO mixing (Sebastian Falbesoner)
c8e6d08236 test: refactor: eliminate COINBASE_MATURITY magic number in fill_mempool (Sebastian Falbesoner)
4f347140b1 test: refactor: move fill_mempool to new module mempool_util (Sebastian Falbesoner)

Pull request description:

  Different MiniWallet instances using the same mode (either ADDRESS_OP_TRUE, RAW_OP_TRUE or RAW_P2PK) currently always create and spend UTXOs with identical output scripts, which can cause unintentional tx dependencies (see e.g. the discussion in https://github.com/bitcoin/bitcoin/pull/29827#discussion_r1565443465). In order to avoid mixing of UTXOs between instances, this PR introduces the possibility to provide a MiniWallet tag name, that is used to derive a different internal key for the taproot construction, leading to a different P2TR output script. Note that since we use script-path spending and only the key-path is changed here, no changes in the MiniWallet spending logic are needed.

  The new tagging option is then used in the `fill_mempool` helper to create an ephemeral wallet for the filling txs, as suggested in https://github.com/bitcoin/bitcoin/pull/29827#discussion_r1565964264. To avoid circular dependencies, `fill_mempool` is moved to a new module `mempool_util.py` first.

  I'm still not sure if a generic word like "tag" is the right term for what this tries to achieve, happy to pick up better suggestions. Also, maybe passing a tag name is overkill and a boolean flag like "random_output_script" is sufficient?

ACKs for top commit:
  glozow:
    ACK dd8fa86193
  achow101:
    ACK dd8fa86193
  rkrux:
    tACK [dd8fa86](dd8fa86193)
  brunoerg:
    utACK dd8fa86193

Tree-SHA512: 5ef3558c3ef5ac32cfa79c8f751972ca6bceaa332cd7daac7e93412a88e30dec472cb041c0845b04abf8a317036d31ebddfc3234e609ed442417894c2bdeeac9
2024-05-09 16:54:18 -04:00
Ava Chow
012e540ace
Merge bitcoin/bitcoin#29122: test: adds outbound eviction functional tests, updates comment in ConsiderEviction
d53d848347 test: adds outbound eviction tests for non outbound-full-relay peers (Sergi Delgado Segura)
a8d9a0edc7 test: adds outbound eviction functional tests, updates comment in ConsiderEviction (Sergi Delgado Segura)

Pull request description:

  ## Motivation

  While checking the outbound eviction code I realized a case was not considered within the comments, which in turn made me realize we had no functional tests for the outbound eviction case (when I went to check/add the test case).

  This PR updates the aforementioned comment and adds functional tests to cover the outbound eviction logic, in addition to the existing unit tests found at `src/test/denialofservice_tests.cpp`.

ACKs for top commit:
  davidgumberg:
    reACK d53d848347
  tdb3:
    Re ACK for d53d848347
  achow101:
    ACK d53d848347
  cbergqvist:
    ACK d53d848347

Tree-SHA512: 633b84bb1229fe21e2f650c1beada33ca7f190b64eafd64df2266516d21175e5d652e019ff7114f00cb8bd19f5817dc19e65adf75767a88e24dc0842ce40c63e
2024-05-09 16:20:43 -04:00
Ava Chow
ceb1e078f8
Merge bitcoin/bitcoin#28793: contrib: Add asmap-tool
6abe772a17 contrib: Add asmap-tool (Fabian Jahr)

Pull request description:

  This adds `asmap.py` and `asmap-tool.py` from sipa's `nextgen` branch: https://github.com/sipa/asmap/tree/nextgen

  The motivation is that we should maintain the tooling for de- and encoding asmap files within the bitcoin core repository because it is not possible to use an asmap file that is not encoded.

  We already had an earlier version of `asmap.py` within the seeds contrib tools. The newer version only had a small amount of changes and is still compatible, so the old version is removed from contrib/seeds and the new version is made available to `makeseeds.py`.

ACKs for top commit:
  virtu:
    ACK [6abe772](6abe772a17)
  0xB10C:
    ACK 6abe772a17
  achow101:
    ACK 6abe772a17
  brunoerg:
    ACK 6abe772a17

Tree-SHA512: cc2a82ffa4eb46fa0ce4ca769dd82f8d0d2f37fc3652aa748eeb060e1142f9da4035008fe89433e2fd524a4dc153b7b9c085748944b49137b37009b0c0be8afb
2024-05-09 11:57:30 -04:00
Ava Chow
921c61e9a5
Merge bitcoin/bitcoin#29973: test: Assumeutxo: ensure failure when importing a snapshot twice
b259b0e8d3 [Test] Assumeutxo: ensure failure when importing a snapshot twice (Alfonso Roman Zubeldia)

Pull request description:

  I am getting familiar with the `assume_utxo` tests and I found that the scenario of trying to activate a snapshot twice is not covered. This test is to ensure failure when loading a snapshot if there is already a snapshot-based chainstate.

ACKs for top commit:
  fjahr:
    Code review ACK b259b0e8d3
  kevkevinpal:
    tACK [b259b0e](b259b0e8d3)
  achow101:
    ACK b259b0e8d3
  rkrux:
    tACK [b259b0e](b259b0e8d3)

Tree-SHA512: 3510861390d0e40cdad6861b728df04827a1b63e642f3d956aee66ed2770b1cb7e3aa3eb00c62eb9da0544703c943cc5296936c9ebfcac18c719741c354421bb
2024-05-09 11:55:15 -04:00
TheCharlatan
96378fe734
Refactor: Remove ECC_Start and ECC_Stop from key header
They are unused outside of the key module now.
2024-05-09 15:56:10 +02:00
TheCharlatan
41eba5bd71
kernel: Remove key module from kernel library
The key module's functionality is not used by the kernel library, but
currently kernel users are still required to initialize the key module's
`secp256k1_context_sign` global as part of the `kernel::Context` through
`ECC_Start`.
2024-05-09 15:56:08 +02:00
Ryan Ofsky
a08d2b3cb9
tools: Use ECC_Context helper in bitcoin-tx and bitcoin-wallet tools 2024-05-09 15:56:06 +02:00
Ryan Ofsky
28905c1a64
test: Use ECC_Context helper in bench and fuzz tests 2024-05-09 15:56:04 +02:00
Ryan Ofsky
538fedde1d
common: Add ECC_Context RAII wrapper for ECC_Start/ECC_Stop 2024-05-09 15:55:55 +02:00
merge-script
6f1d906438
Merge bitcoin/bitcoin#30063: build, test: Remove unused TIMEOUT environment variable
189d0da3f6 build, test: Remove unused `TIMEOUT` environment variable (Hennadii Stepanov)

Pull request description:

  Setting the `TIMEOUT` environment variable has been a noop in both cases since its introduction.

  It seems to have been inadvertently copy-pasted from existed code. For example, in commit d80e3cbece, it was needlessly copied from a valid case a few lines above for the `qa/pull-tester/run-bitcoind-for-test.sh` script.

ACKs for top commit:
  maflcko:
    utACK 189d0da3f6
  edilmedeiros:
    ACK 189d0da3f6

Tree-SHA512: 61111eba30e0c82a0220bea48eba451cd9caa68785b48ec8a91059ca5aadfaff2f6d2ccdc5aa737c5cefa33579cb735431bb9e94bda8fa047825d7bd28d542fb
2024-05-09 11:11:57 +08:00
Ava Chow
43003255c0
Merge bitcoin/bitcoin#29292: rpc: improve submitpackage documentation and other improvements
78e52f663f doc: rpc: fix submitpackage examples (stickies-v)
1a875d4049 rpc: update min package size error message in submitpackage (stickies-v)
f9ece258aa doc: rpc: submitpackage takes sorted array (stickies-v)
17f74512f0 test: add bounds checking for submitpackage RPC (stickies-v)

Pull request description:

  `submitpackage` requires the package to be topologically sorted with the child being the last element in the array, but this is not documented in the RPC method or the error messages.

  Also sneaking in some other minor improvements that I found while going through the code:
  - Informing the user that `package` needs to be an array of length between `1` and `MAX_PACKAGE_COUNT` is confusing when `IsChildWithPackage()` requires that the package size >= 2. Remove this check to avoid code duplication and sending a confusing error message.
  - fixups to the `submitpackage` examples

ACKs for top commit:
  fjahr:
    re-ACK 78e52f663f
  instagibbs:
    ACK 78e52f663f
  achow101:
    ACK 78e52f663f
  glozow:
    utACK 78e52f663f

Tree-SHA512: a8845621bb1cbf784167fc7c82cb8ceb105868b65b26d3465f072d1c04ef3699e85a21a524ade805d423bcecbc34f7d5bff12f2c21cbd902ae1fb154193ebdc9
2024-05-08 18:39:56 -04:00
Ava Chow
8a45f572b9
Merge bitcoin/bitcoin#29335: test: Handle functional test disk-full error
357ad11054 test: Handle functional test disk-full error (Brandon Odiwuor)

Pull request description:

  Fixes: https://github.com/bitcoin/bitcoin/issues/23099

  Handle disk-full more gracefully in functional tests

ACKs for top commit:
  itornaza:
    re-ACK 357ad11054
  achow101:
    reACK 357ad11054
  cbergqvist:
    reACK 357ad11054. Looks good!
  tdb3:
    re ACK for 357ad11054

Tree-SHA512: 9bb0d3fbe84600c88873b9f55d4b5d1443f79ec303467680c301be2b4879201387f203d9d1984169461f321037189b5e10a6a4b9d61750de638f072d2f95d77e
2024-05-08 18:11:35 -04:00
Ava Chow
573f631165
Merge bitcoin/bitcoin#26326: net: don't lock cs_main while reading blocks in net processing
75d27fefc7 net: reduce LOCK(cs_main) scope in ProcessGetBlockData (Andrew Toth)
613a45cd4b net: reduce LOCK(cs_main) scope in GETBLOCKTXN (Andrew Toth)

Pull request description:

  Inspired by https://github.com/bitcoin/bitcoin/pull/11913 and https://github.com/bitcoin/bitcoin/pull/26308.

  `cs_main` doesn't need to be locked while reading blocks. This removes the locks in `net_processing`.

ACKs for top commit:
  sr-gi:
    ACK [75d27fe](75d27fefc7)
  achow101:
    ACK 75d27fefc7
  furszy:
    ACK 75d27fefc with a non-blocking nit.
  mzumsande:
    Code Review ACK 75d27fefc7
  TheCharlatan:
    ACK 75d27fefc7

Tree-SHA512: 79b85f748f68ecfb2f2afd3267857dd41b8e76dd482c9c922037399dcbce7b1e5d4c708a4f5fd17c3fb6699b0d88f26a17cc1d92db115dd43c8d4392ae27cec4
2024-05-08 18:04:19 -04:00
Ava Chow
4ff42762fd
Merge bitcoin/bitcoin#28336: rpc: parse legacy pubkeys consistently with specific error messages
98570fe29b test: add coverage for parsing cryptographically invalid pubkeys (Sebastian Falbesoner)
c740b154d1 rpc: use `HexToPubKey` helper for all legacy pubkey-parsing RPCs (Sebastian Falbesoner)
100e8a75bf rpc: check and throw specific pubkey parsing errors in `HexToPubKey` (Sebastian Falbesoner)

Pull request description:

  Parsing legacy public keys can fail for three reasons (in this order):
  - pubkey is not in hex
  - pubkey has an invalid length (not 33 or 65 bytes for compressed/uncompressed, respectively)
  - pubkey is crytographically invalid, i.e. is not on curve (`CPubKey.IsFullyValid()` check)

  Many RPCs currently perform these checks manually with different error messages, even though we already have a `HexToPubKey` helper. This PR puts all three checks in this helper (the length check was done on the call-sites before), adds specific error messages for each case, and consequently uses it for all RPCs that parse legacy pubkeys. This leads to deduplicated code and also to more consistent and detailed error messages for the user.

  Affected RPC calls are `createmultisig`, `addmultisigaddress`, `importpubkey`, `importmulti`, `fundrawtransaction`, `walletcreatefundedpsbt`, `send` and `sendall`.

  Note that the error code (-5 a.k.a. `RPC_INVALID_ADDRESS_OR_KEY`) doesn't change in any of the causes, so the changes are not breaking RPC API compatibility. Only the messages are more specific.

  The last commits adds test coverage for the cryptographically invalid (not-on-curve) pubkey case which wasn't exercised before.

ACKs for top commit:
  stratospher:
    tested ACK 98570fe.
  davidgumberg:
    ACK 98570fe29b
  Eunovo:
    Tested ACK 98570fe29b
  achow101:
    ACK 98570fe29b

Tree-SHA512: cfa474176e95b5b18f3a9da28fdd9e87195cd58994c1331198f2840925fff322fd323a6371feab74a1b32e4b9ea58a6dc732fa751b4cdd45402c1029af609ece
2024-05-08 17:52:58 -04:00
Hennadii Stepanov
189d0da3f6
build, test: Remove unused TIMEOUT environment variable
Setting the `TIMEOUT` environment variable has been a noop in both cases
since its introduction.

It seems to have been inadvertently copy-pasted from existing code. For
example, in commit d80e3cbece, it was
needlessly copied from a valid case a few line above for the
`qa/pull-tester/run-bitcoind-for-test.sh` script.
2024-05-08 14:31:16 +01:00
fanquake
7f5ac4520d
build: swap otool for (llvm-)objdump
Similar to libtool, (llvm-)otool only exists with a version suffix
on some systems (Ubuntu), which makes it annoying to use/find. Avoid
this, by switching to objdump. Which is a drop-in replacement.

This is related to #21778, and the switchover to using vanilla LLVM for
macOS.
2024-05-08 16:36:41 +08:00
merge-script
43a66c55ec
Merge bitcoin/bitcoin#30053: test: added test coverage to loadtxoutset could not open file
ee67bba76c test: added test coverage to loadtxoutset (kevkevin)

Pull request description:

  The functional test coverage did not cover the rpc error of "Couldn't open file..." for loadtxoutset and this test adds coverage for it

  This adds coverage to this line
  https://github.com/bitcoin/bitcoin/blob/master/src/rpc/blockchain.cpp#L2777

ACKs for top commit:
  maflcko:
    ACK ee67bba76c
  davidgumberg:
    LGTM ACK ee67bba76c
  rkrux:
    ACK [ee67bba](ee67bba76c)
  alfonsoromanz:
    ACK ee67bba76c. Code looks good to me. I also ran `test/functional/feature_assumeutxo.py` to make sure all tests passes, including this one.
  tdb3:
    ACK for ee67bba76c

Tree-SHA512: 210a7eb928f625d2a8d9acb63ee83cb4aaec9c267e5a0c52ad219c2935466e2cdc68667e30ad29566e6060981587e5bec42805d296f6e60f9b3b13f3330575f2
2024-05-08 16:15:00 +08:00
merge-script
74f517b441
Merge bitcoin/bitcoin#30054: ci: Exclude feature_init for now in valgrind task
fab179d102 ci: Exclude feature_init for now in valgrind task (MarcoFalke)

Pull request description:

  Fixes https://github.com/bitcoin/bitcoin/issues/30011

ACKs for top commit:
  fanquake:
    ACK fab179d102

Tree-SHA512: 5943a2abcec59253af8775e8ac7a120011a92cb66711b01a7e377a9302175d56c7de39ce028edc875b1584bf65458f92face2b0ee2028e84f4d3978d2cbafd0a
2024-05-08 11:56:32 +08:00
merge-script
09d3ad2861
Merge bitcoin/bitcoin#30025: doc: fix broken relative md links
4b9f49da2b doc: fix broken relative md links (willcl-ark)

Pull request description:

  These relative links in our documentation are broken, fix them.

ACKs for top commit:
  maflcko:
    ACK 4b9f49da2b
  ryanofsky:
    Code review ACK 4b9f49da2b. Thanks for the updates!
  ismaelsadeeq:
    Re ACK 4b9f49da2b

Tree-SHA512: df4ef5ddece6c21125ce719ed6a4f69aba4f884c353ff7a8445ecb6438ed6bf0ff8268a1ae19cdd910adaadc189c6861c445b4d469f92ee81874d810dcbd0846
2024-05-08 11:54:46 +08:00
merge-script
4e56df8f91
Merge bitcoin-core/gui#819: Fix misleading signmessage error with segwit
fb9f150759 gui: fix misleading signmessage error with segwit (willcl-ark)

Pull request description:

  As described in https://github.com/bitcoin/bitcoin/issues/10542 (and numerous other places), message signing in Bitcoin Core does not support "signing with a segwit address" and likely will not in the foreseeable future, or at least until a new message-signing standard is agreed upon.

  Therefore update the possibly misleading error message presented to the user in the GUI to detail more specifically the reason their message cannot be signed, in the case that a non P2PKH address is entered.

  This change takes the [suggested wording](https://github.com/bitcoin/bitcoin/issues/10542#issuecomment-1960313569) from @adiabat.

  Perhaps with this we can close https://github.com/bitcoin/bitcoin/issues/10542 ?

ACKs for top commit:
  hebasto:
    ACK fb9f150759.

Tree-SHA512: 5ba8d722ad3632dad2e0a2aa94b0f466b904e7885a247a5d26ebdfce54e3611090b103029d8dfce92adc49e50fe5f4830f687d867b4c56c3ea997e519b4e188d
2024-05-07 21:31:14 +01:00
Ava Chow
8efd03ad04
Merge bitcoin/bitcoin#29494: build: Assume HAVE_CONFIG_H, Add IWYU pragma keep to bitcoin-config.h includes
fa09451f8e Add lint check for bitcoin-config.h include IWYU pragma (MarcoFalke)
dddd40ba82 scripted-diff: Add IWYU pragma keep to bitcoin-config.h includes (MarcoFalke)

Pull request description:

  The `bitcoin-config.h` includes have issues:

  * The header is incompatible with iwyu, because symbols may be defined or not defined. So the `IWYU pragma: keep` is needed to keep the include when a symbol is not defined on a platform. Compare the previous discussion in https://github.com/bitcoin/bitcoin/pull/29408#issuecomment-1948959711
  * Guarding the includes by `HAVE_CONFIG_H` is verbose and brittle. Now that all build config dependencies have been removed from low level headers, the benefits are questionable, and the guard can be removed. The linter could also be tricked by guarding the include by `#if defined(HAVE_C0NFIG_H)` (`O` replaced by `0`). Compare the previous discussion in https://github.com/bitcoin/bitcoin/pull/29404#discussion_r1483189853 .

ACKs for top commit:
  achow101:
    ACK fa09451f8e
  TheCharlatan:
    ACK fa09451f8e
  hebasto:
    re-ACK fa09451f8e, only rebased since my recent [review](https://github.com/bitcoin/bitcoin/pull/29494#pullrequestreview-2028864535) (`timedata.cpp` removed in https://github.com/bitcoin/bitcoin/pull/29623).

Tree-SHA512: 47cb973f7f24bc625acc4e78683371863675d186780236d55d886cf4130e05a78bb04f1d731aae7088313b8e963a9677cc77cf518187dbd99d776f6421ca9b52
2024-05-07 14:14:03 -04:00
MarcoFalke
fab179d102
ci: Exclude feature_init for now in valgrind task 2024-05-07 08:53:18 +02:00
merge-script
ef09f535b7
Merge bitcoin/bitcoin#29984: net: Replace ifname check with IFF_LOOPBACK in Discover
a68fed111b net: Fix misleading comment for Discover (laanwj)
7766dd280d net: Replace ifname check with IFF_LOOPBACK in Discover (laanwj)

Pull request description:

  Checking the interface name is kind of brittle. In the age of network namespaces and containers, there is no reason a loopback interface can't be called differently.

  Check for the `IFF_LOOPBACK` flag to detect loopback interface instead.

  Also remove a misleading comment in Discover's doc comment.

ACKs for top commit:
  sipa:
    utACK a68fed111b
  willcl-ark:
    utACK a68fed111b
  theuni:
    utACK a68fed111b. Satoshi-era brittleness :)

Tree-SHA512: e2d7fc541f40f6a6af08286e7bcb0873ff55debdcd8b38b03f274897b673a6fb51d84d6c7241a02a9567ddf2645f50231d91bb1f55307ba7c6e68196c29b0edf
2024-05-07 10:28:58 +08:00
stickies-v
78e52f663f
doc: rpc: fix submitpackage examples 2024-05-07 00:22:30 +01:00
stickies-v
1a875d4049
rpc: update min package size error message in submitpackage
Currently, the only allowed package topology has a min size of 2.
Update the error message to reflect that.
2024-05-07 00:22:28 +01:00
stickies-v
f9ece258aa
doc: rpc: submitpackage takes sorted array 2024-05-07 00:21:44 +01:00
stickies-v
17f74512f0
test: add bounds checking for submitpackage RPC 2024-05-07 00:21:43 +01:00
kevkevin
ee67bba76c
test: added test coverage to loadtxoutset
The functional test coverage did not cover the rpc error of Couldn't
open file for loadtxoutset and this test adds coverage for it
2024-05-06 17:11:22 -05:00
Ava Chow
63d0b930f8
Merge bitcoin/bitcoin#29845: rpc: return warnings as an array instead of just a single one
42fb5311b1 rpc: return warnings as an array instead of just a single one (stickies-v)

Pull request description:

  The RPC documentation for `getblockchaininfo`, `getmininginfo` and `getnetworkinfo` states that "warnings" returns "any network and blockchain warnings". In practice, only a single warning (i.e. the latest one that is set) is returned, the other ones are ignored.

  Fix that by returning all warnings as an array.

  As a side benefit, clean up the GetWarnings() logic.

  Since this PR changes the RPC result schema, I've added release notes. Users can temporarily revert to the old results by using `-deprecatedrpc=warnings`, until it's removed in a future version.

  ---

  Some historical context from git log:

  - when `GetWarnings` was introduced in 401926283a, it was used in the `getinfo` RPC, where only a [single error/warning was returned](401926283a (diff-7442c48d42cd5455a79915a0f00cce5e13359db46437a32b812876edb0a5ccddR250)) (similar to how it is now).
  - later on, "warnings" RPC response fields were introduced, e.g. in ef2a3de25c, with the description [stating](ef2a3de25c (diff-1021bd3c74415ad9719bd764ad6ca35af5dfb33b1cd863c0be49bdf52518af54R411)) that it returned "any network warnings" but in practice still only a single warning was returned

ACKs for top commit:
  achow101:
    re-ACK 42fb5311b1
  tdb3:
    Re ACK for 42fb5311b1
  TheCharlatan:
    ACK 42fb5311b1
  maflcko:
    ACK 42fb5311b1 🔺

Tree-SHA512: 4225ed8979cd5f030dec785a80e7452a041ad5703445da79d2906ada983ed0bbe7b15889d663d75aae4a77d92e302c93e93eca185c7bd47c9cce29e12f752bd3
2024-05-06 12:24:09 -04:00
merge-script
fdb41e08c4
Merge bitcoin/bitcoin#29773: build, bench, msvc: Add missing benchmarks
31a15f0aff bench: Disable WalletCreate* benchmarks when building with MSVC (Hennadii Stepanov)
23dc0c19ac msvc, bench: Add missing source files to bench_bitcoin project (Hennadii Stepanov)

Pull request description:

  On the master branch, the `bench_bitcoin.vcxproj` MSVC project misses wallet-specific source files.

  This PR fixes this issue.

  Benchmark run on Windows:
  ```
  > src\bench_bitcoin.exe -filter="CoinSelection|BnBExhaustion|Wallet.*"

  |               ns/op |                op/s |    err% |     total | benchmark
  |--------------------:|--------------------:|--------:|----------:|:----------
  |          398,800.00 |            2,507.52 |    1.5% |      0.01 | `BnBExhaustion`
  |          584,450.00 |            1,711.01 |    1.5% |      0.01 | `CoinSelection`
  |       86,603,650.00 |               11.55 |    0.4% |      1.91 | `WalletAvailableCoins`
  |            7,604.00 |          131,509.73 |    0.9% |      0.01 | `WalletBalanceClean`
  |          124,028.57 |            8,062.66 |    2.6% |      0.01 | `WalletBalanceDirty`
  |            7,587.12 |          131,802.30 |    1.9% |      0.01 | `WalletBalanceMine`
  |               48.58 |       20,583,872.99 |    0.9% |      0.01 | `WalletBalanceWatch`
  |        2,371,060.00 |              421.75 |    1.3% |      0.13 | `WalletCreateTxUseOnlyPresetInputs`
  |       96,861,760.00 |               10.32 |    0.9% |      5.31 | `WalletCreateTxUsePresetInputsAndCoinSelection`
  |              280.71 |        3,562,424.13 |    1.5% |      0.01 | `WalletIsMineDescriptors`
  |            1,033.47 |          967,618.32 |    0.3% |      0.01 | `WalletIsMineLegacy`
  |              282.36 |        3,541,599.91 |    0.5% |      0.01 | `WalletIsMineMigratedDescriptors`
  |      484,547,300.00 |                2.06 |    1.0% |      2.43 | `WalletLoadingDescriptors`
  |       29,924,300.00 |               33.42 |    0.4% |      0.15 | `WalletLoadingLegacy`
  ```

ACKs for top commit:
  maflcko:
    lgtm ACK 31a15f0aff

Tree-SHA512: 0241af06126edf612489322cdce66ba43792066b5400b1719a8b9d1ec62030e8a9d497e2f01e38290e94c387db59ccf2a458f4b35d3dc8030a1a1413d89eb792
2024-05-06 21:02:30 +08:00
merge-script
00ac1b963d
Merge bitcoin/bitcoin#29960: depends: pass verbose through to cmake based makefiles
7c69baf227 depends: pass verbose through to cmake based make (Max Edwards)

Pull request description:

  While testing https://github.com/bitcoin/bitcoin/pull/29708 I was not able to enable verbose output to check which flags were being given to the compiler.

  With this PR, running depends with V=1 will enable verbose output from makefiles generated by cmake.

  How to test:

  ```shell
  make -C depends libnatpmp V=1
  ```

ACKs for top commit:
  hebasto:
    ACK 7c69baf227. Tested using the folowing command:
  fanquake:
    ACK 7c69baf227

Tree-SHA512: 81cd1326e940c5f14cbde96735fd02b03c1150881ed88d1e8dfa9385dfa12284bfa2cdfe097ce5f43a726c1718afb76ae16f71552ab68c207d74fdc1f7bb46ae
2024-05-06 09:47:29 +08:00
merge-script
f7b81c7e1e
Merge bitcoin/bitcoin#30031: msvc: Compile test\fuzz\miniscript.cpp
9155b733e1 build, msvc: Compile test\fuzz\miniscript.cpp (Hennadii Stepanov)

Pull request description:

  This PR resolves the remained point from the https://github.com/bitcoin/bitcoin/pull/29774#issuecomment-2028808614:
  > What is the issue with the ... miniscript fuzz tests?

  From the CI [log](https://github.com/bitcoin/bitcoin/actions/runs/8941546183/job/24562123707?pr=30031#step:29:234):
  ```
  miniscript_script: succeeded against 721 files in 1s.
  Run miniscript_script with args ['D:\\a\\bitcoin\\bitcoin\\src\\fuzz.exe', WindowsPath('D:/a/_temp/qa-assets/fuzz_seed_corpus/miniscript_script')]
  miniscript_smart: succeeded against 1429 files in 2s.
  Run miniscript_smart with args ['D:\\a\\bitcoin\\bitcoin\\src\\fuzz.exe', WindowsPath('D:/a/_temp/qa-assets/fuzz_seed_corpus/miniscript_smart')]
  miniscript_stable: succeeded against 1871 files in 2s.
  Run miniscript_stable with args ['D:\\a\\bitcoin\\bitcoin\\src\\fuzz.exe', WindowsPath('D:/a/_temp/qa-assets/fuzz_seed_corpus/miniscript_stable')]
  miniscript_string: succeeded against 918 files in 3s.
  Run miniscript_string with args ['D:\\a\\bitcoin\\bitcoin\\src\\fuzz.exe', WindowsPath('D:/a/_temp/qa-assets/fuzz_seed_corpus/miniscript_string')]
  ```

ACKs for top commit:
  maflcko:
    ACK 9155b733e1
  TheCharlatan:
    ACK 9155b733e1

Tree-SHA512: 967f199aac41733265532518ff7b1d881ba5a7bbde9f827d6a0b6d984c94a65b20d5854ce0ea247158eaa17b21d4c9f7d25c79bac17960788bacd2586112630b
2024-05-06 09:33:56 +08:00
Sebastian Falbesoner
dd8fa86193 test: use tagged ephemeral MiniWallet instance in fill_mempool 2024-05-05 12:36:51 +02:00
Sebastian Falbesoner
b2037ad4ae test: add MiniWallet tagging support to avoid UTXO mixing
Note that this commit doesn't change behaviour yet, as tagging isn't
used in any MiniWallet instance.
2024-05-05 12:33:34 +02:00
Sebastian Falbesoner
c8e6d08236 test: refactor: eliminate COINBASE_MATURITY magic number in fill_mempool 2024-05-05 12:33:34 +02:00