From dca67fd3a8a305b8a04b1ef849d9d60c67f6daf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erce=20Can=20Bekt=C3=BCre?= <47954181+ercecan@users.noreply.github.com> Date: Tue, 2 Jul 2024 12:05:13 +0300 Subject: [PATCH] Implement fee receivers (#837) * WIP Implement fee receivers * Fix l1 fee tests * Fix tests * Use prioirty fee vault as coinbase * Small nit --------- Co-authored-by: eyusufatik --- crates/evm/src/evm/handler.rs | 40 ++++------- crates/evm/src/evm/mod.rs | 14 +++- crates/evm/src/tests/call_tests.rs | 77 ++++++++++++++++++---- crates/evm/src/tests/queries/mod.rs | 28 +++++--- crates/evm/src/tests/sys_tx_tests.rs | 11 ++-- crates/evm/src/tests/test_signer.rs | 30 +++++++++ resources/genesis/bitcoin-regtest/evm.json | 59 ++++++++--------- resources/genesis/mock/evm.json | 59 ++++++++--------- 8 files changed, 198 insertions(+), 120 deletions(-) diff --git a/crates/evm/src/evm/handler.rs b/crates/evm/src/evm/handler.rs index 840956d06..aa8b20290 100644 --- a/crates/evm/src/evm/handler.rs +++ b/crates/evm/src/evm/handler.rs @@ -21,6 +21,7 @@ use sov_modules_api::{native_debug, native_error, native_warn}; use tracing::instrument; use crate::system_events::SYSTEM_SIGNER; +use crate::{BASE_FEE_VAULT, L1_FEE_VAULT}; #[derive(Copy, Clone, Default, Debug)] pub struct TxInfo { @@ -326,25 +327,18 @@ impl CitreaHandler(context, gas)?; Ok(()) } @@ -366,7 +360,8 @@ impl CitreaHandler( let address = context.evm.env.tx.caller; change_balance(context, amount, false, address) } - -fn increase_coinbase_balance( - context: &mut Context, - amount: U256, -) -> Result<(), EVMError> { - let address = context.evm.env.block.coinbase; - change_balance(context, amount, true, address)?; - Ok(()) -} diff --git a/crates/evm/src/evm/mod.rs b/crates/evm/src/evm/mod.rs index 325cbfe3f..9f49f1043 100644 --- a/crates/evm/src/evm/mod.rs +++ b/crates/evm/src/evm/mod.rs @@ -1,4 +1,4 @@ -use reth_primitives::{Address, BaseFeeParams, B256, KECCAK_EMPTY, U256}; +use reth_primitives::{address, Address, BaseFeeParams, B256, KECCAK_EMPTY, U256}; use revm::primitives::specification::SpecId; use serde::{Deserialize, Serialize}; use sov_modules_api::{StateMap, StateVec}; @@ -29,6 +29,18 @@ use sov_state::codec::BcsCodec; #[cfg(test)] use crate::tests::DEFAULT_CHAIN_ID; +/// Bitcoin light client contract address +pub const BITCOIN_LIGHT_CLIENT_CONTRACT_ADDRESS: Address = + address!("3100000000000000000000000000000000000001"); +/// Bridge contract address +pub const BRIDGE_CONTRACT_ADDRESS: Address = address!("3100000000000000000000000000000000000002"); +/// Base fee vault address +pub const BASE_FEE_VAULT: Address = address!("3100000000000000000000000000000000000003"); +/// L1 fee vault address +pub const L1_FEE_VAULT: Address = address!("3100000000000000000000000000000000000004"); +/// Priority fee vault address +pub const PRIORITY_FEE_VAULT: Address = address!("3100000000000000000000000000000000000005"); + // Stores information about an EVM account #[derive(Deserialize, Serialize, Debug, PartialEq, Clone)] pub(crate) struct AccountInfo { diff --git a/crates/evm/src/tests/call_tests.rs b/crates/evm/src/tests/call_tests.rs index 419002c35..c5079e4b3 100644 --- a/crates/evm/src/tests/call_tests.rs +++ b/crates/evm/src/tests/call_tests.rs @@ -18,7 +18,9 @@ use crate::smart_contracts::{ use crate::tests::test_signer::TestSigner; use crate::tests::utils::get_evm; use crate::tests::DEFAULT_CHAIN_ID; -use crate::{AccountData, EvmConfig, RlpEvmTransaction}; +use crate::{ + AccountData, EvmConfig, RlpEvmTransaction, BASE_FEE_VAULT, L1_FEE_VAULT, PRIORITY_FEE_VAULT, +}; type C = DefaultContext; @@ -629,6 +631,25 @@ pub(crate) fn create_contract_message_with_fee( .unwrap() } +pub(crate) fn create_contract_message_with_priority_fee( + dev_signer: &TestSigner, + nonce: u64, + contract: T, + max_fee_per_gas: u128, + max_priority_fee_per_gas: u128, +) -> RlpEvmTransaction { + dev_signer + .sign_default_transaction_with_priority_fee( + TxKind::Create, + contract.byte_code(), + nonce, + 0, + max_fee_per_gas, + max_priority_fee_per_gas, + ) + .unwrap() +} + pub(crate) fn create_contract_transaction( dev_signer: &TestSigner, nonce: u64, @@ -783,6 +804,7 @@ pub(crate) fn get_evm_config_starting_base_fee( spec: vec![(0, SpecId::SHANGHAI)].into_iter().collect(), block_gas_limit: block_gas_limit.unwrap_or(ETHEREUM_BLOCK_GAS_LIMIT), starting_base_fee, + coinbase: PRIORITY_FEE_VAULT, ..Default::default() }; (config, dev_signer, contract_addr) @@ -790,9 +812,15 @@ pub(crate) fn get_evm_config_starting_base_fee( #[test] fn test_l1_fee_success() { - fn run_tx(l1_fee_rate: u128, expected_balance: U256, expected_coinbase_balance: U256) { + fn run_tx( + l1_fee_rate: u128, + expected_balance: U256, + expected_coinbase_balance: U256, + expected_base_fee_vault_balance: U256, + expected_l1_fee_vault_balance: U256, + ) { let (config, dev_signer, _) = - get_evm_config_starting_base_fee(U256::from_str("1000000").unwrap(), None, 1); + get_evm_config_starting_base_fee(U256::from_str("10000000").unwrap(), None, 1); let (evm, mut working_set) = get_evm(&config); @@ -814,8 +842,13 @@ fn test_l1_fee_success() { let sequencer_address = generate_address::("sequencer"); let context = C::new(sender_address, sequencer_address, 1); - let deploy_message = - create_contract_message_with_fee(&dev_signer, 0, BlockHashContract::default(), 1); + let deploy_message = create_contract_message_with_priority_fee( + &dev_signer, + 0, + BlockHashContract::default(), + 2, + 1, + ); evm.call( CallMessage { @@ -834,13 +867,19 @@ fn test_l1_fee_success() { .get(&dev_signer.address(), &mut working_set) .unwrap(); + let base_fee_valut = evm.accounts.get(&BASE_FEE_VAULT, &mut working_set).unwrap(); + let l1_fee_valut = evm.accounts.get(&L1_FEE_VAULT, &mut working_set).unwrap(); + let coinbase_account = evm .accounts .get(&config.coinbase, &mut working_set) .unwrap(); + assert_eq!(config.coinbase, PRIORITY_FEE_VAULT); assert_eq!(db_account.info.balance, expected_balance); + assert_eq!(base_fee_valut.info.balance, expected_base_fee_vault_balance); assert_eq!(coinbase_account.info.balance, expected_coinbase_balance); + assert_eq!(l1_fee_valut.info.balance, expected_l1_fee_vault_balance); assert_eq!( evm.receipts @@ -862,8 +901,22 @@ fn test_l1_fee_success() { let gas_fee_paid = 114235; - run_tx(0, U256::from(885765), U256::from(gas_fee_paid)); - run_tx(1, U256::from(885288), U256::from(gas_fee_paid + 477)); + run_tx( + 0, + U256::from(9771530), + // priority fee goes to coinbase + U256::from(gas_fee_paid), + U256::from(gas_fee_paid), + U256::from(0), + ); + run_tx( + 1, + U256::from(9771053), + // priority fee goes to coinbase + U256::from(gas_fee_paid), + U256::from(gas_fee_paid), + U256::from(477), + ); } #[test] @@ -1018,7 +1071,6 @@ fn test_l1_fee_halt() { let expenses = 1106947 + // evm gas 445 + // l1 contract deploy fee 52; // l1 contract call fee - assert_eq!( db_account.info.balance, U256::from( @@ -1027,10 +1079,9 @@ fn test_l1_fee_halt() { ) ); - let coinbase_account = evm - .accounts - .get(&config.coinbase, &mut working_set) - .unwrap(); + let base_fee_valut = evm.accounts.get(&BASE_FEE_VAULT, &mut working_set).unwrap(); + let l1_fee_valut = evm.accounts.get(&L1_FEE_VAULT, &mut working_set).unwrap(); - assert_eq!(coinbase_account.info.balance, U256::from(expenses)); + assert_eq!(base_fee_valut.info.balance, U256::from(1106947)); + assert_eq!(l1_fee_valut.info.balance, U256::from(445 + 52)); } diff --git a/crates/evm/src/tests/queries/mod.rs b/crates/evm/src/tests/queries/mod.rs index d4de87ca8..ebd0a7c33 100644 --- a/crates/evm/src/tests/queries/mod.rs +++ b/crates/evm/src/tests/queries/mod.rs @@ -5,7 +5,7 @@ mod log_tests; use std::str::FromStr; -use reth_primitives::{Address, Bytes}; +use reth_primitives::{address, Address, Bytes}; use revm::primitives::{SpecId, KECCAK_EMPTY, U256}; use sov_modules_api::default_context::DefaultContext; use sov_modules_api::hooks::HookSoftConfirmationInfo; @@ -188,14 +188,24 @@ pub fn init_evm_single_block() -> (Evm, WorkingSet, TestSigner) { let dev_signer: TestSigner = TestSigner::new_random(); let config = EvmConfig { - data: vec![AccountData { - address: dev_signer.address(), - balance: U256::from_str("100000000000000000000").unwrap(), // Setting initial balance - code_hash: KECCAK_EMPTY, - code: Bytes::default(), - nonce: 0, - storage: Default::default(), - }], + data: vec![ + AccountData { + address: dev_signer.address(), + balance: U256::from_str("100000000000000000000").unwrap(), // Setting initial balance + code_hash: KECCAK_EMPTY, + code: Bytes::default(), + nonce: 0, + storage: Default::default(), + }, + AccountData { + address: address!("0000000000000000000000000000000000000000"), + balance: U256::from_str("100000000000000000000").unwrap(), // Setting initial balance + code_hash: KECCAK_EMPTY, + code: Bytes::default(), + nonce: 0, + storage: Default::default(), + }, + ], spec: vec![(0, SpecId::SHANGHAI)].into_iter().collect(), ..Default::default() }; diff --git a/crates/evm/src/tests/sys_tx_tests.rs b/crates/evm/src/tests/sys_tx_tests.rs index a15dec683..693b51dbf 100644 --- a/crates/evm/src/tests/sys_tx_tests.rs +++ b/crates/evm/src/tests/sys_tx_tests.rs @@ -21,7 +21,7 @@ use crate::tests::call_tests::{ publish_event_message, }; use crate::tests::utils::get_evm; -use crate::{AccountData, EvmConfig, SYSTEM_SIGNER}; +use crate::{AccountData, EvmConfig, BASE_FEE_VAULT, L1_FEE_VAULT, SYSTEM_SIGNER}; type C = DefaultContext; @@ -216,12 +216,11 @@ fn test_sys_bitcoin_light_client() { }, ] ); + let base_fee_vault = evm.accounts.get(&BASE_FEE_VAULT, &mut working_set).unwrap(); + let l1_fee_vault = evm.accounts.get(&L1_FEE_VAULT, &mut working_set).unwrap(); - let coinbase_account = evm - .accounts - .get(&config.coinbase, &mut working_set) - .unwrap(); - assert_eq!(coinbase_account.info.balance, U256::from(114235 + 477)); + assert_eq!(base_fee_vault.info.balance, U256::from(114235)); + assert_eq!(l1_fee_vault.info.balance, U256::from(477)); let hash = evm .get_call( diff --git a/crates/evm/src/tests/test_signer.rs b/crates/evm/src/tests/test_signer.rs index 49258c90e..83c7edde8 100644 --- a/crates/evm/src/tests/test_signer.rs +++ b/crates/evm/src/tests/test_signer.rs @@ -78,4 +78,34 @@ impl TestSigner { rlp: signed.envelope_encoded().to_vec(), }) } + + /// Signs default Eip1559 transaction with to, data and nonce overridden. + pub(crate) fn sign_default_transaction_with_priority_fee( + &self, + to: TxKind, + data: Vec, + nonce: u64, + value: u128, + max_fee_per_gas: u128, + max_priority_fee_per_gas: u128, + ) -> Result { + let reth_tx = RethTxEip1559 { + to, + input: RethBytes::from(data), + nonce, + value: U256::from(value), + chain_id: DEFAULT_CHAIN_ID, + gas_limit: 1_000_000u64, + max_fee_per_gas, + max_priority_fee_per_gas, + ..Default::default() + }; + + let reth_tx = RethTransaction::Eip1559(reth_tx); + let signed = self.signer.sign_transaction(reth_tx, self.address)?; + + Ok(RlpEvmTransaction { + rlp: signed.envelope_encoded().to_vec(), + }) + } } diff --git a/resources/genesis/bitcoin-regtest/evm.json b/resources/genesis/bitcoin-regtest/evm.json index 223aa82a7..5a9c5f6a7 100644 --- a/resources/genesis/bitcoin-regtest/evm.json +++ b/resources/genesis/bitcoin-regtest/evm.json @@ -54,11 +54,10 @@ "address": "0x3100000000000000000000000000000000000001", "balance": "0x00", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000001", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000001", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000001", @@ -69,11 +68,10 @@ "address": "0x3100000000000000000000000000000000000002", "balance": "0x115EEC47F6CF7E35000000", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000002", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000002", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000002", @@ -84,13 +82,12 @@ "address": "0x3100000000000000000000000000000000000003", "balance": "0x00", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x0000000000000000000000000000000000000000000000000000000000000000" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000001" : "0x06f05b59d3b20000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000003", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x06f05b59d3b20000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000003", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000003", @@ -101,13 +98,12 @@ "address": "0x3100000000000000000000000000000000000004", "balance": "0x00", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x0000000000000000000000000000000000000000000000000000000000000000" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000001" : "0x06f05b59d3b20000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000004", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x06f05b59d3b20000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000004", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000004", @@ -118,13 +114,12 @@ "address": "0x3100000000000000000000000000000000000005", "balance": "0x00", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x0000000000000000000000000000000000000000000000000000000000000000" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000001" : "0x06f05b59d3b20000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000005", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x06f05b59d3b20000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000005", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000005", @@ -137,7 +132,7 @@ "spec": { "0": "SHANGHAI" }, - "coinbase": "0x0000000000000000000000000000000000000000", + "coinbase": "0x3100000000000000000000000000000000000005", "starting_base_fee": 1000000000, "block_gas_limit": 30000000, "base_fee_params": { diff --git a/resources/genesis/mock/evm.json b/resources/genesis/mock/evm.json index 223aa82a7..5a9c5f6a7 100644 --- a/resources/genesis/mock/evm.json +++ b/resources/genesis/mock/evm.json @@ -54,11 +54,10 @@ "address": "0x3100000000000000000000000000000000000001", "balance": "0x00", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000001", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000001", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000001", @@ -69,11 +68,10 @@ "address": "0x3100000000000000000000000000000000000002", "balance": "0x115EEC47F6CF7E35000000", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000002", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000002", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000002", @@ -84,13 +82,12 @@ "address": "0x3100000000000000000000000000000000000003", "balance": "0x00", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x0000000000000000000000000000000000000000000000000000000000000000" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000001" : "0x06f05b59d3b20000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000003", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x06f05b59d3b20000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000003", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000003", @@ -101,13 +98,12 @@ "address": "0x3100000000000000000000000000000000000004", "balance": "0x00", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x0000000000000000000000000000000000000000000000000000000000000000" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000001" : "0x06f05b59d3b20000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000004", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x06f05b59d3b20000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000004", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000004", @@ -118,13 +114,12 @@ "address": "0x3100000000000000000000000000000000000005", "balance": "0x00", "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e8080156069573d5ff35b3d5ffdfea26469706673582212201698835cd7a9e8303f44009c3f144a4dbbfa3ab8ec0bca6489bb06bb1bda401164736f6c63430008180033", - "storage": - { - "0x0000000000000000000000000000000000000000000000000000000000000000" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000001" : "0x06f05b59d3b20000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" : "0x3200000000000000000000000000000000000005", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300" : "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x06f05b59d3b20000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x3200000000000000000000000000000000000005", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + } }, { "address": "0x3200000000000000000000000000000000000005", @@ -137,7 +132,7 @@ "spec": { "0": "SHANGHAI" }, - "coinbase": "0x0000000000000000000000000000000000000000", + "coinbase": "0x3100000000000000000000000000000000000005", "starting_base_fee": 1000000000, "block_gas_limit": 30000000, "base_fee_params": {