No description
Find a file
glozow c577f5afb4 Merge bitcoin/bitcoin#30394: net: fix race condition in self-connect detection
ELEMENTS: cherry-picked before ElementsProject/elements#1472 for ease of
merge

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
(cherry picked from commit 35dddbccf1)
2025-07-18 11:20:21 +02:00
.github ci: Bump actions/checkout version 2023-09-04 15:25:41 +01:00
.tx qt: Bump Transifex slug for 26.x 2023-09-01 07:49:31 +01:00
build-aux/m4 build: Bump minimum supported GCC to g++-9 2023-05-18 12:24:40 +02:00
build_msvc Merge 8aa77a77e6 into merged_master (Bitcoin PR bitcoin/bitcoin#28168) 2025-07-03 12:29:20 +02:00
ci Merge 260445bee8 into merged_master (Bitcoin PR bitcoin/bitcoin#28359) 2025-07-05 20:33:35 +02:00
contrib Merge cb6ad6ae09 into merged_master (Elements PR #1463) 2025-07-10 11:40:37 +02:00
depends Merge 8371914604 into merged_master (Bitcoin PR bitcoin/bitcoin#28337) 2025-07-05 15:42:54 +02:00
doc Merge 5175ae482e into merged_master (Bitcoin PR bitcoin/bitcoin#28354) 2025-07-05 16:06:42 +02:00
share Merge 35b01e8504 into merged_master (Bitcoin PR bitcoin/bitcoin#27676) 2025-06-28 09:59:07 +02:00
src Merge bitcoin/bitcoin#30394: net: fix race condition in self-connect detection 2025-07-18 11:20:21 +02:00
test Merge 67cd78dbc2 into merged_master (Elements PR #1451) 2025-07-10 12:09:50 +02:00
.cirrus.yml Merge df5af114df into merged_master (Bitcoin PR bitcoin/bitcoin#28353) 2025-07-05 17:15:08 +02:00
.editorconfig ci: Drop AppVeyor CI integration 2021-09-07 06:12:53 +03:00
.gitattributes Separate protocol versioning from clientversion 2014-10-29 00:24:40 -04:00
.gitignore Merge 8035b5c80d into merged_master (Bitcoin PR bitcoin/bitcoin#25369) 2024-09-10 20:10:06 +00:00
.python-version ci: Use DOCKER_BUILDKIT for lint image 2023-07-16 13:18:18 +02:00
.style.yapf Update .style.yapf 2023-06-01 23:35:10 +05:30
autogen.sh build: make sure we can overwrite config.{guess,sub} 2023-06-13 14:58:43 +02:00
configure.ac Merge 38357edd42 into merged_master (Elements PR #1452) 2025-07-10 10:13:10 +02:00
CONTRIBUTING.md Merge e157b98640 into merged_master (Bitcoin PR bitcoin/bitcoin#25165) 2024-09-06 18:49:28 +00:00
COPYING doc: Update license year range to 2023 2022-12-24 11:40:16 +01:00
INSTALL.md doc: Added hyperlink for doc/build 2021-09-09 19:53:12 +05:30
libbitcoinconsensus.pc.in build: remove libcrypto as internal dependency in libbitcoinconsensus.pc 2019-11-19 15:03:44 +01:00
Makefile.am Merge 368010a308 into merged_master (Elements PR #1390) 2025-02-11 15:06:18 +02:00
README.md Update README.md 2025-07-07 10:24:29 +03:00
SECURITY.md docs: update security.md 2025-03-24 09:09:02 +02:00

Elements Project blockchain platform

Release

https://elementsproject.org

This is the integration and staging tree for the Elements blockchain platform, a collection of feature experiments and extensions to the Bitcoin protocol. This platform enables anyone to build their own businesses or networks pegged to Bitcoin as a sidechain or run as a standalone blockchain with arbitrary asset tokens.

Modes

Elements supports a few different pre-set chains for syncing. Note though some are intended for QA and debugging only:

  • Liquid mode: elementsd -chain=liquidv1 (syncs with Liquid network)
  • Bitcoin mainnet mode: elementsd -chain=main (not intended to be run for commerce)
  • Bitcoin testnet mode: elementsd -chain=testnet3
  • Bitcoin regtest mode: elementsd -chain=regtest
  • Elements custom chains: Any other -chain= argument. It has regtest-like default parameters that can be over-ridden by the user by a rich set of start-up options.

Confidential Assets

The latest feature in the Elements blockchain platform is Confidential Assets, the ability to issue multiple assets on a blockchain where asset identifiers and amounts are blinded yet auditable through the use of applied cryptography.

Features of the Elements blockchain platform

Compared to Bitcoin itself, it adds the following features:

Previous elements that have been integrated into Bitcoin:

  • Segregated Witness
  • Relative Lock Time

Elements deferred for additional research and standardization:

Additional RPC commands and parameters:

The CI (Continuous Integration) systems make sure that every pull request is built for Windows, Linux, and macOS, and that unit/sanity tests are run automatically.

License

Elements is released under the terms of the MIT license. See COPYING for more information or see http://opensource.org/licenses/MIT.

What is the Elements Project?

Elements is an open source, sidechain-capable blockchain platform. It also allows experiments to more rapidly bring technical innovation to the Bitcoin ecosystem.

Learn more on the Elements Project website

https://github.com/ElementsProject/elementsproject.github.io

Secure Reporting

See our vulnerability reporting guide