Commit graph

82 commits

Author SHA1 Message Date
ivanlele
1b9f7a1eea
Merge a60d5702fd into merged_master (Bitcoin PR bitcoin/bitcoin#31486) 2026-04-09 09:46:17 +00:00
ivanlele
7517ec9007
Merge b2af068825 into merged_master (Bitcoin PR bitcoin/bitcoin#30708) 2026-04-06 12:41:14 +00:00
ivanlele
bdc30de302
Merge 5ea335a97f into merged_master (Bitcoin PR bitcoin/bitcoin#30793) 2026-03-27 14:08:02 +00:00
Tom Trevethan
6de20f06c3 Merge ff827a8f46 into merged_master (Bitcoin PR bitcoin/bitcoin#30407) 2026-03-09 00:10:47 +00:00
ikripaka
006073614d
Merge 011a895a82 into merged_master (Bitcoin PR bitcoin/bitcoin#29015) 2026-02-27 22:51:31 +00:00
Byron Hambly
cbf5635798
Merge 3e691258d8 into merged_master (Bitcoin PR bitcoin/bitcoin#28349) 2025-11-11 15:40:10 +02:00
Byron Hambly
352fbd36dc
Merge ffb021612b into merged_master (Bitcoin PR bitcoin/bitcoin#28451) 2025-11-11 11:44:59 +02:00
Byron Hambly
8cf8bd5564
Merge 108462139b into merged_master (Bitcoin PR bitcoin/bitcoin#28438) 2025-11-10 13:45:17 +02:00
Byron Hambly
54f0d405f3
Merge f1f3f2d9cc into merged_master (Bitcoin PR bitcoin/bitcoin#28815) 2025-11-06 10:32:53 +02:00
Byron Hambly
ce47e10720
Merge 01bd9d7b99 into merged_master (Bitcoin PR bitcoin/bitcoin#28523) 2025-08-06 15:09:56 +02:00
Byron Hambly
7fc909ab98
Merge e7b0004b37 into merged_master (Bitcoin PR bitcoin/bitcoin#27596)
ELEMENTS TODO assumeutxo for liquidv1
2025-08-06 14:33:15 +02:00
Byron Hambly
859684d18d
Merge ff564c75e7 into merged_master (Bitcoin PR bitcoin/bitcoin#27511) 2025-08-04 09:27:12 +02:00
Byron Hambly
a35749fd61 Merge d98180a969 into merged_master (Bitcoin PR bitcoin/bitcoin#28419) 2025-07-18 14:49:55 +02:00
Byron Hambly
30dc7b1d1f Merge c9273f68f6 into merged_master (Bitcoin PR bitcoin/bitcoin#28287) 2025-07-05 15:42:12 +02:00
Byron Hambly
4cc9a6cc6b Merge cd43a8444b into merged_master (Bitcoin PR bitcoin/bitcoin#27460) 2025-07-04 09:05:08 +02:00
Byron Hambly
fa2773bc8b Merge bf03fed2c7 into merged_master (Bitcoin PR bitcoin/bitcoin#28065) 2025-07-01 13:28:53 +02:00
Byron Hambly
3ec70a3871 Merge 3d51f7c9a8 into merged_master (Bitcoin PR bitcoin/bitcoin#27932) 2025-06-30 14:36:39 +02:00
Byron Hambly
6b602eff8d Merge 1af72e728d into merged_master (Bitcoin PR bitcoin/bitcoin#27501) 2025-06-27 11:42:46 +02:00
Byron Hambly
b572f70be2 Merge 22139f6e83 into merged_master (Bitcoin PR bitcoin/bitcoin#25796)
Includes a FIXME in rpc_psbt.py
2025-06-23 11:26:49 +02:00
Byron Hambly
a40347d7f5 Merge e0a70c5b4f into merged_master (Bitcoin PR bitcoin/bitcoin#27605) 2025-06-20 09:50:22 +02:00
Byron Hambly
cbd7b123d9 Merge fc06881f13 into merged_master (Bitcoin PR bitcoin/bitcoin#27491) 2025-06-19 16:08:36 +02:00
Byron Hambly
aad0872c6a Merge c63c8a1590 into merged_master (Bitcoin PR bitcoin/bitcoin#27464) 2025-05-09 12:00:14 +02:00
Tom Trevethan
1435fb334b Merge 79e007d1d6 into merged_master (Bitcoin PR bitcoin/bitcoin#25296) 2025-04-04 13:36:08 +00:00
Byron Hambly
b4405ba453 Merge e9262ea32a into merged_master (Bitcoin PR bitcoin/bitcoin#26750) 2025-03-31 16:37:52 +02:00
Byron Hambly
ca0a68b350
Merge UP TO 551c8e9526 into merged_master (UP TO bitcoin/bitcoin#26349)
Includes FIXMEs for a few functional tests
2025-02-05 09:50:17 +02:00
MarcoFalke
fa7809aeab
fuzz: Add missing SeedRandomStateForTest(SeedRand::ZEROS) 2024-12-13 14:22:25 +01:00
James O'Beirne
811f76f3a5 rpc: add getdescriptoractivity 2024-11-26 20:47:08 -05:00
James Dorfman
9e9b73df05 Merge 6adae27f8c into merged_master (Bitcoin PR bitcoin/bitcoin#24836) 2024-10-08 18:34:54 +00:00
tdb3
34a9c10e8c
rpc: add getorphantxs
Adds an rpc to obtain data about the
transactions currently in the orphanage.
Hidden and marked as experimental
2024-10-02 18:23:18 -04:00
James Dorfman
bf065f9c8a Merge 3ba6dd6f4b into merged_master (Bitcoin PR bitcoin/bitcoin#24408) 2024-09-06 16:21:04 +00:00
MarcoFalke
fa690c8e53
test: [refactor] Pass TestOpts 2024-07-08 16:11:15 +02:00
Ryan Ofsky
4f74c59334 util: Move util/string.h functions to util namespace
There are no changes to behavior. Changes in this commit are all additions, and
are easiest to review using "git diff -U0 --word-diff-regex=." options.

Motivation for this change is to keep util functions with really generic names
like "Split" and "Join" out of the global namespace so it is easier to see
where these functions are defined, and so they don't interfere with function
overloading, especially since the util library is a dependency of the kernel
library and intended to be used with external code.
2024-05-16 10:16:08 -05:00
MarcoFalke
fa6e50d6c7
fuzz: Use C++20 starts_with in rpc.cpp 2023-12-07 11:06:16 +01:00
MarcoFalke
fae00fe9c2
Remove unused CDataStream 2023-11-30 11:27:54 +01:00
Anthony Towns
6e9e4e6130 Use ParamsWrapper for witness serialization 2023-11-14 08:45:30 +10:00
MarcoFalke
fabb5046a7
fuzz: Avoid timeout and bloat in fuzz targets
Also, fix iwyu
2023-11-08 09:51:54 +01:00
Andrew Chow
01bd9d7b99
Merge bitcoin/bitcoin#28523: rpc: add hidden getrawaddrman RPC to list addrman table entries
352d5eb2a9 test: getrawaddrman RPC (0xb10c)
da384a286b rpc: getrawaddrman for addrman entries (0xb10c)

Pull request description:

  Inspired by `getaddrmaninfo` (#27511), this adds a hidden/test-only `getrawaddrman` RPC. The RPC returns information on all addresses in the address manager new and tried tables. Addrman table contents can be used in tests and during development.

  The RPC result encodes the `bucket` and `position`, the internal location of addresses in the tables, in the address object's string key. This allows users to choose to consume or to ignore the location information. If the internals of the address manager implementation change, the location encoding might change too.

  ```
  getrawaddrman

  EXPERIMENTAL warning: this call may be changed in future releases.

  Returns information on all address manager entries for the new and tried tables.

  Result:
  {                                  (json object)
    "table" : {                      (json object) buckets with addresses in the address manager table ( new, tried )
      "bucket/position" : {          (json object) the location in the address manager table (<bucket>/<position>)
        "address" : "str",           (string) The address of the node
        "port" : n,                  (numeric) The port number of the node
        "network" : "str",           (string) The network (ipv4, ipv6, onion, i2p, cjdns) of the address
        "services" : n,              (numeric) The services offered by the node
        "time" : xxx,                (numeric) The UNIX epoch time when the node was last seen
        "source" : "str",            (string) The address that relayed the address to us
        "source_network" : "str"     (string) The network (ipv4, ipv6, onion, i2p, cjdns) of the source address
      },
      ...
    },
    ...
  }

  Examples:
  > bitcoin-cli getrawaddrman
  > curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawaddrman", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:8332/
  ```

ACKs for top commit:
  willcl-ark:
    reACK 352d5eb2a9
  amitiuttarwar:
    reACK 352d5eb2a9
  stratospher:
    reACK 352d5eb.
  achow101:
    ACK 352d5eb2a9

Tree-SHA512: cc462666b5c709617c66b0e3e9a17c4c81e9e295f91bdd9572492d1cb6466fc9b6d48ee805ebe82f9f16010798370effe5c8f4db15065b8c7c0d8637675d615e
2023-10-03 11:38:20 -04:00
0xb10c
da384a286b
rpc: getrawaddrman for addrman entries
Exposing address manager table entries in a hidden RPC allows to introspect
addrman tables in tests and during development.

As response JSON object the following FORMAT1 is choosen:
{
  "table": {
    "<bucket>/<position>": { "address": "..", "port": .., ... },
    "<bucket>/<position>": { "address": "..", "port": .., ... },
    "<bucket>/<position>": { "address": "..", "port": .., ... },
    ...
  }
}

An alternative would be FORMAT2
{
  "table": {
    "bucket": {
      "position": { "address": "..", "port": .., ... },
      "position": { "address": "..", "port": .., ... },
      ..
    },
    "bucket": {
      "position": { "address": "..", "port": .., ... },
      ..
    },
  }
}

FORMAT1 and FORMAT2 have different encodings for the location of the
address in the address manager. While FORMAT2 might be easier to process
for downstream tools, it also mimics internal addrman mappings, which
might change at some point. Users not interested in the address location
can ignore the location key. They don't have to adapt to a new RPC
response format, when the internal addrman layout changes. Additionally,
FORMAT1 is also slightly easier to to iterate in downstream tools. The
RPC response-building implemenation complexcity is lower with FORMAT1
as we can more easily build a "<bucket>/<position>" key than a multiple
"bucket" objects with multiple "position" objects (FORMAT2).
2023-10-02 15:34:28 +02:00
James O'Beirne
0f64bac603 rpc: add getchainstates
Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
2023-09-30 06:41:23 -04:00
James O'Beirne
ce585a9a15 rpc: add loadtxoutset
Co-authored-by: Sebastian Falbesoner <sebastian.falbesoner@gmail.com>
2023-09-30 06:41:23 -04:00
Andrew Chow
ff564c75e7
Merge bitcoin/bitcoin#27511: rpc: Add test-only RPC getaddrmaninfo for new/tried table address count
28bac81a34 test: add functional test for getaddrmaninfo (stratospher)
c8eb8dae51 rpc: Introduce getaddrmaninfo for count of addresses stored in new/tried table (stratospher)

Pull request description:

  implements https://github.com/bitcoin/bitcoin/issues/26907. split off from #26988 to keep RPC, CLI discussions separate.

  This PR introduces a new RPC `getaddrmaninfo`which returns the count of addresses in the new/tried table of a node's addrman broken down by network type. This would be useful for users who want to see the distribution of addresses from different networks across new/tried table in the addrman.

  ```jsx
  $ getaddrmaninfo

  Result:
  {                   (json object) json object with network type as keys
    "network" : {     (json object) The network (ipv4, ipv6, onion, i2p, cjdns)
      "new" : n,      (numeric) number of addresses in new table
      "tried" : n,    (numeric) number of addresses in tried table
      "total" : n     (numeric) total number of addresses in both new/tried tables from a network
    },
    ...
  }
  ```

  ### additional context from [original PR](https://github.com/bitcoin/bitcoin/pull/26988)

  1. network coverage tests were skipped because there’s a small chance that addresses from different networks could hash to the same bucket and cause count of different network addresses in the tests to fail. see https://github.com/bitcoin/bitcoin/pull/26988#discussion_r1137596851.
  2. #26988 uses this RPC in -addrinfo CLI. Slight preference for keeping the RPC hidden since this info will mostly be useful to only super users. see https://github.com/bitcoin/bitcoin/pull/26988#discussion_r1173964808.

ACKs for top commit:
  0xB10C:
    ACK 28bac81a34
  willcl-ark:
    reACK 28bac81a34
  achow101:
    ACK 28bac81a34
  brunoerg:
    reACK 28bac81a34
  theStack:
    Code-review ACK 28bac81a34

Tree-SHA512: 346390167e1ebed7ca5c79328ea452633736aff8b7feefea77460e04d4489059334ae78a3f757f32f5fb7827b309d7186bebab3c3760b3dfb016d564a647371a
2023-09-20 08:25:20 -04:00
stratospher
c8eb8dae51 rpc: Introduce getaddrmaninfo for count of addresses stored in new/tried table 2023-09-19 16:02:55 +05:30
Sebastian Falbesoner
583af18fd1 fuzz: introduce and use ConsumePrivateKey helper 2023-09-06 13:59:12 +02:00
Martin Zumsande
a9a1d69391 rpc: add test-only sendmsgtopeer rpc
This rpc can be used when we want a node to send a message, but
cannot use a python P2P object, for example for testing of low-level
net transport behavior.
2023-08-22 13:28:15 -04:00
MarcoFalke
fa776e61cd
Add importmempool RPC
test_importmempool_union contributed by glozow

Co-authored-by: glozow <gloriajzhao@gmail.com>
2023-08-07 11:33:34 +02:00
MarcoFalke
fa6dfaaf45
scripted-diff: Use new FUZZ_TARGET macro everywhere
-BEGIN VERIFY SCRIPT-

  ren() { sed --regexp-extended -i "s|$1|$2|g" $(git grep -l --extended-regexp "$1"); }

  # Replace FUZZ_TARGET_INIT
  ren 'FUZZ_TARGET_INIT\((.+), (.+)\)' 'FUZZ_TARGET(\1, .init = \2)'

  # Delete unused FUZZ_TARGET_INIT
  sed -i -e '37,39d' src/test/fuzz/fuzz.h

-END VERIFY SCRIPT-
2023-07-13 20:37:14 +02:00
Byron Hambly
5931d7d47c Merge d4e92d8436 into merged_master (Bitcoin PR bitcoin/bitcoin#23508) 2023-06-29 11:46:17 +00:00
Byron Hambly
a992ccaac2 Merge 196b459920 into merged_master (Bitcoin PR bitcoin/bitcoin#23438) 2023-06-29 08:37:35 +00:00
MarcoFalke
fae7c50d20
test: Run fuzz tests on macOS
Also, fix a few bugs:

* Error: RPC command "enumeratesigners" not found in RPC_COMMANDS_SAFE_FOR_FUZZING or RPC_COMMANDS_NOT_SAFE_FOR_FUZZING. Please update test/fuzz/rpc.cpp.
* in run_once: ...format(" ".join(result.args), ... TypeError: sequence item 2: expected str instance, PosixPath found
2023-06-22 13:54:17 +02:00
Andrew Chow
1af72e728d
Merge bitcoin/bitcoin#27501: mempool / rpc: add getprioritisedtransactions, delete a mapDeltas entry when delta==0
67b7fecacd [mempool] clear mapDeltas entry if prioritisetransaction sets delta to 0 (glozow)
c1061acb9d [functional test] prioritisation is not removed during replacement and expiry (glozow)
0e5874f0b0 [functional test] getprioritisedtransactions RPC (glozow)
99f8046829 [rpc] add getprioritisedtransactions (glozow)
9e9ca36c80 [mempool] add GetPrioritisedTransactions (glozow)

Pull request description:

  Add an RPC to get prioritised transactions (also tells you whether the tx is in mempool or not), helping users clean up `mapDeltas` manually. When `CTxMemPool::PrioritiseTransaction` sets a delta to 0, remove the entry from `mapDeltas`.

  Motivation / Background
  - `mapDeltas` entries are never removed from mapDeltas except when the tx is mined in a block or conflicted.
  - Mostly it is a feature to allow `prioritisetransaction` for a tx that isn't in the mempool {yet, anymore}. A user can may resbumit a tx and it retains its priority, or mark a tx as "definitely accept" before it is seen.
  - Since #8448, `mapDeltas` is persisted to mempool.dat and loaded on restart. This is also good, otherwise we lose prioritisation on restart.
  - Note the removal due to block/conflict is only done when `removeForBlock` is called, i.e. when the block is received. If you load a mempool.dat containing `mapDeltas` with transactions that were mined already (e.g. the file was saved prior to the last few blocks), you don't delete them.
  - Related: #4818 and #6464.
  - There is no way to query the node for not-in-mempool `mapDeltas`. If you add a priority and forget what the value was, the only way to get that information is to inspect mempool.dat.
  - Calling `prioritisetransaction` with an inverse value does not remove it from `mapDeltas`, it just sets the value to 0. It disappears on a restart (`LoadMempool` checks if delta is 0), but that might not happen for a while.

  Added together, if a user calls `prioritisetransaction` very regularly and not all those transactions get mined/conflicted, `mapDeltas` might keep lots of entries of delta=0 around. A user should clean up the not-in-mempool prioritisations, but that's currently difficult without keeping track of what those txids/amounts are.

ACKs for top commit:
  achow101:
    ACK 67b7fecacd
  theStack:
    Code-review ACK 67b7fecacd
  instagibbs:
    code review ACK 67b7fecacd
  ajtowns:
    ACK 67b7fecacd code review only, some nits

Tree-SHA512: 9df48b622ef27f33db1a2748f682bb3f16abe8172fcb7ac3c1a3e1654121ffb9b31aeaad5570c4162261f7e2ff5b5912ddc61a1b8beac0e9f346a86f5952260a
2023-06-07 03:29:05 -04:00