Commit graph

35037 commits

Author SHA1 Message Date
fanquake
7a0b129c41
guix: patch NSIS to remove .reloc sections from install stubs
With the release of binutils/ld 2.36, ld swapped to much improved
default settings when producing windows binaries with mingw-w64. One of
these changes was to stop stripping the .reloc section from binaries,
which is required for working ASLR.

.reloc section stripping is something we've accounted for previously,
see #18702. The related upstream discussion is in this thread:
https://sourceware.org/bugzilla/show_bug.cgi?id=19011.

When we switched to using a newer Guix time-machine in #23778, we begun
using binutils 2.37 to produce releases. Since then, our windows
installer (produced with makensis) has not functioned correctly when run on
a Windows system with the "Force randomization for images (Mandatory ASLR)"
option enabled. Note that all of our other release binaries, which all
contain .reloc sections, function fine under the same option, so it
cannot be just the presence of a .reloc section that is the issue.

For now, restore makensis to it's pre-binutils-2.36 behaviour, which
fixes the produced installer. The underlying issue can be further
investigated in future.
2022-08-05 18:15:12 +01:00
Sebastian Falbesoner
76b3c37fcb refactor: wallet: return util::Result from GetReservedDestination methods 2022-08-05 17:19:09 +02:00
MacroFake
7d3817b29a
Merge bitcoin/bitcoin#25760: rest: clean-up for mempool endpoints
acbea66589 rest: clean-up for `mempool` endpoints (brunoerg)

Pull request description:

  The functions `rest_mempool_info` and `rest_mempool_contents` are similar, the only difference between them is:
  `rest_mempool_info` uses `MempoolInfoToJSON` to get the mempool informations and `rest_mempool_contents` uses `MempoolToJSON`, for this reason this PR creates a new function to handle it and reduce duplicated code.

  Also,
  1. Rename `strURIPart` to `str_uri_part`.
  2. Rename `strJSON` to `str_json`.

ACKs for top commit:
  stickies-v:
    re-ACK acbea66589 - verified that just the error message was updated since da0c612c3d
  theStack:
    re-ACK acbea66589

Tree-SHA512: 35f6f0732a573fe8a6cdcc782f89ae3427a1de19f069a68c9c51bb525118c2b07e20303cbe19b9d4b7d1ad055d69c32def2d0fb8f886c851da562dd9ce33ad6a
2022-08-05 16:43:29 +02:00
MacroFake
006740b6f6
Merge bitcoin/bitcoin#25721: refactor: Replace BResult with util::Result
a23cca56c0 refactor: Replace BResult with util::Result (Ryan Ofsky)

Pull request description:

  Rename `BResult` class to `util::Result` and update the class interface to be more compatible with `std::optional` and with a full-featured result class implemented in https://github.com/bitcoin/bitcoin/pull/25665. Motivation for this change is to update existing `BResult` usages now so they don't have to change later when more features are added in https://github.com/bitcoin/bitcoin/pull/25665.

  This change makes the following improvements originally implemented in https://github.com/bitcoin/bitcoin/pull/25665:

  - More explicit API. Drops potentially misleading `BResult` constructor that treats any bilingual string argument as an error. Adds `util::Error` constructor so it is never ambiguous when a result is being assigned an error or non-error value.

  - Better type compatibility. Supports `util::Result<bilingual_str>` return values to hold translated messages which are not errors.

  - More standard and consistent API. `util::Result` supports most of the same operators and methods as `std::optional`. `BResult` had a less familiar interface with `HasRes`/`GetObj`/`ReleaseObj` methods. The Result/Res/Obj naming was also not internally consistent.

  - Better code organization. Puts `src/util/` code in the `util::` namespace so naming reflects code organization and it is obvious where the class is coming from. Drops "B" from name because it is undocumented what it stands for (bilingual?)

  - Has unit tests.

ACKs for top commit:
  MarcoFalke:
    ACK a23cca56c0 🏵
  jonatack:
    ACK a23cca56c0

Tree-SHA512: 2769791e08cd62f21d850aa13fa7afce4fb6875a9cedc39ad5025150dbc611c2ecfd7b3aba8b980a79fde7fbda13babdfa37340633c69b501b6e89727bad5b31
2022-08-05 15:33:45 +02:00
brunoerg
acbea66589 rest: clean-up for mempool endpoints 2022-08-05 10:28:11 -03:00
Ben Woosley
478695982b bench: Add a benchmark for descriptor expansion 2022-08-05 12:04:43 +02:00
Sebastian Falbesoner
68006c10ab test: check that verifymessage RPC fails for non-P2PKH addresses 2022-08-05 11:59:56 +02:00
fanquake
92f6461cfd
Merge bitcoin/bitcoin#25779: guix: ignore additional failing certvalidator test
4cf3b7d763 guix: ignore additional failing certvalidator test (fanquake)

Pull request description:

  Any Guix build that needs to build the python-certvalidator code will currently fail due to expired certs. So once again ignore the failing tests. Similar to 8588591965.

  ```bash
  ERROR: test_revocation_mode_soft (tests.test_validate.ValidateTests)
  ----------------------------------------------------------------------
  Traceback (most recent call last):
    File "/tmp/guix-build-python-certvalidator-0.1-1.a145bf2.drv-0/source/tests/test_validate.py", line 85, in test_revocation_mode_soft
      validate_path(context, path)
    File "/tmp/guix-build-python-certvalidator-0.1-1.a145bf2.drv-0/source/tests/../certvalidator/validate.py", line 50, in validate_path
      return _validate_path(validation_context, path)
    File "/tmp/guix-build-python-certvalidator-0.1-1.a145bf2.drv-0/source/tests/../certvalidator/validate.py", line 358, in _validate_path
      raise PathValidationError(pretty_message(
  certvalidator.errors.PathValidationError: The path could not be validated because the end-entity certificate expired 2022-07-27 12:00:00Z
  ```

  Guix Build (arm64):
  ```bash
  b843f87a61eb2a44d085ab99793ff095290436102b19cd6d6d703c281eba539f  guix-build-4cf3b7d763b0/output/arm64-apple-darwin/SHA256SUMS.part
  280c19bd0a6899dd6100e1d6f632ba9e845500f58f59ed7d6703d818ae2780f0  guix-build-4cf3b7d763b0/output/arm64-apple-darwin/bitcoin-4cf3b7d763b0-arm64-apple-darwin-unsigned.dmg
  9b80cc44e3eeeadb2a17bdcf10fcae7cca4bceceec8fb47c2c757a43753a03c6  guix-build-4cf3b7d763b0/output/arm64-apple-darwin/bitcoin-4cf3b7d763b0-arm64-apple-darwin-unsigned.tar.gz
  43d781b61817a8e0c6168d6611ccb9a4242cf7289b4cc4b5ac77484f34d01738  guix-build-4cf3b7d763b0/output/arm64-apple-darwin/bitcoin-4cf3b7d763b0-arm64-apple-darwin.tar.gz
  38d261b70baf018f8a1ee980fb139451b085dc484516562af4b5ae86a0b71869  guix-build-4cf3b7d763b0/output/dist-archive/bitcoin-4cf3b7d763b0.tar.gz
  e5d08f055f73a1abf5eef0ea4e55098a53e859d0ea7ff29d21a78e30204e8b5c  guix-build-4cf3b7d763b0/output/x86_64-apple-darwin/SHA256SUMS.part
  2388708d670068515bec06219792f34494ab7ac939999572dc4b5d92430e0890  guix-build-4cf3b7d763b0/output/x86_64-apple-darwin/bitcoin-4cf3b7d763b0-x86_64-apple-darwin-unsigned.dmg
  cb43edd02b8eb11c3e9d8bf6baf65b5656577a2f7a2b21374f90c08a196aa608  guix-build-4cf3b7d763b0/output/x86_64-apple-darwin/bitcoin-4cf3b7d763b0-x86_64-apple-darwin-unsigned.tar.gz
  6f443713f2e23da705defddc09c8c66743691841e01d0debe29dad442454e5c8  guix-build-4cf3b7d763b0/output/x86_64-apple-darwin/bitcoin-4cf3b7d763b0-x86_64-apple-darwin.tar.gz
  ```

  Guix Build (x86_64):
  ```bash
  7e18af2409e9811ea2bb2aa41a19dcc0b4ac626bb5effe30909ef21942bfb611  guix-build-4cf3b7d763b0/output/arm64-apple-darwin/SHA256SUMS.part
  b6ec0c9ca967e1e3301894bb2ac92d1fab663cfd620004c8044a3685deb7c9e5  guix-build-4cf3b7d763b0/output/arm64-apple-darwin/bitcoin-4cf3b7d763b0-arm64-apple-darwin-unsigned.dmg
  9f8de6d555d0922fd1fc970628bd2a9a9d3e6779b458038e18bd9d5dd9633a1b  guix-build-4cf3b7d763b0/output/arm64-apple-darwin/bitcoin-4cf3b7d763b0-arm64-apple-darwin-unsigned.tar.gz
  534b83732ff90bca57e748b25465f8d3d52d653e7ca52cf4ce2226e5bed814fc  guix-build-4cf3b7d763b0/output/arm64-apple-darwin/bitcoin-4cf3b7d763b0-arm64-apple-darwin.tar.gz
  38d261b70baf018f8a1ee980fb139451b085dc484516562af4b5ae86a0b71869  guix-build-4cf3b7d763b0/output/dist-archive/bitcoin-4cf3b7d763b0.tar.gz
  e5d08f055f73a1abf5eef0ea4e55098a53e859d0ea7ff29d21a78e30204e8b5c  guix-build-4cf3b7d763b0/output/x86_64-apple-darwin/SHA256SUMS.part
  2388708d670068515bec06219792f34494ab7ac939999572dc4b5d92430e0890  guix-build-4cf3b7d763b0/output/x86_64-apple-darwin/bitcoin-4cf3b7d763b0-x86_64-apple-darwin-unsigned.dmg
  cb43edd02b8eb11c3e9d8bf6baf65b5656577a2f7a2b21374f90c08a196aa608  guix-build-4cf3b7d763b0/output/x86_64-apple-darwin/bitcoin-4cf3b7d763b0-x86_64-apple-darwin-unsigned.tar.gz
  6f443713f2e23da705defddc09c8c66743691841e01d0debe29dad442454e5c8  guix-build-4cf3b7d763b0/output/x86_64-apple-darwin/bitcoin-4cf3b7d763b0-x86_64-apple-darwin.tar.gz
  ```

ACKs for top commit:
  achow101:
    ACK 4cf3b7d763
  jarolrod:
    ACK 4cf3b7d763

Tree-SHA512: fd83e05f5d772cdcd5a92862bd65a85f128492972be0cb441770bcee7764f889f13b1d109988d360bb9b294942c5b14e46258442b1b3fa1b2902ce958015a897
2022-08-05 09:58:22 +01:00
MacroFake
7d82f86341
Merge bitcoin/bitcoin#25650: script: default to necessary tags in test/get_previous_releases.py
21a9e94dbb ci: remove hardcoded tag list from ci scripts (josibake)
d530ba390e doc: update test/README.md (josibake)
614d4682ba script: default to necessary tags in get_previous_releases.py (josibake)

Pull request description:

  Almost every time I need to use this script, I forget the tag list is needed and that a specific set of tags is needed for the backwards compatibility tests to work. I end up wasting time reading through the script and googling to find the tag list before remembering it is in `test/README.md`

  I assume (hope) I'm not the only one this happens to, so I figured it would make more sense to have the script default to downloading/building the necessary tags. This has the added benefit of making the script the source of truth: the script already needs to be updated with the SHA256_SUM of the binary for every new tag that is added, so it makes sense to use `SHA256_SUMS` list as the necessary tag list. This means there is less risk of the README and the script drifting (i.e updating the readme with a new tag and forgetting to update the script, or updating the script and forgetting to update the README). Now all that needs to happen is to update the `SHA256_SUMS` list in the script and everything Just Works (TM)

ACKs for top commit:
  Sjors:
    re-tACK 21a9e94dbb

Tree-SHA512: 97b488227a89a6827584edd251820a7074fad75dfd7f26f1aa5f858e2521d2e02effd0f11e6dc4676e1155d3d5aba6ff94a4b58ffef80dc201376afd5927deb9
2022-08-05 10:51:06 +02:00
fanquake
e038605585
Merge bitcoin/bitcoin#24662: addrman: Use system time instead of adjusted network time
fadd8b2676 addrman: Use system time instead of adjusted network time (MarcoFalke)

Pull request description:

  This changes addrman to use system time for address relay instead of the network adjusted time.

  This is an improvement, because network time has multiple issues:

  * It is non-monotonic, even if the system time is monotonic.
  * It may be wrong, even if the system time is correct.
  * It may be wrong, if the system time is wrong. For example, when the node has limited number of connections (`4`), or the system time is wrong by too much (more than +-70 minutes), or the system time only got wrong after timedata collected more than half of the entries while the time was correct, ...)

  This may slightly degrade addr relay for nodes where timedata successfully adjusted the time. Addr relay can already deal with minor offsets of up to 10 minutes. Offsets larger than this should still allow addr relay and not result in a DoS.

ACKs for top commit:
  dergoegge:
    Code review ACK fadd8b2676

Tree-SHA512: b6c178fa01161544e5bc76c4cb23e11bcc30391f7b7a64accce864923766647bcfce2e8ae21d36fb1ffc1afa07bc46415aca612405bd8d4cc1f319c92a08498f
2022-08-05 09:03:33 +01:00
Karl-Johan Alm
db10cf8ae3
rpc/wallet: add simulaterawtransaction RPC
This command iterates over the inputs and outputs of the given transactions, and tallies up the balance change for the given wallet. This can be useful e.g. when verifying that a coin join like transaction doesn't contain unexpected inputs that the wallet will then sign for unintentionally.
2022-08-05 09:48:09 +09:00
MacroFake
2c3115d4f5
Merge bitcoin/bitcoin#25773: test: Target exact weight in MiniWallet _bulk_tx
fa2537cf0a test: Target exact weight in MiniWallet _bulk_tx (MacroFake)

Pull request description:

  Seems better to target the exact weight than a weight that is up to more than 2000 WU larger.

  Also, replace a broad `-acceptnonstdtxn=1` with `-datacarriersize=100000` to document the test assumptions better.

ACKs for top commit:
  theStack:
    Code-review ACK fa2537cf0a

Tree-SHA512: cf02c3082a13195b8aa730866aeaf2575ce01974ae2b0244739d8cfc12e60c66312729ed703bb3214651744166a3b560bfaa8dc302ef46ed79fc4d1fe7fcc214
2022-08-04 19:21:48 +02:00
fanquake
e09ad284c7
Merge bitcoin/bitcoin#24675: util: Use ArgsManager::GetPathArg more widely
b01f336708 util, refactor: Drop explicit conversion to fs::path (Hennadii Stepanov)
138c668e2b util, refactor: Use GetPathArg to read "-rpccookiefile" value (Hennadii Stepanov)
1276090705 util, refactor: Use GetPathArg to read "-conf" value (Hennadii Stepanov)

Pull request description:

  This PR is a continuation of bitcoin/bitcoin#24265 and bitcoin/bitcoin#24306.

  Now the following command-line arguments / configure options been read with the `GetPathArg` method:
  - `-conf`, also `includeconf` values been normalized
  - `-rpccookiefile`

ACKs for top commit:
  jarolrod:
    Code Review ACK b01f336708
  ryanofsky:
    Code review ACK b01f336708. Changes since last review: just dropping first commit (NormalizedPathFromString) as suggested

Tree-SHA512: 2d26d50b73542acdbcc63a32068977b2a49a017d31ca337471a0446f964eb0a6e3e4e3bb1ebe6771566a260f2cae3bc2ebe93b4b523183cea0d51768daab85c9
2022-08-04 16:58:01 +01:00
fanquake
36c83b40bd
Merge bitcoin/bitcoin#25023: Remove unused SetTip(nullptr) code
faab8dceb3 Remove unused SetTip(nullptr) code (MacroFake)

Pull request description:

  Now that this path is no longer used after commit b51e60f914, we can remove it.

  Future code should reset `CChain` by simply discarding it and constructing a fresh one.

ACKs for top commit:
  ryanofsky:
    Code review ACK faab8dceb3. Just moved an assert statement since last review

Tree-SHA512: 7dc273b11133d85d32ca2a69c0c7c07b39cdd338141ef5b51496e7de334a809864d5459eb95535497866c8b1e468aae84ed8f91b543041e6ee20130d5622874e
2022-08-04 16:48:14 +01:00
glozow
7312effe6a
Merge bitcoin/bitcoin#25527: [kernel 3c/n] Decouple validation cache initialization from ArgsManager
0f3a2532c3 validationcaches: Use size_t for sizes (Carl Dong)
41c5201a90 validationcaches: Add and use ValidationCacheSizes (Carl Dong)
82d3058539 cuckoocache: Check for uint32 overflow in setup_bytes (Carl Dong)
b370164b31 validationcaches: Abolish arbitrary limit (Carl Dong)
08dbc6ef72 cuckoocache: Return approximate memory size (Carl Dong)
0dbce4b103 tests: Reduce calls to InitS*Cache() (Carl Dong)

Pull request description:

  This is part of the `libbitcoinkernel` project: #24303, https://github.com/bitcoin/bitcoin/projects/18

  This PR is **_NOT_** dependent on any other PRs.

  -----

  a.k.a. "Stop calling `gArgs.GetIntArg("-maxsigcachesize")` from validation code"

  This PR introduces the `ValidationCacheSizes` struct and its corresponding `ApplyArgsManOptions` function, removing the need to call `gArgs` from `Init{Signature,ScriptExecution}Cache()`. This serves to further decouple `ArgsManager` from `libbitcoinkernel` code.

  More context can be gleaned from the commit messages.

ACKs for top commit:
  glozow:
    re ACK 0f3a2532c3
  theStack:
    Code-review ACK 0f3a2532c3
  ryanofsky:
    Code review ACK 0f3a2532c3. Rebase and comment tweak since last

Tree-SHA512: a492ca608466979807cac25ae3d8ef75d2f1345de52a156aa0d222c5a940f79f1b65db40090de69183cccdb12297ec060f6c64e57a26a155a94fec80e07ea0f7
2022-08-04 16:43:29 +01:00
fanquake
4cf3b7d763
guix: ignore additional failing certvalidator test
Similar to 8588591965.

```bash
ERROR: test_revocation_mode_soft (tests.test_validate.ValidateTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/guix-build-python-certvalidator-0.1-1.a145bf2.drv-0/source/tests/test_validate.py", line 85, in test_revocation_mode_soft
    validate_path(context, path)
  File "/tmp/guix-build-python-certvalidator-0.1-1.a145bf2.drv-0/source/tests/../certvalidator/validate.py", line 50, in validate_path
    return _validate_path(validation_context, path)
  File "/tmp/guix-build-python-certvalidator-0.1-1.a145bf2.drv-0/source/tests/../certvalidator/validate.py", line 358, in _validate_path
    raise PathValidationError(pretty_message(
certvalidator.errors.PathValidationError: The path could not be validated because the end-entity certificate expired 2022-07-27 12:00:00Z
```
2022-08-04 13:29:20 +01:00
Antoine Poinsot
fb9faffae3
extended keys: fail to derive too large depth instead of wrapping around
This issue was reported to me by Marco Falke, and found with the
descriptor_parse fuzz target.
2022-08-04 11:32:26 +02:00
Antoine Poinsot
8dc6670ce1
descriptor: don't assert success of extended key derivation
It might already fail, and we'll add another failure case.
2022-08-04 11:32:25 +02:00
Antoine Poinsot
50cfc9e761
(pubk)key: mark Derive() as nodiscard 2022-08-04 11:32:25 +02:00
Antoine Poinsot
0ca258a5ac
descriptor: never ignore the return value when deriving an extended key
In some cases we asserted it succeeded, in others we were just ignoring it
2022-08-04 11:32:24 +02:00
fanquake
f765d4e232
Merge bitcoin/bitcoin#25770: build: Fix help string for --enable-external-signer configure option
8df063e537 build: Fix help string for `--enable-external-signer` configure option (Hennadii Stepanov)

Pull request description:

  This PR is a follow up of bitcoin/bitcoin#24065 and fixes the help string according to the actual default value 816ca01650/configure.ac (L324-L327)

ACKs for top commit:
  kristapsk:
    cr utACK 8df063e537
  jarolrod:
    ACK 8df063e537

Tree-SHA512: ad3f457a53c9238ddd8ded9efd1224e564e6cb9da8b7ff7733a11e32a7daad5c0f6c6223509218f44944a874470cb0d2447897662eaf4e78c763b30785717c50
2022-08-04 09:07:09 +01:00
fanquake
08085c764d
Merge bitcoin/bitcoin#25633: depends: don't restrict --enable-lto to non-guix cctools
7f73f422a4 depends: don't restrict --enable-lto to non-guix cctools (fanquake)
9b60690b94 cctools: fixup building with LTO (fanquake)

Pull request description:

  This wasn't actually disabling LTO support anyways, because it's enabled
  by default.

  Guix Build (x86_64):
  ```bash
  af6e0b5fd494f714a84716161352aee415700c1f50f1f08665a474dc2ed56bad  guix-build-7f73f422a49f/output/aarch64-linux-gnu/SHA256SUMS.part
  1ecdbf2b579204cf2086001df3887da2ba50cd3f7b8f735113cce8f1b634fdb2  guix-build-7f73f422a49f/output/aarch64-linux-gnu/bitcoin-7f73f422a49f-aarch64-linux-gnu-debug.tar.gz
  878ea08855dc559e62fd1932f8a54d53fc63e0ce7d587345c7326892622feee9  guix-build-7f73f422a49f/output/aarch64-linux-gnu/bitcoin-7f73f422a49f-aarch64-linux-gnu.tar.gz
  4d1d35bd329935bc74b82a78a7fb8dd39c3268d4bbb33ecd877079e49de97a88  guix-build-7f73f422a49f/output/arm-linux-gnueabihf/SHA256SUMS.part
  c0c5418dc270d716b354d2190fddde3d25794758dee45c9068e9f5aac20e5617  guix-build-7f73f422a49f/output/arm-linux-gnueabihf/bitcoin-7f73f422a49f-arm-linux-gnueabihf-debug.tar.gz
  5e13ac8cacf1042746eef7e85695469c50d6afc06dfdb5da53039175e5185b52  guix-build-7f73f422a49f/output/arm-linux-gnueabihf/bitcoin-7f73f422a49f-arm-linux-gnueabihf.tar.gz
  218b2463a07503e77711fcf0245bc642eb9ed76e4a3e8b61d66a5c76bdc25c62  guix-build-7f73f422a49f/output/arm64-apple-darwin/SHA256SUMS.part
  dd15af2b7a333f3c4b3f75abd307e1789a1629728a0ae33d8a509478ace91134  guix-build-7f73f422a49f/output/arm64-apple-darwin/bitcoin-7f73f422a49f-arm64-apple-darwin-unsigned.dmg
  5cdfd9fc347007890991c68746b1bb36e0cced57fee685337b3d079d498f687d  guix-build-7f73f422a49f/output/arm64-apple-darwin/bitcoin-7f73f422a49f-arm64-apple-darwin-unsigned.tar.gz
  80f957e78177927ace323ea90d4bad2e8d2b846b199a0dcb085c3ceae8516631  guix-build-7f73f422a49f/output/arm64-apple-darwin/bitcoin-7f73f422a49f-arm64-apple-darwin.tar.gz
  3cb9cb04db3ebf328bfabfda874fce09764f3840c98bd850d85f71892617fb99  guix-build-7f73f422a49f/output/dist-archive/bitcoin-7f73f422a49f.tar.gz
  e4e7c9d5366b658fc420c1fd3cf12bfb9863b8061c83b06fe2492e934bb75ae9  guix-build-7f73f422a49f/output/powerpc64-linux-gnu/SHA256SUMS.part
  da4ea7dd9a131901ff2f7fcd6eba573fe946ea671ae6ada418a4ceebcc4bd3b6  guix-build-7f73f422a49f/output/powerpc64-linux-gnu/bitcoin-7f73f422a49f-powerpc64-linux-gnu-debug.tar.gz
  221f6e1d5193207eed400c186c8f83747fbf90c3244cd044b36acadbed0c83a6  guix-build-7f73f422a49f/output/powerpc64-linux-gnu/bitcoin-7f73f422a49f-powerpc64-linux-gnu.tar.gz
  12d36079b330ec75209219ce58ca580ca5a5eeac64fb7ae424c64e7f3d466ee5  guix-build-7f73f422a49f/output/powerpc64le-linux-gnu/SHA256SUMS.part
  3cef0194569d6fa968e92be1d2189be4f1337272dc213c25b8d4afe6b174310c  guix-build-7f73f422a49f/output/powerpc64le-linux-gnu/bitcoin-7f73f422a49f-powerpc64le-linux-gnu-debug.tar.gz
  a8ff109153926b3240f830c3501977046b6c470b67380a01c55aea2401a1a833  guix-build-7f73f422a49f/output/powerpc64le-linux-gnu/bitcoin-7f73f422a49f-powerpc64le-linux-gnu.tar.gz
  70b3a841bb232fefe27f857ee826ea6a84f59bc781acda608bd6d9385a1ef149  guix-build-7f73f422a49f/output/riscv64-linux-gnu/SHA256SUMS.part
  841a276263877027f256c3b7ad1c5bc3ae3ad4d6a7157690daa947f6809776e2  guix-build-7f73f422a49f/output/riscv64-linux-gnu/bitcoin-7f73f422a49f-riscv64-linux-gnu-debug.tar.gz
  6cce2c36c2a53035d7ee5d285c8b4b99256772c7a9dca1739f0639ecc0bed71d  guix-build-7f73f422a49f/output/riscv64-linux-gnu/bitcoin-7f73f422a49f-riscv64-linux-gnu.tar.gz
  e910b32efebca682cf8bc3994d2c7513b16cdeb6f94cef906efb6629ec53268d  guix-build-7f73f422a49f/output/x86_64-apple-darwin/SHA256SUMS.part
  3a4bc1573d9c576184d69b953ea6a85650d4e15b71503b909ccd4fb8a69ca383  guix-build-7f73f422a49f/output/x86_64-apple-darwin/bitcoin-7f73f422a49f-x86_64-apple-darwin-unsigned.dmg
  60a114ece1d9a274d9f3d80a9633eb22d589213ba53a956f3b1138d7c8f55560  guix-build-7f73f422a49f/output/x86_64-apple-darwin/bitcoin-7f73f422a49f-x86_64-apple-darwin-unsigned.tar.gz
  b6c6eca3e81bfadfed3ddcb7830857c954c8a7b0ff458f14050f4952240ebf27  guix-build-7f73f422a49f/output/x86_64-apple-darwin/bitcoin-7f73f422a49f-x86_64-apple-darwin.tar.gz
  aab972c6f051c379a20eb694128a4df4e3737758fbca3902d28d72cd93e6d33a  guix-build-7f73f422a49f/output/x86_64-linux-gnu/SHA256SUMS.part
  b8e643eeb72cf04664462f815497cbef1443f2e113de14bc93b058d83836c7df  guix-build-7f73f422a49f/output/x86_64-linux-gnu/bitcoin-7f73f422a49f-x86_64-linux-gnu-debug.tar.gz
  3b40fb5f1341cc3b49c9eccc68fc75e1cc7e7d2c6a5664fa2f8f095290e3733a  guix-build-7f73f422a49f/output/x86_64-linux-gnu/bitcoin-7f73f422a49f-x86_64-linux-gnu.tar.gz
  96138d5f591a8ba8589eb81d2c79ee269556996ae93c6a3fc77746e101b60cab  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/SHA256SUMS.part
  6ef2d9436caa550bec7defda1d769bffc2e0fe8f7acf99e2fbcefd2e9b920a64  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/bitcoin-7f73f422a49f-win64-debug.zip
  91c8c3f0aec623f4183c4ebc141816dddb4482509e99812d32298f3e83da920f  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/bitcoin-7f73f422a49f-win64-setup-unsigned.exe
  1de7cd32d74990cfcd4e00428c53a35742b7a480f18ae1bd60dbf91b60400947  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/bitcoin-7f73f422a49f-win64-unsigned.tar.gz
  e4d4ba33bbdd8d9181c8422af31ad6127f3627c327a93cbe8245d7154b5a936c  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/bitcoin-7f73f422a49f-win64.zip
  ```

  Guix Build (arm64):
  ```bash
  4d1d35bd329935bc74b82a78a7fb8dd39c3268d4bbb33ecd877079e49de97a88  guix-build-7f73f422a49f/output/arm-linux-gnueabihf/SHA256SUMS.part
  c0c5418dc270d716b354d2190fddde3d25794758dee45c9068e9f5aac20e5617  guix-build-7f73f422a49f/output/arm-linux-gnueabihf/bitcoin-7f73f422a49f-arm-linux-gnueabihf-debug.tar.gz
  5e13ac8cacf1042746eef7e85695469c50d6afc06dfdb5da53039175e5185b52  guix-build-7f73f422a49f/output/arm-linux-gnueabihf/bitcoin-7f73f422a49f-arm-linux-gnueabihf.tar.gz
  5768bc05947954f8d0caa1869edbba7a9102339d43c47a43cbc5eabdabebfd16  guix-build-7f73f422a49f/output/arm64-apple-darwin/SHA256SUMS.part
  e506d3a635364751eaeccf553bd8c8847e5a2ab4a28bb03108052ae697b49e7e  guix-build-7f73f422a49f/output/arm64-apple-darwin/bitcoin-7f73f422a49f-arm64-apple-darwin-unsigned.dmg
  76fd8b6954ead8bbbba56fbf747459019dcd2def22ab6615ce817f2fff7adcb8  guix-build-7f73f422a49f/output/arm64-apple-darwin/bitcoin-7f73f422a49f-arm64-apple-darwin-unsigned.tar.gz
  f369a59d44cd31a505faf1eefd84b9ecde91f4cb036e79d38188c9ed0f9c094c  guix-build-7f73f422a49f/output/arm64-apple-darwin/bitcoin-7f73f422a49f-arm64-apple-darwin.tar.gz
  3cb9cb04db3ebf328bfabfda874fce09764f3840c98bd850d85f71892617fb99  guix-build-7f73f422a49f/output/dist-archive/bitcoin-7f73f422a49f.tar.gz
  e4e7c9d5366b658fc420c1fd3cf12bfb9863b8061c83b06fe2492e934bb75ae9  guix-build-7f73f422a49f/output/powerpc64-linux-gnu/SHA256SUMS.part
  da4ea7dd9a131901ff2f7fcd6eba573fe946ea671ae6ada418a4ceebcc4bd3b6  guix-build-7f73f422a49f/output/powerpc64-linux-gnu/bitcoin-7f73f422a49f-powerpc64-linux-gnu-debug.tar.gz
  221f6e1d5193207eed400c186c8f83747fbf90c3244cd044b36acadbed0c83a6  guix-build-7f73f422a49f/output/powerpc64-linux-gnu/bitcoin-7f73f422a49f-powerpc64-linux-gnu.tar.gz
  12d36079b330ec75209219ce58ca580ca5a5eeac64fb7ae424c64e7f3d466ee5  guix-build-7f73f422a49f/output/powerpc64le-linux-gnu/SHA256SUMS.part
  3cef0194569d6fa968e92be1d2189be4f1337272dc213c25b8d4afe6b174310c  guix-build-7f73f422a49f/output/powerpc64le-linux-gnu/bitcoin-7f73f422a49f-powerpc64le-linux-gnu-debug.tar.gz
  a8ff109153926b3240f830c3501977046b6c470b67380a01c55aea2401a1a833  guix-build-7f73f422a49f/output/powerpc64le-linux-gnu/bitcoin-7f73f422a49f-powerpc64le-linux-gnu.tar.gz
  70b3a841bb232fefe27f857ee826ea6a84f59bc781acda608bd6d9385a1ef149  guix-build-7f73f422a49f/output/riscv64-linux-gnu/SHA256SUMS.part
  841a276263877027f256c3b7ad1c5bc3ae3ad4d6a7157690daa947f6809776e2  guix-build-7f73f422a49f/output/riscv64-linux-gnu/bitcoin-7f73f422a49f-riscv64-linux-gnu-debug.tar.gz
  6cce2c36c2a53035d7ee5d285c8b4b99256772c7a9dca1739f0639ecc0bed71d  guix-build-7f73f422a49f/output/riscv64-linux-gnu/bitcoin-7f73f422a49f-riscv64-linux-gnu.tar.gz
  e910b32efebca682cf8bc3994d2c7513b16cdeb6f94cef906efb6629ec53268d  guix-build-7f73f422a49f/output/x86_64-apple-darwin/SHA256SUMS.part
  3a4bc1573d9c576184d69b953ea6a85650d4e15b71503b909ccd4fb8a69ca383  guix-build-7f73f422a49f/output/x86_64-apple-darwin/bitcoin-7f73f422a49f-x86_64-apple-darwin-unsigned.dmg
  60a114ece1d9a274d9f3d80a9633eb22d589213ba53a956f3b1138d7c8f55560  guix-build-7f73f422a49f/output/x86_64-apple-darwin/bitcoin-7f73f422a49f-x86_64-apple-darwin-unsigned.tar.gz
  b6c6eca3e81bfadfed3ddcb7830857c954c8a7b0ff458f14050f4952240ebf27  guix-build-7f73f422a49f/output/x86_64-apple-darwin/bitcoin-7f73f422a49f-x86_64-apple-darwin.tar.gz
  aab972c6f051c379a20eb694128a4df4e3737758fbca3902d28d72cd93e6d33a  guix-build-7f73f422a49f/output/x86_64-linux-gnu/SHA256SUMS.part
  b8e643eeb72cf04664462f815497cbef1443f2e113de14bc93b058d83836c7df  guix-build-7f73f422a49f/output/x86_64-linux-gnu/bitcoin-7f73f422a49f-x86_64-linux-gnu-debug.tar.gz
  3b40fb5f1341cc3b49c9eccc68fc75e1cc7e7d2c6a5664fa2f8f095290e3733a  guix-build-7f73f422a49f/output/x86_64-linux-gnu/bitcoin-7f73f422a49f-x86_64-linux-gnu.tar.gz
  96138d5f591a8ba8589eb81d2c79ee269556996ae93c6a3fc77746e101b60cab  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/SHA256SUMS.part
  6ef2d9436caa550bec7defda1d769bffc2e0fe8f7acf99e2fbcefd2e9b920a64  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/bitcoin-7f73f422a49f-win64-debug.zip
  91c8c3f0aec623f4183c4ebc141816dddb4482509e99812d32298f3e83da920f  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/bitcoin-7f73f422a49f-win64-setup-unsigned.exe
  1de7cd32d74990cfcd4e00428c53a35742b7a480f18ae1bd60dbf91b60400947  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/bitcoin-7f73f422a49f-win64-unsigned.tar.gz
  e4d4ba33bbdd8d9181c8422af31ad6127f3627c327a93cbe8245d7154b5a936c  guix-build-7f73f422a49f/output/x86_64-w64-mingw32/bitcoin-7f73f422a49f-win64.zip
  ```

ACKs for top commit:
  hebasto:
    ACK 7f73f422a4

Tree-SHA512: 8e49bed15b9f92e9905a004c01134ebcef9d7e006c96a8bab1606b1af8a20d495e3aa9846344bac5169fee86fa611dc660cf0bd04dd07f393e5e3f1b12ad4a01
2022-08-04 08:28:13 +01:00
Andrew Chow
bc886fcb31 Change mapWallet to be a std::unordered_map 2022-08-03 15:33:15 -04:00
Andrew Chow
272356024d Change getWalletTxs to return a set instead of a vector
For some reason, the primary consumer of getWalletTxs requires the
transactions to be in hash order when it is processing them. std::map
will iterate in hash order so the transactions end up in that order when
placed into the vector. To ensure this order when mapWallet is no longer
ordered, the vector is replaced with a set which will maintain the hash
order.
2022-08-03 15:33:15 -04:00
Andrew Chow
97532867cf Change mapTxSpends to be a std::unordered_multimap 2022-08-03 15:33:15 -04:00
Andrew Chow
1f798fe85b wallet: Cache SigningProviders
In order to avoid constantly re-deriving the same keys in
DescriptorScriptPubKeyMan, cache the SigningProviders generated inside
of GetSigningProvider.
2022-08-03 15:33:13 -04:00
Carl Dong
0f3a2532c3 validationcaches: Use size_t for sizes
...also move the 0-clamping logic to ApplyArgsManOptions, where it
   belongs.
2022-08-03 12:03:28 -04:00
Carl Dong
41c5201a90 validationcaches: Add and use ValidationCacheSizes
Also:

- Make DEFAULT_MAX_SIG_CACHE_SIZE into constexpr
  DEFAULT_MAX_SIG_CACHE_BYTES to utilize the compile-time integer
  arithmetic overflow checking available to constexpr.
- Fix comment (MiB instead of MB) for DEFAULT_MAX_SIG_CACHE_BYTES.
- Pass in max_size_bytes parameter to InitS*Cache(), modify log line to
  no longer allude to maxsigcachesize being split evenly between the two
  validation caches.
- Fix possible integer truncation and add a comment.

[META] I've kept the integer types as int64_t in order to not introduce
       unintended behaviour changes, in the next commit we will make
       them size_t.
2022-08-03 12:03:27 -04:00
Carl Dong
82d3058539 cuckoocache: Check for uint32 overflow in setup_bytes
This fixes an potential overflow which existed prior to this patchset.

If CuckooCache::cache<Element, Hash>::setup_bytes is called with a
`size_t bytes` which, when divided by sizeof(Element), does not fit into
an uint32_t, the implicit conversion to uint32_t in the call to setup
will result in an overflow.

At least on x86_64, this overflow is possible:

static_assert(std::numeric_limits<size_t>::max() / 32 <= std::numeric_limits<uint32_t>::max());
static_assert(std::numeric_limits<size_t>::max() / 4 <= std::numeric_limits<uint32_t>::max());

This commit detects such cases and signals to callers that the `size_t
bytes` input is too large.
2022-08-03 12:02:32 -04:00
Carl Dong
b370164b31 validationcaches: Abolish arbitrary limit
1. -maxsigcachesize is a DEBUG_ONLY option

2. Almost 7 years has passed since its semantics change in
   830e3f3d02 from "number of entries" to
   "number of mebibytes"

3. A std::new_handler was added to the codebase after the original PR
   which introduced this limit, which will terminate immediately instead
   of causing trouble by being caught somewhere unexpected.
2022-08-03 12:02:31 -04:00
Carl Dong
08dbc6ef72 cuckoocache: Return approximate memory size
Returning the approximate total size eliminates the need for
InitS*Cache() to do nElems*sizeof(uint256). The cuckoocache has a better
idea of this information.
2022-08-03 12:02:31 -04:00
Carl Dong
0dbce4b103 tests: Reduce calls to InitS*Cache()
In src/test/fuzz/script_sigcache.cpp, we should really be setting up a
full working BasicTestingSetup. The initialize_ function is only run
once anyway.

In src/test/txvalidationcache_tests.cpp, the Dersig100Setup inherits
from BasicTestingSetup, which should have already set up a global script
execution cache without the need to explicitly call
InitScriptExecutionCache.
2022-08-03 12:02:31 -04:00
Ryan Ofsky
a23cca56c0 refactor: Replace BResult with util::Result
Rename `BResult` class to `util::Result` and update the class interface to be
more compatible with `std::optional` and with a full-featured result class
implemented in https://github.com/bitcoin/bitcoin/pull/25665. Motivation for
this change is to update existing `BResult` usages now so they don't have to
change later when more features are added in #25665.

This change makes the following improvements originally implemented in #25665:

- More explicit API. Drops potentially misleading `BResult` constructor that
  treats any bilingual string argument as an error. Adds `util::Error`
  constructor so it is never ambiguous when a result is being assigned an error
  or non-error value.

- Better type compatibility. Supports `util::Result<bilingual_str>` return
  values to hold translated messages which are not errors.

- More standard and consistent API. `util::Result` supports most of the same
  operators and methods as `std::optional`. `BResult` had a less familiar
  interface with `HasRes`/`GetObj`/`ReleaseObj` methods. The Result/Res/Obj
  naming was also not internally consistent.

- Better code organization. Puts `src/util/` code in the `util::` namespace so
  naming reflects code organization and it is obvious where the class is coming
  from. Drops "B" from name because it is undocumented what it stands for
  (bilingual?)

- Has unit tests.
2022-08-03 07:33:01 -04:00
fanquake
4a4289e2c9
Merge bitcoin/bitcoin#25772: test: Add missing static to IsStandardTx helper
fad5bc432b test: Add missing static to IsStandardTx helper (MacroFake)

Pull request description:

  Requested in https://github.com/bitcoin/bitcoin/pull/25648#discussion_r935985961

  Also remove line break from the other two helpers.

ACKs for top commit:
  glozow:
    utACK fad5bc432b
  aureleoules:
    ACK fad5bc432b.
  theStack:
    ACK fad5bc432b

Tree-SHA512: 771411e1fb5939a58491ecf719e1929ab0150b0faae2078ac72bd13117f1d4dcffdeed5027bfae53e4336af25a4f1db47d564abc06a5a2c9ec006a9f67bae104
2022-08-03 12:33:01 +01:00
MacroFake
fa2537cf0a
test: Target exact weight in MiniWallet _bulk_tx
Also, replace broad -acceptnonstdtxn=1 with -datacarriersize=100000
2022-08-03 12:02:20 +02:00
MacroFake
fad5bc432b
test: Add missing static to IsStandardTx helper 2022-08-03 11:19:53 +02:00
MacroFake
9155f9b7af
Merge bitcoin/bitcoin#25379: test: use MiniWallet to simplify mempool_package_limits.py tests
f2f6068b69 test: MiniWallet: add `send_self_transfer_chain` to create chain of txns (Andreas Kouloumos)
1d6b438ef0 test: use MiniWallet to simplify mempool_package_limits.py tests (Andreas Kouloumos)

Pull request description:

  While `wallet.py` includes the MiniWallet class and some helper methods, it also includes some methods that have been moved there without having any direct relation with the MiniWallet class. Specifically `make_chain`, `create_child_with_parents` and `create_raw_chain` methods that were extracted from `rpc_packages.py` at f8253d69d6 in order to be used on both `mempool_package_limits.py` and `rpc_packages.py`.

  Since that change, due to the introduction of additional methods in MiniWallet, the functionality of those methods can now be replicated with the existing MiniWallet methods and simultaneously simplify those tests by using the MiniWallet.

  This PR's goals are

  -  to simplify the `mempool_package_limits.py` functional tests with usage of the MiniWallet.
  -  to make progress towards the removal of the `make_chain`, `create_child_with_parents` and `create_raw_chain` methods of `wallet.py`.

  For the purpose of the aforementioned goals, a helper method `MiniWallet.send_self_transfer_chain` is introduced and method `bulk_transaction` has been integrated in `create_self_transfer*` methods using an optional `target_weight` option.

ACKs for top commit:
  MarcoFalke:
    ACK f2f6068b69 👜

Tree-SHA512: 3ddfa0046168cbf7904ec6b1ca233b3fdd4f30db6aefae108b6d7fb69f34ef6fb2cf4fa7cef9473ce1434a0cc8149d236441a685352fef35359a2b7ba0d951eb
2022-08-03 11:12:05 +02:00
glozow
f6fdedf850
Merge bitcoin/bitcoin#25648: refactor: Remove all policy globals
ddddd6913b sort after scripted-diff (MacroFake)
fac812ca83 scripted-diff: Move mempool_args to src/node (MacroFake)
66664384a6 Remove ::g_max_datacarrier_bytes global (MacroFake)
fad0b4fab8 Pass datacarrier setting into IsStandard (MacroFake)
fa2a6b8516 Combine datacarrier globals into one (MacroFake)
fa477d32ee Remove ::GetVirtualTransactionSize() alias (MacroFake)
fa2f6c1a61 Remove ::fIsBareMultisigStd global (MacroFake)
fadc14e4f5 Remove ::dustRelayFee (MacroFake)
fa8a7f01fe Remove ::IsStandardTx(tx, reason) alias (MacroFake)
fa7a9114e5 test: Remove unused cs_main (MacroFake)
fa9cba7afb Remove ::incrementalRelayFee and ::minRelayTxFee globals (MacroFake)
fa148602e6 Remove ::fRequireStandard global (MacroFake)
fa468bdfb6 Return optional error from ApplyArgsManOptions (MacroFake)

Pull request description:

  This change is good because:

  * It moves module-specific init-logic out of the bloated init.cpp
  * It removes a global from validation.cpp and places it into the data structure that needs it (mempool)

ACKs for top commit:
  glozow:
    re ACK ddddd69
  ryanofsky:
    Code review ACK ddddd6913b
  ariard:
    Light Code Review ACK ddddd69

Tree-SHA512: 9de2ce601cfcaa4dfd7d1c92270568895ce8702ccdffb59829fbe9618eab0fd88d738afef33ed66988c66861115e0340e881056bfb71e2aed4af2440bd37eb1e
2022-08-03 09:47:01 +01:00
MacroFake
faab8dceb3
Remove unused SetTip(nullptr) code 2022-08-03 09:21:53 +02:00
Andrew Chow
de3c46c938
Merge bitcoin/bitcoin#25272: wallet: guard and alert about a wallet invalid state during chain sync
9e04cfaa76 test: add coverage for wallet inconsistent state during sync (furszy)
77de5c693f wallet: guard and alert about a wallet invalid state during chain sync (furszy)

Pull request description:

  Follow-up work to my comment in #25239.

  Guarding and alerting the user about a wallet invalid state during chain synchronization.

  #### Explanation
  if the `AddToWallet` tx write fails, the method returns a wtx `nullptr` without removing the recently added transaction from the wallet's map.

  Which makes that `AddToWalletIfInvolvingMe` return false (even when the tx is on the wallet's map already), --> which makes `SyncTransaction` skip the `MarkInputsDirty` call --> which leads to a wallet invalid state where the inputs of this new transaction are not marked dirty, while the transaction that spends them still exist on the in-memory wallet tx map.

  Plus, as we only store the arriving transaction inside `AddToWalletIfInvolvingMe` when we synchronize/scan block/s from the chain and nowhere else, it makes sense to treat the transaction db write error as a runtime error to notify the user about the problem. Otherwise, the user will lose all the not stored transactions after a wallet shutdown (without be able to recover them automatically on the next startup because the chain sync would be above the block where the txs arrived).

  Note:
  On purpose, the first commit adds test coverage for it. Showing how the wallet can end up in an invalid state. The second commit corrects it with the proposed solution.

ACKs for top commit:
  achow101:
    re-ACK 9e04cfaa76
  jonatack:
    ACK 9e04cfaa76

Tree-SHA512: 81f765eca40547d7764833d8ccfae686b67c7728c84271bc00dc51272de643dafc270014079dcc9727b47577ba67b340aeb5f981588b54e69a06abea6958aa96
2022-08-02 14:06:03 -04:00
MacroFake
ddddd6913b
sort after scripted-diff 2022-08-02 15:31:05 +02:00
MacroFake
fac812ca83
scripted-diff: Move mempool_args to src/node
It is part of the node library. Also, it won't be moved to the kernel
lib, as it will be pruned of ArgsManager.

-BEGIN VERIFY SCRIPT-
 # Move module
 git mv src/mempool_args.cpp src/node/
 git mv src/mempool_args.h   src/node/
 # Replacements
 sed -i 's:mempool_args\.h:node/mempool_args.h:g'     $(git grep -l mempool_args)
 sed -i 's:mempool_args\.cpp:node/mempool_args.cpp:g' $(git grep -l mempool_args)
 sed -i 's:MEMPOOL_ARGS_H:NODE_MEMPOOL_ARGS_H:g'      $(git grep -l MEMPOOL_ARGS_H)
-END VERIFY SCRIPT-
2022-08-02 15:31:01 +02:00
MacroFake
66664384a6
Remove ::g_max_datacarrier_bytes global 2022-08-02 15:29:16 +02:00
MacroFake
fad0b4fab8
Pass datacarrier setting into IsStandard 2022-08-02 15:28:30 +02:00
MacroFake
fa2a6b8516
Combine datacarrier globals into one 2022-08-02 15:28:10 +02:00
MacroFake
fa477d32ee
Remove ::GetVirtualTransactionSize() alias
Each alias is only used in one place.
2022-08-02 15:27:20 +02:00
MacroFake
fa2f6c1a61
Remove ::fIsBareMultisigStd global 2022-08-02 15:27:19 +02:00
MacroFake
fadc14e4f5
Remove ::dustRelayFee 2022-08-02 15:26:49 +02:00
MacroFake
fa8a7f01fe
Remove ::IsStandardTx(tx, reason) alias
Apart from tests, it is only used in one place, so there is no need for
an alias.
2022-08-02 15:26:24 +02:00
MacroFake
fa7a9114e5
test: Remove unused cs_main 2022-08-02 15:25:10 +02:00