Go to file
Henry de Valence 49aa41544d sync: try to ignore spurious inv messages.
Closes #697.

per  https://github.com/ZcashFoundation/zebra/issues/697#issuecomment-662742971

The response to a getblocks message is an inv message with the hashes of the
following blocks. However, inv messages are also sent unsolicited to gossip new
blocks across the network. Normally, this wouldn't be a problem, because for
every other request we filter only for the messages that are relevant to us.
But because the response to a getblocks message is an inv, the network layer
doesn't (and can't) distinguish between the response inv and the unsolicited
inv.

But there is a mitigation we can do. In our sync algorithm we have two phases:
(1) "ObtainTips" to get a set of tips to chase down, (2) repeatedly call
"ExtendTips" to extend those as far as possible. The unsolicited inv messages
have length 1, but when extending tips we expect to get more than one hash. So
we could reject responses in ExtendTips that have length 1 in order to ignore
these messages. This way we automatically ignore gossip messages during initial
block sync (while we're extending a tip) but we don't ignore length-1 responses
while trying to obtain tips (while querying the network for new tips).
2020-07-22 17:55:52 -07:00
.github build(deps): bump codecov/codecov-action from v1.0.10 to v1.0.11 2020-07-21 12:19:26 -04:00
book Add skeleton of eventual zebra book (#653) 2020-07-17 20:15:50 -07:00
tower-batch enable new tracing instrumentation in tokio 2020-07-22 14:39:54 -04:00
tower-fallback tower-fallback: add docs 2020-07-15 10:09:37 -07:00
zebra-chain docs: fix broken links 2020-07-22 17:55:52 -07:00
zebra-client add favicon to generated docs (#681) 2020-07-17 16:45:29 -07:00
zebra-consensus diagnostic: Warn on unexpected high blocks 2020-07-23 10:26:25 +10:00
zebra-network network: document Responses, add warning about unsolicited invs. 2020-07-22 17:55:52 -07:00
zebra-rpc add favicon to generated docs (#681) 2020-07-17 16:45:29 -07:00
zebra-script add favicon to generated docs (#681) 2020-07-17 16:45:29 -07:00
zebra-state build(deps): bump tokio from 0.2.21 to 0.2.22 2020-07-22 12:43:38 -04:00
zebra-test build(deps): bump tracing-subscriber from 0.2.7 to 0.2.8 2020-07-21 12:01:40 -04:00
zebra-utils Add Hard-Coded Checkpoint Lists (#674) 2020-07-21 23:11:51 +10:00
zebrad sync: try to ignore spurious inv messages. 2020-07-22 17:55:52 -07:00
.firebaserc Try building internal docs. 2020-02-10 18:12:43 -08:00
.gitignore Implement sync component for start subcommand (#506) 2020-06-22 19:24:53 -07:00
.rustfmt.toml Tracing endpoint (#3) 2019-09-09 13:05:42 -07:00
Cargo.lock enable new tracing instrumentation in tokio 2020-07-22 14:39:54 -04:00
Cargo.toml tower-fallback: add implementation. 2020-07-15 10:09:37 -07:00
Dockerfile Put all ports EXPOSE'd on the same line 2020-06-19 03:46:09 -04:00
LICENSE-APACHE Add copyright marks on each license 2019-11-14 11:50:49 -08:00
LICENSE-MIT Add copyright marks on each license 2019-11-14 11:50:49 -08:00
README.md Add link to CI workflows on main 2020-04-22 03:19:33 -04:00
clippy.toml Apply clippy fixes 2020-02-05 12:42:32 -08:00
cloudbuild.yaml Fix CD workflow using cloudbuild.yaml (#637) 2020-07-10 07:37:54 -04:00
codecov.yml Try to make CodeCov bot comment on PRs quieter (#576) 2020-07-01 20:37:51 -04:00
firebase.json Configure redirect for firebase hosting 2020-01-16 18:38:16 -05:00
prometheus.yaml Tell Prometheus to scrape more aggressively 2020-02-14 20:14:05 -05:00

README.md

Zebra logotype


codecov License

Hello! I am Zebra, an ongoing Rust implementation of a Zcash node.

Zebra is a work in progress. It is developed as a collection of zebra-* libraries implementing the different components of a Zcash node (networking, chain structures, consensus rules, etc), and a zebrad binary which uses them.

Most of our work so far has gone into zebra-network, building a new networking stack for Zcash, and zebra-chain, building foundational data structures.

Rendered docs from the main branch.

Join us on Discord.

License

Zebra is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT.

Metrics

Notes on local metrics collection:

# create a storage volume for grafana (once)
sudo docker volume create grafana-storage
# create a storage volume for prometheus (once)
sudo docker volume create prometheus-storage

# run prometheus with the included config
sudo docker run --network host -v prometheus-storage:/prometheus -v /path/to/zebra/prometheus.yaml:/etc/prometheus/prometheus.yml  prom/prometheus

# run grafana
sudo docker run -d --network host -e GF_SERVER_HTTP_PORT=3030 -v grafana-storage:/var/lib/grafana grafana/grafana

Now the grafana dashboard is available at http://localhost:3030 ; the default password is admin/admin.