1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//! *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:
//!
//! ```text
//! ┌─────────────┐ ┌─────────────┐
//! │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
//!
// Catch documentation errors caused by code changes.
pub use ;
pub type PoolType = PoolType;
pub type ShieldedPool = ShieldedPool;
extern crate assert_matches;