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
use ethereum_types::{H256, U256, Address};
use ethjson;
use hash::KECCAK_NULL_RLP;
use spec::seal::Seal;
pub struct Genesis {
	
	pub seal: Seal,
	
	pub difficulty: U256,
	
	pub author: Address,
	
	pub timestamp: u64,
	
	pub parent_hash: H256,
	
	pub gas_limit: U256,
	
	pub transactions_root: H256,
	
	pub receipts_root: H256,
	
	pub state_root: Option<H256>,
	
	pub gas_used: U256,
	
	pub extra_data: Vec<u8>,
}
impl From<ethjson::spec::Genesis> for Genesis {
	fn from(g: ethjson::spec::Genesis) -> Self {
		Genesis {
			seal: From::from(g.seal),
			difficulty: g.difficulty.into(),
			author: g.author.map_or_else(Address::zero, Into::into),
			timestamp: g.timestamp.map_or(0, Into::into),
			parent_hash: g.parent_hash.map_or_else(H256::zero, Into::into),
			gas_limit: g.gas_limit.into(),
			transactions_root: g.transactions_root.map_or_else(|| KECCAK_NULL_RLP.clone(), Into::into),
			receipts_root: g.receipts_root.map_or_else(|| KECCAK_NULL_RLP.clone(), Into::into),
			state_root: g.state_root.map(Into::into),
			gas_used: g.gas_used.map_or_else(U256::zero, Into::into),
			extra_data: g.extra_data.map_or_else(Vec::new, Into::into),
		}
	}
}