19 releases (11 breaking)

0.12.1 Mar 27, 2024
0.11.1 Mar 9, 2024
0.10.0 Sep 25, 2023
0.9.0 Apr 28, 2023
0.1.0 Oct 8, 2019

#915 in Magic Beans

Download history 731/week @ 2024-01-24 683/week @ 2024-01-31 703/week @ 2024-02-07 839/week @ 2024-02-14 805/week @ 2024-02-21 407/week @ 2024-02-28 352/week @ 2024-03-06 559/week @ 2024-03-13 450/week @ 2024-03-20 342/week @ 2024-03-27 296/week @ 2024-04-03 853/week @ 2024-04-10 1173/week @ 2024-04-17 853/week @ 2024-04-24 1389/week @ 2024-05-01 289/week @ 2024-05-08

3,813 downloads per month
Used in 5 crates (4 directly)

MIT/Apache

2MB
33K SLoC

zcash_client_backend

This library contains Rust structs and traits for creating shielded Zcash light clients.

Building

Note that in order to (re)build the GRPC interface, you will need protoc on your $PATH. This is not required unless you make changes to any of the files in ./proto/.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


lib.rs:

A crate for implementing Zcash light clients.

zcash_client_backend contains Rust structs and traits for creating shielded Zcash light clients.

Design

Wallet sync

The APIs in the data_api::chain module can be used to implement the following synchronization flow:

                         ┌─────────────┐  ┌─────────────┐
                         │Get required │  │   Update    │
                         │subtree root │─▶│subtree roots│
                         │    range    │  └─────────────┘
                         └─────────────┘         │
                                                 ▼
                                            ┌─────────┐
                                            │ Update  │
          ┌────────────────────────────────▶│chain tip│◀──────┐
          │                                 └─────────┘       │
          │                                      │            │
          │                                      ▼            │
   ┌─────────────┐        ┌────────────┐  ┌─────────────┐     │
   │  Truncate   │        │Split range │  │Get suggested│     │
   │  wallet to  │        │into batches│◀─│ scan ranges │     │
   │rewind height│        └────────────┘  └─────────────┘     │
   └─────────────┘               │                            │
          ▲                     ╱│╲                           │
          │      ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─              │
     ┌────────┐         ┌───────────────┐       │             │
     │ Choose │  │      │Download blocks│                     │
     │ rewind │         │   to cache    │       │             │
     │ height │  │      └───────────────┘           .───────────────────.
     └────────┘                 │               │  ( Scan ranges updated )
          ▲      │              ▼                   `───────────────────'
          │               ┌───────────┐         │             ▲
 .───────────────┴─.      │Scan cached│    .─────────.        │
( Continuity error  )◀────│  blocks   │──▶(  Success  )───────┤
 `───────────────┬─'      └───────────┘    `─────────'        │
                                │               │             │
                 │       ┌──────┴───────┐                     │
                         ▼              ▼       │             ▼
                 │┌─────────────┐┌─────────────┐  ┌──────────────────────┐
                  │Delete blocks││   Enhance   ││ │Update wallet balance │
                 ││ from cache  ││transactions │  │  and sync progress   │
                  └─────────────┘└─────────────┘│ └──────────────────────┘
                 └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

Feature flags

Dependencies

~16–32MB
~545K SLoC