1use crate::{deserialize_maybe_empty, AccountInfo, TestAuthorization};
7use alloy_eip7928::BlockAccessList;
8use context::{transaction::AccessList, BlockEnv, TxEnv};
9use context_interface::block::BlobExcessGasAndPrice;
10use primitives::{Address, Bytes, FixedBytes, TxKind, B256, U256};
11use serde::Deserialize;
12use std::collections::BTreeMap;
13
14#[derive(Debug, PartialEq, Eq, Deserialize)]
16pub struct BlockchainTest(pub BTreeMap<String, BlockchainTestCase>);
17
18#[derive(Debug, PartialEq, Eq, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct BlockchainTestCase {
22 pub genesis_block_header: BlockHeader,
24 #[serde(rename = "genesisRLP")]
26 pub genesis_rlp: Option<Bytes>,
27 pub blocks: Vec<Block>,
29 pub post_state: Option<BTreeMap<Address, Account>>,
31 pub pre: State,
33 pub lastblockhash: B256,
35 pub network: ForkSpec,
37 #[serde(default)]
39 pub seal_engine: SealEngine,
40}
41
42#[derive(Debug, PartialEq, Eq, Clone, Deserialize, Default)]
44#[serde(rename_all = "camelCase")]
45pub struct BlockHeader {
46 pub bloom: Bytes,
48 pub coinbase: Address,
50 pub difficulty: U256,
52 pub extra_data: Bytes,
54 pub gas_limit: U256,
56 pub gas_used: U256,
58 pub hash: B256,
60 pub mix_hash: B256,
62 pub nonce: FixedBytes<8>,
64 pub number: U256,
66 pub parent_hash: B256,
68 pub receipt_trie: B256,
70 pub state_root: B256,
72 pub timestamp: U256,
74 pub transactions_trie: B256,
76 pub uncle_hash: B256,
78 pub base_fee_per_gas: Option<U256>,
80 pub withdrawals_root: Option<B256>,
82 pub blob_gas_used: Option<U256>,
84 pub excess_blob_gas: Option<U256>,
86 pub parent_beacon_block_root: Option<B256>,
88 pub requests_hash: Option<B256>,
90 pub target_blobs_per_block: Option<U256>,
92 pub slot_number: Option<U256>,
94}
95
96#[derive(Debug, PartialEq, Eq, Deserialize, Default)]
98#[serde(rename_all = "camelCase")]
99pub struct Block {
100 pub block_header: Option<BlockHeader>,
102 pub rlp: Bytes,
104 pub expect_exception: Option<String>,
106 pub transactions: Option<Vec<Transaction>>,
108 pub uncle_headers: Option<Vec<BlockHeader>>,
110 pub withdrawals: Option<Vec<Withdrawal>>,
112 pub block_access_list: Option<BlockAccessList>,
114 pub withdrawal_requests: Option<Vec<WithdrawalRequest>>,
116 pub consolidation_requests: Option<Vec<ConsolidationRequest>>,
118}
119
120#[derive(Debug, PartialEq, Eq, Deserialize)]
122#[serde(rename_all = "camelCase")]
123pub struct Transaction {
124 #[serde(rename = "type")]
126 pub transaction_type: Option<U256>,
127 #[serde(default)]
129 pub sender: Option<Address>,
130 pub data: Bytes,
132 pub gas_limit: U256,
134 pub gas_price: Option<U256>,
136 pub nonce: U256,
138 pub r: U256,
140 pub s: U256,
142 pub v: U256,
144 pub value: U256,
146 #[serde(default, deserialize_with = "deserialize_maybe_empty")]
148 pub to: Option<Address>,
149 pub chain_id: Option<U256>,
151 pub access_list: Option<AccessList>,
153 pub max_fee_per_gas: Option<U256>,
155 pub max_priority_fee_per_gas: Option<U256>,
157 pub blob_versioned_hashes: Option<Vec<B256>>,
159 pub max_fee_per_blob_gas: Option<U256>,
161 pub authorization_list: Option<Vec<TestAuthorization>>,
163 pub hash: Option<B256>,
165}
166
167#[derive(Debug, PartialEq, Eq, Deserialize, Clone)]
169#[serde(rename_all = "camelCase")]
170pub struct Withdrawal {
171 pub index: U256,
173 pub validator_index: U256,
175 pub address: Address,
177 pub amount: U256,
179}
180
181#[derive(Debug, PartialEq, Eq, Deserialize, Clone)]
185#[serde(rename_all = "camelCase")]
186pub struct WithdrawalRequest {
187 pub source_address: Address,
189 pub validator_pubkey: FixedBytes<48>,
191 pub amount: U256,
193}
194
195#[derive(Debug, PartialEq, Eq, Deserialize, Clone)]
199#[serde(rename_all = "camelCase")]
200pub struct ConsolidationRequest {
201 pub source_address: Address,
203 pub source_pubkey: FixedBytes<48>,
205 pub target_pubkey: FixedBytes<48>,
207}
208
209#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Default)]
211pub struct State(pub BTreeMap<Address, Account>);
212
213impl State {
214 pub fn into_genesis_state(self) -> BTreeMap<Address, AccountInfo> {
216 self.0
217 .into_iter()
218 .map(|(address, account)| {
219 let storage = account
220 .storage
221 .iter()
222 .filter(|(_, v)| !v.is_zero())
223 .map(|(k, v)| (*k, *v))
224 .collect();
225 let account_info = AccountInfo {
226 balance: account.balance,
227 nonce: account.nonce.to::<u64>(),
228 code: account.code,
229 storage,
230 };
231 (address, account_info)
232 })
233 .collect::<BTreeMap<_, _>>()
234 }
235}
236
237#[derive(Debug, PartialEq, Eq, Deserialize, Clone, Default)]
239#[serde(deny_unknown_fields)]
240pub struct Account {
241 pub balance: U256,
243 pub code: Bytes,
245 pub nonce: U256,
247 pub storage: BTreeMap<U256, U256>,
249}
250
251#[derive(Debug, PartialEq, Eq, PartialOrd, Hash, Ord, Clone, Copy, Deserialize)]
253pub enum ForkSpec {
254 Frontier,
256 FrontierToHomesteadAt5,
258 Homestead,
260 HomesteadToDaoAt5,
262 HomesteadToEIP150At5,
264 #[serde(alias = "TangerineWhistle")]
266 EIP150,
267 #[serde(alias = "SpuriousDragon")]
269 EIP158,
270 EIP158ToByzantiumAt5,
272 Byzantium,
274 ByzantiumToConstantinopleAt5,
276 ByzantiumToConstantinopleFixAt5,
278 Constantinople,
280 ConstantinopleFix,
282 Istanbul,
284 Berlin,
286 BerlinToLondonAt5,
288 London,
290 #[serde(alias = "Merge")]
292 Paris,
293 ParisToShanghaiAtTime15k,
295 Shanghai,
297 ShanghaiToCancunAtTime15k,
299 #[serde(alias = "Merge+3540+3670")]
301 MergeEOF,
302 #[serde(alias = "Merge+3860")]
304 MergeMeterInitCode,
305 #[serde(alias = "Merge+3855")]
307 MergePush0,
308 Cancun,
310 CancunToPragueAtTime15k,
312 Prague,
314 PragueToOsakaAtTime15k,
316 Osaka,
318 BPO1ToBPO2AtTime15k,
320 BPO2ToAmsterdamAtTime15k,
322 Amsterdam,
324}
325
326#[derive(Debug, PartialEq, Eq, Default, Deserialize)]
328pub enum SealEngine {
329 #[default]
331 NoProof,
332 Ethash,
334}
335
336impl BlockHeader {
337 pub fn to_block_env(
339 &self,
340 blob_excess_gas_and_price: Option<BlobExcessGasAndPrice>,
341 ) -> BlockEnv {
342 BlockEnv {
343 number: self.number,
344 beneficiary: self.coinbase,
345 timestamp: self.timestamp,
346 gas_limit: self.gas_limit.to::<u64>(),
347 basefee: self.base_fee_per_gas.unwrap_or_default().to::<u64>(),
348 difficulty: self.difficulty,
349 prevrandao: if self.difficulty.is_zero() {
350 Some(self.mix_hash)
351 } else {
352 None
353 },
354 blob_excess_gas_and_price,
355 slot_num: self
356 .slot_number
357 .unwrap_or_default()
358 .try_into()
359 .unwrap_or(u64::MAX),
360 }
361 }
362}
363
364impl Transaction {
365 pub fn to_tx_env(&self) -> Result<TxEnv, String> {
368 let tx_type = self.transaction_type.map(|t| t.to::<u8>()).unwrap_or(0);
370
371 let kind = if let Some(to_addr) = self.to {
373 TxKind::Call(to_addr)
374 } else {
375 TxKind::Create
376 };
377
378 let Some(sender) = self.sender else {
379 return Err("Sender is required".to_string());
380 };
381
382 let mut builder = TxEnv::builder()
384 .tx_type(Some(tx_type))
385 .caller(sender)
386 .gas_limit(self.gas_limit.to::<u64>())
387 .nonce(self.nonce.to::<u64>())
388 .value(self.value)
389 .data(self.data.clone())
390 .access_list(self.access_list.clone().unwrap_or_default())
391 .blob_hashes(self.blob_versioned_hashes.clone().unwrap_or_default())
392 .max_fee_per_blob_gas(self.max_fee_per_blob_gas.unwrap_or_default().to::<u128>())
393 .authorization_list_signed(
394 self.authorization_list
395 .clone()
396 .map(|auth_list| auth_list.into_iter().map(Into::into).collect::<Vec<_>>())
397 .unwrap_or_default(),
398 )
399 .kind(kind);
400
401 if let Some(chain_id) = self.chain_id {
403 let chain_id = chain_id.to::<u64>();
404 if chain_id != 0 {
406 builder = builder.chain_id(Some(chain_id));
407 }
408 }
409
410 builder = match tx_type {
412 0 | 1 => {
413 if let Some(gas_price) = self.gas_price {
415 builder.gas_price(gas_price.to::<u128>())
416 } else {
417 builder
418 }
419 }
420 2..=4 => {
421 let mut b = builder;
423 if let Some(max_fee) = self.max_fee_per_gas {
424 b = b.gas_price(max_fee.to::<u128>());
425 }
426 if let Some(priority_fee) = self.max_priority_fee_per_gas {
427 b = b.gas_priority_fee(Some(priority_fee.to::<u128>()));
428 }
429 b
430 }
431 _ => {
432 if let Some(gas_price) = self.gas_price {
434 builder.gas_price(gas_price.to::<u128>())
435 } else {
436 builder
437 }
438 }
439 };
440
441 builder
442 .build()
443 .map_err(|e| format!("Failed to build TxEnv: {e:?}"))
444 }
445}
446
447impl BlockchainTestCase {
448 pub fn genesis_block_env(&self) -> BlockEnv {
450 self.genesis_block_header.to_block_env(None)
451 }
452}
453
454#[cfg(test)]
455mod test {
456 use primitives::address;
457
458 use super::*;
459
460 #[test]
461 fn test_transaction_deserialization() {
462 let tx = r#"
463 {
464 "type": "0x00",
465 "chainId": "0x01",
466 "nonce": "0x00",
467 "gasPrice": "0x0a",
468 "gasLimit": "0x05f5e100",
469 "to": "0x1000000000000000000000000000000000000000",
470 "value": "0x00",
471 "data": "0x",
472 "v": "0x25",
473 "r": "0x52665e44edaa715e7c5f531675a96a47c7827593adf02f5d9b97c4bc952500ec",
474 "s": "0x1b4d3b625da8720d6a05d67ad1aa986089717cd0ff4fef2ee0e76779f9746957",
475 "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
476 }"#;
477 let _: Transaction = serde_json::from_str(tx).unwrap();
478 }
479
480 #[test]
481 fn test_blockchain_test_deserialization() {
482 let result: Result<BlockchainTest, _> = serde_json::from_str(SAMPLE);
484
485 if let Err(e) = result {
489 println!("Expected deserialization error due to format differences: {e}");
490 }
491 }
492
493 #[test]
494 fn test_fork_spec_deserialization() {
495 let fork_specs = vec![
497 ("\"Frontier\"", ForkSpec::Frontier),
498 ("\"Homestead\"", ForkSpec::Homestead),
499 ("\"Byzantium\"", ForkSpec::Byzantium),
500 ("\"Constantinople\"", ForkSpec::Constantinople),
501 ("\"Istanbul\"", ForkSpec::Istanbul),
502 ("\"Berlin\"", ForkSpec::Berlin),
503 ("\"London\"", ForkSpec::London),
504 ("\"Paris\"", ForkSpec::Paris),
505 ("\"Merge\"", ForkSpec::Paris), ("\"Shanghai\"", ForkSpec::Shanghai),
507 ("\"Cancun\"", ForkSpec::Cancun),
508 (
509 "\"CancunToPragueAtTime15k\"",
510 ForkSpec::CancunToPragueAtTime15k,
511 ),
512 ("\"Prague\"", ForkSpec::Prague),
513 (
514 "\"PragueToOsakaAtTime15k\"",
515 ForkSpec::PragueToOsakaAtTime15k,
516 ),
517 ("\"Osaka\"", ForkSpec::Osaka),
518 ("\"BPO1ToBPO2AtTime15k\"", ForkSpec::BPO1ToBPO2AtTime15k),
519 ("\"Amsterdam\"", ForkSpec::Amsterdam),
520 ];
521
522 for (json, expected) in fork_specs {
523 let result: ForkSpec = serde_json::from_str(json).unwrap();
524 assert_eq!(result, expected);
525 }
526 }
527
528 #[test]
529 fn test_transaction_conversion() {
530 use crate::blockchain::Transaction;
531 use primitives::{Bytes, U256};
532
533 let tx = Transaction {
534 transaction_type: Some(U256::from(0)),
535 sender: Some(address!("0x1000000000000000000000000000000000000000")),
536 data: Bytes::default(),
537 gas_limit: U256::from(21000),
538 gas_price: Some(U256::from(1000000000)),
539 nonce: U256::from(0),
540 r: U256::from(1),
541 s: U256::from(2),
542 v: U256::from(27),
543 value: U256::from(1000),
544 chain_id: Some(U256::from(1)),
545 access_list: None,
546 max_fee_per_gas: None,
547 max_priority_fee_per_gas: None,
548 max_fee_per_blob_gas: None,
549 hash: None,
550 to: None,
551 authorization_list: None,
552 blob_versioned_hashes: None,
553 };
554
555 let tx_env = tx.to_tx_env().unwrap();
557
558 assert_eq!(tx_env.tx_type, 0);
559 assert_eq!(tx_env.nonce, 0);
560 assert_eq!(tx_env.gas_limit, 21000);
561 assert_eq!(tx_env.gas_price, 1000000000);
562 assert_eq!(tx_env.value, U256::from(1000));
563 }
564
565 const SAMPLE: &str = r#"
566 {
567 "tests/osaka/eip7825_transaction_gas_limit_cap/test_tx_gas_limit.py::test_transaction_gas_limit_cap_at_transition[fork_PragueToOsakaAtTime15k-blockchain_test]": {
568 "network": "PragueToOsakaAtTime15k",
569 "genesisBlockHeader": {
570 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
571 "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
572 "coinbase": "0x0000000000000000000000000000000000000000",
573 "stateRoot": "0xfe13aa0b3a4ea731b1715a429c1cf100db415262a5bdd49478dc7b9e61cbf1df",
574 "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
575 "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
576 "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
577 "difficulty": "0x00",
578 "number": "0x00",
579 "gasLimit": "0x044aa200",
580 "gasUsed": "0x00",
581 "timestamp": "0x00",
582 "extraData": "0x00",
583 "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
584 "nonce": "0x0000000000000000",
585 "baseFeePerGas": "0x07",
586 "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
587 "blobGasUsed": "0x00",
588 "excessBlobGas": "0x00",
589 "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
590 "requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
591 "hash": "0x04b688c25df122da84e0b1a21b90dd8f898e6005cdc2d1ac6c60ded9ff9b2de4"
592 },
593 "pre": {
594 "0x00000000219ab540356cbb839cbe05303d7705fa": {
595 "nonce": "0x01",
596 "balance": "0x00",
597 "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033",
598 "storage": {
599 "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b",
600 "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71",
601 "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c",
602 "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c",
603 "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30",
604 "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1",
605 "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c",
606 "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193",
607 "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1",
608 "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b",
609 "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220",
610 "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f",
611 "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e",
612 "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784",
613 "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb",
614 "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb",
615 "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab",
616 "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4",
617 "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f",
618 "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa",
619 "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c",
620 "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167",
621 "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7",
622 "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0",
623 "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544",
624 "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765",
625 "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4",
626 "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1",
627 "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636",
628 "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c",
629 "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7"
630 }
631 },
632 "0x00000961ef480eb55e80d19ad83579a64c007002": {
633 "nonce": "0x01",
634 "balance": "0x00",
635 "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd",
636 "storage": {}
637 },
638 "0x0000bbddc7ce488642fb579f8b00f3a590007251": {
639 "nonce": "0x01",
640 "balance": "0x00",
641 "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd",
642 "storage": {}
643 },
644 "0x0000f90827f1c53a10cb7a02335b175320002935": {
645 "nonce": "0x01",
646 "balance": "0x00",
647 "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500",
648 "storage": {}
649 },
650 "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": {
651 "nonce": "0x01",
652 "balance": "0x00",
653 "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500",
654 "storage": {}
655 },
656 "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
657 "nonce": "0x00",
658 "balance": "0x3635c9adc5dea00000",
659 "code": "0x",
660 "storage": {}
661 },
662 "0x0000000000000000000000000000000000001000": {
663 "nonce": "0x01",
664 "balance": "0x00",
665 "code": "0x60016000540160005500",
666 "storage": {}
667 }
668 },
669 "postState": {
670 "0x00000000219ab540356cbb839cbe05303d7705fa": {
671 "nonce": "0x01",
672 "balance": "0x00",
673 "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033",
674 "storage": {
675 "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b",
676 "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71",
677 "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c",
678 "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c",
679 "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30",
680 "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1",
681 "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c",
682 "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193",
683 "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1",
684 "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b",
685 "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220",
686 "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f",
687 "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e",
688 "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784",
689 "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb",
690 "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb",
691 "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab",
692 "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4",
693 "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f",
694 "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa",
695 "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c",
696 "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167",
697 "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7",
698 "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0",
699 "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544",
700 "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765",
701 "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4",
702 "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1",
703 "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636",
704 "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c",
705 "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7"
706 }
707 },
708 "0x00000961ef480eb55e80d19ad83579a64c007002": {
709 "nonce": "0x01",
710 "balance": "0x00",
711 "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd",
712 "storage": {}
713 },
714 "0x0000bbddc7ce488642fb579f8b00f3a590007251": {
715 "nonce": "0x01",
716 "balance": "0x00",
717 "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd",
718 "storage": {}
719 },
720 "0x0000f90827f1c53a10cb7a02335b175320002935": {
721 "nonce": "0x01",
722 "balance": "0x00",
723 "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500",
724 "storage": {
725 "0x00": "0x04b688c25df122da84e0b1a21b90dd8f898e6005cdc2d1ac6c60ded9ff9b2de4"
726 }
727 },
728 "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": {
729 "nonce": "0x01",
730 "balance": "0x00",
731 "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500",
732 "storage": {
733 "0x1a98": "0x3a97"
734 }
735 },
736 "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": {
737 "nonce": "0x01",
738 "balance": "0x3635c9adc5de996bf0",
739 "code": "0x",
740 "storage": {}
741 },
742 "0x0000000000000000000000000000000000001000": {
743 "nonce": "0x01",
744 "balance": "0x00",
745 "code": "0x60016000540160005500",
746 "storage": {
747 "0x00": "0x01"
748 }
749 },
750 "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": {
751 "nonce": "0x00",
752 "balance": "0x01f938",
753 "code": "0x",
754 "storage": {}
755 }
756 },
757 "lastblockhash": "0xd4c4adfc3e91b0f8855851d598b43c9aa24e46dc03463a1e6e39154a3b9baf11",
758 "config": {
759 "network": "PragueToOsakaAtTime15k",
760 "chainid": "0x01",
761 "blobSchedule": {
762 "Cancun": {
763 "target": "0x03",
764 "max": "0x06",
765 "baseFeeUpdateFraction": "0x32f0ed"
766 },
767 "Prague": {
768 "target": "0x06",
769 "max": "0x09",
770 "baseFeeUpdateFraction": "0x4c6964"
771 },
772 "Osaka": {
773 "target": "0x06",
774 "max": "0x09",
775 "baseFeeUpdateFraction": "0x4c6964"
776 }
777 }
778 },
779 "genesisRLP": "0xf9025df90257a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fe13aa0b3a4ea731b1715a429c1cf100db415262a5bdd49478dc7b9e61cbf1dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808084044aa200808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855c0c0c0",
780 "blocks": [
781 {
782 "blockHeader": {
783 "parentHash": "0x04b688c25df122da84e0b1a21b90dd8f898e6005cdc2d1ac6c60ded9ff9b2de4",
784 "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
785 "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
786 "stateRoot": "0xc1f2dd64894ad795674b904a05d8b1e25e44c1bcab551f891561505cf9d23ec0",
787 "transactionsTrie": "0x62a7a0c935742f0a198a50f095a7936080f099512e3c0f55cf245251e52b8956",
788 "receiptTrie": "0x06f890d54ec65d8650b6c73eefd1fbc39f78b5b25f4e1ec10885c9f29f84ee98",
789 "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
790 "difficulty": "0x00",
791 "number": "0x01",
792 "gasLimit": "0x044aa200",
793 "gasUsed": "0xa868",
794 "timestamp": "0x3a97",
795 "extraData": "0x",
796 "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
797 "nonce": "0x0000000000000000",
798 "baseFeePerGas": "0x07",
799 "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
800 "blobGasUsed": "0x00",
801 "excessBlobGas": "0x00",
802 "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
803 "requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
804 "hash": "0xd4c4adfc3e91b0f8855851d598b43c9aa24e46dc03463a1e6e39154a3b9baf11"
805 },
806 "transactions": [
807 {
808 "type": "0x00",
809 "chainId": "0x01",
810 "nonce": "0x00",
811 "gasPrice": "0x0a",
812 "gasLimit": "0x01c9c381",
813 "to": "0x0000000000000000000000000000000000001000",
814 "value": "0x00",
815 "data": "0x",
816 "v": "0x26",
817 "r": "0xf6fc2259158f1ab63eef05e3a8c55ca90621f289349ed04f0bdb90190aea976d",
818 "s": "0x1298f50281fe143647f01741fb7e68f0dc82e47a05fe5a9b6193c1270c5e3658",
819 "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
820 }
821 ],
822 "uncleHeaders": [],
823 "withdrawals": [],
824 "rlp": "0xf902c5f9025ba004b688c25df122da84e0b1a21b90dd8f898e6005cdc2d1ac6c60ded9ff9b2de4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c1f2dd64894ad795674b904a05d8b1e25e44c1bcab551f891561505cf9d23ec0a062a7a0c935742f0a198a50f095a7936080f099512e3c0f55cf245251e52b8956a006f890d54ec65d8650b6c73eefd1fbc39f78b5b25f4e1ec10885c9f29f84ee98b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800184044aa20082a868823a9780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855f863f861800a8401c9c381940000000000000000000000000000000000001000808026a0f6fc2259158f1ab63eef05e3a8c55ca90621f289349ed04f0bdb90190aea976da01298f50281fe143647f01741fb7e68f0dc82e47a05fe5a9b6193c1270c5e3658c0c0",
825 "blocknumber": "1"
826 },
827 {
828 "rlp": "0xf902c3f90259a0d4c4adfc3e91b0f8855851d598b43c9aa24e46dc03463a1e6e39154a3b9baf11a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa050671d216437ec3e13a03ff464ed91146fd61165e8adc1622e58d9be953ae4a5a04657b722e50dc4184f522f842bee4abeae676efe01b43d96ca1ca68695982cfda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800284044aa20080823a9880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855f863f861010a8401c9c381940000000000000000000000000000000000001000808025a032fd9f592d89b3468bcee7034fab624e546d8efb4f27d62a53e4f7b1382430cca06563508d39899cc529f5d0686a530ac145d68393c858f08edaada21f17e704b7c0c0",
829 "expectException": "TransactionException.GAS_LIMIT_EXCEEDS_MAXIMUM",
830 "rlp_decoded": {
831 "blockHeader": {
832 "parentHash": "0xd4c4adfc3e91b0f8855851d598b43c9aa24e46dc03463a1e6e39154a3b9baf11",
833 "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
834 "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
835 "stateRoot": "0x50671d216437ec3e13a03ff464ed91146fd61165e8adc1622e58d9be953ae4a5",
836 "transactionsTrie": "0x4657b722e50dc4184f522f842bee4abeae676efe01b43d96ca1ca68695982cfd",
837 "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
838 "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
839 "difficulty": "0x00",
840 "number": "0x02",
841 "gasLimit": "0x044aa200",
842 "gasUsed": "0x00",
843 "timestamp": "0x3a98",
844 "extraData": "0x",
845 "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
846 "nonce": "0x0000000000000000",
847 "baseFeePerGas": "0x07",
848 "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
849 "blobGasUsed": "0x00",
850 "excessBlobGas": "0x00",
851 "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
852 "requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
853 "hash": "0x64bf114af5b2312b734d3f7a94f15858210602292527a869c05e4f3083585385"
854 },
855 "transactions": [
856 {
857 "type": "0x00",
858 "chainId": "0x01",
859 "nonce": "0x01",
860 "gasPrice": "0x0a",
861 "gasLimit": "0x01c9c381",
862 "to": "0x0000000000000000000000000000000000001000",
863 "value": "0x00",
864 "data": "0x",
865 "v": "0x25",
866 "r": "0x32fd9f592d89b3468bcee7034fab624e546d8efb4f27d62a53e4f7b1382430cc",
867 "s": "0x6563508d39899cc529f5d0686a530ac145d68393c858f08edaada21f17e704b7",
868 "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
869 }
870 ],
871 "uncleHeaders": [],
872 "withdrawals": [],
873 "blocknumber": "2"
874 }
875 }
876 ],
877 "sealEngine": "NoProof",
878 "_info": {
879 "hash": "0xa19f6207b969ec0c5baa2aa6218e6410818c163eb88be6b39e61955ed4cc50c5",
880 "comment": "`execution-spec-tests` generated test",
881 "filling-transition-tool": "ethereum-spec-evm-resolver 0.0.5",
882 "description": "Test transaction gas limit cap behavior at the Osaka transition.\n\n Before timestamp 15000: No gas limit cap (transactions with gas > 30M are valid)\n At/after timestamp 15000: Gas limit cap of 30M is enforced",
883 "url": "https://github.com/ethereum/execution-spec-tests/blob/fusaka-devnet-2@v1.2.0/tests/osaka/eip7825_transaction_gas_limit_cap/test_tx_gas_limit.py#L118",
884 "fixture-format": "blockchain_test",
885 "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7825.md",
886 "reference-spec-version": "47cbfed315988c0bd4d10002c110ae402504cd94",
887 "eels-resolution": {
888 "git-url": "https://github.com/spencer-tb/execution-specs.git",
889 "branch": "forks/osaka",
890 "commit": "bc829598ff1923f9215a6a407ef74621077fd3bb"
891 }
892 }
893 }
894}
895 "#;
896}