14695 Commits

Author SHA1 Message Date
Patrick Lodder
8eb52142a7
policy: reduce MAX_PEER_TX_ANNOUNCEMENTS
Maintaining up to 100000 INVs per peer is excessive. A Dogecoin
Core node will never send more than 7 invs per second.

Backported from: de11b0a4
Original Author: Pieter Wuille <pieter@wuille.net>
2024-07-14 21:57:47 -04:00
Patrick Lodder
3a700cde38
net: use txrequest for transaction request logic
The major changes are:

* Announcements from outbound (and whitelisted) peers are now
  always preferred over those from inbound peers. This used to be
  the case for the first request (by delaying the first request
  from inbound peers), and a bias after. The 2s delay for requests
  from inbound peers still exists, but after that, if viable
  outbound peers remain for any given transaction, they will
  always be tried first.

* No more hard cap of 100 in flight transactions per peer, as
  there is less need for it (memory usage is linear in the number
  of announcements, but independent from the number in flight,
  and CPU usage isn't affected by it). Furthermore, if only one
  peer announces a transaction, and it has over 100 in flight and
  requestable already, we still want to request it from them. The
  cap is replaced with an additional 2s delay (possibly combined
  with the existing 2s delays for inbound connections).

Backported from: 242d1647
                 173a1d2d
Original Author: Pieter Wuille <pieter@wuille.net>

Conflicts:
  - replaced GenTx with uint256 because no segwit
  - removed additional 2s penalty for non-segwit peers
  - used int64_t instead of std::chrono::microseconds per utiltime
  - implemented TxRequest as g_txrequest instead of as a member of
    PeerManager, which we don't have
  - removed the Dogecoin-specific strict max inflight test
  - make exceptions for whitelisted nodes as there is no fine-
    grained permission system
2024-07-14 21:57:16 -04:00
Patrick Lodder
4bc8099741
Add txrequest module
This adds a new module that defines TxRequestTracker, a data
structure that maintains all information about transaction
requests, and coordinates requests.

Backported from: da3b8fde
                 3c7fe0e5
                 fd9a0060

Original Author: Pieter Wuille <pieter@wuille.net>

Conflicts:
- replaced GenTx with uint256 because no segwit
- used int64_t instead of std::chrono::microseconds per utiltime
- removed wtxid tests
2024-07-14 21:55:39 -04:00
Patrick Lodder
4add9776c2
add constant contructors for uint256 2024-07-14 21:45:03 -04:00
Patrick Lodder
38c3f67833
util: add c++14-style MakeUnique for use with c++11
Backported from: 86179897
Original author: practicalswift <practicalswift@users.noreply.github.com>
2024-07-14 21:45:02 -04:00
chromatic
2fcaf1310c
Merge pull request #3576 from patricklodder/bugfix/maskpow
validation: avoid masking of difficulty adjustment errors
2024-07-14 17:04:30 -07:00
chromatic
5788fb8f15
Merge pull request #3575 from patricklodder/perf/orphantx-interrupt
net: improve orphan processing
2024-07-14 11:21:11 -07:00
chromatic
7c004f4bd5
Merge pull request #3574 from patricklodder/qa/p2p-getdata
qa: add getdata test
2024-07-14 11:20:57 -07:00
chromatic
fea6eeaec5
Merge pull request #3572 from patricklodder/qa/fix-walletnotify
qa: fix walletnotify test
2024-07-14 11:20:44 -07:00
chromatic
cf2c9bac23
Merge pull request #3313 from patricklodder/1.14.7-fix-lock-debugging
refactor: fix undefined behavior and cleanup lock debugging code
2024-07-14 08:29:49 -07:00
Old Dip Tracker
777a84f8f7
Merge pull request #3565 from qlpqlp/1.15.0-dev-pt_PT-Readme-Translation
Added pt_PT Readme
2024-07-13 03:37:14 +02:00
Patrick Lodder
3a1519a901
qa: fix walletnotify test
1. Allow more time for notifications to be delivered under load
2. Assure that in a non-hostile reorg the tracked transaction
   isn't mined prematurely by mining 80-bytes blocks
3. Test all 4 messages for the doublespend scenario at once to
   not error out when the conflict races the new transaction

This allows us to more strictly test the reorg behavior while
reducing race issues
2024-07-10 22:09:00 -04:00
inevitable360
872b61ade3 Updated typos
Updated typos thanks to @vhs94
Added pt_PT Readme

Co-Authored-By: Victor Hugo Ramos <victor.santana@juntossomosmais.com.pt>
2024-07-09 22:38:56 +01:00
chromatic
d099258fdc
Merge pull request #3568 from patricklodder/net/inv-buffer
p2p: reduce amount of getheaders sent per inv
2024-07-07 16:55:23 -07:00
chromatic
63d2d8a2d7
Merge pull request #3567 from patricklodder/bugfix/timedata
bugfix: avoid the use of abs in time data
2024-07-07 16:55:10 -07:00
Patrick Lodder
215fc33d08
validation: avoid masking of difficulty adjustment errors
Currently difficulty adjustment violations are not reported for
chains that branch off before the last checkpoint. Change this
by moving the checkpoint check after the difficulty check.

Backported from: 85c82b50
Original Author: Pieter Wuille <pieter.wuille@gmail.com>
2024-07-03 17:31:22 -04:00
Pieter Wuille
9f2ab9ed6c
Interrupt orphan processing after every transaction
This makes orphan processing work like handling getdata messages:
After every actual transaction validation attempt, interrupt
processing to deal with messages arriving from other peers.

Cherry-picked from: 866c8058a
2024-07-03 16:30:01 -04:00
Patrick Lodder
0e4df473f6
p2p: simplify orphan processing
Reduces complexity in processing of orphans when receiving tx
messages over p2p. and isolate the functionality in its own
function ProcessOrphanTx

Backported from: 9453018f
                 6e051f3d
Original Author: Pieter Wuille <pieter.wuille@gmail.com>
2024-07-03 16:29:48 -04:00
Patrick Lodder
cedbbeba96
p2p: enforce cs_main lock when requesting headers 2024-07-03 14:01:44 -04:00
Patrick Lodder
3e64e6f226
p2p: Only send a getheaders for one block in an INV
Headers-first is the primary method of announcement on the network.
If a node fell back sending blocks by inv, it's probably for a
re-org. The final block hash provided should be the highest, so
send a getheaders and then fetch the blocks we need to catch up.

Backported from: 74673663
Original Author: John Newbery <john@johnnewbery.com>
2024-07-03 14:01:36 -04:00
Patrick Lodder
846812cdde
cleanup: remove BOOST_FOREACH from timedata.cpp 2024-07-03 12:35:17 -04:00
Pieter Wuille
f88f9ddee2
Avoid the use of abs64 in timedata
Cherry-picked from: d1292f25
2024-07-03 12:16:46 -04:00
Patrick Lodder
f68998b0b1
qa: add getdata test
Tests that an invalid GETDATA doesn't prevent processing of future
messages

Backported from: 2f032556
Co-authored-by: Amiti Uttarwar <amiti@uttarwar.org>
Co-authored-by: John Newbery <john@johnnewbery.com>
2024-07-03 11:21:58 -04:00
Old Dip Tracker
962b0205f4
Merge pull request #3194 from thisiskeanyvy/master
Translation and addition of the README.md file in French
2024-06-29 16:30:52 +02:00
thisiskeanyvy
a9e6621935
Translation and addition of the README.md file in French (fr/README.md) 2024-06-28 00:04:47 +02:00
chromatic
2a16b17825
Merge pull request #3459 from patricklodder/1.15.0-organize-intl-docs
Organize internationalized documentation
2024-06-25 17:12:30 -07:00
Patrick Lodder
d021d75fd5
add missing <list> include in validation.h
This omission was masked by including boost/unordered_map.hpp prior
to boost 1.85.0.
2024-06-25 10:03:41 -04:00
Patrick Lodder
95554c3e5c
fs: for boost 1.74 and up, use c++17 compatible copy_options
In boost 1.74.0, boost::filesystem adapted path::copy_option enum
to be the same as the enum in the fs::path from c++17, which is
now called copy_options, and its member "overwrite_if_exists"
is now called "overwrite_existing". In boost 1.85, the deprecated
copy_option enum is fully removed.

Because Dogecoin Core currently supports boost 1.60 and up,
conditionally implement the new enum based on the boost version
that is built against.
2024-06-25 10:03:41 -04:00
Patrick Lodder
37909dd1b9
fs: don't use boost convenience functions
fs::basename() and fs::extension() have been removed in boost 1.85,
use path::stem() and path::extension() instead. This is safe since
boost 1.44 (boost::filesystem version 3), and the minimum supported
boost version for Dogecoin Core is 1.60.
2024-06-25 10:03:40 -04:00
Patrick Lodder
1d84f4f853
fs: use path::is_absolute() instead of path::is_complete()
path::is_complete() has been deprecated since boost::filesystem
version 3, which was introduced with boost 1.44.0, and removed in
1.85.0. The minimum supported boost version has been 1.60.0 since
Dogecoin Core release v1.14.3, so this can be safely replaced.
2024-06-25 10:03:40 -04:00
chromatic
fdf534c133
Merge pull request #3561 from patricklodder/compat/std17
build: allow c++17 standard to be used for compilation
2024-06-25 06:59:28 -07:00
Old Dip Tracker
929078f842
Merge pull request #3514 from chromatic/1.15.0-rename-qa-dogecoin-constants
Change Bitcoin to Dogecoin in qa/ files
2024-06-25 02:55:06 +02:00
Patrick Lodder
09f92efee3
doc: hierarchical link international docs
Removes crosslinking of documentation in favor of a link hierarchy:

- main README.md links to doc/intl/README.md
- doc/intl/README.md links to individual translated documents

This reduces conflicts between translations.
2024-06-24 13:29:19 -04:00
Patrick Lodder
268a412a9b
doc: move internationalized docs 2024-06-24 13:29:18 -04:00
Patrick Lodder
83af7b3b6e
doc: Organize documentation internationalization 2024-06-24 13:29:18 -04:00
chromatic
e2b3c7eabb
Merge pull request #3393 from patricklodder/1.14.7-blockstats-dust
Add dust metrics to getblockstats
2024-06-23 18:11:16 -07:00
Patrick Lodder
4196748d27
build: allow c++17 standard to be used for compilation
This will allow compiling with the c++17 standard, which on some
distributions (macOS, FreeBSD) is required when using system
dependencies.

The ./configure script will now allow specifying --enable-c++17 to
enable c++17. The default remains c++11, and c++14 also remains
available.
2024-06-23 17:51:52 -04:00
chromatic
1cabf8dfb1 Change Bitcoin to Dogecoin in qa/ files
This changes all occurrences of `BITCOIN` to `DOGECOIN` and `bitcoind`
to `dogecoind` in all files in `qa/`. It does not change copyright
information.
2024-06-22 09:07:27 -07:00
chromatic
5bbb1fa1d8
Merge pull request #3557 from patricklodder/doc/security
doc: add security policy
2024-06-22 08:58:12 -07:00
chromatic
2e37a3a1ba
Merge pull request #3560 from patricklodder/compat/shuffle
random: use std::shuffle instead of std::random_shuffle
2024-06-22 00:13:50 -07:00
Patrick Lodder
caa79bd1a1
random: use std::shuffle instead of std::random_shuffle
random_shuffle is deprecated since c++11 and removed in c++17. Use
the shuffle function instead, now that we have a standardized
interface available on FastRandomContext.

This enables c++17 compilation
2024-06-20 10:32:21 -04:00
Old Dip Tracker
da22f3312d
Merge pull request #3521 from xanimo/1.15.0-dev-next-random-pre-14955
backport: random.h/.cpp cherry-picks
2024-06-20 15:20:35 +02:00
Pieter Wuille
47b48521bb
Make FastRandomContext support standard C++11 RNG interface
This makes it possible to plug it into the various standard C++11 random
distribution algorithms and other functions like std::shuffle.

Cherry-picked from: 1ec1602a4549f6b68586cead8eff701bceb624f5
2024-06-18 16:38:09 -07:00
Aaron Clauson
3606c85c7d
Minimal code changes to allow msvc compilation.
-add msvc ssize_t definition in compat.h
-change NUM_OS_RANDOM_BYTES to int from ssize_t in random.h

Includes squashed commit: f7dc99244c8e78dbd0196f612690efcc449c37dc

Inspired by: fbf327b13868861c2877c5754caf5a9816f2603c
2024-06-18 16:06:52 -07:00
Dag Robole
90d1972d81
Fix resource leak
Cherry-picked from: a8ae0b252a2007568e77f5aca1c7fa3ec5941b72
2024-06-18 15:19:51 -07:00
Pieter Wuille
60bd389823
Use rdrand as entropy source on supported platforms
Includes squashed commits:
5155d1101eb4fc9d4d797b583bb29f71807bd10b
a9e82f6512662054f64ed2bde590b2bb0831fc9d
674848fe1c43fb88870cf5ba16fca4e2524da793

Cherry-picked from: cb24c8539d1098d1a61605b452ecfa11a693320d
2024-06-18 15:19:25 -07:00
Pieter Wuille
23bc7a072e
Use sanity check timestamps as entropy
Cherry-picked from: 2c0a6f157da3c6bb3b0a1e77f003caf0d9cb9d6c
2024-06-18 14:37:52 -07:00
Pieter Wuille
4a3c6ddc11
Test that GetPerformanceCounter() increments 2024-06-18 14:37:51 -07:00
Pieter Wuille
930acbfe49
Use hardware timestamps in RNG seeding 2024-06-18 14:37:44 -07:00
Old Dip Tracker
5ac4640a48
Merge pull request #3511 from xanimo/1.15.0-dev-91e3035-10321
backport: Use FastRandomContext for all tests
2024-06-15 15:26:16 +02:00