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
use chain::BlockHeader;
use storage::{BlockHeaderProvider, BlockAncestors};
use primitives::hash::H256;
pub fn median_timestamp(header: &BlockHeader, store: &BlockHeaderProvider) -> u32 {
median_timestamp_inclusive(header.previous_header_hash.clone(), store)
}
pub fn median_timestamp_inclusive(previous_header_hash: H256, store: &BlockHeaderProvider) -> u32 {
let mut timestamps: Vec<_> = BlockAncestors::new(previous_header_hash.clone().into(), store)
.take(11)
.map(|header| header.time)
.collect();
if timestamps.is_empty() {
return 0;
}
timestamps.sort();
timestamps[timestamps.len() / 2]
}