Commit Graph

15423 Commits

Author SHA1 Message Date
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
Jack Grigg fb38cf0d90 lint: Fix false positive
shellcheck interprets the single-quoted string as arguments to echo, not
the string that echo echos. Switching to double quotes fixes the lint.
2021-04-01 14:30:35 +13:00
Jack Grigg a1903d2644 Remove usage of local from fetch-params.sh 2021-04-01 14:28:41 +13:00
Homu 057fa9a335 Auto merge of #5043 - daira:no-rust-docs, r=str4d
native_rust: don't install Rust docs

This speeds up builds, especially native builds on macOS. fixes #5042

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2021-03-31 22:20:18 +00:00
Kris Nuttycombe da3eb82e96 Ensure that Sapling version range checks are always guarded by SAPLING_VERSION_GROUP_ID 2021-03-31 16:17:32 -06:00
Daira Hopwood c80ddb36f1 native_rust: don't install Rust docs. This speeds up builds, especially native builds on macOS.
fixes #5042

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2021-03-31 19:26:45 +01:00
Homu ba4eb241e7 Auto merge of #4996 - str4d:2074-net-blocksonly, r=str4d
Add -blocksonly option

Cherry-picked from the following upstream PRs:

- bitcoin/bitcoin#6993
- bitcoin/bitcoin#7046
- bitcoin/bitcoin#6780
  - The third commit (we backported the rest in #2390).
- bitcoin/bitcoin#7126
- bitcoin/bitcoin#7439
- bitcoin/bitcoin#15990
  - Only the `-blocksonly` documentation changes.
- bitcoin/bitcoin#16555
- bitcoin/bitcoin#18391
  - Only the `-blocksonly` documentation changes.

Part of #2074.
2021-03-31 11:27:22 +00:00
glowang 49d420f808 Update -blocksonly documentation
When -blocksonly is set to 1, it interacts with the -walletbroadcast
parameter and sets it to 0 if it has not been set already.This behavior
is not captured by the current documentation, which claims that -blocksonly
does not impact any wallet transactions.

(cherry picked from commit 621e86ee8d0102e2bf41f7656a368083b89b2f83)

Zcash: Excludes max-peer doc changes, since we don't have
block-relay-only peers yet.
2021-04-01 00:24:19 +13:00
Sjors Provoost c6fbc477dd [doc] mention whitelist is inbound, and applies to blocksonly
(cherry picked from commit 20ea9ef6ce9228a5258b99eeeeb40e6dfae2299f)
2021-04-01 00:17:02 +13:00
MarcoFalke 8dd2c02a3a doc: Mention blocksonly in reduce-traffic.md, unhide option
(cherry picked from commit fa8ced32a60dea37ac169241cf9a1f708ef46c4b)

Zcash: Only the documentation changes.
2021-04-01 00:13:49 +13:00
plutoforever 762f643613 removed bashisms from build scripts
Co-authored-by: Jack Grigg <jack@electriccoin.co>
2021-03-31 19:24:36 +13:00
Homu 49d76cf3f6 Auto merge of #4947 - str4d:rust-metrics, r=str4d
Add metrics collection and a Prometheus exporter

This adds an FFI wrapper around the `metrics` crate, and exposes CPP macros for collecting metrics in the C++ codebase. With this, we can collect metrics from both C++ and Rust.

The following metrics are included in this PR:
- Chain metrics:
  - (counter) `zcash.chain.verified.block.total`
  - (gauge) `zcash.chain.verified.block.height`
  - (histogram) `zcash.chain.verified.block.seconds`
- Value pool metrics:
  - (gauge) `zcash.pool.notes.created[name]`
  - (gauge) `zcash.pool.notes.spent[name]` (currently not measured)
  - (gauge) `zcash.pool.notes.unspent[name]` (currently not measured)
  - (gauge) `zcash.pool.value.zatoshis[name]`
- P2P network metrics:
  - (gauge) `zcash.net.peers`
  - (counter) `zcash.net.in.bytes.total`
  - (counter) `zcash.net.in.bytes[command]`
  - (counter) `zcash.net.in.messages[command]`
  - (counter) `zcash.net.out.bytes.total`
  - (counter) `zcash.net.out.bytes[command]`
  - (counter) `zcash.net.out.messages[command]`
- Node metrics:
  - (gauge) `zcash.mempool.size.transactions`
  - (gauge) `zcash.mempool.size.bytes`
  - (gauge) `zcash.mempool.usage.bytes`
  - (informational) `zcashd.build.info`

Collection of metrics is conditional on enabling an exporter. This PR adds a Prometheus exporter that can be enabled with `-prometheusport=<port>`. Metrics names have `.` replaced by `_` for compatibility with Prometheus.

By default, metrics are only exposed to localhost. This can be expanded with `-metricsallowip=<ip>`.
2021-03-31 02:49:42 +00:00
Jack Grigg b845868e2a metrics: Don't assert that the Sprout tree is accessible
RewindBlockIndex calls DisconnectTip in a way that can potentially cause
a Sprout tree to not exist (the rewind_index RPC test reliably triggers
this). We only need to access the tree during disconnection for metrics
purposes, and we will never encounter this rewind situation on either
mainnet or testnet, so if we can't access the Sprout tree we default to
zero.
2021-03-31 12:45:38 +13:00
Jack Grigg c940fd302b book: Fix typo in metrics documentation 2021-03-31 09:21:28 +13:00
Jack Grigg 83eef40f4c rust: Add license header to metrics_ffi::prometheus 2021-03-31 09:19:17 +13:00
Jack Grigg 3030df906d net: Clear CNode::strSendCommand if a message is aborted 2021-03-31 09:08:55 +13:00
Jack Grigg f8d63a83fc metrics: Rework pool metrics in anticipation of transparent pool
notes.created and notes.spent can be collected for the transparent pool
as well as the shielded pools. notes.unspent can only be collected for
the transparent pool, by design.
2021-03-30 15:12:36 +13:00
Jack Grigg 0cab2e7094 metrics: Remove zcash.sync.* metrics
- zcash.sync.block.downloaded.total is redundant, and can be replaced by
  zcash.net.in.messages[command=block].
- zcash.sync.block.verified.total and zcash.chain.verified.block.total
  are identical for us, because we verify blocks synchronously.
2021-03-30 15:12:36 +13:00
Jack Grigg e2e5df28a9 metrics: Rename metrics with consistent naming scheme
- Add zcash. prefix to common metrics.
- Use .total suffix for accumulating counters instead of .count.
- Group names where possible.
- Shorten names where possible (and still clear).
2021-03-30 15:12:36 +13:00
Jack Grigg 0f9e4b9472 metrics: Use labels for pool statistics
It's very likely that you'll want to operate over common pool statistics
together.
2021-03-30 15:12:36 +13:00
Jack Grigg 78b83fd6e9 metrics: Enable gauges with fully-static labels 2021-03-30 15:12:36 +13:00
Jack Grigg 958ffeafd3 metrics: Move documentation into zcashd book 2021-03-30 15:12:36 +13:00
Jack Grigg c9e3d03320 rust: Pin hyper 0.14.2
hyper 0.14.3 added an unstable C API, but the changes to enable it
require us to configure cargo with a linker for cross-compilation.
We'll need to figure this out eventually, but for now let's just
pin hyper to a version that doesn't require it.
2021-03-30 15:12:35 +13:00
Jack Grigg d08cdbe5f7 metrics: Implement IP access control on Prometheus scrape endpoint 2021-03-30 15:12:08 +13:00