1use cfx_types::{Address, H256, U256};
2use serde::Deserialize;
3
4#[derive(Debug, PartialEq, Eq, Deserialize)]
6#[serde(rename_all = "camelCase", deny_unknown_fields)]
7pub struct Env {
8 pub current_coinbase: Address,
9 #[serde(default)]
10 pub current_difficulty: U256,
11 pub current_gas_limit: U256,
12 pub current_number: U256,
13 pub current_timestamp: U256,
14 pub current_base_fee: Option<U256>,
15 pub previous_hash: Option<H256>,
16
17 pub current_random: Option<H256>,
18 pub current_beacon_root: Option<H256>,
19 pub current_withdrawals_root: Option<H256>,
20
21 pub parent_blob_gas_used: Option<U256>,
22 pub parent_excess_blob_gas: Option<U256>,
23 pub parent_target_blobs_per_block: Option<U256>,
24 pub current_excess_blob_gas: Option<U256>,
25}
26
27#[cfg(test)]
28mod tests {
29 use super::*;
30
31 #[test]
32 fn deserialize_env() {
33 let json = r#"
34 {
35 "currentCoinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
36 "currentGasLimit": "0x016345785d8a0000",
37 "currentNumber": "0x01",
38 "currentTimestamp": "0x03e8",
39 "currentRandom": "0x0000000000000000000000000000000000000000000000000000000000000000",
40 "currentDifficulty": "0x00",
41 "currentBaseFee": "0x07",
42 "currentExcessBlobGas": "0x00"
43 }
44 "#;
45
46 let env: Env = serde_json::from_str(json).unwrap();
47 println!("{:?}", env);
48 }
49}