Commit Graph

14996 Commits

Author SHA1 Message Date
Jack Grigg d1c6647934 qa: Point univalue update checker at correct upstream
Bitcoin Core doesn't actually use tags for managing versions of their
forked dependencies, so we should separately rework this logic for all
of the subtree-managed dependencies. But this at least prevents false
positives.
2021-04-03 17:15:24 +13:00
Homu c96986452a Auto merge of #4988 - nuttycom:feature/3722-feature_flags, r=str4d
Add feature flagging infrastructure to consensus parameters.

Factors out feature flagging bits from #4480

Fixes #3722
2021-04-03 01:29:50 +00:00
Homu 49ffee3f20 Auto merge of #5012 - LarryRuane:upstream-locking-0.15, r=str4d
Bitcoin 0.15 locking PRs

These are locking changes from upstream (bitcoin core) release 0.15, oldest to newest (when merged to the master branch).

Each commit also includes a reference both to the PR and the upstream commit.

- bitcoin/bitcoin#9497
2021-04-02 23:59:56 +00:00
Kris Nuttycombe c4305fc6f3 CurrentTxVersionInfo should return SPROUT_MIN_CURRENT_VERSION pre-overwinter. 2021-04-02 17:04:02 -06:00
Jeremy Rubin a314cdba56 Add CheckQueue Tests
zcash: cherry picked from commit 96c7f2c3458950061b057fcd3daaf47b57e6bac7
zcash: https://github.com/bitcoin/bitcoin/pull/9497
2021-04-02 12:22:48 -06:00
Jeremy Rubin 8e67b36e86 Fix CCheckQueue IsIdle (potential) race condition and remove dangerous constructors.
zcash: cherry picked from commit e2073424fd5a185781750347fbfbb0c108ef66fd
zcash: https://github.com/bitcoin/bitcoin/pull/9497
2021-04-02 12:22:48 -06:00
Kris Nuttycombe a901b57d98 Address review comments. 2021-04-02 09:45:09 -06:00
Kris Nuttycombe 041d363232 Merge remote-tracking branch 'upstream/master' into feature/3722-feature_flags 2021-04-02 09:02:16 -06:00
Anthony Towns 1dd379a6eb doc: clarify CRollingBloomFilter size estimate
(cherry picked from commit d9141a0002bb508b2e94e206a1bd28ef8f97ffde)
2021-04-02 16:06:43 +13:00
Sebastian Falbesoner 3e0ef7ffbb net: remove is{Empty,Full} flags from CBloomFilter, clarify CVE fix
(cherry picked from commit 1ad8ea2b73134bdd8d6b50704a019d47ad2191d8)

Zcash: Excluding change to src/test/fuzz/bloom_filter.cpp which we
don't have (we haven't backported upstream's fuzzing framework).
2021-04-02 16:06:41 +13:00
Sebastian Falbesoner 48fe1baf00 refactor: Remove unused methods CBloomFilter::reset()/clear()
Co-authored-by: MarcoFalke <falke.marco@gmail.com>
(cherry picked from commit 69ffddc83e0f3e265bf6cf7ae31489ae629fe6be)

Zcash: Excluding change to src/test/fuzz/bloom_filter.cpp which we
don't have (we haven't backported upstream's fuzzing framework).
2021-04-02 16:04:55 +13:00
João Barbosa 07a5716458 refactor: Improve CRollingBloomFilter::reset by using std::fill
(cherry picked from commit df9e15f092c18a8047f09307576c2b77b9c8d01c)
2021-04-02 16:04:55 +13:00
João Barbosa 4dfc6384e9 bench: Add benchmark for CRollingBloomFilter::reset
(cherry picked from commit d2dbc7da26e1ca40200521c05a0b1ca75578acd2)
2021-04-02 16:04:55 +13:00
251 6eb04fefb7 Removes unsed `CBloomFilter` constructor.
This commit removes the `CBloomFilter::CBloomFilter(const unsigned int, const double, const unsigned int)` constructor, which became obsolete with 086ee67.

(cherry picked from commit 265bd50884ac1984c08f0e5916256d5f12e655f5)
2021-04-02 16:04:55 +13:00
Martin Ankerl 1571d65455 replace modulus with FastMod
Replaces the slow modulo operation with a much faster 32bit multiplication & shift. This works
because the hash should be uniformly distributed between 0 and 2^32-1. This speeds up the benchmark
by a factor of about 1.3:

RollingBloom, 5, 1500000, 3.73733, 4.97569e-07, 4.99002e-07, 4.98372e-07 # before
RollingBloom, 5, 1500000, 2.86842, 3.81630e-07, 3.83730e-07, 3.82473e-07 # FastMod

Be aware that this changes the position of the bits that are toggled, so this should probably
not be used for CBloomFilter which is serialized.

(cherry picked from commit 9aac9f90d5e56752cc6cbfac48063ad29a01143c)
2021-04-02 16:04:55 +13:00
ロハン ダル 36603f25a9 param variables made const
(cherry picked from commit 64aa36e20368fa16d4ff757d56dc2690ed0f48ba)
2021-04-02 16:04:55 +13:00
kobake 8b1fe83120 Fix msvc compiler error C4146 (unary minus operator applied to unsigned type)
On msvc14, int literal '-2147483648' is invalid, because '2147483648' is unsigned type and cant't apply minus operator to unsigned type.
To define the int literal correctly, use '-2147483647 - 1' formula that is also used to define INT_MIN in limits.h.

(cherry picked from commit 8e0720bdb9141b00b4c00893b8139904c67ddacf)
2021-04-02 16:04:55 +13:00
kobake 012dd8e740 Fix msvc compiler error C4146 (minus operator applied to unsigned type)
On msvc14, the compiler error C4146 (unary minus operator applied to unsigned type, result still unsigned) had been occured.
Use '0 - x' styled formula instead of '-x' so as to fix the error.

(cherry picked from commit 292112f87ef1780fee6164063a60af9ee7bf3f86)
2021-04-02 16:04:55 +13:00
Karl-Johan Alm 5d6fa863b3 Refactor: Remove using namespace <xxx> from src/*.cpp.
(cherry picked from commit b7b48c8bbdf7a90861610b035d8b0a247ef78c45)

Zcash: Excluding changes to code we haven't backported yet that cause
too many conflicts.
2021-04-02 16:04:55 +13:00
S. Matthew English c6591f2cd2 unification of Bloom filter representation
Output instances of "BloomFilter" changed to "Bloom filter", in accordance with Wikipedia standard notation:

https://en.wikipedia.org/wiki/Bloom_filter

also to sync with the majority of cases in the self-same file

(cherry picked from commit b7aa2902fd3c29487f585c264d8845899f4c1846)
2021-04-02 16:04:55 +13:00
Robert McLaughlin 5e81239e3e trivial: fix bloom filter init to isEmpty = true
Fixes newly initialized bloom filters being
constructed with isEmpty(false), which still
works but loses the possible speedup when
checking for key membership in an empty filter.

(cherry picked from commit cccf73db0483cc3945bf8389ce197df35e931e16)
2021-04-02 16:04:55 +13:00
Pavel Janík 48be374f68 Do not shadow variables
(cherry picked from commit 4731cab8fbff51a8178c85d572e2482040278616)

Zcash: Excluding changes to code we haven't backported.
2021-04-02 16:04:55 +13:00
Pieter Wuille 7d488feb12 More efficient bitsliced rolling Bloom filter
This patch changes the implementation from one that stores 16 2-bit integers
in one uint32_t's, to one that stores the first bit of 64 2-bit integers in
one uint64_t and the second bit in another. This allows for 450x faster
refreshing and 2.2x faster average speed.

(cherry picked from commit 1953c40aa9589a03035fd294f3ba3549374a4826)
2021-04-02 16:04:55 +13:00
Pieter Wuille 5064a933a0 Fix formatting of NOPs for generated script tests
(cherry picked from commit d03e46625ac95954bb9ecbc2cf73ffd8de6b8a13)
2021-04-02 16:04:55 +13:00
Pieter Wuille 9494acdb60 Switch to a more efficient rolling Bloom filter
For each 'bit' in the filter we really maintain 2 bits, which store either:
0: not set
1-3: set in generation N

After (nElements / 2) insertions, we switch to a new generation, and wipe
entries which already had the new generation number, effectively switching
from the last 1.5 * nElements set to the last 1.0 * nElements set.

This is 25% more space efficient than the previous implementation, and can
(at peak) store 1.5 times the requested amount of history (though only
1.0 times the requested history is guaranteed).

The existing unit tests should be sufficient.

(cherry picked from commit 086ee67d839b33bf475177f680fcc848a0625266)
2021-04-02 16:04:55 +13:00
Homu 80e66e7daa Auto merge of #5009 - LarryRuane:upstream-locking-0.14, r=str4d
Bitcoin 0.14 locking PRs

These are locking changes from upstream (bitcoin core) release 0.14, oldest to newest (when merged to the master branch).

Each commit also includes a reference both to the PR and the upstream commit.

- bitcoin/bitcoin#8472
- bitcoin/bitcoin#8606
  - Excludes a lock move because we don't have bitcoin/bitcoin#7840 which this move was partially-reverting.
- bitcoin/bitcoin#9230
  - Only first commit (we don't have `LogTimestampStr` anymore).
- bitcoin/bitcoin#9243
  - Only the sixth commit, excluding `IsArgSet` locking (we haven't pulled that function in yet).
- bitcoin/bitcoin#9626
  - The cherry-picked commit does not match the upstream at all, but the resulting lock is useful.
- bitcoin/bitcoin#9679
- bitcoin/bitcoin#9227
- bitcoin/bitcoin#9698
  - Excludes change to `CConnman::PushMessage` in second commit (which we don't have yet).
- bitcoin/bitcoin#9708
- bitcoin/bitcoin#9771
2021-04-02 01:03:27 +00:00
Russell Yanofsky 4fd7387cef Add missing cs_wallet lock that triggers new lock held assertion
A new AssertLockHeld(cs_wallet) call was added in commit a58370e
"Dedup nTimeFirstKey update logic" (part of PR #9108).

The lock held assertion will fail when loading prexisting wallets files from
before the #9108 merge that have watch-only keys.

zcash: cherry picked from commit 07afcd6379bb46ace5856f6a47a9188cf9aed2ea
zcash: https://github.com/bitcoin/bitcoin/pull/9771
2021-04-02 12:55:48 +13:00
Matt Corallo c9e2172eb6 Move CNode::addrLocal access behind locked accessors
zcash: cherry picked from commit db2dc7a58cb0a3df58188b748df8e0d04ba76f00
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-02 12:55:48 +13:00
Matt Corallo 116deeec5b Move CNode::addrName accesses behind locked accessors
zcash: cherry picked from commit 036073bf87c07f8d69e39168dd93a52f1aafe85c
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-02 12:55:48 +13:00
Matt Corallo e6eac19062 Make nTimeBestReceived atomic
zcash: cherry picked from commit d8f2b8a8c032b83a3bd90750e58abaeece7e34e7
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-02 12:55:48 +13:00
Matt Corallo 78e0b89750 Move [clean|str]SubVer writes/copyStats into a lock
zcash: cherry picked from commit 22b4966a29501c4f3f2e970ac5008fbd91e665a9
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-02 12:55:48 +13:00
Matt Corallo 676e7814f3 Make nServices atomic
zcash: cherry picked from commit 0f3187261519c7568ef4211ce12b9740a3c1200f
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-02 12:55:48 +13:00
Matt Corallo 651c46a4b3 Make nStartingHeight atomic
zcash: cherry picked from commit 96f42d8a12871b8d5c4e31fd27d8135f97c6b3e0
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-02 12:55:48 +13:00
Matt Corallo c2c43e39b2 Access fRelayTxes with cs_filter lock in copyStats
zcash: cherry picked from commit 512731bed0782f10092de35a960153b17ecc11eb
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-02 12:55:48 +13:00
Matt Corallo 5d3586f707 Avoid copying CNodeStats to make helgrind OK with buggy std::string
zcash: cherry picked from commit ae683c1b1960b32134f5a5a29504691c91f39cf3
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-01 14:29:40 -06:00
Matt Corallo 208a1a5867 Make nTimeConnected const in CNode
zcash: cherry picked from commit 644f1234e22626a7b5618a1dae60a8457a4063b1
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-01 14:29:40 -06:00
Cory Fields 51fb0415c9 net: fix a few races. Credit @TheBlueMatt
These are (afaik) all long-standing races or concurrent accesses. Going
forward, we can clean these up so that they're not all individual atomic
accesses.

- Reintroduce cs_vRecv to guard receive-specific vars
- Lock vRecv/vSend for CNodeStats
- Make some vars atomic.
- Only set the connection time in CNode's constructor so that it doesn't change

zcash: cherry picked from commit 321d0fc6b6624c65508f8b9059418cb936f0bbbe
zcash: https://github.com/bitcoin/bitcoin/pull/9708
2021-04-01 14:29:40 -06:00
Cory Fields 9825103a10 net: add a lock around hSocket
zcash: cherry picked from commit 9a0b784deaab6b9fffcab227d928987b981d0572
zcash: https://github.com/bitcoin/bitcoin/pull/9698
2021-04-01 14:29:40 -06:00
Cory Fields 8a26f4b800 net: rearrange so that socket accesses can be grouped together
zcash: cherry picked from commit 45e2e085612463dd9cca9f1b221733afa6d52991
zcash: https://github.com/bitcoin/bitcoin/pull/9698
2021-04-01 14:29:40 -06:00
Patrick Strateman 0658e2d0d3 Make nWalletDBUpdated atomic to avoid a potential race.
zcash: cherry picked from commit d63ff6265b0c6ae30efcbb9120d4db419606198a
zcash: https://github.com/bitcoin/bitcoin/pull/9227
2021-04-01 14:29:40 -06:00
Matt Corallo 6cc2c45eb9 Access WorkQueue::running only within the cs lock.
This removes a "race" between Interrupt() and Run(), though it
should not effect any of our supported platforms.

zcash: cherry picked from commit 7b2d96b634f9fd283480caf3bece56138d0587e3
zcash: https://github.com/bitcoin/bitcoin/pull/9679
2021-04-01 14:29:40 -06:00
Matt Corallo 024a94663c Ensure cs_vNodes is held when using the return value from FindNode
zcash: cherry picked from commit 3c37dc40d39e1a1e56b6b0d3e660626a78656d4f
zcash: https://github.com/bitcoin/bitcoin/pull/9626
2021-04-01 14:29:40 -06:00
Matt Corallo f60964c374 Lock mapArgs/mapMultiArgs access in util
zcash: cherry picked from commit 4e048142a5e45d622355dad92ade192ad4769ca3
zcash: https://github.com/bitcoin/bitcoin/pull/9243
2021-04-01 14:29:40 -06:00
Matt Corallo cafc3f845d Fix race when accessing std::locale::classic()
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78552

zcash: cherry picked from commit 507145d78595e052ce13368e122f72c85093992c
zcash: https://github.com/bitcoin/bitcoin/pull/9230
2021-04-01 14:29:40 -06:00
Pieter Wuille 451600b9a6 Fix some locks
This makes sure that cs_filter is never held while taking cs_main
or CNode::cs_vSend.

zcash: cherry picked from commit 144ed76ea0b38b7c21b224501964f8a2c65c4bb6
zcash: https://github.com/bitcoin/bitcoin/pull/8606
2021-04-01 14:29:40 -06:00
Pavel Janík 27d328030c Do not shadow LOCK's criticalblock variable for LOCK inside LOCK
zcash: cherry picked from commit 33d15a3a76d073986337adcd62646d93e7ba223f
zcash: https://github.com/bitcoin/bitcoin/pull/8472
2021-04-01 14:29:40 -06:00
Homu e39441ff8b Auto merge of #5044 - daira:delete-spare-fr-addrs, r=daira
Delete spare mainnet Founders' Reward addresses that will never be used

These addresses were originally intended as fallbacks if an FR address was compromised.
There is no need to retain them in the code given that the FR has ended.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2021-04-01 13:02:48 +00:00
Daira Hopwood f5d53f953c Delete spare mainnet Founders' Reward addresses that will never be used.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2021-04-01 13:03:06 +01:00
Homu 2d3b58c993 Auto merge of #4999 - LarryRuane:upstream-locking-0.13, r=str4d
Bitcoin 0.13 locking PRs

These are locking changes from upstream (bitcoin core) release 0.13, oldest to newest (when they were merged to the master branch).
- https://github.com/bitcoin/bitcoin/pull/7846
- https://github.com/bitcoin/bitcoin/pull/7913
- https://github.com/bitcoin/bitcoin/pull/8016
  - second commit only; first commit, test changes, are already done
- https://github.com/bitcoin/bitcoin/pull/7942

This PR does not include:
 - https://github.com/bitcoin/bitcoin/pull/8244 27f8126ff3
   -  zcash requires locking `cs_main` in this instance (`getrawmempool()` calls `mempoolToJSON()`, which calls `chainActive.Height()`).
2021-04-01 05:46:27 +00:00
Homu 51ca3b955a Auto merge of #2939 - plutoforever:master, r=str4d
removed bashisms from build scripts

Closes https://github.com/zcash/zcash/issues/2677
2021-04-01 01:37:37 +00:00