Commit Graph

12668 Commits

Author SHA1 Message Date
Alexander Block
98ff8feaf2 Revert "Invoke DisconnectNodes from getconnectioncount/getpeerinfo/getnetworkinfo"
This reverts commit 2f1b3a34ab.
2020-04-22 06:32:32 +02:00
Alexander Block
ccb1f84b3a Revert "Invoke DisconnectNodes right before checking for duplicate connections"
This reverts commit 76d7b17dcd.
2020-04-22 06:32:32 +02:00
Alexander Block
33bfaffbea Don't return nodes with fDisconnect=true in FindNode
FindNode is only interested in active connections, especially when called
from OpenNetworkConnection. Connections which are about to get disconnected
and removed should be treated as if they are not existent anymore, as
otherwise there is a small race between disconnecting and reconnecting
nodes, causing OpenNetworkConnection to return early.
2020-04-22 06:32:32 +02:00
Alexander Block
d516e3d1e0 Advance iterator in CConnman::DisconnectNodes when lingering 2020-04-21 08:16:49 +02:00
PastaPastaPasta
087d98477b
Merge bitcoin#10387: Eventually connect to NODE_NETWORK_LIMITED peers (#3417)
* Merge #10387: Eventually connect to NODE_NETWORK_LIMITED peers

eb91835 Add setter for g_initial_block_download_completed (Jonas Schnelli)
3f56df5 [QA] add NODE_NETWORK_LIMITED address relay and sync test (Jonas Schnelli)
158e1a6 [QA] fix mininode CAddress ser/deser (Jonas Schnelli)
fa999af [QA] Allow addrman loopback tests (add debug option -addrmantest) (Jonas Schnelli)
6fe57bd Connect to peers signaling NODE_NETWORK_LIMITED when out-of-IBD (Jonas Schnelli)
31c45a9 Accept addresses with NODE_NETWORK_LIMITED flag (Jonas Schnelli)

Pull request description:

  Eventually connect to peers signalling NODE_NETWORK_LIMITED if we are out of IBD.
  Accept and relay NODE_NETWORK_LIMITED peers in addrman.

Tree-SHA512: 8a238fc97f767f81cae1866d6cc061390f23a72af4a711d2f7158c77f876017986abb371d213d1c84019eef7be4ca951e8e6f83fda36769c4e1a1d763f787037
Signed-off-by: Pasta <pasta@dashboost.org>

# Conflicts:
#	src/init.cpp
#	src/protocol.h
#	test/functional/node_network_limited.py

* remove witness

Signed-off-by: Pasta <pasta@dashboost.org>

* fix test expecting witness flag

Signed-off-by: Pasta <pasta@dashboost.org>

Co-authored-by: Wladimir J. van der Laan <laanwj@gmail.com>
2020-04-19 16:21:47 +03:00
UdjinM6
d663f48085
Lower SELECT_TIMEOUT_MILLISECONDS for USE_WAKEUP_PIPE case (#3444) 2020-04-19 14:48:44 +02:00
Alexander Block
f5f4ccbf24
Merge pull request #3432 from codablock/pr_refactor_sockethandler
Refactor/Prepare CConnman for upcoming epoll support
2020-04-19 14:27:59 +02:00
10xcryptodev
93aa640af8
Fix #3248: use blue logo for Traditional theme (#3441)
* #3248 use blue logo for Traditional theme

* review tab space and blue logo name

* change file order and spaces

* Revert "review tab space and blue logo name"

This reverts commit 31e0c3d0e9.
2020-04-19 14:05:37 +03:00
PastaPastaPasta
d804a753af
Merge bitcoin#13134: net: Add option -enablebip61 to configure sending of BIP61 notifications (#3414)
* Merge #13134: net: Add option `-enablebip61` to configure sending of BIP61 notifications

87fe292d897e09e176ac7e254144466c319cc9ac doc: Mention disabling BIP61 in bips.md (Wladimir J. van der Laan)
fe16dd8226d924f44432c5b5014aa49ff45c82ff net: Add option `-enablebip61` to configure sending of BIP61 notifications (Wladimir J. van der Laan)

Pull request description:

  This commit adds a boolean option `-peersendreject`, defaulting to `1`, that can be used to disable the sending of [BIP61](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki) `reject` messages. This functionality has been requested for various reasons:

  - security (DoS): reject messages can reveal internal state that can be used to target certain resources such as the mempool more easily.

  - bandwidth: a typical node sends lots of reject messages; this counts against upstream bandwidth. Also the reject messages tend to be larger than the message that was rejected.

  On the other hand, reject messages can be useful while developing client software (I found them indispensable while creating bitcoin-submittx), as well as for our own test cases, so whatever the default becomes on the long run, IMO the functionality should be retained as option. But that's a discussion for later, for now it's simply a node operator decision.

  Also adds a RPC test that checks the functionality.

Tree-SHA512: 9488cc53e13cd8e5c6f8eb472a44309572673405c1d1438c3488f627fae622c95e2198bde5ed7d29e56b948e2918bf1920239e9f865889f4c37c097c37a4d7a9

* 0.17 -> 0.16

Signed-off-by: Pasta <pasta@dashboost.org>

* tx1 -> base_ tx fixing 13134

Signed-off-by: Pasta <pasta@dashboost.org>

* move added bip61 message checking up

Signed-off-by: Pasta <pasta@dashboost.org>

* Dash specific code, only send reject messages if bip61 is enabled

Signed-off-by: Pasta <pasta@dashboost.org>

* Fix invalidtxrequest.py

Co-authored-by: Wladimir J. van der Laan <laanwj@gmail.com>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
2020-04-19 14:04:31 +03:00
PastaPastaPasta
d06597a421
[Trivial] Adjust some text in mnauth.cpp (#3413)
* trivial text changes

Signed-off-by: Pasta <pasta@dashboost.org>

* don't refer to node as he / him

Signed-off-by: Pasta <pasta@dashboost.org>
2020-04-19 14:03:59 +03:00
PastaPastaPasta
3d175aa2e5
Merge bitcoin#13151: net: Serve blocks directly from disk when possible (#3408)
* Merge #13151: net: Serve blocks directly from disk when possible

0bf431870e45d8e20c4671e51a782ebf97b75fac net: Serve blocks directly from disk when possible (Wladimir J. van der Laan)

Pull request description:

  In `ProcessGetBlockData`, send the block data directly from disk if type MSG_WITNESS_BLOCK is requested. This is a valid shortcut as the on-disk format matches the network format.

  This is expected to increase performance because a deserialization and subsequent serialization roundtrip is avoided.

Tree-SHA512: 9a9500b4c1354eaae1a6f1c6ef2416c1c1985029852589266f3a70e808f6c7482c135e9ab251a527566935378ab7c32dba4ed43ba5451e802d8e72b77d1ba472
Signed-off-by: Pasta <pasta@dashboost.org>

# Conflicts:
#	src/net_processing.cpp
#	src/validation.cpp

* fix extra bracket

Signed-off-by: Pasta <pasta@dashboost.org>

* remove read raw block from disk functions

Signed-off-by: Pasta <pasta@dashboost.org>

* correct `if (pblock)` scope

Signed-off-by: Pasta <pasta@dashboost.org>

Co-authored-by: Wladimir J. van der Laan <laanwj@gmail.com>
2020-04-19 14:03:27 +03:00
Alexander Block
47af42a69c AddRef/Release when adding/erasing CNode* entries to/from mapNodesWithDataToSend 2020-04-18 21:05:42 +02:00
Alexander Block
e4be48bc7e Invoke select/poll with 0 timeout in case we know that there is work 2020-04-18 21:05:42 +02:00
Alexander Block
e263edd573 Still invoke ReleaseNodeVector when interrupted 2020-04-18 21:05:42 +02:00
Alexander Block
5c9f548640 Track which nodes are able to receive/send data
Instead of selecting every socket in every SocketHandler iteration, we will
now track which nodes are known to have pending receivable data and/or
have empty send buffers.

Each time recv fails to fill a whole receive buffer, fHasRecvData is
set to false so that the socket is added to the receive select set
in the next iteration. When that socket is signalled through select/poll,
fHasRecvData is set to true again and remains true until a future recv
fails.

Each time send fails to send a full message, fCanSendData is set to false
so that the socket is added to the send select set in the next iteration.

At the same time, nodes which have pending messages to send are tracked
in mapNodesWithDataToSend, so that SocketHandler knows for which nodes
SocketSendData must be invoked.
2020-04-18 21:05:42 +02:00
Alexander Block
0e8e22aa16 Track SOCKET to CNode* mapping 2020-04-18 21:05:42 +02:00
Alexander Block
94fc4fb027 Track size of vSendMsg in atomic nSendMsgSize
This allows us to check for pending messages without locking cs_vSend
2020-04-18 21:05:15 +02:00
Alexander Block
1621e82e95 Move socket receiving into SocketRecvData 2020-04-18 21:05:15 +02:00
Alexander Block
50fc3c5cce Make SocketSendData non-const 2020-04-18 21:05:15 +02:00
Alexander Block
176d625860 Sleep longer when USE_WAKEUP_PIPE is enabled 2020-04-18 12:41:25 +02:00
Alexander Block
97ee3015e1 Wakeup select/poll when new nodes are added 2020-04-18 12:41:25 +02:00
Alexander Block
2610e718cd
Don't delete MN list snapshots and diffs from DB when reorgs take place (#3435)
Deleting these from the DB means that future calls to GetListForBlock  for
the reorged/orphaned block will return an empty MN list. At the same time,
GetListForBlock will add the empty list to the internal MN list cache.

This behavior is not acceptable for multiple reasons:
1. A caller of GetListForBlock should always expect a valid list if that
   block was once in the best chain. We might otherwise run into strange
   behavior (e.g. GetAllQuorumMembers returning zero members)
2. If the chain is ever reorged back to the initial chain (that was
   orphaned), GetListForBlock should not return the invalid/empty cache
   entry for the previously orphaned block.

This should also fix test failures seen on Gitlab CI
2020-04-18 12:35:46 +02:00
Alexander Block
6d83b0a053
Merge pull request #3431 from codablock/pr_socketevents_arg
Make socketevents mode (poll vs select) configurable via parameter
2020-04-18 12:34:34 +02:00
PastaPastaPasta
97742a14d8
Merge bitcoin#10762: [wallet] Remove Wallet dependencies from init.cpp (#3412)
* Merge #10762: [wallet] Remove Wallet dependencies from init.cpp

c7ec524 [wallet] Add dummy wallet init class (John Newbery)
49baa4a [wallet] Use global g_wallet_init_interface to init/destroy the wallet. (John Newbery)
caaf972 [wallet] Create wallet init interface. (John Newbery)
5fb5421 [wallet] Move wallet init functions into WalletInit class. (John Newbery)

Pull request description:

  This continues the work of #7965. This PR, along with several others, would remove the remaining dependencies from libbitcoin_server.a on libbitcoin_wallet.a.

  To create the interface, I've just translated all the old init.cpp wallet function calls into an interface class. I've not done any thinking about whether it makes sense to change that interface by combining/splitting those calls. This is a purely internal interface, so there's no problem in changing it later.

Tree-SHA512: 32ea57615229c33fd1a7f2f29ebc11bf30337685f7211baffa899823ef74b65dcbf068289c557a161c5afffb51fdc38a2ee8180720371f64d433b12b0615cf3f
Signed-off-by: Pasta <pasta@dashboost.org>

# Conflicts:
#	src/dashd.cpp
#	src/init.cpp

* a couple of fixes

Signed-off-by: Pasta <pasta@dashboost.org>

* move privatesend launch options help into wallet/init.cpp

Signed-off-by: Pasta <pasta@dashboost.org>

* remove ENABLE_WALLET for AutoLockMasternodeCollaterals

Signed-off-by: Pasta <pasta@dashboost.org>

* move a wallet param interaction into wallet/init.cpp

Signed-off-by: Pasta <pasta@dashboost.org>

* move PrivateSend init to wallet/init.h

Signed-off-by: Pasta <pasta@dashboost.org>

* move privatesend scheduler into wallet.cpp

Signed-off-by: Pasta <pasta@dashboost.org>

* remove unneeded import

Signed-off-by: Pasta <pasta@dashboost.org>

* move KeePass init and InitAutoBackup into wallet/init.cpp

Signed-off-by: Pasta <pasta@dashboost.org>

* Fix 10762

Changes:
- Should backup wallets before trying to verify them. This is because `-salvagewallet` is very dangerous and can actually corrupt wallets making them irreparably broken.
- No reason to make `schedulePrivateSendClientMaintenance` a part of the wallet (interface) because `privateSendClient` is a global object not tied to the wallet directly atm.
- Should not run client-side mixing on masternodes.
- Fix `InitAutoBackup` signature in `DummyWalletInit`.

* remove boost dependancy in wallet/init.cpp

Signed-off-by: pasta <pasta@dashboost.org>

Co-authored-by: Wladimir J. van der Laan <laanwj@gmail.com>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
2020-04-18 12:59:40 +03:00
UdjinM6
20a0f3a51f
Merge pull request #3407 from PastaPastaPasta/backports-0.16-pr17
Backports 0.16 pr17
2020-04-18 12:57:51 +03:00
Alexander Block
ea81ab5af7 Make socketevents mode (poll vs select) configurable via parameter
Instead of selecting the mode at compile time
2020-04-17 22:09:52 +02:00
Alexander Block
9a8caf0986
Remove fix for fNetworkActive vs OpenNetworkConnection race (#3430)
This is not needed anymore due to bitcoin#13212 being backported
2020-04-17 21:46:58 +02:00
Alexander Block
96ed9fae39
Merge pull request #3429 from codablock/pr_remove_optimistic_send
Fix flushing of rejects before disconnecting
2020-04-17 21:46:36 +02:00
Alexander Block
0cb385c567
Merge pull request #3428 from codablock/pr_better_conn_logging
Improve network connections related logging
2020-04-17 21:46:17 +02:00
Alexander Block
08b57c198b Add some linger time between fDisconnect=true and actually closing the socket 2020-04-17 12:42:30 +02:00
Alexander Block
4117579e8f Honor fLogIPs in OpenNetworkConnection 2020-04-17 12:21:00 +02:00
Alexander Block
d8bbdee7c4 Remove support for optimistic send
This was only used in only one remaining place and only to ensure that
reject messages are sent before closing sockets. This is solved by the
previous commit now.
2020-04-17 11:32:18 +02:00
Alexander Block
926beb3406 Handle sockets one last time before closing sockets 2020-04-17 11:10:08 +02:00
Alexander Block
6ca78b601e Introduce NETCONN logging category and NET_NETCONN to log in NET and NETCONN
This allows easier debugging of connection issues, as it produces much less
chatter in the logs when only -debug=mnconn is given.
2020-04-17 08:52:57 +02:00
Alexander Block
71f1181d21 Improve connection logging in net.cpp 2020-04-17 08:52:48 +02:00
Alexander Block
2f1b3a34ab Invoke DisconnectNodes from getconnectioncount/getpeerinfo/getnetworkinfo
This ensures disconnected nodes don't appear for callers
2020-04-17 07:53:07 +02:00
Alexander Block
76d7b17dcd Invoke DisconnectNodes right before checking for duplicate connections 2020-04-17 07:53:07 +02:00
Alexander Block
30e4afae00 Only run DisconnectNodes once per second
This change is quite invasive for integration tests, as they all expect
connections to be dropped ASAP. The next commits all try to fix the upcoming
issues.
2020-04-17 07:53:07 +02:00
Alexander Block
ee995ef02a
Merge pull request #3422 from codablock/pr_speedups7
Implement more reliable wait_for_masternode_probes in test framework
2020-04-17 07:52:34 +02:00
Alexander Block
1e30054b9e
Merge pull request #3420 from codablock/pr_speedups5
Avoid calling SendMessages (and others) for all nodes all the time
2020-04-17 07:34:23 +02:00
Alexander Block
8aa85c084b
Merge pull request #3419 from codablock/pr_deterministic_connections
Deterministically choose which peers to drop on duplicate MNAUTH
2020-04-17 07:33:46 +02:00
Alexander Block
6c1262f1c8 Add "outbound" field to "quorum dkgstatus" connections 2020-04-16 18:18:41 +02:00
Alexander Block
65fb8bc454 Only run InactivityCheck once per second 2020-04-16 18:08:53 +02:00
Alexander Block
9e57c35e82 Don't even try to send/receive blocks for fMasternode connections
This avoids a lot of overhead in SendMessages, which is called very often.
2020-04-16 18:06:59 +02:00
Alexander Block
a808ff3330 Temporary hack for unnecessary invocations of Broadcast signal 2020-04-16 18:06:59 +02:00
Alexander Block
24ead62905 Only call SendMessages when ProcessMessages did some work or when some time passed
Invoking SendMessages for hundreds of peers while we know that there is no
work to do give a lot of overhead on the message handler thread.
2020-04-16 18:06:59 +02:00
Alexander Block
79f0bb1033
Fix crash in validateaddress (#3418)
The only reason this was not detected in integration tests is that
mapHdPubKeys was empty.
2020-04-16 18:01:40 +02:00
Alexander Block
c65d5612de Deterministically choose which peers to drop on duplicate MNAUTH 2020-04-16 18:00:03 +02:00
Pieter Wuille
782ee1a3cf
Merge #10677: RPC Docs: addmultisigaddress is intended for non-watchonly addresses
73041c3c99 RPC Docs: addmultisigaddress is intended for non-watchonly addresses (Gregory Sanders)

Pull request description:

  Spent a couple hours debugging why my p2sh watchonly funds were not appearing in various accounting calls when address was imported via `addmultisigaddress`.

Tree-SHA512: 0673e276e5ca8cdc4c9357bd835a29bd5a994520a78179600944932c700917142930288bf179f5e89b0874beaf1a88bd70129f3a297a46df42a10bab847017bb
2020-04-16 10:24:22 -05:00
MarcoFalke
a13e2f4355
Merge #13123: net: Add Clang thread safety annotations for guarded variables in the networking code
4894133dc5 Add missing lock in CNode::copyStats(...) (practicalswift)
b312cd7707 Add missing locking annotations (practicalswift)

Pull request description:

  Add Clang thread safety annotations for variables guarded by:
  * `cs_addrLocal`
  * `cs_addrName`
  * `cs_feeFilter`
  * `cs_filter`
  * `cs_hSocket`
  * `cs_inventory`
  * `cs_mapLocalHost`
  * `cs_most_recent_block`
  * `cs_proxyInfos`
  * `cs_sendProcessing`
  * `cs_setBanned`
  * `cs_SubVer`
  * `cs_vOneShots`
  * `cs_vProcessMsg`
  * `cs_vRecv`
  * `cs_vSend`

  Changed files:
  * `src/net.{cpp,h}`
  * `src/netbase.cpp`

Tree-SHA512: 319a1574a07d766e81fab19b9cfdcf8b5f0b175034ebef220cd406f1672b4ef2c57f5c456c623456ca7a1f96308de69c73535792e9e4c34b848b55fd4f35fc95
2020-04-16 10:24:22 -05:00