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
/*
Appellation: fly <module>
Contrib: FL03 <jo3mccain@icloud.com>
Description:
*/
use crate::;
use ;
// FlyClientProposal is a proposal sent from the prover,
// it contains current chain depth and last block header.
// FlyClientQuery is the query sent from verifier to prover,
// it contains the chain depth of a proposal and a sample of
// blocks for proof. Note sample points are < query_depth - 1.
// The proof for a single point provided by the prover. To handle
// all the sample of a query, need a Vec<FlyClientProof>.
// #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
// pub struct FlyClientProof {
// // leaf_idx is corresponding to a number in the query sample
// leaf_idx: usize,
// // block header corresponding to the leaf_idx
// pub leaf_header: BlockHeader,
// // merkle proof for this block
// merkle_proof: MerkleProof,
// }
// impl FlyClientProof {
// // query depth is from the FlyClientQuery
// pub fn new(blockchain: &Blockchain, leaf_idx: usize, query_depth: usize) -> Self {
// // Note get_longest_chain() include genesis block with is not included in depth.
// let leaf_hash: H256 = blockchain.get_longest_chain()[leaf_idx + 1].hash();
// let leaf_header = blockchain.find_one_block(&leaf_hash).unwrap().header;
// let mmr_hash = blockchain.get_longest_chain()[query_depth - 2 + 1].hash();
// let mmr = blockchain.get_mmr(&mmr_hash);
// let merkle_proof = MerkleProof::for_leaf_node(&mmr, leaf_idx).unwrap();
// FlyClientProof {
// leaf_idx,
// leaf_header,
// merkle_proof,
// }
// }
// // only deals with first two step verification in the paper.
// pub fn verify(self, mmr_root: Hash) -> bool {
// assert!(self
// .merkle_proof
// .verify_leaf::<Sha256>(
// &mmr_root[..],
// self.leaf_header.hash().as_ref(),
// self.leaf_idx
// )
// .is_ok());
// true
// }
// }