Go to file
Henry de Valence 0586da7167 Revert #500 (generic errors in tower-batch).
Unfortunately, since the Batch wrapper was changed to have a generic error
type, when wrapping it in another Service, nothing constrains the error type,
so we have to specify it explicitly to avoid an inference hole.  This is pretty
unergonomic -- from the compiler error message it's very unintuitive that the
right fix is to change `Batch::new` to `Batch::<_, _, SomeError>::new`.

The options are:

1. roll back the changes that make the error type generic, so that the error
   type is a concrete type;

2. keep the error type generic but hardcode the error in the default
   constructor and add an additional code path that allows overriding the
   error.

However, there's a further issue with generic errors: the error type must be
Clone.  This problem comes from the fact that there can be multiple Batch
handles that have to share access to errors generated by the inner Batch
worker, so there's not a way to work around this.  However, almost all error
types aren't Clone, so there are fairly few error types that we would be
swapping in.

This suggests that in case (2) we would be maintaining extra code to allow
generic errors, but with restrictive enough generic bounds to make it
impractical to use generic error types.  For this reason I think that (1) is a
better option.
2020-07-22 14:29:55 -04: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 Revert #500 (generic errors in tower-batch). 2020-07-22 14:29:55 -04:00
tower-fallback tower-fallback: add docs 2020-07-15 10:09:37 -07:00
zebra-chain Create consensus utils and move byte_reverse_hex function to it (#705) 2020-07-22 12:29:14 +10:00
zebra-client add favicon to generated docs (#681) 2020-07-17 16:45:29 -07:00
zebra-consensus feature: Implement a basic ChainVerifier service 2020-07-22 12:51:19 +10:00
zebra-network network: avoid panic when shutting down cleanly. 2020-07-22 18:04:45 +10: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: unindent fetch task 2020-07-21 20:16:23 -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 Revert #500 (generic errors in tower-batch). 2020-07-22 14:29:55 -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.