Commit graph

4655 commits

Author SHA1 Message Date
Pablo Greco
afb63a43a6 Merge branch 'master' into elem-23.3.1-rc2 2025-10-07 07:53:22 -07:00
Byron Hambly
b379bb2465
Merge pull request #1459 from ElementsProject/simplicity
Update Simplicity integeration
2025-07-17 17:04:48 +02:00
Pablo Greco
38cbe9282d Merge branch 'master' into elem-23.3.1-rc1 2025-07-14 16:35:03 -07:00
glozow
8db506f406 Merge bitcoin/bitcoin#30394: net: fix race condition in self-connect detection
16bd283b3a Reapply "test: p2p: check that connecting to ourself leads to disconnect" (Sebastian Falbesoner)
0dbcd4c148 net: prevent sending messages in `NetEventsInterface::InitializeNode` (Sebastian Falbesoner)
66673f1c13 net: fix race condition in self-connect detection (Sebastian Falbesoner)

Pull request description:

  This PR fixes a recently discovered race condition in the self-connect detection (see #30362 and #30368).

  Initiating an outbound network connection currently involves the following steps after the socket connection is established (see [`CConnman::OpenNetworkConnection`](bd5d1688b4/src/net.cpp (L2923-L2930)) method):
  1. set up node state
  2. queue VERSION message (both steps 1 and 2 happen in [`InitializeNode`](bd5d1688b4/src/net_processing.cpp (L1662-L1683)))
  3. add new node to vector `m_nodes`

  If we connect to ourself, it can happen that the sent VERSION message (step 2) is received and processed locally *before* the node object is added to the connection manager's `m_nodes` vector (step 3). In this case, the self-connect remains undiscovered, as the detection doesn't find the outbound peer in `m_nodes` yet (see `CConnman::CheckIncomingNonce`).

  Fix this by swapping the order of 2. and 3., by taking the `PushNodeVersion` call out of `InitializeNode` and doing that in the `SendMessages` method instead, which is only called for `CNode` instances in `m_nodes`.

  The temporarily reverted test introduced in #30362 is readded. Fixes #30368.

  Thanks go to vasild, mzumsande and dergoegge for suggestions on how to fix this (see https://github.com/bitcoin/bitcoin/issues/30368#issuecomment-2200625017 ff. and https://github.com/bitcoin/bitcoin/pull/30394#discussion_r1668290789).

ACKs for top commit:
  naiyoma:
    tested ACK [https://github.com/bitcoin/bitcoin/pull/30394/commits/16bd283b3ad05daa41259a062aee0fc05b463fa6](https://github.com/bitcoin/bitcoin/pull/30394/commits/16bd283b3ad05daa41259a062aee0fc05b463fa6),  built and tested locally,  test passes successfully.
  mzumsande:
    ACK 16bd283b3a
  tdb3:
    ACK 16bd283b3a
  glozow:
    ACK 16bd283b3a
  dergoegge:
    ACK 16bd283b3a

Tree-SHA512: 5b8aced6cda8deb38d4cd3fe4980b8af505d37ffa0925afaa734c5d81efe9d490dc48a42e1d0d45dd2961c0e1172a3d5b6582ae9a2d642f2592a17fbdc184445
2025-07-08 13:53:58 +01:00
Russell O'Connor
0a0a69f315 Update Simplicity integeration
This Simplicity update has
- renamed a few types
- moved some files around
- added a minCost parameter, currently set to 0
- added a new error code
2025-06-24 11:38:08 -04:00
Ava Chow
285f81b88b Merge bitcoin/bitcoin#30568: addrman: change internal id counting to int64_t
51f7668d31 addrman: change nid_type from int to int64_t (Martin Zumsande)
051ba3290e addrman, refactor: introduce user-defined type for internal nId (Martin Zumsande)

Pull request description:

  With `nIdCount` being incremented for each addr received, an attacker could cause an overflow in the past, see https://bitcoincore.org/en/2024/07/31/disclose-addrman-int-overflow/
  Even though that attack was made infeasible indirectly by addr rate-limiting (PR #22387), to be on the safe side and prevent any regressions change the `nId`s used internally to `int64_t`.
  This is being done by first introducing a user-defined type for `nId`s in the first commit, and then updating it to `int64_t` (thanks sipa for help with this!).

  Note that `nId` is only used internally, it is not part of the serialization, so `peers.dat` should not be affected by this.

  I assume that the only reason this was not done in the past is to not draw attention to this previously undisclosed issue.

ACKs for top commit:
  naumenkogs:
    ACK 51f7668d31
  stratospher:
    ACK 51f7668d31. I think it's a good change to make the nId space large(64 bits) so that the nId values are distinct.
  achow101:
    ACK 51f7668d31

Tree-SHA512: 68d4b8b0269a01a9544bedfa7c1348ffde00a288537e4c8bf2b88372ac7d96c4566a44dd6b06285f2fcf31b4f9336761e3bca7253fbc20db5e0d04e887156224
2025-05-01 15:32:12 +01:00
Pablo Greco
4a51d82d4b Merge branch 'master' into elem-23.3.0rc6 2025-03-26 05:17:41 -07:00
Pablo Greco
b63f7ab9b5
Merge pull request #1433 from kilrau/reduce-default-dust-relay-fee
feat: reduce default dust relay fee
2025-03-13 08:00:07 -07:00
Byron Hambly
721d55b9f3
test: use bitcoin default dustrelayfee in transaction_tests 2025-03-13 09:38:10 +02:00
Martin Zumsande
33c7e40662 p2p: always set nTime for self-advertisements
If we self-advertised to an inbound peer with the address they gave us,
nTime was left default-initialized, so that our peer wouldn't relay it
any further along.

Github-Pull: #25314
Rebased-From: 99b9e5f3a9
2025-03-10 16:22:03 +00:00
Ryan Ofsky
7e7dbadf44 test: Add tests for GetArg methods / settings.json type coercion
Just add tests. No changes to application behavior. Tests will be
updated in the next commit changing & improving current behavior.

Include a Qt test for GUI startup crash reported by Rspigler in
https://github.com/bitcoin/bitcoin/issues/24457 caused by GetArg
behavior that happens if settings.json contains an integer value for any
of the configuration options which GUI settings can currently clash with
(-dbcache, -par, -spendzeroconfchange, -signer, -upnp, -natpmp, -listen,
-server, -proxy, -proxy, -onion, -onion, -lang, and -prune).

Github-Pull: bitcoin/bitcoin#24498
Rebased-From: 84b0973e35
2025-03-10 11:49:53 +00:00
Pablo Greco
54fa255b85 Merge branch 'master' into elem-23.3.0rc5 2025-03-04 08:53:38 -08:00
Russell O'Connor
3a80782963 Avoid double free in simplicity pointer when copying PrecomputedTransactionData
We cannot put a raw pointer into a class that has a default copy constructor.
2025-03-03 17:35:07 -05:00
Pablo Greco
69b18d4bef Merge branch 'master' into elem-23.3.0rc4 2025-02-18 06:42:25 -08:00
Jon Atack
7f56623441 Put lock logging behind DEBUG_LOCKCONTENTION preprocessor directive 2025-02-15 00:22:57 -08:00
Andrew Poelstra
a2d24eff9e
fuzz: remove dead code from simplicity_tx.cpp 2025-02-13 23:09:51 +00:00
Andrew Poelstra
69c241592f
fuzz: update simplicity_tx target to hit simplicity CMR error 2025-02-13 23:08:57 +00:00
Andrew Poelstra
3fe5d12c57
fuzz: simplicity: use zero CMR for invalid programs
When we have an invalid program, use a zero CMR and create a valid
control block/taptweak. Otherwise we fail to hit the Simplicity logic at
all with bad programs.

#
# You are committing on CAMUS
#

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch 2024-12--simple-fuzz
# Changes to be committed:
#	modified:   src/test/fuzz/simplicity_tx.cpp
#
# Untracked files:
#	reduced-corpus/
#	run-fuzz-merge-dir-CPzq/
#	run-fuzz-merge-dir-sscf/
#
2025-02-11 16:12:29 +00:00
Andrew Poelstra
eea423e3d6
fuzz: add second simplicity fuzz test
The first fuzztest takes a Simplicity program and a transaction and
directly calls the Simplicity interpreter with some context cobbled
together from the transaction. It also tries messing with the budget
and computes AMRs to check that the AMR-check works, even though on
the blockchain AMRs are never used.

It also attempts mangling programs to directly fuzz the parser, type
inference and CMR checking.

THIS test, on the other hand, takes a transaction, looks for Simplicity
programs (or witnesses which look like Simplicity programs), computes
their CMRs to produce a correct corresponding scriptPubKey, creates
scriptchecks, and executes them. This should do an end-to-end coverage
of the whole Simplicity consensus logic, including all the new branches
in interpreter.cpp.

To produce seeds for this, I have a a local fuzz target which uses
rust-simplicity and rust-elements to produce programs, deep Taproot trees,
and transactions. I run this to get high coverage, then dump the
resulting complete transactions to disk, where they can be used as
seeds for this test.
2025-02-11 16:12:29 +00:00
Andrew Poelstra
a87e4cf70b
simplicity: rewrite fuzz target
This fuzz target takes its seeds in a simple and well-defined format: a
four-byte LE budget, then a transaction, Simplicity program and witness,
each prefixed by a four-byte LE length. The fuzz target extracts any
additional randomness it needs from the txid of the first input of the
transaction, since this data is not interpreted in any other way we
therefore won't confuse the fuzzer.

The reason for this design, rather than a more typical "just query the
fuzzer when you need stuff", is to make it possible to fairly easily
generate test vectors from sources other than this fuzz test. (For
example, I have an alternate target which uses Rust code to generate
well-formed Simplicity programs, which quickly gets high coverage at the
expense of being an unmaintainable mess.)

This commit includes a .c file with a small function to comute the AMR
of a program. This is needed to pass a correct AMR to the Simplicity
interpreter, to exercise all the AMR-checking paths. In practice this is
not really necessary; Elements passes NULL to disable these AMR checks.
2025-02-11 16:12:28 +00:00
Byron Hambly
52642b1afd
simplicity: add fuzz target 2025-02-11 16:12:28 +00:00
Hennadii Stepanov
f8b1bb7070 build: Fix Boost.Process test for Boost 1.78
(cherry picked from commit 532c64a726)
2025-02-11 06:14:51 -08:00
Andrew Poelstra
363c5101c2
fuzz: change int to unsigned in witness_program
Avoids a signed/unsigned integer conversion.
2025-02-11 04:04:25 +00:00
Andrew Poelstra
86d740b5eb
fuzz: fix crash on null pointer in witness_program target 2025-02-11 02:53:44 +00:00
Pablo Greco
45fc81bfcc Merge commit '06b72ec82c' into elem-23.3.0rc3 2025-02-09 07:19:00 -08:00
Andrew Poelstra
ff6482fc29
fuzz: add SelectParams to rbf.cpp
We cannot fuzz RBF (or do anything mempool-related, really) without
chainparams. This has been true since 2019 at least. I suspect this fuzz
test has never really been run.
2025-02-06 21:31:47 +00:00
Russell O'Connor
31d94775b3 Update to latest Simplicity
The main difference is that there is now explicit simplicity deallocation functions to go with the allocation functions in the API.
There are some minor changes to error message text.
The deserialization code is now automatically generated.
The are some other minor internal changes.
2025-02-04 12:14:25 -05:00
Pablo Greco
e213060a12 Merge branch 'master-nochainstate' into elem-23.3.0-rc1 2024-11-18 04:28:02 -08:00
Christian Lewe
508836028e Asset tests: Check script error
Compare the expected script error, parsed from JSON, with the actual
error that VerifyScript returns. If the JSON does not include an
expected error, then skip this check.
2024-10-07 14:39:10 -04:00
Russell O'Connor
4ca2411795 Asset tests: Parse Elements script errors
Take the existing function to parse script errors and extend it to parse
Elements errors. SCRIPT_ERR_ERROR_COUNT is not included because it is a
pseudo error.
2024-10-07 14:39:10 -04:00
Russell O'Connor
bcd508f409 Add Simplicity Deployment structure 2024-10-07 14:39:10 -04:00
Pablo Greco
996e71f546 Merge branch 'master' into elem-23.2.1 2023-11-22 05:06:52 -08:00
James Dorfman
08010b821f test: fix failing schnorr sig creation in bip341_keypath_test_vectors 2023-11-09 06:31:49 +00:00
James Dorfman
b1f1b184fd Merge 0567787f5e (Bitcoin PR bitcoin/bitcoin#26921) 2023-09-25 20:44:20 +00:00
James Dorfman
fbb5257424 Merge 313ea18e5e (Bitcoin PR bitcoin/bitcoin#25799) 2023-09-24 05:26:23 +00:00
James Dorfman
d9f4560cbe Merge dabac355c8 (Bitcoin PR bitcoin/bitcoin#24843) 2023-09-24 02:33:09 +00:00
James Dorfman
07d701997b Merge c243e08351 (Bitcoin PR bitcoin/bitcoin#24512) 2023-09-24 01:33:13 +00:00
James Dorfman
81b5b69fea Merge 430808ab13 into merged_master (Bitcoin PR bitcoin/bitcoin#24511) 2023-09-22 16:00:26 +00:00
James Dorfman
82a2555ad3
build: fix further ASAN issues in CI 2023-09-08 09:24:32 +02:00
Byron Hambly
69e09aa2ea
fix: comment out unused variable until tests are fixed 2023-09-07 16:06:03 +02:00
Byron Hambly
54660d006f
ci: fix unused member function warning in checkqueue.cpp 2023-09-07 13:32:06 +02:00
Byron Hambly
3911e7e2b3
build: fix compilation warnings 2023-09-01 16:39:08 +02:00
Byron Hambly
941940e946
Fix unnecessary pvChecks arg introduced in df8f97d63b in merge of Bitcoin PR bitcoin/bitcoin#23157 2023-08-08 10:10:00 +02:00
James Dorfman
265ba04f55 Add extra optimization initally left out during the merge of bitcoin/bitcoin#23114 in 81d5607ec8 2023-07-21 01:58:35 +00:00
James Dorfman
2ab19eb125 Fix failing unit tests left over from the merge of bitcoin/bitcoin#24343 in eef2269720 2023-07-21 01:34:39 +00:00
Byron Hambly
8dbf577aaa Merge cfc10a5dd6 into merged_master (Elements PR #1232) 2023-07-03 13:48:57 +00:00
Byron Hambly
6f90a02548 Merge 30308cc380 into merged_master (Bitcoin PR bitcoin/bitcoin#20196) 2023-07-03 11:17:52 +00:00
Byron Hambly
b4dbe6d445 Merge 08bcfa2767 into merged_master (Bitcoin PR bitcoin/bitcoin#24375) 2023-07-03 10:26:26 +00:00
Byron Hambly
5b079a5ef1 Merge 8b6cd42c62 into merged_master (Bitcoin PR bitcoin/bitcoin#24165) 2023-07-03 10:16:01 +00:00
Byron Hambly
1dc6ad6ea9 Merge ba11eb354b into merged_master (Bitcoin PR bitcoin/bitcoin#23542) 2023-07-03 09:44:18 +00:00