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
use std::sync::Arc;
use common_types::{
header::Header,
encoded,
receipt::Receipt,
};
use enjen::{Engine, StateDependentProof};
use vapory_types::H256;
use futures::future::IntoFuture;
pub trait ChainDataFetcher: Send + Sync + 'static {
type Error: ::std::fmt::Debug;
type Body: IntoFuture<Item=encoded::Block, Error=Self::Error>;
type Receipts: IntoFuture<Item=Vec<Receipt>, Error=Self::Error>;
type Transition: IntoFuture<Item=Vec<u8>, Error=Self::Error>;
fn block_body(&self, header: &Header) -> Self::Body;
fn block_receipts(&self, header: &Header) -> Self::Receipts;
fn epoch_transition(
&self,
_hash: H256,
_engine: Arc<dyn Engine>,
_checker: Arc<dyn StateDependentProof>
) -> Self::Transition;
}
pub struct Unavailable;
pub fn unavailable() -> Unavailable { Unavailable }
impl ChainDataFetcher for Unavailable {
type Error = &'static str;
type Body = Result<encoded::Block, &'static str>;
type Receipts = Result<Vec<Receipt>, &'static str>;
type Transition = Result<Vec<u8>, &'static str>;
fn block_body(&self, _header: &Header) -> Self::Body {
Err("fetching block bodies unavailable")
}
fn block_receipts(&self, _header: &Header) -> Self::Receipts {
Err("fetching block receipts unavailable")
}
fn epoch_transition(
&self,
_hash: H256,
_engine: Arc<dyn Engine>,
_checker: Arc<dyn StateDependentProof>
) -> Self::Transition {
Err("fetching epoch transition proofs unavailable")
}
}