eest_types/blockchain/
mod.rs

1mod block;
2mod transaction;
3
4use crate::{AccountInfo, Config, SpecName};
5pub use block::*;
6use cfx_rpc_primitives::Bytes;
7use cfx_types::{Address, H256};
8use serde::{de, Deserialize, Deserializer};
9use std::collections::{BTreeMap, HashMap};
10pub use transaction::*;
11
12/// The top level test suite struct
13#[derive(Debug, PartialEq, Eq, Deserialize)]
14pub struct BlockchainTestSuite(pub BTreeMap<String, BlockchainTestUnit>);
15
16#[derive(Debug, PartialEq, Eq, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct BlockchainTestUnit {
19    pub network: SpecName,
20    pub genesis_block_header: BlockHeader,
21    pub pre: HashMap<Address, AccountInfo>,
22    pub post_state: HashMap<Address, AccountInfo>,
23    pub last_block_hash: Option<H256>,
24    pub config: Config,
25    #[serde(default, rename = "genesisRLP")]
26    pub genesis_rlp: Bytes,
27    pub blocks: Vec<TestBlock>,
28    pub seal_engine: String,
29    /// Test info is optional.
30    #[serde(default, rename = "_info")]
31    pub info: Option<serde_json::Value>,
32}
33
34#[derive(Debug, PartialEq, Eq)]
35pub enum TestBlock {
36    Block(Block),
37    InvalidBlock(InvalidBlock),
38}
39
40impl<'de> Deserialize<'de> for TestBlock {
41    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
42    where D: Deserializer<'de> {
43        let value = serde_json::Value::deserialize(deserializer)?;
44
45        if value.get("expectException").is_some() {
46            let a = InvalidBlock::deserialize(value)
47                .map(TestBlock::InvalidBlock)
48                .expect("TestBlock Block variant should success"); // TODO handle error
49            Ok(a)
50        } else if value.get("blockHeader").is_some() {
51            let b = Block::deserialize(value)
52                .map(TestBlock::Block)
53                .expect("TestBlock Invalid Block variant should success");
54            Ok(b)
55        } else {
56            Err(de::Error::custom("Unknown type for MyEnum"))
57        }
58    }
59}
60
61#[cfg(test)]
62mod tests {
63    use super::*;
64
65    #[test]
66    fn recover_test_block_of_invalid() {
67        let json_str = r#"{
68            "rlp": "0xf9035ef90242a0d9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00db85f0bc22f84493da39f9c08113aea13559eb14f9cac67e5db5007d01c5df4a01cbe160c60be9946c1477734baf89a03a0d6d75b8d64b3bed9d3954a1976c656a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90114b88803f88501808007825208948a0a19589531694250d570040a0c4b74576919b80180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06c120e55aeb31122c5caad29e69d28ec90abb71e089e0cdf4aebbf51bbc46a89a067983552dabf029ffb7ac58209a620d4a98eeeaf3df55bc9eb8e7684051ac70ab88803f88501018007825208948a0a19589531694250d570040a0c4b74576919b80180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a04fc1b52cdbb48421d17e7ccfc33496c95bae6ecfd8f29816699f151d92e4ed9ca074271236ba3a66db6ea60f4482287b8f52de28a6a525626c55e741c54296309bc0c0",
69            "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS",
70            "rlp_decoded": {
71                "blockHeader": {
72                    "parentHash": "0xd9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55",
73                    "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
74                    "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
75                    "stateRoot": "0x0db85f0bc22f84493da39f9c08113aea13559eb14f9cac67e5db5007d01c5df4",
76                    "transactionsTrie": "0x1cbe160c60be9946c1477734baf89a03a0d6d75b8d64b3bed9d3954a1976c656",
77                    "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab",
78                    "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
79                    "difficulty": "0x00",
80                    "number": "0x01",
81                    "gasLimit": "0x016345785d8a0000",
82                    "gasUsed": "0x5208",
83                    "timestamp": "0x0c",
84                    "extraData": "0x",
85                    "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
86                    "nonce": "0x0000000000000000",
87                    "baseFeePerGas": "0x07",
88                    "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
89                    "blobGasUsed": "0x040000",
90                    "excessBlobGas": "0x0e0000",
91                    "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
92                    "hash": "0x4ff059d45cd9c3aaee26292786a7ea8bf6d00ec330bd50e00d2a6b1c9b6ed06e"
93                },
94                "transactions": [
95                    {
96                        "type": "0x03",
97                        "chainId": "0x01",
98                        "nonce": "0x00",
99                        "maxPriorityFeePerGas": "0x00",
100                        "maxFeePerGas": "0x07",
101                        "gasLimit": "0x5208",
102                        "to": "0x8a0a19589531694250d570040a0c4b74576919b8",
103                        "value": "0x01",
104                        "data": "0x",
105                        "accessList": [],
106                        "maxFeePerBlobGas": "0x01",
107                        "blobVersionedHashes": [
108                            "0x0100000000000000000000000000000000000000000000000000000000000000"
109                        ],
110                        "v": "0x01",
111                        "r": "0x6c120e55aeb31122c5caad29e69d28ec90abb71e089e0cdf4aebbf51bbc46a89",
112                        "s": "0x67983552dabf029ffb7ac58209a620d4a98eeeaf3df55bc9eb8e7684051ac70a",
113                        "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
114                    },
115                    {
116                        "type": "0x03",
117                        "chainId": "0x01",
118                        "nonce": "0x01",
119                        "maxPriorityFeePerGas": "0x00",
120                        "maxFeePerGas": "0x07",
121                        "gasLimit": "0x5208",
122                        "to": "0x8a0a19589531694250d570040a0c4b74576919b8",
123                        "value": "0x01",
124                        "data": "0x",
125                        "accessList": [],
126                        "maxFeePerBlobGas": "0x01",
127                        "blobVersionedHashes": [
128                            "0x0100000000000000000000000000000000000000000000000000000000000000"
129                        ],
130                        "v": "0x00",
131                        "r": "0x4fc1b52cdbb48421d17e7ccfc33496c95bae6ecfd8f29816699f151d92e4ed9c",
132                        "s": "0x74271236ba3a66db6ea60f4482287b8f52de28a6a525626c55e741c54296309b",
133                        "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
134                    }
135                ],
136                "uncleHeaders": [],
137                "withdrawals": [],
138                "blocknumber": "1"
139            }
140        }"#;
141
142        let data: TestBlock = serde_json::from_str(json_str).unwrap();
143        match data {
144            TestBlock::Block(_) => panic!("Expected InvalidBlock"),
145            TestBlock::InvalidBlock(_) => {}
146        }
147    }
148
149    #[test]
150    fn recover_test_block_of_valid() {
151        let json_str = r#"{
152            "blockHeader": {
153                "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a",
154                "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
155                "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
156                "stateRoot": "0xc2a77e1e008094eb69970a5ca782d3db246a13f27d8eb9f9dbda741f594c4f32",
157                "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
158                "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
159                "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
160                "difficulty": "0x00",
161                "number": "0x01",
162                "gasLimit": "0x016345785d8a0000",
163                "gasUsed": "0x00",
164                "timestamp": "0x0c",
165                "extraData": "0x",
166                "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
167                "nonce": "0x0000000000000000",
168                "baseFeePerGas": "0x07",
169                "withdrawalsRoot": "0xe69c7b5847f8c1bb8052999046c12ba942ad4d05e5627b0d339ec7772574e544",
170                "blobGasUsed": "0x00",
171                "excessBlobGas": "0x00",
172                "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
173                "hash": "0xe6f643b08c3757450d93d5bfa27168a2af5a861ac3bd2793ca57650f9d77a50c"
174            },
175            "transactions": [
176                {
177                    "type": "0x00",
178                    "chainId": "0x01",
179                    "nonce": "0x00",
180                    "gasPrice": "0x0a",
181                    "gasLimit": "0x07a120",
182                    "to": "0x0000000000000000000000000000000000001000",
183                    "value": "0x00",
184                    "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
185                    "v": "0x26",
186                    "r": "0xb71d8dd5ac327ec1b822930c066a9d0931a26f8529cbd0dca51a6a1f3fc508c9",
187                    "s": "0x63698823fb964779539d8fd4d016e7326cbd9dab987233458980d422776167b5",
188                    "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
189                }
190            ],
191            "uncleHeaders": [],
192            "withdrawals": [
193                {
194                    "index": "0x00",
195                    "validatorIndex": "0x00",
196                    "address": "0x0000000000000000000000000000000000000002",
197                    "amount": "0x01"
198                }
199            ],
200            "rlp": "0xf90259f9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2a77e1e008094eb69970a5ca782d3db246a13f27d8eb9f9dbda741f594c4f32a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a0e69c7b5847f8c1bb8052999046c12ba942ad4d05e5627b0d339ec7772574e5448080a00000000000000000000000000000000000000000000000000000000000000000c0c0d9d8808094000000000000000000000000000000000000000201",
201            "blocknumber": "1"
202        }"#;
203
204        let data: TestBlock = serde_json::from_str(json_str).unwrap();
205        match data {
206            TestBlock::Block(_) => {}
207            TestBlock::InvalidBlock(_) => panic!("Expected InvalidBlock"),
208        }
209    }
210
211    #[test]
212    fn recover_blockchain_test_unit() {
213        let json_str = r#"{
214            "network": "Cancun",
215            "genesisBlockHeader": {
216                "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
217                "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
218                "coinbase": "0x0000000000000000000000000000000000000000",
219                "stateRoot": "0x5286cedb720848de6b1cafd06d8679e2941d597805bee3956842c18d0b480026",
220                "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
221                "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
222                "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
223                "difficulty": "0x00",
224                "number": "0x00",
225                "gasLimit": "0x016345785d8a0000",
226                "gasUsed": "0x00",
227                "timestamp": "0x00",
228                "extraData": "0x00",
229                "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
230                "nonce": "0x0000000000000000",
231                "baseFeePerGas": "0x07",
232                "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
233                "blobGasUsed": "0x00",
234                "excessBlobGas": "0x140000",
235                "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
236                "hash": "0xd9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55"
237            },
238            "pre": {
239                "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": {
240                    "nonce": "0x01",
241                    "balance": "0x00",
242                    "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500",
243                    "storage": {}
244                },
245                "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
246                    "nonce": "0x00",
247                    "balance": "0x087c71",
248                    "code": "0x",
249                    "storage": {}
250                }
251            },
252            "postState": {
253                "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": {
254                    "nonce": "0x01",
255                    "balance": "0x00",
256                    "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500",
257                    "storage": {}
258                },
259                "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
260                    "nonce": "0x00",
261                    "balance": "0x087c71",
262                    "code": "0x",
263                    "storage": {}
264                }
265            },
266            "lastblockhash": "0xd9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55",
267            "config": {
268                "network": "Cancun",
269                "chainid": "0x01",
270                "blobSchedule": {
271                    "Cancun": {
272                        "target": "0x03",
273                        "max": "0x06",
274                        "baseFeeUpdateFraction": "0x32f0ed"
275                    }
276                }
277            },
278            "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05286cedb720848de6b1cafd06d8679e2941d597805bee3956842c18d0b480026a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0",
279            "blocks": [
280                {
281                    "rlp": "0xf9035ef90242a0d9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00db85f0bc22f84493da39f9c08113aea13559eb14f9cac67e5db5007d01c5df4a01cbe160c60be9946c1477734baf89a03a0d6d75b8d64b3bed9d3954a1976c656a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90114b88803f88501808007825208948a0a19589531694250d570040a0c4b74576919b80180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06c120e55aeb31122c5caad29e69d28ec90abb71e089e0cdf4aebbf51bbc46a89a067983552dabf029ffb7ac58209a620d4a98eeeaf3df55bc9eb8e7684051ac70ab88803f88501018007825208948a0a19589531694250d570040a0c4b74576919b80180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a04fc1b52cdbb48421d17e7ccfc33496c95bae6ecfd8f29816699f151d92e4ed9ca074271236ba3a66db6ea60f4482287b8f52de28a6a525626c55e741c54296309bc0c0",
282                    "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS",
283                    "rlp_decoded": {
284                        "blockHeader": {
285                            "parentHash": "0xd9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55",
286                            "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
287                            "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
288                            "stateRoot": "0x0db85f0bc22f84493da39f9c08113aea13559eb14f9cac67e5db5007d01c5df4",
289                            "transactionsTrie": "0x1cbe160c60be9946c1477734baf89a03a0d6d75b8d64b3bed9d3954a1976c656",
290                            "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab",
291                            "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
292                            "difficulty": "0x00",
293                            "number": "0x01",
294                            "gasLimit": "0x016345785d8a0000",
295                            "gasUsed": "0x5208",
296                            "timestamp": "0x0c",
297                            "extraData": "0x",
298                            "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
299                            "nonce": "0x0000000000000000",
300                            "baseFeePerGas": "0x07",
301                            "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
302                            "blobGasUsed": "0x040000",
303                            "excessBlobGas": "0x0e0000",
304                            "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
305                            "hash": "0x4ff059d45cd9c3aaee26292786a7ea8bf6d00ec330bd50e00d2a6b1c9b6ed06e"
306                        },
307                        "transactions": [
308                            {
309                                "type": "0x03",
310                                "chainId": "0x01",
311                                "nonce": "0x00",
312                                "maxPriorityFeePerGas": "0x00",
313                                "maxFeePerGas": "0x07",
314                                "gasLimit": "0x5208",
315                                "to": "0x8a0a19589531694250d570040a0c4b74576919b8",
316                                "value": "0x01",
317                                "data": "0x",
318                                "accessList": [],
319                                "maxFeePerBlobGas": "0x01",
320                                "blobVersionedHashes": [
321                                    "0x0100000000000000000000000000000000000000000000000000000000000000"
322                                ],
323                                "v": "0x01",
324                                "r": "0x6c120e55aeb31122c5caad29e69d28ec90abb71e089e0cdf4aebbf51bbc46a89",
325                                "s": "0x67983552dabf029ffb7ac58209a620d4a98eeeaf3df55bc9eb8e7684051ac70a",
326                                "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
327                            },
328                            {
329                                "type": "0x03",
330                                "chainId": "0x01",
331                                "nonce": "0x01",
332                                "maxPriorityFeePerGas": "0x00",
333                                "maxFeePerGas": "0x07",
334                                "gasLimit": "0x5208",
335                                "to": "0x8a0a19589531694250d570040a0c4b74576919b8",
336                                "value": "0x01",
337                                "data": "0x",
338                                "accessList": [],
339                                "maxFeePerBlobGas": "0x01",
340                                "blobVersionedHashes": [
341                                    "0x0100000000000000000000000000000000000000000000000000000000000000"
342                                ],
343                                "v": "0x00",
344                                "r": "0x4fc1b52cdbb48421d17e7ccfc33496c95bae6ecfd8f29816699f151d92e4ed9c",
345                                "s": "0x74271236ba3a66db6ea60f4482287b8f52de28a6a525626c55e741c54296309b",
346                                "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
347                            }
348                        ],
349                        "uncleHeaders": [],
350                        "withdrawals": [],
351                        "blocknumber": "1"
352                    }
353                }
354            ],
355            "sealEngine": "NoProof",
356            "_info": {
357                "hash": "0x4f88f7e5327e9c6be20fc427c067d2c887b0641ddeabfb084d7be6e8ab5499f4",
358                "comment": "`execution-spec-tests` generated test",
359                "filling-transition-tool": "ethereum-spec-evm-resolver 0.0.5",
360                "description": "Test function documentation:\n\n    Reject all valid blob transaction combinations in a block, but block is invalid.\n\n    - The amount of blobs is correct but the user cannot afford the\n            transaction total cost",
361                "url": "https://github.com/ethereum/execution-spec-tests/tree/v4.3.0/tests/cancun/eip4844_blobs/test_blob_txs.py#L835",
362                "fixture-format": "blockchain_test",
363                "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md",
364                "reference-spec-version": "de2e4a46ad93fc04e6fe3174dc6e90a3307bdb5f",
365                "eels-resolution": {
366                    "git-url": "https://github.com/ethereum/execution-specs.git",
367                    "branch": "master",
368                    "commit": "fa847a0e48309debee8edc510ceddb2fd5db2f2e"
369                }
370            }
371        }"#;
372
373        let data: BlockchainTestUnit = serde_json::from_str(json_str).unwrap();
374        assert_eq!(data.seal_engine, "NoProof");
375    }
376}