diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e4afcec26..8cb600f37b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,11 @@ More expansive patch notes and explanations may be found in the specific [pathfi The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## [0.21.0] - 2025-11-11 + +### Added + +- Support for Starknet 0.14.1 networks. ### Fixed diff --git a/Cargo.lock b/Cargo.lock index 279f7e8508..2137ded047 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5223,7 +5223,7 @@ dependencies = [ [[package]] name = "feeder-gateway" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "clap", @@ -5521,7 +5521,7 @@ checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" [[package]] name = "gateway-test-utils" -version = "0.20.5" +version = "0.21.0" dependencies = [ "reqwest", "serde_json", @@ -8302,7 +8302,7 @@ dependencies = [ [[package]] name = "p2p" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "async-trait", @@ -8341,7 +8341,7 @@ dependencies = [ [[package]] name = "p2p_proto" -version = "0.20.5" +version = "0.21.0" dependencies = [ "fake", "libp2p-identity", @@ -8360,7 +8360,7 @@ dependencies = [ [[package]] name = "p2p_proto_derive" -version = "0.20.5" +version = "0.21.0" dependencies = [ "proc-macro2", "quote", @@ -8369,7 +8369,7 @@ dependencies = [ [[package]] name = "p2p_stream" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "async-trait", @@ -8489,7 +8489,7 @@ checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" [[package]] name = "pathfinder" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "assert_matches", @@ -8515,6 +8515,7 @@ dependencies = [ "p2p_proto", "paste", "pathfinder-block-hashes", + "pathfinder-casm-hashes", "pathfinder-class-hash", "pathfinder-common", "pathfinder-compiler", @@ -8537,6 +8538,7 @@ dependencies = [ "rayon", "reqwest", "rstest 0.18.2", + "rusqlite", "semver 1.0.27", "serde", "serde_json", @@ -8563,7 +8565,15 @@ dependencies = [ [[package]] name = "pathfinder-block-hashes" -version = "0.20.5" +version = "0.21.0" +dependencies = [ + "pathfinder-common", + "pathfinder-crypto", +] + +[[package]] +name = "pathfinder-casm-hashes" +version = "0.21.0" dependencies = [ "pathfinder-common", "pathfinder-crypto", @@ -8571,7 +8581,7 @@ dependencies = [ [[package]] name = "pathfinder-class-hash" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "fake", @@ -8590,7 +8600,7 @@ dependencies = [ [[package]] name = "pathfinder-common" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "bitvec", @@ -8615,7 +8625,7 @@ dependencies = [ [[package]] name = "pathfinder-compiler" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "cairo-lang-starknet 1.0.0-alpha.6", @@ -8630,12 +8640,13 @@ dependencies = [ "serde", "serde_json", "starknet-gateway-test-fixtures", + "starknet_api", "tracing", ] [[package]] name = "pathfinder-consensus" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -8657,7 +8668,7 @@ dependencies = [ [[package]] name = "pathfinder-consensus-fetcher" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "pathfinder-common", @@ -8672,7 +8683,7 @@ dependencies = [ [[package]] name = "pathfinder-crypto" -version = "0.20.5" +version = "0.21.0" dependencies = [ "ark-ff 0.5.0", "assert_matches", @@ -8689,7 +8700,7 @@ dependencies = [ [[package]] name = "pathfinder-ethereum" -version = "0.20.5" +version = "0.21.0" dependencies = [ "alloy", "anyhow", @@ -8709,7 +8720,7 @@ dependencies = [ [[package]] name = "pathfinder-executor" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "blockifier", @@ -8734,7 +8745,7 @@ dependencies = [ [[package]] name = "pathfinder-merkle-tree" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "bitvec", @@ -8750,7 +8761,7 @@ dependencies = [ [[package]] name = "pathfinder-retry" -version = "0.20.5" +version = "0.21.0" dependencies = [ "tokio", "tokio-retry", @@ -8758,7 +8769,7 @@ dependencies = [ [[package]] name = "pathfinder-rpc" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "assert_matches", @@ -8819,7 +8830,7 @@ dependencies = [ [[package]] name = "pathfinder-serde" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "num-bigint 0.4.6", @@ -8834,7 +8845,7 @@ dependencies = [ [[package]] name = "pathfinder-storage" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -8848,8 +8859,10 @@ dependencies = [ "hex", "metrics 0.20.1", "paste", + "pathfinder-casm-hashes", "pathfinder-class-hash", "pathfinder-common", + "pathfinder-compiler", "pathfinder-crypto", "pathfinder-ethereum", "pathfinder-serde", @@ -8858,6 +8871,7 @@ dependencies = [ "r2d2", "r2d2_sqlite", "rand 0.8.5", + "rayon", "rstest 0.18.2", "rusqlite", "serde", @@ -8895,7 +8909,7 @@ dependencies = [ [[package]] name = "pathfinder-version" -version = "0.20.5" +version = "0.21.0" dependencies = [ "vergen", ] @@ -10888,7 +10902,7 @@ dependencies = [ [[package]] name = "starknet-gateway-client" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "assert_matches", @@ -10922,7 +10936,7 @@ dependencies = [ [[package]] name = "starknet-gateway-test-fixtures" -version = "0.20.5" +version = "0.21.0" dependencies = [ "pathfinder-common", "pathfinder-crypto", @@ -10930,7 +10944,7 @@ dependencies = [ [[package]] name = "starknet-gateway-types" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "fake", @@ -12133,7 +12147,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "util" -version = "0.20.5" +version = "0.21.0" dependencies = [ "anyhow", "num-traits", diff --git a/Cargo.toml b/Cargo.toml index 61b47f8cbe..aa794f5a56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ "crates/block-hashes", + "crates/casm-hashes", "crates/class-hash", "crates/common", "crates/compiler", @@ -33,7 +34,7 @@ exclude = ["crates/load-test", "utils/pathfinder-probe"] resolver = "2" [workspace.package] -version = "0.20.5" +version = "0.21.0" edition = "2021" license = "MIT OR Apache-2.0" rust-version = "1.88" diff --git a/crates/casm-hashes/Cargo.toml b/crates/casm-hashes/Cargo.toml new file mode 100644 index 0000000000..81a62c8dbb --- /dev/null +++ b/crates/casm-hashes/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "pathfinder-casm-hashes" +version = { workspace = true } +authors = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +rust-version = { workspace = true } + +[dependencies] +pathfinder-common = { path = "../common" } +pathfinder-crypto = { path = "../crypto" } diff --git a/crates/casm-hashes/fixtures/mainnet-casm-v2-hashes.bin b/crates/casm-hashes/fixtures/mainnet-casm-v2-hashes.bin new file mode 100644 index 0000000000..577d9a85d6 Binary files /dev/null and b/crates/casm-hashes/fixtures/mainnet-casm-v2-hashes.bin differ diff --git a/crates/casm-hashes/fixtures/testnet-sepolia-casm-v2-hashes.bin b/crates/casm-hashes/fixtures/testnet-sepolia-casm-v2-hashes.bin new file mode 100644 index 0000000000..fe75e99a1e Binary files /dev/null and b/crates/casm-hashes/fixtures/testnet-sepolia-casm-v2-hashes.bin differ diff --git a/crates/casm-hashes/src/lib.rs b/crates/casm-hashes/src/lib.rs new file mode 100644 index 0000000000..eec9b1a7d9 --- /dev/null +++ b/crates/casm-hashes/src/lib.rs @@ -0,0 +1,48 @@ +use std::collections::HashMap; +use std::sync::LazyLock; + +use pathfinder_common::{CasmHash, ClassHash}; +use pathfinder_crypto::Felt; + +static PRECOMPUTED_CASM_V2_HASHES: LazyLock> = LazyLock::new(|| { + let mut h = HashMap::new(); + + let mainnet_casm_hashes_v2 = include_bytes!("../fixtures/mainnet-casm-v2-hashes.bin"); + for chunk in mainnet_casm_hashes_v2.chunks_exact(64) { + let class_hash = ClassHash( + Felt::from_be_slice(&chunk[0..32]) + .expect("Invalid class hash in precomputed CASM v2 hashes"), + ); + let casm_hash = CasmHash( + Felt::from_be_slice(&chunk[32..64]) + .expect("Invalid CASM hash in precomputed CASM v2 hashes"), + ); + h.insert(class_hash, casm_hash); + } + + let sepolia_testnet_casm_hashes_v2 = + include_bytes!("../fixtures/testnet-sepolia-casm-v2-hashes.bin"); + for chunk in sepolia_testnet_casm_hashes_v2.chunks_exact(64) { + let class_hash = ClassHash( + Felt::from_be_slice(&chunk[0..32]) + .expect("Invalid class hash in precomputed CASM v2 hashes"), + ); + let casm_hash = CasmHash( + Felt::from_be_slice(&chunk[32..64]) + .expect("Invalid CASM hash in precomputed CASM v2 hashes"), + ); + h.insert(class_hash, casm_hash); + } + + h +}); + +/// Returns the precomputed CASM v2 hash for the given class hash, if it exists. +/// +/// In Starknet 0.14.1 and later CASM hashes are computed using a new algorithm +/// (Blake2 hash). This function provides access to a set of precomputed CASM v2 +/// hashes for known class hashes (generated from classes on Mainnet and Sepolia +/// testnet) to avoid the need for recomputation. +pub fn get_precomputed_casm_v2_hash(class_hash: &ClassHash) -> Option<&CasmHash> { + PRECOMPUTED_CASM_V2_HASHES.get(class_hash) +} diff --git a/crates/class-hash/Cargo.toml b/crates/class-hash/Cargo.toml index b4e833f4bf..1fd2d8cd85 100644 --- a/crates/class-hash/Cargo.toml +++ b/crates/class-hash/Cargo.toml @@ -17,8 +17,8 @@ categories = [ [dependencies] anyhow = { workspace = true } -pathfinder-common = { version = "0.20.5", path = "../common" } -pathfinder-crypto = { version = "0.20.5", path = "../crypto" } +pathfinder-common = { version = "0.21.0", path = "../common" } +pathfinder-crypto = { version = "0.21.0", path = "../crypto" } primitive-types = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true, features = [ diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index d21ab5a1ad..976fcbf232 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -27,7 +27,7 @@ metrics = { workspace = true } num-bigint = { workspace = true } num-traits = "0.2" paste = { workspace = true } -pathfinder-crypto = { version = "0.20.5", path = "../crypto" } +pathfinder-crypto = { version = "0.21.0", path = "../crypto" } pathfinder-tagged = { version = "0.1.0", path = "../tagged" } pathfinder-tagged-debug-derive = { version = "0.1.0", path = "../tagged-debug-derive" } primitive-types = { workspace = true, features = ["serde"] } diff --git a/crates/common/src/state_update.rs b/crates/common/src/state_update.rs index 9424b6cda3..8ad5773d2b 100644 --- a/crates/common/src/state_update.rs +++ b/crates/common/src/state_update.rs @@ -25,6 +25,7 @@ pub struct StateUpdate { pub system_contract_updates: HashMap, pub declared_cairo_classes: HashSet, pub declared_sierra_classes: HashMap, + pub migrated_compiled_classes: HashMap, } #[derive(Default, Debug, Clone, PartialEq, Dummy)] @@ -33,6 +34,7 @@ pub struct StateUpdateData { pub system_contract_updates: HashMap, pub declared_cairo_classes: HashSet, pub declared_sierra_classes: HashMap, + pub migrated_compiled_classes: HashMap, } #[derive(Default, Debug, Clone, PartialEq, Dummy)] @@ -59,6 +61,7 @@ pub struct StateUpdateRef<'a> { pub contract_updates: Vec<(&'a ContractAddress, ContractUpdateRef<'a>)>, pub system_contract_updates: Vec<(&'a ContractAddress, SystemContractUpdateRef<'a>)>, pub declared_sierra_classes: &'a HashMap, + pub migrated_compiled_classes: &'a HashMap, } pub struct ContractUpdateRef<'a> { @@ -185,6 +188,11 @@ impl StateUpdate { self } + pub fn with_migrated_compiled_class(mut self, sierra: SierraHash, casm: CasmHash) -> Self { + self.migrated_compiled_classes.insert(sierra, casm); + self + } + /// The number of individual changes in this state update. /// /// The total amount of: @@ -296,6 +304,7 @@ impl StateUpdate { &self.system_contract_updates, &self.declared_cairo_classes, &self.declared_sierra_classes, + &self.migrated_compiled_classes, ) } @@ -309,7 +318,9 @@ impl StateUpdate { self.system_contract_updates.iter().for_each(|(_, update)| { len += update.storage.len(); }); - len += self.declared_cairo_classes.len() + self.declared_sierra_classes.len(); + len += self.declared_cairo_classes.len() + + self.declared_sierra_classes.len() + + self.migrated_compiled_classes.len(); len.try_into().expect("ptr size is 64bits") } @@ -364,6 +375,7 @@ impl StateUpdateData { &self.system_contract_updates, &self.declared_cairo_classes, &self.declared_sierra_classes, + &self.migrated_compiled_classes, ) } @@ -403,6 +415,7 @@ impl From for StateUpdateData { system_contract_updates: state_update.system_contract_updates, declared_cairo_classes: state_update.declared_cairo_classes, declared_sierra_classes: state_update.declared_sierra_classes, + migrated_compiled_classes: state_update.migrated_compiled_classes, } } } @@ -437,6 +450,7 @@ impl<'a> From<&'a StateUpdate> for StateUpdateRef<'a> { }) .collect(), declared_sierra_classes: &state_update.declared_sierra_classes, + migrated_compiled_classes: &state_update.migrated_compiled_classes, } } } @@ -477,6 +491,7 @@ impl<'a> From<&'a StateUpdateData> for StateUpdateRef<'a> { }) .collect(), declared_sierra_classes: &state_update.declared_sierra_classes, + migrated_compiled_classes: &state_update.migrated_compiled_classes, } } } @@ -577,6 +592,7 @@ mod state_diff_commitment { system_contract_updates: &HashMap, declared_cairo_classes: &HashSet, declared_sierra_classes: &HashMap, + migrated_compiled_classes: &HashMap, ) -> StateDiffCommitment { let mut hasher = PoseidonHasher::new(); hasher.write(felt_bytes!(b"STARKNET_STATE_DIFF0").into()); @@ -595,9 +611,10 @@ mod state_diff_commitment { hasher.write(MontFelt::from(address.0)); hasher.write(MontFelt::from(class_hash.0)); } - // Hash the declared classes. + // Hash the declared classes and the migrated compiled classes. let declared_classes: BTreeSet<_> = declared_sierra_classes .iter() + .chain(migrated_compiled_classes.iter()) .map(|(sierra, casm)| (*sierra, *casm)) .collect(); hasher.write(MontFelt::from(declared_classes.len() as u64)); @@ -964,6 +981,95 @@ mod tests { &Default::default(), &declared_cairo_classes, &declared_sierra_classes, + &Default::default(), + ) + ); + } + + /// Source: + /// https://github.com/starkware-libs/starknet-api/blob/5565e5282f5fead364a41e49c173940fd83dee00/src/block_hash/state_diff_hash_test.rs#L14 + #[test] + fn test_0_13_2_state_diff_commitment_with_migrated_compiled_classes() { + let contract_updates: HashMap<_, _> = [ + ( + ContractAddress(0u64.into()), + ContractUpdate { + class: Some(ContractClassUpdate::Deploy(ClassHash(1u64.into()))), + ..Default::default() + }, + ), + ( + ContractAddress(2u64.into()), + ContractUpdate { + class: Some(ContractClassUpdate::Deploy(ClassHash(3u64.into()))), + ..Default::default() + }, + ), + ( + ContractAddress(4u64.into()), + ContractUpdate { + storage: [ + (StorageAddress(5u64.into()), StorageValue(6u64.into())), + (StorageAddress(7u64.into()), StorageValue(8u64.into())), + ] + .iter() + .cloned() + .collect(), + ..Default::default() + }, + ), + ( + ContractAddress(9u64.into()), + ContractUpdate { + storage: [(StorageAddress(10u64.into()), StorageValue(11u64.into()))] + .iter() + .cloned() + .collect(), + ..Default::default() + }, + ), + ( + ContractAddress(17u64.into()), + ContractUpdate { + nonce: Some(ContractNonce(18u64.into())), + ..Default::default() + }, + ), + ( + ContractAddress(19u64.into()), + ContractUpdate { + class: Some(ContractClassUpdate::Replace(ClassHash(20u64.into()))), + ..Default::default() + }, + ), + ] + .into_iter() + .collect(); + let declared_sierra_classes: HashMap<_, _> = + [(SierraHash(12u64.into()), CasmHash(13u64.into()))] + .iter() + .cloned() + .collect(); + let migrated_compiled_classes: HashMap<_, _> = + [(SierraHash(14u64.into()), CasmHash(15u64.into()))] + .iter() + .cloned() + .collect(); + let declared_cairo_classes: HashSet<_> = + [ClassHash(16u64.into())].iter().cloned().collect(); + + let expected_hash = StateDiffCommitment(felt!( + "0x0281f5966e49ad7dad9323826d53d1d27c0c4e6ebe5525e2e2fbca549bfa0a67" + )); + + assert_eq!( + expected_hash, + state_diff_commitment::compute( + &contract_updates, + &Default::default(), + &declared_cairo_classes, + &declared_sierra_classes, + &migrated_compiled_classes, ) ); } diff --git a/crates/compiler/Cargo.toml b/crates/compiler/Cargo.toml index a4dc2c10c2..09c1d3fc17 100644 --- a/crates/compiler/Cargo.toml +++ b/crates/compiler/Cargo.toml @@ -21,6 +21,7 @@ serde_json = { workspace = true, features = [ "arbitrary_precision", "raw_value", ] } +starknet_api = { workspace = true } tracing = { workspace = true } [dev-dependencies] diff --git a/crates/compiler/src/lib.rs b/crates/compiler/src/lib.rs index 4996d1c599..05c29af073 100644 --- a/crates/compiler/src/lib.rs +++ b/crates/compiler/src/lib.rs @@ -68,11 +68,11 @@ fn parse_sierra_version(program: &serde_json::value::RawValue) -> anyhow::Result } } -/// Parse CASM class definition and return CASM class hash. +/// Parse CASM class definition and return _Blake2_ CASM class hash. /// -/// Uses the _latest_ compiler for the parsing and calculation. -pub fn casm_class_hash(casm_definition: &[u8]) -> anyhow::Result { - v2::casm_class_hash(casm_definition) +/// Uses the _latest_ compiler for the parsing and starknet_api for the hashing. +pub fn casm_class_hash_v2(casm_definition: &[u8]) -> anyhow::Result { + v2::casm_class_hash_v2(casm_definition) } mod v1_0_0_alpha6 { @@ -260,16 +260,22 @@ mod v2 { Ok(casm_definition) } - pub(super) fn casm_class_hash(casm_definition: &[u8]) -> anyhow::Result { + pub(super) fn casm_class_hash_v2(casm_definition: &[u8]) -> anyhow::Result { let ccc: CasmContractClass = serde_json::from_slice(casm_definition).context("Deserializing CASM class")?; - let casm_hash = CasmHash( - pathfinder_crypto::Felt::from_be_bytes(ccc.compiled_class_hash().to_bytes_be()) - .context("Computing CASM class hash")?, - ); + use starknet_api::contract_class::compiled_class_hash::{ + HashVersion, + HashableCompiledClass, + }; + + let casm_hash_v2 = ccc.hash(&HashVersion::V2); + + let casm_hash_v2 = CasmHash(pathfinder_crypto::Felt::from_be_bytes( + casm_hash_v2.0.to_bytes_be(), + )?); - Ok(casm_hash) + Ok(casm_hash_v2) } } diff --git a/crates/consensus/Cargo.toml b/crates/consensus/Cargo.toml index b754ec13bd..e75b68b998 100644 --- a/crates/consensus/Cargo.toml +++ b/crates/consensus/Cargo.toml @@ -18,8 +18,8 @@ malachite-consensus = { package = "informalsystems-malachitebft-core-consensus", malachite-metrics = { package = "informalsystems-malachitebft-metrics", version = "0.5" } malachite-signing-ed25519 = { package = "informalsystems-malachitebft-signing-ed25519", version = "0.5", features = ["serde"] } malachite-types = { package = "informalsystems-malachitebft-core-types", version = "0.5" } -pathfinder-common = { version = "0.20.5", path = "../common" } -pathfinder-crypto = { version = "0.20.5", path = "../crypto" } +pathfinder-common = { version = "0.21.0", path = "../common" } +pathfinder-crypto = { version = "0.21.0", path = "../crypto" } rand = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } diff --git a/crates/executor/src/block.rs b/crates/executor/src/block.rs index 839a1939b4..8cc87b8409 100644 --- a/crates/executor/src/block.rs +++ b/crates/executor/src/block.rs @@ -102,6 +102,42 @@ impl BlockExecutor { }) } + /// Create a new BlockExecutor from a StateUpdate + /// This allows reconstructing an executor from a stored state diff + /// checkpoint + pub fn new_with_pending_state( + chain_id: ChainId, + block_info: BlockInfo, + eth_fee_address: ContractAddress, + strk_fee_address: ContractAddress, + db_conn: pathfinder_storage::Connection, + pending_state: std::sync::Arc, + ) -> anyhow::Result { + let execution_state = ExecutionState::validation( + chain_id, + block_info, + Some(pending_state), + Default::default(), + eth_fee_address, + strk_fee_address, + None, + ); + let storage_adapter = ConcurrentStorageAdapter::new(db_conn); + let executor = create_executor(storage_adapter, execution_state)?; + let initial_state = executor + .block_state + .as_ref() + .expect(BLOCK_STATE_ACCESS_ERR) + .clone(); + + Ok(Self { + executor, + initial_state, + declared_deprecated_classes: Vec::new(), + next_txn_idx: 0, + }) + } + /// Evecute a batch of transactions in the current block. pub fn execute( &mut self, @@ -209,11 +245,39 @@ impl BlockExecutor { pub fn set_transaction_index(&mut self, index: usize) { self.next_txn_idx = index; } + + /// Extract state diff without consuming the executor + /// This allows extracting the diff for rollback scenarios without losing + /// the executor + /// + /// Note: This method does NOT call `executor.finalize()`, which means it + /// doesn't include stateful compression changes (system contract 0x2 + /// updates). These changes are only needed when finalizing the proposal + /// for commitment computation, not for intermediate diff extraction + /// during batch execution. + pub fn extract_state_diff(&self) -> anyhow::Result { + let current_state = self + .executor + .block_state + .as_ref() + .expect(BLOCK_STATE_ACCESS_ERR); + + let mut cloned_state = current_state.clone(); + let StateChanges { state_maps, .. } = cloned_state.to_state_diff()?; + + let diff = to_state_diff( + state_maps, + self.initial_state.clone(), + self.declared_deprecated_classes.iter().copied(), + )?; + Ok(diff) + } } #[cfg(test)] mod tests { + use pathfinder_common::state_update::StateUpdateData; use pathfinder_common::transaction::{L1HandlerTransaction, TransactionVariant}; use pathfinder_common::{ contract_address, @@ -227,6 +291,7 @@ mod tests { use pathfinder_crypto::Felt; use pathfinder_storage::StorageBuilder; + use crate::execution_state::create_executor; use crate::BlockExecutor; // Fee token addresses (same as in pathfinder_rpc::context) @@ -638,7 +703,7 @@ mod tests { let single_state_diff = single_executor.finalize().expect("Failed to finalize"); // Chained execution with different batch sizes: [2, 1, 2] - let batches = vec![ + let batches = [ vec![ executor_transactions[0].clone(), executor_transactions[1].clone(), @@ -650,7 +715,8 @@ mod tests { ], ]; - let mut current_executor = BlockExecutor::new( + // Execute batch 1 + let mut executor1 = BlockExecutor::new( chain_id, false, block_info, @@ -658,28 +724,54 @@ mod tests { STRK_FEE_TOKEN_ADDRESS, storage.connection().expect("Failed to get connection"), ) - .expect("Failed to create first executor"); - - let mut total_receipts = 0; - - for batch in batches.into_iter() { - current_executor = BlockExecutor::new( - chain_id, - false, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ) - .expect("Failed to create executor"); - - let receipts = current_executor - .execute(batch) - .expect("Failed to execute batch"); - total_receipts += receipts.len(); - } + .expect("Failed to create executor1"); - let final_state_diff = current_executor.finalize().expect("Failed to finalize"); + let receipts1 = executor1 + .execute(batches[0].clone()) + .expect("Failed to execute batch1"); + let state1 = executor1 + .get_final_state() + .expect("Failed to get state from executor1"); + + // Execute batch 2 with state from batch 1 + let mut executor2 = BlockExecutor::new_with_initial_state( + chain_id, + false, + block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + storage.connection().expect("Failed to get connection"), + state1, + ) + .expect("Failed to create executor2"); + + executor2.set_transaction_index(2); + let receipts2 = executor2 + .execute(batches[1].clone()) + .expect("Failed to execute batch2"); + let state2 = executor2 + .get_final_state() + .expect("Failed to get state from executor2"); + + // Execute batch 3 with state from batch 2 + let mut executor3 = BlockExecutor::new_with_initial_state( + chain_id, + false, + block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + storage.connection().expect("Failed to get connection"), + state2, + ) + .expect("Failed to create executor3"); + + executor3.set_transaction_index(3); + let receipts3 = executor3 + .execute(batches[2].clone()) + .expect("Failed to execute batch3"); + + let total_receipts = receipts1.len() + receipts2.len() + receipts3.len(); + let final_state_diff = executor3.finalize().expect("Failed to finalize"); // Check receipt count as a first sanity check assert_eq!( @@ -691,4 +783,340 @@ mod tests { // Detailed content validation validate_state_diff_content(&single_state_diff, &final_state_diff); } + + /// Test extracting state diff without consuming the executor + #[test] + fn test_extract_state_diff_without_consuming() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + + let block_info = crate::types::BlockInfo { + number: pathfinder_common::BlockNumber::new_or_panic(1), + timestamp: pathfinder_common::BlockTimestamp::new_or_panic(1000), + sequencer_address: pathfinder_common::SequencerAddress::ZERO, + l1_da_mode: pathfinder_common::L1DataAvailabilityMode::Calldata, + eth_l1_gas_price: pathfinder_common::GasPrice::ZERO, + strk_l1_gas_price: pathfinder_common::GasPrice::ZERO, + eth_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, + strk_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, + eth_l2_gas_price: pathfinder_common::GasPrice::ZERO, + strk_l2_gas_price: pathfinder_common::GasPrice::ZERO, + starknet_version: pathfinder_common::StarknetVersion::new(0, 14, 0, 0), + }; + + let transactions = vec![ + create_simple_l1_handler_transaction(1, chain_id), + create_simple_l1_handler_transaction(2, chain_id), + ]; + + let executor_transactions: Vec = transactions + .into_iter() + .map(convert_to_executor_transaction) + .collect::>>() + .expect("Failed to convert transactions"); + + // Create executor and execute + let mut executor = BlockExecutor::new( + chain_id, + false, + block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + storage.connection().expect("Failed to get connection"), + ) + .expect("Failed to create executor"); + + executor + .execute(executor_transactions) + .expect("Failed to execute"); + + // Extract state diff without consuming executor + let _extracted_diff = executor + .extract_state_diff() + .expect("Failed to extract state diff"); + + // Verify executor is still usable after extraction + let tx_index = executor.get_transaction_index(); + assert_eq!(tx_index, 2, "Transaction index should be 2"); + } + + /// Test full workflow: extract diffs, merge, and reconstruct executor + #[test] + fn test_single_executor_with_state_diff_reconstruction() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + + let block_info = crate::types::BlockInfo { + number: pathfinder_common::BlockNumber::new_or_panic(1), + timestamp: pathfinder_common::BlockTimestamp::new_or_panic(1000), + sequencer_address: pathfinder_common::SequencerAddress::ZERO, + l1_da_mode: pathfinder_common::L1DataAvailabilityMode::Calldata, + eth_l1_gas_price: pathfinder_common::GasPrice::ZERO, + strk_l1_gas_price: pathfinder_common::GasPrice::ZERO, + eth_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, + strk_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, + eth_l2_gas_price: pathfinder_common::GasPrice::ZERO, + strk_l2_gas_price: pathfinder_common::GasPrice::ZERO, + starknet_version: pathfinder_common::StarknetVersion::new(0, 14, 0, 0), + }; + + // Create transactions for 3 batches + let all_tx = vec![ + create_simple_l1_handler_transaction(1, chain_id), + create_simple_l1_handler_transaction(2, chain_id), + create_simple_l1_handler_transaction(3, chain_id), + ]; + + let executor_tx: Vec = all_tx + .into_iter() + .map(convert_to_executor_transaction) + .collect::>>() + .expect("Failed to convert transactions"); + + let batches = [ + vec![executor_tx[0].clone()], + vec![executor_tx[1].clone()], + vec![executor_tx[2].clone()], + ]; + + // Execute all batches in single executor (simulating optimized approach) + let mut single_executor = BlockExecutor::new( + chain_id, + false, + block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + storage.connection().expect("Failed to get connection"), + ) + .expect("Failed to create executor"); + + let mut cumulative_state_updates = Vec::new(); + + // Execute batch 1 + single_executor.set_transaction_index(0); + single_executor + .execute(batches[0].clone()) + .expect("Failed to execute batch 1"); + let diff_1 = single_executor + .extract_state_diff() + .expect("Failed to extract diff 1"); + let state_update_data_1: StateUpdateData = diff_1.into(); + // Store cumulative state after batch 1 + cumulative_state_updates.push(state_update_data_1.clone()); + + // Execute batch 2 + single_executor.set_transaction_index(1); + single_executor + .execute(batches[1].clone()) + .expect("Failed to execute batch 2"); + let diff_2 = single_executor + .extract_state_diff() + .expect("Failed to extract diff 2"); + let diff_2_clone = diff_2.clone(); // Clone for validation later + let state_update_data_2: StateUpdateData = diff_2.into(); + // Store cumulative state after batch 2 (diff_2 already includes batch 1) + cumulative_state_updates.push(state_update_data_2.clone()); + + // Execute batch 3 + single_executor.set_transaction_index(2); + single_executor + .execute(batches[2].clone()) + .expect("Failed to execute batch 3"); + let final_diff = single_executor.finalize().expect("Failed to finalize"); + + // Now create a reference executor using chained approach + // Execute batches 1+2 in chained executors to get reference state + let mut ref_executor_1 = BlockExecutor::new( + chain_id, + false, + block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + storage.connection().expect("Failed to get connection"), + ) + .expect("Failed to create reference executor 1"); + + ref_executor_1 + .execute(batches[0].clone()) + .expect("Failed to execute batch 1 in reference executor"); + let ref_state_1 = ref_executor_1 + .get_final_state() + .expect("Failed to get state from reference executor 1"); + + let mut ref_executor_2 = BlockExecutor::new_with_initial_state( + chain_id, + false, + block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + storage.connection().expect("Failed to get connection"), + ref_state_1, + ) + .expect("Failed to create reference executor 2"); + + ref_executor_2 + .execute(batches[1].clone()) + .expect("Failed to execute batch 2 in reference executor"); + + // Extract reference diff after batch 2 (this is our ground truth) + let ref_diff_after_batch_2 = ref_executor_2 + .extract_state_diff() + .expect("Failed to extract reference diff"); + + // TEST 1: Validate that extracted diff matches reference + // Note: L1Handler transactions may produce empty diffs, which is fine + // What matters is that the diffs match between single and chained executors + + // Extracted diff from single executor should match reference + assert_eq!( + diff_2_clone.storage_diffs.len(), + ref_diff_after_batch_2.storage_diffs.len(), + "Storage diffs count: extracted vs reference after batch 2" + ); + assert_eq!( + diff_2_clone.deployed_contracts.len(), + ref_diff_after_batch_2.deployed_contracts.len(), + "Deployed contracts count: extracted vs reference after batch 2" + ); + assert_eq!( + diff_2_clone.nonces.len(), + ref_diff_after_batch_2.nonces.len(), + "Nonces count: extracted vs reference after batch 2" + ); + + // Use detailed validation to compare full diff content (validates actual + // keys/values, not just lengths) + validate_state_diff_content(&diff_2_clone, &ref_diff_after_batch_2); + + // Verify we can reconstruct executor from cumulative state after batch 2 + // Note: diff_2 is already cumulative (includes batch 1 + batch 2), so we use it + // directly + let state_update_from_batch_2 = pathfinder_common::StateUpdate { + block_hash: pathfinder_common::BlockHash::ZERO, + parent_state_commitment: pathfinder_common::StateCommitment::ZERO, + state_commitment: pathfinder_common::StateCommitment::ZERO, + contract_updates: state_update_data_2.contract_updates, + system_contract_updates: state_update_data_2.system_contract_updates, + declared_cairo_classes: state_update_data_2.declared_cairo_classes, + declared_sierra_classes: state_update_data_2.declared_sierra_classes, + migrated_compiled_classes: state_update_data_2.migrated_compiled_classes, + }; + + // Create executor from cumulative state update (batch 2 state) + use std::sync::Arc; + let execution_state = crate::ExecutionState::validation( + chain_id, + false, + block_info, + Some(Arc::new(state_update_from_batch_2)), + Default::default(), + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + None, + ); + + let storage_adapter = crate::state_reader::ConcurrentStorageAdapter::new( + storage.connection().expect("Failed to get connection"), + ); + + // Create BlockExecutor wrapper around the reconstructed executor + let mut reconstructed_executor_wrapper = BlockExecutor::new_with_initial_state( + chain_id, + false, + block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + storage.connection().expect("Failed to get connection"), + create_executor(storage_adapter, execution_state) + .expect("Failed to reconstruct executor") + .block_state + .expect("Block state should exist") + .clone(), + ) + .expect("Failed to create BlockExecutor wrapper"); + + reconstructed_executor_wrapper.set_transaction_index(2); + + // TEST 2: Reconstructed executor should have correct state + // Execute batch 3 in reconstructed executor + let reconstructed_batch_3_receipts = reconstructed_executor_wrapper + .execute(batches[2].clone()) + .expect("Failed to execute batch 3 in reconstructed executor"); + + // Execute batch 3 in reference executor for comparison + let mut ref_executor_3 = BlockExecutor::new_with_initial_state( + chain_id, + false, + block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + storage.connection().expect("Failed to get connection"), + ref_executor_2 + .get_final_state() + .expect("Failed to get state from reference executor 2"), + ) + .expect("Failed to create reference executor 3"); + + ref_executor_3.set_transaction_index(2); + + let ref_batch_3_receipts = ref_executor_3 + .execute(batches[2].clone()) + .expect("Failed to execute batch 3 in reference executor"); + + // TEST 3: Results should be identical + assert_eq!( + reconstructed_batch_3_receipts.len(), + ref_batch_3_receipts.len(), + "Receipt count mismatch: reconstructed vs reference for batch 3" + ); + + // Compare receipts - validate critical fields match + for (i, (recon_receipt, ref_receipt)) in reconstructed_batch_3_receipts + .iter() + .zip(ref_batch_3_receipts.iter()) + .enumerate() + { + assert_eq!( + recon_receipt.0.transaction_index, ref_receipt.0.transaction_index, + "Transaction index mismatch at position {i}" + ); + assert_eq!( + recon_receipt.0.execution_status, ref_receipt.0.execution_status, + "Execution status mismatch at position {i}" + ); + assert_eq!( + recon_receipt.0.actual_fee, ref_receipt.0.actual_fee, + "Actual fee mismatch at position {i}" + ); + assert_eq!( + recon_receipt.0.l2_to_l1_messages.len(), + ref_receipt.0.l2_to_l1_messages.len(), + "L2 to L1 messages count mismatch at position {i}" + ); + assert_eq!( + recon_receipt.1.len(), + ref_receipt.1.len(), + "Events count mismatch at position {i}" + ); + } + + // TEST 4: Final state diffs should match + let reconstructed_final_diff = reconstructed_executor_wrapper + .finalize() + .expect("Failed to finalize reconstructed executor"); + let ref_final_diff = ref_executor_3 + .finalize() + .expect("Failed to finalize reference executor"); + + // Use existing validation function + validate_state_diff_content(&reconstructed_final_diff, &ref_final_diff); + + // Verify final diff from single executor has expected structure + assert!( + !final_diff.storage_diffs.is_empty() + || !final_diff.deployed_contracts.is_empty() + || !final_diff.nonces.is_empty(), + "Final state diff should have some changes" + ); + } } diff --git a/crates/executor/src/pending.rs b/crates/executor/src/pending.rs index d1a029da01..e25d22df3a 100644 --- a/crates/executor/src/pending.rs +++ b/crates/executor/src/pending.rs @@ -99,6 +99,15 @@ impl StateReader for PendingStateReader { ) -> blockifier::state::state_api::StateResult { self.state.get_compiled_class_hash(class_hash) } + + fn get_compiled_class_hash_v2( + &self, + class_hash: starknet_api::core::ClassHash, + compiled_class: &RunnableCompiledClass, + ) -> blockifier::state::state_api::StateResult { + self.state + .get_compiled_class_hash_v2(class_hash, compiled_class) + } } #[cfg(test)] diff --git a/crates/executor/src/state_reader.rs b/crates/executor/src/state_reader.rs index 363b99c74e..1d909549f2 100644 --- a/crates/executor/src/state_reader.rs +++ b/crates/executor/src/state_reader.rs @@ -1,6 +1,9 @@ +use std::sync::{Arc, Mutex}; + use blockifier::execution::contract_class::RunnableCompiledClass; use blockifier::state::errors::StateError; use blockifier::state::state_api::StateReader; +use cached::Cached; use pathfinder_common::{BlockNumber, ClassHash, StorageAddress, StorageValue}; use pathfinder_crypto::Felt; use starknet_api::contract_class::SierraVersion; @@ -41,6 +44,8 @@ pub struct PathfinderStateReader { ignore_block_number_for_classes: bool, #[allow(unused)] native_class_cache: Option, + casm_hash_v2_cache: + Arc>>, } impl PathfinderStateReader { @@ -55,6 +60,7 @@ impl PathfinderStateReader { block_number, ignore_block_number_for_classes, native_class_cache, + casm_hash_v2_cache: Arc::new(Mutex::new(cached::SizedCache::with_size(1024))), } } @@ -343,4 +349,48 @@ impl StateReader for PathfinderStateReader { casm_hash.0.into_starkfelt(), )) } + + fn get_compiled_class_hash_v2( + &self, + class_hash: starknet_api::core::ClassHash, + compiled_class: &RunnableCompiledClass, + ) -> blockifier::state::state_api::StateResult { + let pathfinder_class_hash = ClassHash(class_hash.0.into_felt()); + + tracing::trace!(class_hash=%pathfinder_class_hash, "Getting compiled class hash v2"); + + // First, look up in CASM v2 hash cache and return if found. + let casm_hash = self + .casm_hash_v2_cache + .lock() + .unwrap() + .cache_get(&pathfinder_class_hash) + .cloned(); + if let Some(casm_hash) = casm_hash { + return Ok(casm_hash); + } + + // Look up pre-computed CASM v2 hash from storage, fall back to computing it if + // not found. + let casm_hash = self.storage_adapter.casm_hash_v2(pathfinder_class_hash)?; + match casm_hash { + Some(casm_hash) => Ok(starknet_api::core::CompiledClassHash( + casm_hash.0.into_starkfelt(), + )), + None => { + let casm_hash = blockifier::state::utils::get_compiled_class_hash_v2( + self, + class_hash, + compiled_class, + ); + if let Ok(compiled_class_hash) = casm_hash { + self.casm_hash_v2_cache + .lock() + .unwrap() + .cache_set(pathfinder_class_hash, compiled_class_hash); + } + casm_hash + } + } + } } diff --git a/crates/executor/src/state_reader/storage_adapter.rs b/crates/executor/src/state_reader/storage_adapter.rs index 82186420f6..1c89a3d20d 100644 --- a/crates/executor/src/state_reader/storage_adapter.rs +++ b/crates/executor/src/state_reader/storage_adapter.rs @@ -63,6 +63,7 @@ pub trait StorageAdapter { ) -> Result, StateError>; fn casm_hash(&self, class_hash: ClassHash) -> Result, StateError>; + fn casm_hash_v2(&self, class_hash: ClassHash) -> Result, StateError>; fn casm_hash_at( &self, diff --git a/crates/executor/src/state_reader/storage_adapter/concurrent.rs b/crates/executor/src/state_reader/storage_adapter/concurrent.rs index d5b8b7a832..f43a8f8130 100644 --- a/crates/executor/src/state_reader/storage_adapter/concurrent.rs +++ b/crates/executor/src/state_reader/storage_adapter/concurrent.rs @@ -62,6 +62,7 @@ enum Command { SyncSender, StateError>>, ), CasmHash(ClassHash, SyncSender, StateError>>), + CasmHashV2(ClassHash, SyncSender, StateError>>), CasmHashAt( BlockId, ClassHash, @@ -218,6 +219,14 @@ impl StorageAdapter for ConcurrentStorageAdapter { rx.recv().expect("Channel not to be closed") } + fn casm_hash_v2(&self, class_hash: ClassHash) -> Result, StateError> { + let (tx, rx) = mpsc::sync_channel(1); + self.tx + .send(Command::CasmHashV2(class_hash, tx)) + .expect("Receiver not to be dropped"); + rx.recv().expect("Channel not to be closed") + } + fn casm_hash_at( &self, block_id: BlockId, @@ -309,6 +318,13 @@ fn db_thread( Command::CasmHash(class_hash, sender) => sender .send(db_tx.casm_hash(class_hash).map_err(map_anyhow_to_state_err)) .expect("Receiver not to be dropped"), + Command::CasmHashV2(class_hash, sender) => sender + .send( + db_tx + .casm_hash_v2(class_hash) + .map_err(map_anyhow_to_state_err), + ) + .expect("Receiver not to be dropped"), Command::CasmHashAt(block_id, class_hash, sender) => sender .send( db_tx diff --git a/crates/executor/src/state_reader/storage_adapter/rc.rs b/crates/executor/src/state_reader/storage_adapter/rc.rs index f5592a503a..fb97925c26 100644 --- a/crates/executor/src/state_reader/storage_adapter/rc.rs +++ b/crates/executor/src/state_reader/storage_adapter/rc.rs @@ -107,6 +107,15 @@ impl<'tx> StorageAdapter for RcStorageAdapter<'tx> { .map_err(map_anyhow_to_state_err) } + fn casm_hash_v2( + &self, + class_hash: pathfinder_common::ClassHash, + ) -> Result, StateError> { + self.db_tx + .casm_hash_v2(class_hash) + .map_err(map_anyhow_to_state_err) + } + fn casm_hash_at( &self, block_id: BlockId, diff --git a/crates/executor/src/types.rs b/crates/executor/src/types.rs index 88287cc005..ca131b195f 100644 --- a/crates/executor/src/types.rs +++ b/crates/executor/src/types.rs @@ -570,6 +570,7 @@ pub struct StateDiff { pub declared_classes: Vec, pub nonces: BTreeMap, pub replaced_classes: Vec, + pub migrated_compiled_classes: Vec, } #[derive(Debug, Clone, Eq, PartialEq, PartialOrd, Ord)] @@ -596,6 +597,12 @@ pub struct ReplacedClass { pub class_hash: ClassHash, } +#[derive(Debug, Clone, Eq, PartialEq, PartialOrd, Ord)] +pub struct MigratedCompiledClass { + pub class_hash: SierraHash, + pub compiled_class_hash: CasmHash, +} + #[derive(Debug, Default, Clone, Eq, PartialEq)] pub struct ExecutionResources { pub computation_resources: ComputationResources, @@ -887,6 +894,7 @@ impl From for StateUpdateData { declared_classes, nonces, replaced_classes, + migrated_compiled_classes, } = x; let mut contract_updates = HashMap::new(); @@ -944,6 +952,10 @@ impl From for StateUpdateData { .into_iter() .map(|c| (c.class_hash, c.compiled_class_hash)) .collect(), + migrated_compiled_classes: migrated_compiled_classes + .into_iter() + .map(|c| (c.class_hash, c.compiled_class_hash)) + .collect(), } } } @@ -1216,6 +1228,9 @@ pub(crate) fn to_state_diff( }) .collect(), replaced_classes, + // Migrated compiled classes are computed only during finalization, so they're not available + // after executing a single transaction. + migrated_compiled_classes: Default::default(), }) } diff --git a/crates/feeder-gateway/src/main.rs b/crates/feeder-gateway/src/main.rs index 3b8e6bb669..4524c4a88f 100644 --- a/crates/feeder-gateway/src/main.rs +++ b/crates/feeder-gateway/src/main.rs @@ -41,6 +41,7 @@ use serde::{Deserialize, Serialize}; use starknet_gateway_types::reply::state_update::{ DeclaredSierraClass, DeployedContract, + MigratedCompiledClass, ReplacedClass, StorageDiff, }; @@ -657,6 +658,15 @@ fn storage_to_gateway( }) .collect(); + let migrated_compiled_classes = state_update + .migrated_compiled_classes + .into_iter() + .map(|(sierra_hash, casm_hash)| MigratedCompiledClass { + class_hash: sierra_hash, + compiled_class_hash: casm_hash, + }) + .collect(); + let state_diff = starknet_gateway_types::reply::state_update::StateDiff { storage_diffs, deployed_contracts, @@ -664,6 +674,7 @@ fn storage_to_gateway( declared_classes, nonces, replaced_classes, + migrated_compiled_classes, }; starknet_gateway_types::reply::StateUpdate { diff --git a/crates/gateway-client/src/lib.rs b/crates/gateway-client/src/lib.rs index 66d4d74778..155d751a62 100644 --- a/crates/gateway-client/src/lib.rs +++ b/crates/gateway-client/src/lib.rs @@ -1206,6 +1206,23 @@ mod tests { .unwrap(); } + #[test_log::test(tokio::test)] + async fn success_0_14_1_with_migrated_compiled_classes() { + let (_jh, url) = setup([( + "/feeder_gateway/get_state_update?blockNumber=3077642&includeBlock=true", + ( + starknet_gateway_test_fixtures::v0_14_1::state_update_with_block::SEPOLIA_INTEGRATION_3077642, + 200, + ), + )]); + let client = Client::for_test(url).unwrap(); + + client + .state_update_with_block(BlockNumber::new_or_panic(3077642)) + .await + .unwrap(); + } + #[test_log::test(tokio::test)] async fn block_not_found() { const BLOCK_NUMBER: u64 = 99999999; diff --git a/crates/gateway-test-fixtures/fixtures/0.14.1/state_update/sepolia_integration_3077642.json b/crates/gateway-test-fixtures/fixtures/0.14.1/state_update/sepolia_integration_3077642.json new file mode 100644 index 0000000000..965f821491 --- /dev/null +++ b/crates/gateway-test-fixtures/fixtures/0.14.1/state_update/sepolia_integration_3077642.json @@ -0,0 +1,16747 @@ +{ + "block": { + "block_hash": "0x7c6517ec2c503f9fc80ade2df901a1dbe067ab8cfb8c6bf8e7d04a29c1dde0b", + "parent_block_hash": "0x6e9a0066e864c7d32acd0d3e2a8ddc20898fc3677be6f1db198f731640ec37f", + "block_number": 3077642, + "state_root": "0x7e472f4392adc406f482ed52f8f85c5b1c7649d390c259b073b79f5e5adee5c", + "transaction_commitment": "0x2fac878d7a437b75b5b5689102b04d1f8bf8cfbd0bfdae28cdfa8267a7f8dab", + "event_commitment": "0x2b3927e604e09403fd89ed86bed08dd2430905e6afae267ac37dd33dee96fa4", + "receipt_commitment": "0x75741122287ea0ad0bbc28a92f7b1437ff7703f8479dd4a7da0e8a4204c8fb4", + "state_diff_commitment": "0x31dc9b20993d7256c0b407c7f36d9cb77b7d44788b40f40c770785b1ba421c9", + "state_diff_length": 48, + "status": "ACCEPTED_ON_L1", + "l1_da_mode": "BLOB", + "l1_gas_price": { + "price_in_wei": "0x3b9aca00", + "price_in_fri": "0xe8d4a51000" + }, + "l1_data_gas_price": { + "price_in_wei": "0x1", + "price_in_fri": "0x3e8" + }, + "l2_gas_price": { + "price_in_wei": "0x64", + "price_in_fri": "0x186a0" + }, + "transactions": [ + { + "transaction_hash": "0x2d5f54704fa03a419bd8206f4da767c078dfef38ab136ae4e5afcca9e23db0d", + "version": "0x3", + "signature": [ + "0x523b4a71760c79de42ed356079c20ddf1f4eb01b27d364aa60d002bcb2d6cf7", + "0x6cf91d0d70e1c121e3b437c225b647917a312a2bedee1d57987993e102d4766" + ], + "nonce": "0x4d00fa", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1bd919403248da3ed5d9f4839d3c53accabbf46824e521a1d8e449d0a5e0b79", + "version": "0x3", + "signature": [ + "0x140fa385c569e1390f6f85074aa5c785160cabd18a21fadb48bdb0c100c0504", + "0x47d7ece822c9a810b8363ad1de2806aa113b6d1e85d4b99b9f546170abf08d1" + ], + "nonce": "0x4d00fb", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x331", + "0x10bf93a08d0f1de17947dee726ba218e194826832da2eba5b00ac0b709e6cc3", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1fb1e6b962a752c7908452fb688da8fb1a10e1a7f31974937a68a0bcd083167", + "version": "0x3", + "signature": [ + "0x17eb4b38314a5b6b63803046877c842e3e084441dd1c903291aa61157e92b93", + "0x6597b204a56047a464e5651c1b90c63b9e93603fc8e333aed9318fb625925f8" + ], + "nonce": "0x4d00fc", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x18f", + "0x66343e25175c72e173765da09e9950831a9d7c31ff9dfbfe0a278aeca6274dd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5fc4ba7708e32649f75ce8a73433211e6c7498661b859878d088a017f28bd38", + "version": "0x3", + "signature": [ + "0x3f408060cdcbcb4d0bb4de4c335c14970ba4b56ff1a9c16721620756cffd4f0", + "0x2d1f936acd4fbe3222cc6d5ba2ce457c69dbe3533c12039e5b21fe07e5afd08" + ], + "nonce": "0x4d00fd", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x2da691c6ea98b793c80ad0ea4326e30ee6980fe5806cbf07b730e9080bd239f", + "0x3", + "0x541114b6ab7d15ad94f4b926254cef4af78df6676807ded676d7b220bb2235d", + "0x78f0708246cc3c9eba6e196117d5811d43b0af8598e195f47cae9f4fcb6bbc2", + "0x11e74258f2da53cdc5106099a2d4ebb2b68118263fe031deefbabe261bd0f76", + "0x49359142acfeec3dc876fcb5464c63584cd7c905d1127d1dbb0f6e0411b49cf" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x29591c07c917ced4789035fbf42ad34e49477b2bf0167e550512252afa53c44", + "version": "0x3", + "signature": [ + "0x848d4067f4d305d2daaccbfee7228ee1a92f29dec450ed28c2492ce0c33986", + "0x73ad69f383d1b8927f8becfe1697c7b1031d9b4ab4c1185dc9e331b63d559a2" + ], + "nonce": "0x4d00fe", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xb64b2591ab50ee2d0da9ae8edd28739d", + "0xa324e4886cf324abe2d27046555d53c1" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x255be68d67cd61f631460c085dddf2d794b2513d10762902c5ff1661d1b9f26", + "version": "0x3", + "signature": [ + "0x2a7dd0e0dd4e86d8fae980d3a3538db7e17bb41eba92c2c3ee3f6409e730b6b", + "0x4fc93ceb413d74c12973766da0f51d0d5e818a54f0b52c7df278b39f12ce6b8" + ], + "nonce": "0x4d00ff", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3d3", + "0x4baca172fca51b57f0b0117558458e8a2f91357f9630fbb08039b4ab8259b11", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43e198ad543d0cff82e4d3f41524cc9722691d8353d298fb010db1f8cdc50fd", + "version": "0x3", + "signature": [ + "0x3c6f7b57c9f984a651ad92fd69e70ea3742ae84cffd6ad06873ca0b78913ffa", + "0x113f887d21bcae43df10e79e4d8e807f09cecbc0f31c9437e88182efa3c718d" + ], + "nonce": "0x4d0100", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x57ceb0f62e632d8e07ba5ad871c5c17b6d92628e420bd99db16fda1fc59ce81", + "0x3", + "0x78c29088e290497c4f26d1c524ab41fca6b9f83630510b79fdefc2be6808ad4", + "0x58daf38835834b28bfcff618f70a06cb6eb54fba222e893cacdfe05fb2b6faa", + "0x2d661e18cbc6550572f02c4f5c79b35e463d104d86a9c6a080d1b9841c61f84", + "0x19c3bbc39fd5cbc382a190f30138e0a779bc8c9f99ffe91368f6b83298dac1a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4528ced42391594cac7e5febff81a6cdbf04ca6844ebe12533a247ba6dbb23a", + "version": "0x3", + "signature": [ + "0x6f2acdfe5cd52e9bcde4bbad8a3cc6c8e64ca991a7625735991f9d8aab63a32", + "0x1f18d949a59fd1ebaaf0c3de50635f2830a11e3f921b14cd64c5f96cf4b3b19" + ], + "nonce": "0x4d0101", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x39d4e72ab77d7d850e8fb107ecac16692a650718ca0f69e72424816a8cc9372", + "version": "0x3", + "signature": [ + "0x22e2ca66df9c2443532376e71c0589d02690b4dea7ce3a2c46a23e843e1d899", + "0x51c86df853433ba92f936b1a05350f1bf6442b9996a83b4168125571cb0b68b" + ], + "nonce": "0x4d0102", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x6c3f0e47ec84ec17aa57c2b79e9eeb6", + "0x14bca0d44781486ac66664d2001bd50" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43c372fb2854fc4b7e525c39bfe41982351145417c1955193c1168ad35f47f6", + "version": "0x3", + "signature": [ + "0x6cdd58f0b46e75812d63fe806d82b7c1d5af65c5cf9d49475da7ff3422f8313", + "0x5963c1bcfd8f67ccb7035dc4771c6e8c83f91ce1043be6521e2adc77e9fdbbf" + ], + "nonce": "0x4d0103", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x1c444f09fea2df67b2a9aa810f648d8e23902cb9149006a1546a18bcd4855b2", + "0x0", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x2c4", + "0x4ec7529541867a4c17ee33755fd6411502e5266bcf86e72f190ba18088fa564" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7c4947c54416bda234525b40d2d721219c9d1fb922124fd26e80849726c8575", + "version": "0x3", + "signature": [ + "0x32873ae2297cc766840e01d6a9ba1c090c1f19a5b95cd0f9a4a2fd13dd2fb62", + "0x6345353f57630a9d81fe96de234632c1ac0262b45f00d399cb27392239575b3" + ], + "nonce": "0x4d0104", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xf700743717f64ef07217012517db21e", + "0xe2a04dded13b59eeb062d3d8aaea7f60", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2f9433c6fddc301eaf2dc0ed683387d2f8ea2d39096f881d9f57fdfcf4fa1e4", + "version": "0x3", + "signature": [ + "0x47ea609b38f6ebc5ef1a6edd951e05f29de6b3a28dbd772983d4f8c804d8023", + "0xd40a6a761bbd73d14fc203334c32dadae92095b184feb5f1a1fd309bbe765e" + ], + "nonce": "0x4d0105", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x9a39ee16056046a421d9820da11922c4", + "0x150aef85569db2bd3220044b118f12cd", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x4b04ce5169dc3599a621c4b93e01f1c", + "0x23df58bd88a512f13dd102ece6b884c8" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x628e4c573460da14afb676821478cd23a8e13d9db2bf453046f2ebc8060c2da", + "version": "0x3", + "signature": [ + "0x2c46ce640f1d769c1e9aa26ad655adeffdc8f93dd58eb448c78653a4294c489", + "0x66c7d738f5d22ac7557ff6f5ca462abe49cc32f84fa409c67b74e82714adcb0" + ], + "nonce": "0x4d0106", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7a84eddaed207a43d6710bbfcc91b112c959eff3a4fc1280afc59be9c1f355a", + "version": "0x3", + "signature": [ + "0x6590ccdef9a0013552d125983d573e32967f18cce2befaa45b9bf3c66a004c5", + "0x5df013abe888ccb41e9a006c55ab936298a4848816398f3b0a33c23b3c2a517" + ], + "nonce": "0x4d0107", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x333" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xa3046f3f3bed24b3b9c291e9e27166fa55263a7f45b15799f839b4dae5c105", + "version": "0x3", + "signature": [ + "0x7df5e66a8952f77eb4485e4b64e0d38148e6c6af8c6070a3c56bcf767e3c004", + "0x1f4ed7d839c573d60280ffc4029b818ffede123a07a9fe80c86264745fe6161" + ], + "nonce": "0x4d0108", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x62cd9e10069734ecbcfef62cde47de6889b625260ad4016b0b1a45d7bd676a2", + "version": "0x3", + "signature": [ + "0x1e2803f1964d525b89613be9859860a8d8d3f79c8970ef73ab456bfebcbbf78", + "0x5d0a988e361eb62dd977f97847684ae86c5814967f58e72bc6f870f6a433ad6" + ], + "nonce": "0x4d0109", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xb66e547c2389e441dd51e590861c9ff5", + "0x6eb37a7075c91b008e5e49e5e770c2c7", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6be4278c3139e72fd3771aaaef10eaa5be7b6f6363aec249801035bf5581d0a", + "version": "0x3", + "signature": [ + "0x4435b38ffa5933c6391504f349a97f87246ce5ad0e9dba9f798c7f795a8fd68", + "0x54e319cc85f972688d06012036513eb226edd254223e0f3961b05618816f549" + ], + "nonce": "0x4d010a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x2b8", + "0x25c5a466e8713262b43b225c35eb1e87ae570efcc3590b443fa776d383a7ce5", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x275164c2685098b4d843fd4e22c20c947db9f8805e1e226c542757348212449", + "0x3", + "0x3ab7bf641fac93ecc111493fbe276b841514cf4e6cf290a71104526407b2b4b", + "0x40397468f898244863262181920befd444ed09a87f17ab0a6509a1bb90e9876", + "0x23659504490da0164bb499f1168b9072dac6cbb8e0664a4281dcd03129613dc", + "0xec6e881f61d464969a02fce9d0dbfa8eb6d82d896182d498151d993c6ae752" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x471066e4bccadeeb87e76e85208eb258fda728c0b4e96642a177ac61711b4b3", + "version": "0x3", + "signature": [ + "0x4410ad8ca59b1bb89a909c82598795b6bc43a0410e2adfa0016416f9c06c4fa", + "0x36bacda2ad5c074bba6c430a3d051bc1b349c922f0254bb38d27f48508e755d" + ], + "nonce": "0x4d010b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x138277138605981e1df954faa104f5a9", + "0x22dd4907cd2297d10bd1a0912f74325d" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x55f9bdbbe9ba5a3af8699cad62444f8d8b8c378c9c459876843890e06481c13", + "version": "0x3", + "signature": [ + "0x39169e65a1b6e20bc3a04adc1cfbd8d9d760b053c766fc3246a2877b8010419", + "0x25743aa75c6aaa4cef61e63714a6dbdf1e1a66714e0b50da60c537c8f17ae3e" + ], + "nonce": "0x4d010c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3d", + "0x3a30b01aadd50092a944b38fa42c1df949b403e754576e8d0ccd7f00e9d0223" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3e55f69bab145604f50583b8fb8f28dbc5036a34d3e8ce6b1787ec87d445afd", + "version": "0x3", + "signature": [ + "0xb049f3cbbe9e0e2e281735a63ae76202865ad7a9afe4ca835ad24d90502128", + "0x6db2e7db80ea5a149cc9f6b0e4016e93ab256db66bbe8d8dff6be62fbfd164" + ], + "nonce": "0x4d010d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1266043d904be5fe67b6f31f0706c8f1929630cbe4837358eb7cfa9dd3325cd", + "version": "0x3", + "signature": [ + "0x71e9891bfa4ef5af48ac8bc22414f3785eabd952864721cbc5c00e39ca48ca3", + "0x25beaf2a8eb1033b42bec757dfdd0bdd9c6a8ce19356a45ad232ffecb27830b" + ], + "nonce": "0x4d010e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x315f82e41bea3e9f821499bc218cc71b931292c77279bfeb09e89c46da98c6f", + "version": "0x3", + "signature": [ + "0x54dc8cf7740a79f456ce6064082ca01bee146f046111c2a95e92ae87b5926d2", + "0x5fb6fef6e03984452b0dc94e142f35b245c5731271ac2374c2549a93074b6d1" + ], + "nonce": "0x4d010f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x576741ce2b6469b9850b6d7c3c9e0253", + "0x4de66e181ada76ff2f76109f52697977" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2dfcf3da412080423fed39f1c78bb02b761daf7e30d0099508ba1c8c9ee5860", + "version": "0x3", + "signature": [ + "0x43e5ad36d54e2308e26b2cab42f11f5cfbfaa62adc4805e2eb182b55a150cb", + "0x100eae323e14c92d10763562d731a6611aed9fb47953c95baa43f11de26affa" + ], + "nonce": "0x4d0110", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x41b7d3e2fb7ab639a524ab9dc87d83c477f34e9dd0d045d04ae0e0c79544d3d", + "0x3", + "0x74bf288bcbccb592b056bab596e6bfd0cc7eb9275e0415894aadf74243d6b52", + "0x49e8336ab770c86979be4d34b28df1517cb85d8f65b3f5fb08444f17bfbebd7", + "0x1a78dc60ae953c74f0639aa5b3a9e1cf06104f51654c8f9ab476c997e47ab96", + "0x21339a33ca7f250029eabbe8d68180fc6838208212cfb6945a554db1ae3f90c", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x9a706c04f097e358ecbaaeb24cfa8b14", + "0x43a94bcf7677cc4af98d6ebeaf5b9319" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x58c8c359256d500ee6cb1bdaa7c4d02ba25c227239dd8b443f810f41ff5aa9a", + "version": "0x3", + "signature": [ + "0xcdbf208ce4b18eeedbbda60a70110756b455578656d0690367d58b6b09546f", + "0x651cb1623507135d568e3fca171066074d7af3349f7547352912f741d718a72" + ], + "nonce": "0x4d0111", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x50c8999ced80ef12486df6ffa7f81db1212cdb18805b0dd9f81e4ea0a1eee43", + "version": "0x3", + "signature": [ + "0x37b03f9d00bb52f2ee24565e0305407eb4ded2b842de11908d30c84d3c5e904", + "0x7390f7e7214fdbe0bd9db262cca08472d11f83035191fa5477eab143d8a9e3e" + ], + "nonce": "0x4d0112", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x76200cc7d3cedeb38b72b01ed7e82c14f3d0187c7ee495ef88f77bcb7cfca11", + "0x3", + "0x627053af3536a8619997349d3bf81c45ed4c89341bcd60a7452dfe88ac461a", + "0x3a8fb58d54e383ebfaa5f479e79c178bdb5d99fd81966202abc59612ab63c7d", + "0x78c97ae671e5e542df9a89644bb44c712f7d7fc856ef30c1f7b4e3931a6ea01", + "0x61d098f6dc1962db89dad8450f20738ac38dec841e984bc1d504a80e125d00a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x394b7afe03c49e5461b686d8c52b86029be783054aa7e8b6d2420b74f251676", + "version": "0x3", + "signature": [ + "0x48e240c2c9d4817b226919a318030d7964d8cb6cf3e12638a16a70d386fdbde", + "0x17eea2737cf06d176a02867fd8de5299ab53cd7f40525d896d8b038e6230833" + ], + "nonce": "0x4d0113", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x1fd5a414d80fbf1cc6804be94b1184ae4229259217432aad0ba6f4ab2982f78", + "0x3", + "0x7294bc4c47ebd4253f1576693f45e5bea3e7a7366174c3c750d1996d51ee4c4", + "0x39a8b46b09527db2ebd9a4d94def5c7a3856084325f1a0cf052cc8d0779d15c", + "0x501deb30ae663e765dd54d258378b06c0a42a126f753634b673d7ff4d0f9a35", + "0x277274dba844383612b500e07fe42cfb99e664ff46aaab1d478085f4cabc0c4" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x519a333f63ded28c9d39770b68d3196449661a9e4d5d1e9b8b75cc6269f33f9", + "version": "0x3", + "signature": [ + "0x45f8618bbd428cc511d35da8c3700b0d9f8aea34ab4105277955bf4f7288e0c", + "0x7e14e1984825a21f5c6ed276443b4e59b383e4115efcc50c7faceca71b615e5" + ], + "nonce": "0x4d0114", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xc5545707b86eda2df70e0cee4e2aa966", + "0x17a2a8a104d81a909f896e71f0d9f7cd", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x1e05a4ff42a63e9577335d3e790a7703", + "0x730e11d457d7faf3058ff807abaae47f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x35a0ccf953c2d6805e6bfcf6d8d4f1300ffae64979171bde7a03f65ea3b97eb", + "version": "0x3", + "signature": [ + "0x1298d6470915f9394edc521f9dc1a8be807ced743bf1dd683a1b95bae2b8ee5", + "0x623d17c2a5af2952054c239e09bbf809e8f0fc284d17cd270f2d9af748d885b" + ], + "nonce": "0x4d0115", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf1a230c11ea12a06bc0ab2150b3c838b", + "0x6ab3363cdedcb20e6101a5c2af7fdd94" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x617dc764acf0b98a79a6c32c332a25e543d3cb98cb46a293d92f4d4491ecc7b", + "version": "0x3", + "signature": [ + "0x316155ff3d618fa02aa5e5035e82aec973a08c8ea00845623b794a12e270cae", + "0x34ae6b9ed08cd7d23b9271539c45b24fdd4e82b8a3faa6e34db331435a02c5" + ], + "nonce": "0x4d0116", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x849e9708b8546965c38ed4837448b3f5", + "0xa0d608516dc2d4ae56a34aaf7e4c5e87", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x10ced6c96d1073a78ca1729f5b679837075c3a29327a2ce829e5bd80650b25c", + "version": "0x3", + "signature": [ + "0x6ca5a3a87fe19ebfedfec4c91c39dfd09081f6028f7c6ab4faeed41e26250a9", + "0x3fae8d35dffdf9368e140058a311073f69d029383190126365891c40b8c6f97" + ], + "nonce": "0x4d0117", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1bcc79d1b785ee82e90d78069e1f8c444ae1c68b197291b0431102c021ea17c", + "version": "0x3", + "signature": [ + "0x67edec8ddd7a372c4eba4c8f95a3efa22188308be59dfd0812e0c9ff6eb44cc", + "0x597982f6dc3ac8332ce5cbdd9360108ff8ea1cfe0921a1cdf31c168d558820d" + ], + "nonce": "0x4d0118", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x774e82db304fffe8fc76e655226142db", + "0xd2325fc7e7ec4261c0a68ac5de01ace7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4e830afaed8677b20c355c02a4bb25e1477190620cf9ffdeae20884f96d634d", + "version": "0x3", + "signature": [ + "0x22aa7defa72984c903f63dfa0fc44aa55c60ec9119692750bbd87558a91bd46", + "0x162b572dd6186f7fc1cf71759dba72bbfbbabbe6165794e3a1c142b9bdc7fe5" + ], + "nonce": "0x4d0119", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x29861e592ac9f417094a1c3178a7d190e1feceb3a1df97f93c2946d435ae77c", + "version": "0x3", + "signature": [ + "0x63eb950a9f51024ad548281c1347dfa1687e4968d368885bab0d0c8727fc674", + "0x517c23bd81c6de85ee6ca612836ac3a839b656134dd046014f7d5810054e2ae" + ], + "nonce": "0x4d011a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x24a4d16026ca3a14274645bb5f2642e4833bebba74bb6223374aa89cfbbb591", + "0x3", + "0x7ed8fe3a856e99355f8fc62abb7ea52b60c04acc87bd91f2ad7691d67e9fa7", + "0x168b137ee6ad08cf97ca45eb03ede30b664b7eee35b1db359d2bf23839e412f", + "0x1a4670e4184d04e55ef8fbb38d875bbbf1bb38acd79e50af84608f8af19802d", + "0x5e08fc2e8a071b93dc5952c13e96a0fabdfcc68485e54d9537d960c1e8ea132" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x374cb830a9562c948279d570242fe6bb500adfaa353e32d4484f00a6cd59e67", + "version": "0x3", + "signature": [ + "0x7435c60efecd9aab94804ee328575cf87ca3989830fc2683e2569cb3d56fe02", + "0x527cd6088fff8d43f9dfba61d572ac0470e0c20844d0dce1230f26d02606c1a" + ], + "nonce": "0x4d011b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x17da35ce4ed77e22e3b9149fd965dba57351a6c29f588a7d245e208d073e4c1", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xb6565deb38782cb7c088b4f41aa03b", + "0xe271976f81fedd86a3868be6e5af6946" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6d3e19e0b423a6908630ad2ee90e4978d1b8eef958a32a595cbb5a9158dc81", + "version": "0x3", + "signature": [ + "0xa0c5bae858a02eb6977f378252d25c96f2bc8da8515dbf12ddbfca49bb5b06", + "0x1d0d6803d3e910d5f3b1c71ea834e9d88d907b82222055183398d069fefac95" + ], + "nonce": "0x4d011c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3c2", + "0x6f4cdc9797523d6279f585c4fce5b8ab8a4dbba64233045697e2b84f4d25384" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x233988005928a56978e8a681261876d44634a7e07e822a443efd0ed620fdea", + "version": "0x3", + "signature": [ + "0x64342117044bd015b08a9a93553d9b6fee4b17e5d5c84fe20073f7c491dcf6", + "0x31ea7b9293e447750da7265f07bd3103740803aafe428e5b04775184ac965e7" + ], + "nonce": "0x4d011d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3604cea1cdb094a73a31144f14a3e5861613c008e1e879939ebc4827d10cd50", + "0x3", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x55e265645d8dbfab39be8e9b7bc1849a05abd43276d23c3fa56d60f5c3a062f", + "version": "0x3", + "signature": [ + "0x24f21d7399e426e65f06e98d72425c0a45c8946addd4572afbd81384368f02", + "0x5520982e88b76b6f4edca5dc16e713f0db5bfafdeab98723a72ded267d98187" + ], + "nonce": "0x4d011e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x652ce5e3658cb7ec8ff8105ab26e1894df398907beac85b89302d7396a4b33", + "version": "0x3", + "signature": [ + "0x67fb73aa5d5131100e9ed2d97aae3ab4189f59ac1d405fea6a42850aeaa63e0", + "0x3f4ad49165c99417bd4a26d1f384647b7b90becf5fa1b3e46e8b78a918c513d" + ], + "nonce": "0x4d011f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x335" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3ed477e8998a45c1f8244c6fd85f1c875c32903eedecbce94eb0f26de43ed63", + "version": "0x3", + "signature": [ + "0x5031211bc62fdda8a8a8732c42a3e6f14306463fa4a331e9630dedc0ffdaaa9", + "0x30c6b3f94dd81a36f1c069e76a5f9743f31011eb6a6cc4f572132351123eaf9" + ], + "nonce": "0x4d0120", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x35a890bc64a0015669903e7269c47954f4c3fc895ae20ff777a252852726172", + "0x3", + "0x3b50b5443e605818d187adc0684a9b6e990ac3c0495acb51dc195f1c93b3652", + "0x2c04530e5be9bde05cafda18a246e458f73ebd76f5f613541a8f9a8a14cf54a", + "0x2d5c9e608aa128c38b759e2e1498a49bc4a441cff51ca7c9f4e0b6b3919d1bf", + "0x20b1e032a384b4ae920f334ebb10b7f51f4a002028d4e6165a8de931eee4067", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x2af760730fbb6e60dad195de3286cab3f1be17735ef92821a9f6581a1357dc3", + "0x3", + "0x29f85ed8e76afdcead0f62203ddad6a388c5048d941598c2585fbaa6f2570d3", + "0x6329645550b34a5ebfed1fc1ad92383885528943f919e94993603945ae3db86", + "0xc4e4e3be78c1348ed3c811a57a2512da5c4d619d4230cb5761ee631421befd", + "0x4f78406c8bb3994933ecd49f2e43be1dc73c011916fa5883335b013aa9a0ebd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7e323a597e4d3adf826d1bcff7a1172de0d5a54252e0bd5447de56477f41cbd", + "version": "0x3", + "signature": [ + "0x460474ebf01d329e00584b1952b4fafe88286b283282904723445f6d1bbffff", + "0x4060f26c808ebdeedc3d8e0ac6dffaaf7ce4c10cf13dc630c2f9a8353c347c9" + ], + "nonce": "0x4d0121", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7f2909cd116ad26c28152bfdc4af5286d5e99e8dbe363de69436a23719bc6c5", + "version": "0x3", + "signature": [ + "0x2aa77bc9630d92424628402262c03d56b6abb69944e4aa6fb14c18cba9a8414", + "0x6c866f7d98102d48432e4392d1b5211bb47da6d7d967da182c14ad2c6e198fd" + ], + "nonce": "0x4d0122", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43bc2d5bf7eab046f6cab7f4e6eaf8c8afea959e2fabe53f09b107ead447900", + "version": "0x3", + "signature": [ + "0x4eb3914e5d84c8085d2e60da23939a5883a95e8ca7e1889a7645cc5db045c32", + "0x1da581bfe6dfa4fcf718f606c9d6be2bc53ac028c7302a8d096417040992f9f" + ], + "nonce": "0x4d0123", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0xe6f608f5bcf247a3d3d456ec17aa379779e9171cfc152d695bfa101808574e", + "0x3", + "0x2649e5274e32e5b0751b9ec437a6219f6fa962e952c879f0274984791e8a670", + "0x58ed8a68cf518ee6029ad4366927a28832c906ce2b2bb90a6cc0d3d608ef0c2", + "0x67be8d0e95078b9b4ad71be93ca150b6e6003821116e6bc99f84df8b9a17151", + "0x615723dc865211cf0e30e672fbdfd92d7900db7fcc90e22da2b05fc07ab9002" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1d338eb6af5b54d7f39841f687731f3f87d0465105d3b07af894efa80eda651", + "version": "0x3", + "signature": [ + "0x2ea5d2ff3e18d308f8e6ec34ac8af2d1830983d104845abf9e648ad925b56a3", + "0x66ec0cd871dd8a9e5fbd87cdbc8fc5c1d2c7bc52694fd8c13dcd44a5b7e58d8" + ], + "nonce": "0x4d0124", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x1d8", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x45" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7edd47f2401c6a2b3a827fcab356f6baf133ddb39356abcfc52b3675afb84ef", + "version": "0x3", + "signature": [ + "0x362b56e18061b0b87a57283bfbebc23d95dcf95695f2068a36d0aa0334021d5", + "0x1f69b4955b25810058efcf04767a2aeb0cd8b2d2a260f3f1526343b3a38bea" + ], + "nonce": "0x4d0125", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x790ea505a86b085b4d7463c5e44e1af87088b0817940cf813ebde54f954d678", + "0x3", + "0x335114f7a0c12d0cc614a634e878191a76dfa07a2c15cb208a9b0161042ca37", + "0x40d3ae85973c539bc8091a4bf860a0f2fada87fa5923b146edd1a31eb2eb680", + "0x228d5ea66e091968821fd3b76d8ac1d25a1b92bfec553f8b5801e0e93c4c7e8", + "0x1c2835e20ee32ce54b728f4cb86ec372ff488b129b25fa8aa4895bcb91f6ce6", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x2f092612eb436dd378444888f974adb3", + "0xc4f36049e5547ed84ec4294217dfbe42" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x45d6ceeacb1901b4fbd0b3db1a1c024b2f16312e7036fd5738807abfafe5d42", + "version": "0x3", + "signature": [ + "0x351d9584392f0ad91d2ce3bfa51dbab0ef0c189d09e865c0070e740fb3816b7", + "0x4b7d08b85fcd1555186025b64830da28a3e001ef22e56748bc6f8163a08a154" + ], + "nonce": "0x4d0126", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xa08d262a794d4b4088e2021b5b7c82c5", + "0xe3ba530938e7a55ac9e6100dcc09022b" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x78ecf21281939f2aac484a4678d78f6046efa75bccfe44fe50f0b984441cbaf", + "version": "0x3", + "signature": [ + "0x10db86a32695335ff21005c0c8ff86a967e5a107a4d62cbc769f963c4f04a05", + "0x428b83c1da9bdd28370cfb191f1647613fdc0a3a60c232945b508b340d25635" + ], + "nonce": "0x4d0127", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x421599990487700502101a97b1f8ac42", + "0x5809b2d10b60fb64955efdc3ab2c2b75" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xbb3ddbee7397d1b5dad2cb0c91b0bcb61f1970a0d1fc6bcedff7c37dd082ed", + "version": "0x3", + "signature": [ + "0x7b34c1099b373c320a22e67c69e37e9f736c4840576a5cca41f1e9f4fdfb90c", + "0x38f7f52d4be4a93e6760def0a60602c36c9f220781f4f2e403338ee48af255e" + ], + "nonce": "0x4d0128", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3604cea1cdb094a73a31144f14a3e5861613c008e1e879939ebc4827d10cd50", + "0x3", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x57e8309d3f663b5f73a69ef50b32d843b71daf5d145fd2ce595ca25a9c882a5", + "version": "0x3", + "signature": [ + "0x1ffdc56fc6467f497fc79d4cdbc64162ff1bb317d85b1d9557cdadc4f980b02", + "0xa227a39ded0323e3bae972d6f69cb48883bbeb80e41588cbb75e86da3d6709" + ], + "nonce": "0x4d0129", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2f360e49a734ba3d245633d65726c7ed70a47cfa003c94308794514a0fe0769", + "version": "0x3", + "signature": [ + "0x3595f2bc40951aa3c4689156ad0e32c09126dde0a50e5e177cb8074c7b75202", + "0x4dc76e3edb07bdda460f89888a88437bbdd4dcb8662bd7ac093c02289cc2856" + ], + "nonce": "0x4d012a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x99" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6c03ae0b4f311945f42190cff1d5642db4b5029b257673bbf9ee227000164ab", + "version": "0x3", + "signature": [ + "0x799e47f85ff78109848cb3194b77d54bccbd1739e3bb87b760a502cd2630789", + "0x1dc710cf2b85ad223b0c2e8befd9b3e427b329cbf9ad067045a28c5bbf68997" + ], + "nonce": "0x4d012b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2d7cf5d5a324a320f9f37804b1615a533fde487400b41af80f13f7ac5581325", + "0x4", + "0xf62753241ef2185ce47eed2f967bebcb07dacb36", + "0x2", + "0x67", + "0x2f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5840667191c7cd5453f0f08abf8c05090fda0d206a9889f03d7945fc416203d", + "version": "0x3", + "signature": [ + "0x7a0186745eb7f7bfef47bfcfb65b9450ac8f8be27c22a5d1f4499fc42d85a5c", + "0x7e488e8ce835622e8cf8974f9926c6d1a54a79b5ae199d104ca6b8a6da173b8" + ], + "nonce": "0x4d012c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1490e7e6439bf66483b54c74b96cf288c43a81b95c547ba61cbbb71ba07e1bf", + "version": "0x3", + "signature": [ + "0x7a953bdb37fd45d6de9fc9626fb212bcbe365b92c48ca07948fc49060372134", + "0x47f6f7dadad0961f03d1e93e5db3e050c7722fba0b8780171b8ad149c58c439" + ], + "nonce": "0x4d012d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xcc45777544744e1114b2873c7b57617b", + "0x22e8694fb67303aedf474a82c473d416", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x483eb8e5c08de8fc3d41be6894dd6cc512cceb0544e5c7d82826f5c5baa4a92", + "version": "0x3", + "signature": [ + "0x43618600d9d3dc8e18290ffda51ca6a05a5e9f9734dbb2e7617dbdadeefcdbc", + "0x75cbbd6500719972a8d355276adc1c75d04b093f0322356dfacdf18db85fc1d" + ], + "nonce": "0x4d012e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x50898c111be82241d1b1fab2dee71b571e9ae905dc837c8323ea345b82319ca", + "version": "0x3", + "signature": [ + "0x7e5c393597cfeff08bc246582edc46a03b868d4aac4a5ae24bb3616cb5de071", + "0x53dab50fdeed7a948db034e4205877a133273fda82352be46e3bd4f2d58c638" + ], + "nonce": "0x4d012f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x10e", + "0x5a79bef4e1fee587e3346900eafd02ead5523d57e61b5d30e56c04a131bc1e1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x323" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x30dbda93226f54f567575005e2d0de30cc42bf24d528c3ae70b27e13df32e21", + "version": "0x3", + "signature": [ + "0x6f9d60426056ddfebcb1578483b5256dd714715e02360150744773a2d622b92", + "0x369654acb7ebb73b0374b383f064fc6c4668d34c0e89db5c50eac1c3aae5b07" + ], + "nonce": "0x4d0130", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x4088330413889ec896bd39bafb54051ff9ab3fa9e76e4ff83be23669d062281", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x559a3aeb577be88c912f1ad0c6cb0b31b08e66a68303443045c57a262f4e7c2", + "version": "0x3", + "signature": [ + "0x5cccbc952926a86bc7f80587d0d16fdeee5e0a22bc87e8873a6db600265d5f8", + "0x417e61bd73b865ea18337c7a79ac6b04a982d8ef040c6bb9f617b6dbbf9ef56" + ], + "nonce": "0x4d0131", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x679cdbb308dd3f335077bc45fd257fef0f8d3f9e4a5e7e2ea334269f33beffd", + "version": "0x3", + "signature": [ + "0x3aa26df36e23ee4d6b8f81ae10a781d4ef98f242cf3e8ca36e0a922c4c3303e", + "0x4bbf998f08768c1b8b75983a94b89da8bbcdff734955755e2f3fbb4adaae3bd" + ], + "nonce": "0x4d0132", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x524f191568b8396376568df443a60010", + "0x1ac9d243e2af215cd6eaf548cf0aa5cd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2a0bca9093a5ef703c4872381cd707449769d8f43c2656e59e24bdbca1fa307", + "version": "0x3", + "signature": [ + "0x7e1050b1e873d777ef32c5799fcada67c654f355a4b79942704dd51b26a4366", + "0x2e8d0adf2a72a57256bb4d86535ce5cbff9b188561b5d8cc44f59f003c14c21" + ], + "nonce": "0x4d0133", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x8e7c662bc1c13b82d66a449bec60a071", + "0x92735ec74c385a29aec3a5898d828ca5" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x79741409ba3e0379a72e501219b56cb40afb19b46d1279039005fe037e52c12", + "version": "0x3", + "signature": [ + "0x643d9aa0cf545f28f0f39cab6067b6c30110968783e1abfe57e1d041daabf96", + "0x7ef1f6159e9916143a91aa2768d34ecfad0a5815f4d593f03146652f7a7dbcc" + ], + "nonce": "0x4d0134", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x232", + "0x53573a50029c302941b4093fba22151eaf301182dc683f8281cdf6ad97b1e6", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x78e92b1e5a4a41df9c9e5019f7d5d5f7154c159c8f1de1f679356a4aa8de1e8", + "version": "0x3", + "signature": [ + "0x52436ef5f19e4a11d287840f87c234db6e04803dec893a201dd374862f31ab6", + "0x6118fdc0d349df2c2ad7593d5417d5e16e7c0cec343356fed7f5c71f2e792b2" + ], + "nonce": "0x4d0135", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2881b3b65aed03a4a5d9aaa4adf5b877fab77c8c82f0e5a00925770adc46f79", + "version": "0x3", + "signature": [ + "0x1e7fa8611fbd1537b26f2c195ae1a8968b69afdadd13ba5435e8fd136a76d7", + "0x737f9570643b9106c31fc8f74e7782e7e7599a21134deb59a93b7a96743bcec" + ], + "nonce": "0x4d0136", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6f07beed301165403bf1c8bc57812349e8013f094c8404d1719e086662bb5d0", + "version": "0x3", + "signature": [ + "0x59b561e99cebca07d945deebbe5e0fdaabfc0997559e2e7e2b08db4b3306968", + "0x377b84598d7b503ed0c887f8d12cb51126e7c25ff91d6ce635e00cdb96f4458" + ], + "nonce": "0x4d0137", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x16f796211bdf7c39c965b6e77f6eca85", + "0x5855f025b4dec5a58797b6b99f158d5c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x19a5af4415d374cfcc2dd7c34a09771e7f0303cb75f7ea9fbd022404f2777e2", + "version": "0x3", + "signature": [ + "0x479d957a3b1a9144b2eaa392431243f31ee555b1cd5829abcc30844d0e57e45", + "0x765eed3eecb116657e3086c5b3cc1d599fcbc4f7c702bab7e1d91efea4961df" + ], + "nonce": "0x4d0138", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x271", + "0x3342d39567deeb95aaf8039328deeb6c42a2b3aa8b97681f3920bd6638bb2cf" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6de3ad4c3dc339028265abe12108e2c5e71d56f8d5a64192f7980b156e4d161", + "version": "0x3", + "signature": [ + "0x57d75216bf41b0a6b6a7f3762fc13ad0cacac08b706fe8efba3c227178d6763", + "0x3a124ca692828c3c3e7ef62f53aef0795e0398762cd97fef0e3d028aeebc87f" + ], + "nonce": "0x4d0139", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x17da35ce4ed77e22e3b9149fd965dba57351a6c29f588a7d245e208d073e4c1", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6ab843f88f99b0d33d49003a899dd75d8fbdeb88682f600e788ec93d2623b36", + "version": "0x3", + "signature": [ + "0x11148a59033dfe1ba81bb0acc3b7761b840c5f6f8fc3b1369ddc38e49cc77fb", + "0x2e19637746eee1f767d7b55e4736de5a14ec9d5555f3f7f8519e3a2756ecb56" + ], + "nonce": "0x4d013a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf1f4c46de523aef40991e2ff14f9d6a", + "0x83df54612e3c49f14d36e5ae1d4e6d4f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xddbe034b7e91762e6ddda1463a367f56de1ca24dc0126ef025f0899086597b", + "version": "0x3", + "signature": [ + "0x359227274c9e570a257646957f5483ea75c3ee03ffe48c664ea6038e4cff13b", + "0x5e70d4f9b04ca39b9326ec3108bc71e85a4749588a6298f35763371d6e2c490" + ], + "nonce": "0x4d013b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0xe2bd93c7cede114f9f5c08e5e99be4ed16b347b51e9eae51a2279483eb8009", + "0x3", + "0x3560fd5478d45a380431e0d8ab96ab10f9346464f26c85ddfa81b55295eaec", + "0x791669035612bb867ebfec753cad73103c3b6c46f6438297e18cb28b780ee46", + "0x290b20e8f700dc1654864984bd086c136bf6d7b3503a9bf0e232eaa8a02757a", + "0x3e72412f0ee12c422d4c3d9b4721a4493ce78e542c5b210ca7c2dd6f752393c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x406d59707ce09c40a0ff5faf4f10aeb3842dbc0f48eb90e3101236f7d511e0b", + "version": "0x3", + "signature": [ + "0x66a53b447dab78d00144279b80396517417f152e9a6bb47a82c23157f9fe4c1", + "0x48c45450ebd7264318451d03574092f1d80e16b77a9229622f0930b5a3d2817" + ], + "nonce": "0x4d013c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7c17c7ffbacb568783a5ac01764316485bf7f7ef9d3529e5929e60381ae17f8", + "version": "0x3", + "signature": [ + "0x7e8526b525405f2d63853a0fcf584568962c62ea25999e20076baaab49bbfe3", + "0x7d716b830e3ed9c8ce0339d1a1a6bf70f033b179e5fa3b9368e52813e1bf6f0" + ], + "nonce": "0x4d013d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1c82298c91256bff5e780f80d74bc3fadddd925d9f17f44486f63e91094b65d", + "version": "0x3", + "signature": [ + "0x39cb0e2d0f1940c36329533a79509d307be0c61bb0c276d12a3ad22fdf7d7b5", + "0x5745ffbf5621f2082bc3c61ddd79b10d4936553287b2821b255c55a85d837b6" + ], + "nonce": "0x4d013e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5b3e6f853ffbcda3cfcb2fb456d2f292300dde3f8892e5fc79b23dd01ef75ad", + "version": "0x3", + "signature": [ + "0x74e0f40d1aaa66abdc371d649a41f007058dd989b8242baff6d4d1157d614fb", + "0x7a524b3fe3f52489ae6c899baccf9beb9b6e0d952722570a3bc3dec8cc6d407" + ], + "nonce": "0x4d013f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5a1cdee2b6a2452b9bbac646fa278f10a82bf1be49fdcfe217d23e88f6a0e0e", + "version": "0x3", + "signature": [ + "0x2772f7bb83e0f4d0e10d785045245f44273c95af8e37d575491d10f424d7248", + "0x4051168c3cf73df0702b84c52b4e90d56ede48f1c5c452d7b7a562694470bbe" + ], + "nonce": "0x4d0140", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7a2db82291a15ba0be8a579f1bff71ed0f5fada1bd8bd838c43dfe167804225", + "version": "0x3", + "signature": [ + "0x2dd464dffa1f1b77f9de66d7800ebecf42e47572ec3f162c2ec1fa1b32ed95e", + "0x72fd23df2fe3f02d438852c87b8148477d33cc08cf2f3630366f6051ecc76c7" + ], + "nonce": "0x4d0141", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xf04619f47b1d7c75e402161c8261ff02", + "0x151e951b20bf4cbf99dbcc7008d7e46b", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x368c1fdaa923585ba2ae3a93b81c1c8bd370d6d4cae5a523eca0aae969b211d", + "version": "0x3", + "signature": [ + "0x656205da082e58086159ae2dbce367bdc88181afe26d8f9e5a2cd200b76c86d", + "0x3aea3613b254a2092629f80feaaa3ec1811d8fc55ae9b0f57df4e478592c348" + ], + "nonce": "0x4d0142", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27c3334165536f239cfd400ed956eabff55fc60de4fb56728b6a4f6b87db01c", + "0x5", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xda0608d95967180e13c24e51d5189ed3", + "0x6f9381aebc91e5c41ac91bcc653caeb1" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x50e27dc65f920e4bf74c57142c47ca6f9023a0ef3c757a5c8ab81055da8bc14", + "version": "0x3", + "signature": [ + "0x4198a5dd5c6801c5f0c45352cf9df80ad2283fa6408bfc874ace10f670caf7a", + "0x5dac4cbd4085ed8fa8250beed6681d4288d2d92686b822620f989566f7d6a86" + ], + "nonce": "0x4d0143", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x180", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1fa07d8b02a7fde81af8bdd8b2c5b400999bc04d3d02dbc90abd12c7d42fbce", + "version": "0x3", + "signature": [ + "0x4e21346adccd251663495633e0bc948714370b8efcc35715afee2269c8c950c", + "0x6dce9b5fe67bc96e3b5bcd7bf2d52bf2515561cdc5055f5838153f9a94f8f3f" + ], + "nonce": "0x4d0144", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x66ecb4b7b5b052f85132eb9a22a322c2", + "0x1647fb8d6333d2d44ea72a6970e65264", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x75b965e4c7b51deba1ef144dbb7c1e6939840530b1d52fdf026daa08190323b", + "version": "0x3", + "signature": [ + "0xace143e6decdc8bccfbfc067bc12571ee823dd6c518496b15758f5f2d21979", + "0x5a1ec01643682e19670e4bf00155be99f3338e66938d843ae79dd9700aaf257" + ], + "nonce": "0x4d0145", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3604cea1cdb094a73a31144f14a3e5861613c008e1e879939ebc4827d10cd50", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3379b2417050bb2c78a4e6c498a97662433f237b41849e0c7b7ea08b5f95c0c", + "version": "0x3", + "signature": [ + "0x26bc5755bfdf8d2bd7c2de15c3f7cb4c8f77745f276614333af7118434be0f0", + "0x37bfab15520514bd5f3841b5e687bf91fffd4ae4be8df105582ea6e14d51f7d" + ], + "nonce": "0x4d0146", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf48d7037b999272ed4fb985175aa1f0d", + "0xf0f4bebc366c3e195087dcc4cab8f6f0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7b3de63a1859af6c3885a9d47b4384aada357c93ffad39b5a8432be1d748338", + "version": "0x3", + "signature": [ + "0x24344066eaf336e471a9712a9f9c9b99b87d31d992acd14b5130714f03410ca", + "0x5d57a8897de7ebf3bd21ffad6eb010ea1a8c5cf5e712628f5af168695ba326a" + ], + "nonce": "0x4d0147", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7794f102c917ee5fbf9faaa7535ceade6b942617fbfce7cc1f5bf92cf1cc816", + "version": "0x3", + "signature": [ + "0x1d0f9c57da83720f266135b6827990c5c95eba33283b1a5edc880e45bf34f2b", + "0x6d38facf6b0c9ed6d785fd24ea2ec3f4b5dea3629908a1fe150f27b365b41df" + ], + "nonce": "0x4d0148", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x47446b9c54dfd8f9a34edcbdd63d5ac1f9d03adeca950a7b8ad1db33170442d", + "version": "0x3", + "signature": [ + "0x7893decd45c8e8647262c25ca08b9d3b228dc6e9680911f0bfeb7027eedc366", + "0x20d391409d5a026c1e20e6ae642ac0d775f89669b31727588cfb48e4f168526" + ], + "nonce": "0x4d0149", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x44796343856f93ef0b27ed9a89ae0ad85294e4f8a7a7c548bfa83ba2db5bf0f", + "0x3", + "0x12f129bdec2acaae798eee4a2171561d735306d9c36fb01542103c01b312762", + "0x3b0307ddafa2de1118ab395146120d869ba3ae2a087ef52c58d2fbb8f776729", + "0x248d38a905c1251c27ae655c5e773c135578334b27163e4ef1d42607886f548", + "0x7ebc98929165b3c1b0b449f6f19653b2405cbe3a349e213c847fc0a69c152b" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x63b5f5493d8ec8404edd7ca19d3ab4f0c3ea2173da098b5830385e9d4140a85", + "version": "0x3", + "signature": [ + "0x3fd6d3311d742fad370ab398a511aeeed61f6b4ffe82d7690e2992dcab48385", + "0x16bf188ba448c8f42f52174e9b66c2caccbd0bc283bdc81d8583f72d27d8611" + ], + "nonce": "0x4d014a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x28bd8f18ee747343462d9fe2a97096a70132db0c63bf8a0e6e56874bf9fb07", + "0x3", + "0x55849057db65e5e2b01aa2a7fb7ed0fab704ce4747b4828e66c1d435c9f2b86", + "0x120c79262a7af5c1d7a93928568095f7ea189d49c2da1ad09e1eed2b78053a7", + "0x6c1076e44df71f50b64745f4876744b44409ec58521a8b86df7d4a09f7414d", + "0x1845971ac79fd6f105a99e706a645411d8a7b0d7f40d672254c6f68f692c0a7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5f0c85d57fca71c14bdacaffa33a4300b0627ccd3bf8d837e7de204347fa48d", + "version": "0x3", + "signature": [ + "0x12cf520c71e129474c68936ed11d1fce5d85fbc69cbd9ae5eba9db23e38ca50", + "0x60e0f000b6c816252409ed71982a611fed7331f47a057ef8f5b5deeb2422ef9" + ], + "nonce": "0x4d014b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x263ea3baf9d649af9e26288b8e2f99e16431de1cb125371ce5dfd8f30c0ff7", + "version": "0x3", + "signature": [ + "0x648e9654f6687ee35a00a91703ac5ce11947479a5d89130551bbdac1f8ec65e", + "0x3cfc2c3fc1589d79f4109dc6d37f0a883f61b379600af8b7be1d5306a5b7d0d" + ], + "nonce": "0x4d014c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x9300638eb6ffd57fec05f98ef5bec6c5", + "0xb96b90bba270e2930873e05798819a10" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3690c3c1b3a59657cdd30a94bdaf344b1ee5f789134c7868ce4107f0e6ef6f2", + "version": "0x3", + "signature": [ + "0x3e9d4552bcdbc83d6d6ba4d096436b4915555123b3f8b93f7a9e322f9fbbcb2", + "0x32e1d09cbece2f5782d258385d26f4a52ecf27cbd8d1a02952f631620989a6" + ], + "nonce": "0x4d014d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3599287586559a69d1d9dded984cec4d5d73a31a320d46d49c5429e87a12b1f", + "version": "0x3", + "signature": [ + "0x5266cdbd34364b5f645a039014ddb973d5954b21e687502b1f10b33cedacd1c", + "0x364c3f60a35dcdd69e3e9e09a9e7c3ffd95d5c427cb7a50cbbc8b31e7022a3d" + ], + "nonce": "0x4d014e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x6fd88a8c702c80268ea6400aef1210b", + "0xcee4d27e45c51046d46e1dd47ccd2418" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x27723c0aaf06f65fe818cdaade5a51b724568c5c14fe35a08515cbe3357474f", + "version": "0x3", + "signature": [ + "0x6b6cfde08a2e81cd4c51322c38a9e1528bfe6b2c203f5696f0e1d594d85a0bc", + "0x581fc2553607c53d72a9476260cda94dd74912e1ea2bca34ad1587df5ff2fc4" + ], + "nonce": "0x4d014f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2d753ab60df24f92032f0701d8efa57664eb08b31e1ef8cb5f90da2e0a05f50", + "version": "0x3", + "signature": [ + "0x78eb7941774180b3bd61d5066eb8b6c82e09bdcb2c145ad3f1524c6128a848f", + "0x1cf22bdc2c223cb81f26e1e2749173f0f51d9e4309d634ea824f368f9df4186" + ], + "nonce": "0x4d0150", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x1525eb0c3a1b4f4fb804a232edb4a1d9cac97ff8cb65e096bdd67f49c0ab00f", + "0x3", + "0x72869728bdc2b1dd37f5f4a418ffb092a6d6a6a51b03af3b78e861564b80237", + "0xfb87961d4d14e243855fa11639f556dc13ef30d63551b099bba72e5a9fb5fe", + "0x37a14def8c81055d2422c68c13858fe7004ec3a4b28132f7601f59151a6a6dc", + "0x34f71c98450aabdd6044923b8a78ce46b0611e0135b2676fd5a637510dc6d38" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6b9ea588451dc23bdf40e4d931c5aa63aad4a6f28b1f213a5a1c5123fdc41c2", + "version": "0x3", + "signature": [ + "0x6402051d865d185d99e63bece812cf11c8878cfb5400267e5e90aacfd640cf8", + "0xd5c54b1c8d6fa1fd6b4a8ab9961eebbf00b3e5843fa92de89feacc5e758110" + ], + "nonce": "0x4d0151", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x49d7dfdf83f92fa1b62659083be2d1e9f253cd9026ba6f2df59cc14a70d92ab", + "0x3", + "0x6724f48b05976d6af1a5ca82ba209959aac0348a4c41fc2d36cd76591d5c62c", + "0x3c9a4cdf45641b3b943dedc9ff264ba41d51114f2ebd61f8b28b19f455303e", + "0x12d45e92d41ecbe44eea1adc697dd04788cc30bcddac54dbe8694a573edd8c7", + "0x62d5bd4cf4d6557a1a791917d14703f98cb17a4ea020c722f659d50a6bb11a0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x48aff85af163ad6be379229b0b90e79dd78dd66015034c63405449eaa7546db", + "version": "0x3", + "signature": [ + "0x6e8b612b0ee9daef636e9f6560614b5e153eeb6c3560d0079bda3fd6ade7cd4", + "0x1bebfae1a992499f23e75627350a6240c9bc6e6df5cdb16700f828d77a0dc4e" + ], + "nonce": "0x4d0152", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x40d1517ea40288599fa49983a4985777b05d68ea2537512028dc04d1a08db55", + "0x3", + "0x6d83c4b98f89f7a73c4bca6982a19d3ca849672e46314af1e6dc3afd6679951", + "0x68c9cf9111eebfb3b52fe7c9acf98fb0e6e877c1acf2ad14d8d3bda6bcc23da", + "0x785366ebf7be8bc6ef9c51c483f84b5832fce2bc6ece04508719db1f4c8a470", + "0xe13ea20eb815e0c0ae82d5f44bcacb78c0458d6698da676c4b1cc8ea264daf" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x21bb750db9268c068bd3be09151027c8a5a5c11c4db428cb369ad69d297c0f", + "version": "0x3", + "signature": [ + "0x1779234ecace06de947998cae2690b9e806b262b2b6b78f333003bb77c669b3", + "0x445ed585f213dd7de1f8adc3c7f9b838f621258eeb18eac1bdc7788f9da9a80" + ], + "nonce": "0x4d0153", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xed723be1ca3271c9310282623302a510", + "0x8ed20f55d47ec7681a312d709e07ce99", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1a41a120dfcd8c7d30f21709bd698f36e32dd3315f8e83bb62aec8cdd55f3b3", + "version": "0x3", + "signature": [ + "0x7b8e7c9dcda06c0acc4a28a6d87be210232481c70cbeb09cc89e317f8e7cf4", + "0x36ce05bd33d472bfe6bd2d426a248f79f9b99b5116b703103a029e969ee6144" + ], + "nonce": "0x4d0154", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x1ed", + "0x1d413563c6231b24d293d9a71ee542cbe50b28505f0768740c065ae8a8fbaa5" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1ad407fa40b1c51e68728e19119bb01de61a028627572703178a018a4a256c6", + "version": "0x3", + "signature": [ + "0x1ce7f1c93ef65ba5867d5a73f76621866499aecf0dfcf69c2110311a4f88745", + "0x51cfe2e557834aa40458f542887225685c4b3a0882e0cdffc8a6e1866654e9b" + ], + "nonce": "0x4d0155", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0xf7", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x56c54c6df617293c68fcd480a8d025653631d8d718443f9789c343de7a17a37", + "0x3", + "0x39cd0cfb60e3ba5c5beb979bf40f636b20d300942720659581fee6b33c93aaa", + "0x1cd37a5e72630e45805899c3911130ef19ef2fe37202e7b73ae8c7318c6d6e3", + "0x72f08ba97d46da3f16208ead9d7e49c6004fbc4eaecd56c522eed7d9b8f96cf", + "0x5ffd185ec0721054d5340742af5c65265564e3124aada121fbb60898665b98f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5d0c53d940dd40310e3cd6e403e676abdb27ef041aef4885f48acb92ee84262", + "version": "0x3", + "signature": [ + "0x2344f9faee69dabdacc334e28122accaecf86303ed187c51985afb56de7e321", + "0x258bd985c7a2efdeb99d840f0c686be8744f95f89dab4f36c3638271e67d80c" + ], + "nonce": "0x4d0156", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf26d509fb74b0fd01c9d97f63e3185fb", + "0xbec271c484e7b6547ac6a51655838f49", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xdc9172b0939c55055abcfca80d22508e98946628f3275b7ba39a0e5ca26371", + "version": "0x3", + "signature": [ + "0x128882ac31d584ba0bb8821326cf53e9798c70b735986edf6aca98a24e422dc", + "0x77ec46c352c546b87a195016b2bba20446fe34133850a624b2cdd8e8a4d9320" + ], + "nonce": "0x4d0157", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x18f", + "0x42d2bcdd8985d0b7797cabb2271b2e6042770594d77f3009d35a04d6c8ec5f1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x283" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2ea650c14256a321d8bfe3f4222859aa16d0d0033d576c5b489c5b886060b2a", + "version": "0x3", + "signature": [ + "0x6005ed786225e3ec7d794cc7e25403ab356b5d7ce8c2838687c8d5a7ee7763f", + "0x1c6948a5646ed95f01e0aa0bce93d0d7c054fbb7e2202ea54809ac5c607cfda" + ], + "nonce": "0x4d0158", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x5b695c85f5a6a609acf40c39d657ef67e1a8aface9fcebda88bd639a0d1a898", + "0x3", + "0x52415f22cf903f332994ebfc1595eba480961e23eb7dadf1a45a1c7c23446d1", + "0x48c6aacee21303d4fb44c4486a34bcdcf7ef9fb907aef3d6506405f0f5f179", + "0x7d66296881529c77acf7b961219359c840666540c35f7d8c977da562283e4ac", + "0x204fab40d7160aacc050c349bad5399fa96b72c26d6b91cf45891e00d8a9ceb" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3a8b70080546e1115cebe0ac8775a0bb7d0b2a5361b2a4c6189746c170a7716", + "version": "0x3", + "signature": [ + "0xc5331d315ed89cb06caefac1d317485798fc648a57aaa8c3368544240859bb", + "0x5f6330879abd27c0753f2912729a500d927f95b4bb3bf9a0204a76d9536c9bb" + ], + "nonce": "0x4d0159", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x34e49e459c9d56d2aecb8dc5bcef2579c80d0a678d69241cecfac7a38e154ca", + "version": "0x3", + "signature": [ + "0x5bf1f5ac6229c566b01d49df283e34bb7ace57525fffd1bc5d516f11443b7f8", + "0x255b786bb2bcd4230bff2e706888e96184dfc9770d4b988ea0044c184dd1d9d" + ], + "nonce": "0x4d015a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x437fe99f5ed2e91c239a2f193c6231fbe5d9e6dfe99ac5015ccd8a81d158257", + "version": "0x3", + "signature": [ + "0x3c431d8f7141383562503462b7c7d0cca491f052f984af67d8b43a96eb21f79", + "0x2bb095b06d4e7460d8a1a93eab877074480619ca164fd2518f2c2ff743bc70" + ], + "nonce": "0x4d015b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xc73020cbcdc3801a13d39a9b966cb727", + "0x8204f19ff6fee3b459f7a18557fb5b6c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x33d3d994860b9781de37cc32474b690a43dd0033a3ee93c1a78586abaed433", + "version": "0x3", + "signature": [ + "0x35b8e69fd32b5b049b81a15c3322960c0442931b80b77f936ff824d52750ebc", + "0x22e803ff9db2444274f633125f4ec47682dbd53fa1e6c8581a332bcfef57b9f" + ], + "nonce": "0x4d015c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x3b7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x70e59c4408a6a188ed0ab92765a279e6fb2cdb27757442f43e3d83b2f91fc13", + "version": "0x3", + "signature": [ + "0x3ef150e51ff2295edb3621396835803648c49e6977fcd1c4a36993ed4ff4cd1", + "0x40d2baea726b18355e76a7a005535cb7f154ce723b3d6670a83f04cd1186c84" + ], + "nonce": "0x4d015d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x1f2" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3d8b140f57faaac61c5db43df6b3937df36c6e85cedd5142d41d6eac7ca0673", + "version": "0x3", + "signature": [ + "0x6035a6ab4f88888f1cb35fa477e26c75ccbafeb603b6bf4505cc98bd197abb8", + "0x4bdd1b0a9ef23283d949d6c2f73d87e6aa54c7782c67f7d9a9dbe732cfdfff2" + ], + "nonce": "0x4d015e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3c9", + "0x1bbe85cc5abacb5c162e974a5ed0b8307f9697b87f3f537665586e9ddd3833b", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x789a8df2d17e6164914af9230e4efbfa", + "0xd78c7b2b88c0c326321551a5b3d4375a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x40c3e30d8b804488c5b38adc445b66aa18551d50fd8636a0e2a6c361a5941bd", + "version": "0x3", + "signature": [ + "0x119112e3ec92546a8df24eff39eb4505be5fd8aab5677a1762ab1d3e34ba035", + "0x294e428700e6944464289b400f663124fc181408557798104ff90a65f14d288" + ], + "nonce": "0x4d015f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x2d3" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4f4d9052d23c94ca8d57fc94452d4915501b5eb898b03c531edbd30cbe00b8c", + "version": "0x3", + "signature": [ + "0x3cd685d3b5ef43eeab7798f34c6e6c8db44a4974feb7fdbcffe24319f21f715", + "0x3c1f8926c5de71c7071bf9780465be2b493acb01d23f2ba67100c8b1be02015" + ], + "nonce": "0x4d0160", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xc230e0a01e5292ca97dbe75679cf9accb611cd9a2226a5219ce7349780a02a", + "version": "0x3", + "signature": [ + "0x12e8d778dabcc96cc2c9dd24c8364d40a07172366c348e820c099d2814c19b7", + "0x6f79e6bdc1e36dc9e380222282aa1a05ac609185b726ef92d95f360da614ec1" + ], + "nonce": "0x4d0161", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xfd04359cb351cd1affc7b165ca66245", + "0x407754ef00fb8b9ebad8d25ab54e54a2" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5717cd13714106eb52bf0db6fd0e19bb4c90461a7be87b070f16a970fc678eb", + "version": "0x3", + "signature": [ + "0x551aeea09de43e36790058dc0e738c7ccea7a3e3258d7a0a7f354bce92ddada", + "0x4adbd0e660efcd712044230e0f2718bea749d0c7c296450d2961f37c59b8b01" + ], + "nonce": "0x4d0162", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4d52785977eb0e1c201dc2a6e831447d66ac2f4d68721b30cb1dacef55d5dea", + "version": "0x3", + "signature": [ + "0x129020467571d656ba3b7ba479c70abfba7be5a6ec46192c15035eaae75bcea", + "0x2afe23ecb94edf4abf55ddeb9d4a0bc8507e0e13e521321a06ffc2ef63fe00b" + ], + "nonce": "0x4d0163", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x45a7193004281b75002f28ea9993f60608d7da687787515c6361c10d2e8d388", + "version": "0x3", + "signature": [ + "0x6ba6cb2ba7e2f68528497048000e3fb34f55653350f3c2d5b2be75b747e1973", + "0x5dec56d7a8639af0c93a71abbd32fb9f707a8e7b8fe9a380791d3ae4557b2b9" + ], + "nonce": "0x4d0164", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x2f0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1c11b145f791e96f5520d8bdac6264bd065407228bb05b5c1afdf7925cb3b40", + "version": "0x3", + "signature": [ + "0x86bfde93cc4c1c8fc05e403fa53c909e789d80c3ca0896cfcf1da04fa2c1d7", + "0x379726a5796562422165b8b4ca9c9c4f562dd957e44fc82c21becc8c4b43271" + ], + "nonce": "0x4d0165", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x32cbd156e69132cddb230426136f8f0d6ea1acb3d84aa08c7f1ad4ff7bcc585", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x21a7f05588bace54bfd48efd588d3728b54ef24f51bd8f3cc9174840f64a562", + "version": "0x3", + "signature": [ + "0x70f370ef339ed493b1acebc16cdc1425d5195072dd7a5bb3162e72114295d43", + "0x4b479135b14f3558d4c0f9112d020080d0aabc44cbe503a589fef7db28fba44" + ], + "nonce": "0x4d0166", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xa2b9a741705e3aa1dc370a992c1a5972", + "0xe1b769e455cf6dbc79ab21a44fdf732a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5585477075305d5cc6ff69020c0f6b2c301be2a8f2ffb6b54f9d53521c1d9b1", + "version": "0x3", + "signature": [ + "0x2a30f270b32839a049cad24bfd8047bb762d3f30de5aad02e2eb00cb5ade7ef", + "0x1ff6c99996ad01edd2d0fc30d93dee88de3f45763cc50c0c33fc2bea70f680" + ], + "nonce": "0x4d0167", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27c3334165536f239cfd400ed956eabff55fc60de4fb56728b6a4f6b87db01c", + "0x5", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x55c40260bb82b61518071a4d20e375da", + "0x5214015c8f762aad36aa6493554b4ee4", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x20c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4ec4c5f2b51a0f3459a829972f9fa96724286e3c8a0836e77090e108cb70909", + "version": "0x3", + "signature": [ + "0xb827a1b54036019f6cad78849d733dd87b4b6d18a0a256b5db163e6c402c29", + "0x59ea649be54438c715f4493d783f31cf8ada3752669582502cbb956b82ba52e" + ], + "nonce": "0x4d0168", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x3092e624513c7808549ffaf38668d02cf5c88e8131d4024312bf58bc4a87241", + "0x3", + "0x27a8ed7e7a9996ca2de2be150973e2e4ab9f97d8a446d73713afc87f57e1a2c", + "0x29a1abce762e3855ef3ebf326af3583b4d9be276e37d877a0f8e6a65d5713e1", + "0x30732a4669df28200c274ee92127c51b38a176ea9d2777ea9a7966624ae17fd", + "0x6511637e5421865d6a562c47f557f4a57c32de5bda4bb79f6660e351008d4b5" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4a8b04451eed7807c6c2bf011db317fca65aecdabe9a6f7cb9a303c61706812", + "version": "0x3", + "signature": [ + "0xde21829fef7d41c15e0a4559d259142fd8c2c58e38b680b64d45377b111946", + "0xe0b1162f0f1e5baa4eb30a62631a2435651196c6cc08de5298b4cfbc04041d" + ], + "nonce": "0x4d0169", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1ae22f43fdcb5372ec25dfcec438ef605b0fbd38c40fa4d111df7b36e2111fc", + "version": "0x3", + "signature": [ + "0x964e4526f193475482d8c25fec63434236b72804d834f82eea8e3cb241ac1f", + "0x4ab04645ed03b46cfda25da9db33a134612cae3253fe6e958be1a013c9a87e6" + ], + "nonce": "0x4d016a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x675a997e343e6f730b647553b7ba3c3e155cfc5ec3052f531b9c2f6a7a140e2", + "0x3", + "0x3dcffe144429184e30eb98330fa3aedd1d9a083cd58cdf627e76a6f2f8a68c5", + "0xf1c6c33291b34522bfe022f10c059dfa751f7867074d0681f8ede28d943f59", + "0x79462f3595db91268e0366fb5ac565d49a3f2cee379e3e09a08f1e46069379a", + "0x521d90783e5e2f7e2bad59e960de2cb9a5ef3b07c7c358076315c7ef24e861d", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x361", + "0x3316f824e8163d5e4075210f50556edc99567ca4c6ead30b491917070995701" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x40815bef4280c025ff044f4aec6e67016764309a50645edb8b852db986a7cf4", + "version": "0x3", + "signature": [ + "0x3ef3b3def6f18ad0f6474b7d1d03337bcbe2bd220b5a6f265bc29b60fee1f40", + "0x18a4830006ba55272dacd3aad07b719ee8bb2c3355b934377dfab29922f32c5" + ], + "nonce": "0x4d016b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x3228ea46d26f1f549cb10e8ba7b6a5da4577c2a94c1aca25e7bd2ef80b3763e", + "0x3", + "0x110b1c3644c612c21775ca993c7f02c2849a5423833aa6c5a0305b4360c5365", + "0x20a33335c00d39229a9b0babfa2b12eeb98ca1ac4a1546eb98f4ead57f866bb", + "0x68f51ad115cd23a12ed5ea848b0455c9b86d6c3ccb94e53ed35150a10f89313", + "0x7f4b0f9b94ec142979554d558bd1a7dc3ee44ddf364b2f5fd7cf82d07611c5a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4c39f95fb91d6425da908312f53cda2dce62c49531d4ac51e323f8021e30aa6", + "version": "0x3", + "signature": [ + "0x76b8713bb7d486c03c821fb560943a7fe086913f2fe675f0a305f6ca66300a4", + "0x16312232a727ccfebdb29f2eace53eb9c38a21400b80bb0c4725fc4f2a50b5" + ], + "nonce": "0x4d016c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7f86ad9bba5ddff1d30ed29b3c369943fa744d56e8765fa6a75e13736120358", + "version": "0x3", + "signature": [ + "0x1da384b296ee13189e70a89ba495f5b80a21ed35c647cc1ade612c877a4a419", + "0x1cbfc49d027b667499575d46c78008cb84f9e0ee964213f356e3ca1af1cf1eb" + ], + "nonce": "0x4d016d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf0b81a362e16f7e69a58f8c7d2add865", + "0xb04ac988f19105cac225d3c8ec509778" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x34f213996fea783fae9823d68f212fcccf387b746c3b5a7e513f2bd7f21b212", + "version": "0x3", + "signature": [ + "0x3e581dfb1369da8fa87e290fa9e59f2a19a8820dd8ee7db25afb22c6e4500cd", + "0x261cd8b57fbba9c35569f2224b4b2b1b5e1ee51ebb9f03f47d7357c8c8afa76" + ], + "nonce": "0x4d016e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x337", + "0x4743d6b100caf4f48d9ec4e078b0e07f4ab51acd94fb1f461d0fff76242577" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1b3439dbbc3b2f0dcbef56639a75960309aa292c910e12f1b3334d908eaede", + "version": "0x3", + "signature": [ + "0x1079d1ec11f2149a831e7854dc28e6bd760d5daa92b8fbfd3e8285083e08b3a", + "0x52750fa1c104d011c457206d7405ea56793ccd394217ea32102a90e78550aee" + ], + "nonce": "0x4d016f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27c3334165536f239cfd400ed956eabff55fc60de4fb56728b6a4f6b87db01c", + "0x3", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6da94168c3a8a96df9d0d212e4ebd508f21adb7faf04459875783d504491c97", + "version": "0x3", + "signature": [ + "0x2a1da3484f85a13dd80cfdb5f855287ca771c84a6b85e8f1b8adc9fa970cbdc", + "0x49aee72d82a4afffe505b4335230d28320b040e28eb5e6029b1810d49c998f8" + ], + "nonce": "0x4d0170", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x52d9f6700689144e6280dcdd15f0a0548f9747f8892f7ebaca84ac30fd2f097", + "version": "0x3", + "signature": [ + "0x103a7a1dcc8c6583e0777bb9631c4701165d7518ecbca41099e58c92c3b43d3", + "0x550d1bc02ee9e6925ee649ba1ee498147cfda6af63038bfe83e67519afdd7ec" + ], + "nonce": "0x4d0171", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x272", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x53" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x60ea07dc482349c414abcd73cf54bd3fccb0a493de29c2962619110f74ce108", + "version": "0x3", + "signature": [ + "0x5df880a7497377a2b96e724703d261b2886c09381ca172767d643deef26b3d4", + "0x6d80a29c19e8172f01c74797b35c80d4069723ee4c82985eaef6a864bdebc72" + ], + "nonce": "0x4d0172", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7ce2e971ca121f986a6fe34f573f32c5dd22d5fad2f1a8ac4ba25cd1937c426", + "version": "0x3", + "signature": [ + "0x1546f72d97db2f453b36126a2a3143bcd58372e78c8b5f56a8a1c7b6c2a6197", + "0x1a577cda9fc045ad01533aa5100baf1e374092b101a5b86bd11904d11ae1c04" + ], + "nonce": "0x4d0173", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x234" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6cba62e7fbe0a8a6176ddbe553cd2fedcf67cceb02ef1437d7a63a231e32e02", + "version": "0x3", + "signature": [ + "0x60d9b1da81dcc2a2f1100b44f06c46b8f1208a4afef0598c6e4d1a825baaa72", + "0x4ae676af7b61402c8e4d34f4970a14a8cac6e31d5c56cf2c40514e98056ed05" + ], + "nonce": "0x4d0174", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x367" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x241cd3f31a7960105887d71def0ec6bb85380860814c38b9c8d281f73209302", + "version": "0x3", + "signature": [ + "0x4432965f64809821e64619f52acf6d6605604476f5a49d79b71a9b275d617f", + "0x6a6d239fc07eb3232633841d9d9343c7377e31ae1186d6e1600e24f9a39301e" + ], + "nonce": "0x4d0175", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3ede37d0221dd006d88ebe64d032f24e9f8845283f187c9fd896b53f75a7b1b", + "version": "0x3", + "signature": [ + "0x3b0e7e178081d541b2ca5e0a2f139574dc24af9bbc38e0e2817fe4025764b05", + "0x5edaab82723fccce8cc0acbe7a518f90724cb7df63cbffa6b2a709f24291362" + ], + "nonce": "0x4d0176", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x1b055f792267a9f2a3a2b1885c5b6638b8232411e1e856e807a40c82037b9d6", + "0x3", + "0x32ba356b72afd10016e6cdbaf5817188045d867f25b12375c21bf6baf85f2ce", + "0x739c18b8790c10f150fc4ccb71d042a3e75be6353528b235f1af5f0e53bb1a1", + "0x57f85ad22cbada7722edd2a284a9db27ce8e3f6649348bd7e1eed396b1a4bc6", + "0x70c0eb2f9310641c89ca35d92fc09b51be69bed51f3bec3a6b8efe3fb6f6c43", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27c3334165536f239cfd400ed956eabff55fc60de4fb56728b6a4f6b87db01c", + "0x5", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xf7a2b4f8a797be191805d70009fd9dd9", + "0x52715a9f27b7ebdc9b6aa1e3da849399" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x646de6a56efaf91036a1caa30f8ea3c80b9e69314c03d1941a8c0fc14fb1ad", + "version": "0x3", + "signature": [ + "0x716ae6ab0986de5847c8a450fefca7ecba2198f875b6de34814fd475fb79875", + "0x4aef350c0f267b74bd53a8f892d9cdf478c19c7e0e9945ceb611311327149d9" + ], + "nonce": "0x4d0177", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x3c1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xb607b6a99bcc7f0a24fc58a971cc6caad949afb568401543020ac07f177d3c", + "version": "0x3", + "signature": [ + "0x9a302af9bc1eae91bc1d0530ff8d6669a0860046001048e9d8c0b5ea9e4163", + "0x5489cf74f209dac4c909229aacf87eb84b0f9e9c3d99abe2d8d76adceda77f4" + ], + "nonce": "0x4d0178", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x83912031b1cb473d9670b37f7bd2c247", + "0x411ecd0a70f78edd746e3bc6ea8b55f6" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x370f3fe56d78358bff8f4fb5c9f5e20d0aafc23decc71d0500f9077688f5529", + "version": "0x3", + "signature": [ + "0x4554acf3c6a57cf384302120ecd0190762236ffb1e2e0c844f86e5c4afe8cc2", + "0x22500baa11d4cd915995be6050d612473ac8428ce51662070fe1af1e63d7a2e" + ], + "nonce": "0x4d0179", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xc86f24f58f279cef3904fe833a605d68", + "0x75f97cc6c45ae292a32d22b4a0a4d767", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x216de594e86e6d8f5a5439c38e1c2389684e8feea5aff15f9fc7b6789da6988", + "0x3", + "0x13a2306eeac64b25abb778a4f9b9bd7649504cc4248449a707868ed3c35186", + "0x3b34b2035d24f084da72490e28e1cd4e33406323978472b739a17036d368d93", + "0x763f7b4dace138e8732b5a5f316032f5b63069e8eee718e8a423a3684e31784", + "0xdb9bdc45e6e9b4546aa09c9ac9e09946980825aa2a9261ead7620f2f853d13" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1955bd7dc79c7e810e4daa349e0b0ca3d420cc82738563b595737ca8e4b12fc", + "version": "0x3", + "signature": [ + "0x5bf7957601fe4f2850033de964615dff9e6ac2d1adac589ae5355e22966500", + "0x54f0e6445d0535c4d7c11033830aef12bc9b17eed0a49a7ae7c2ff399fe7d0e" + ], + "nonce": "0x4d017a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x5d3d7e6f8ce44d284155b58ebbbd12481f3e2c8140b2cfb2cd934e486be3d6f", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2b788f511d6766ed1a3cf5bf8e50e00f29bbd7ca8bd65edc2594f7b3446673f", + "version": "0x3", + "signature": [ + "0x6f05dcbc7e5dd4a252443dbfc122921684ba507c9ae5f8c125b37a5849a4ce3", + "0x2d157fb48f18cfeac028619c487cfa42b1c4a8928a80677e7ab72a60c1a49d5" + ], + "nonce": "0x4d017b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5beaf7504c6d497908fab99170b6421e8ce4f82a36c05e81e57c68de288a538", + "version": "0x3", + "signature": [ + "0xa1ae2929971e3cb551aa390b9651b3235e02db114988f4e09aff8ed7d2c7a1", + "0x48138925e478c416555d02d6a635b560e5ad1fef231d1d27c5a6b1f5d403a09" + ], + "nonce": "0x4d017c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x15f", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x52" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x39c64217f8c6e5f78e918a0794c93bfb55a0786952bab69651f65284c6305fc", + "version": "0x3", + "signature": [ + "0x681ef355a1fe25ff0ca6ba5c9ec5c65b0f98ffe1d5e9f1452a4a944bd57f730", + "0x688235e9f3dfed680afab1758c5586e6b014b055b0892601a084293e77e9030" + ], + "nonce": "0x4d017d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xabd75faeebf43dc2ae30ec29d35500c731c15ff52fd840f199a5582346b990", + "version": "0x3", + "signature": [ + "0x36e179c9f02122f70fe710134c9d085a2190b16379c3de4c25476165fcc5f0e", + "0x6eaf1a1c336e369351a53f2c861cbe29a21db8917fee57dbbc87e42a56fc08c" + ], + "nonce": "0x4d017e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2246a2b64efecf4997825f48400ddf936c26b51dbfd88d9ad865407572d367c", + "version": "0x3", + "signature": [ + "0x2ac27a9deb1307d095a817af67a570a4d86a6840b4b2792928c4dfd6b21aa2a", + "0x6a03ecfa2e672b7286aab0d8d5dc15da32323a0fa869398dfd7d5d0155bc15a" + ], + "nonce": "0x4d017f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x7f0c19f066be8d4207d0d99b15cc1d22", + "0x498bd79dfbdd93621d95b89b2b1b9e14" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x389927bf21a3f9e09d98b6b69c08682955ed39770a8d1667e556b25e74612d0", + "version": "0x3", + "signature": [ + "0x3544d476b55057c2acb368aa56ae97a0e20c089acce91615f2611e58580d918", + "0x108de8ada06f3d34aac5db57439f2091ea9dc67b126ef845ce4186aad0f2a97" + ], + "nonce": "0x4d0180", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xda9cadfac7e378fa6a7aa8173cf9a436", + "0x3662b1c6fa3f505d6602cbda9321dd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x34e7b36295ddc4bc4c2ac8543f32e26d6cdd96a85c4135716f9c58532db8fb9", + "version": "0x3", + "signature": [ + "0x5d347e50980b7fc681165483d92e402e37e4fd0f7c79ed546c88ea9927e92c2", + "0x7a48571ee7a049cef5010c30a85878e6cfc94356112dd249d59ed166a739327" + ], + "nonce": "0x4d0181", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x137" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x38aa094b71b02ae3191694ffcd99a4dfe0b970624d1582b62838a7c66ab04a", + "version": "0x3", + "signature": [ + "0x48423f92c9a423e65d063a96d72de9ef01b53972bafcb8b674f7bad15d38936", + "0xad2af7cceb1903e15db95adef754f6ea1276c31486ccfecb56341867fabe04" + ], + "nonce": "0x4d0182", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x330" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x643269bb0a98ad55e59d93d819d4d33b5da76a83041262bf2627437ac6f463f", + "version": "0x3", + "signature": [ + "0x6660e02885020adb9d1a6da916e025a5465557ccce1d447fd861a182dc5d0ba", + "0x49998387c3016ac8664e19c9c6dab204908a1fcd47cf53b49bdf644d220bad0" + ], + "nonce": "0x4d0183", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0xf4", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x56cfe3ac23ee2ca090c1f6244893a55c1dd90cc5cdf4b58b5a3b5f7a8b46d4c", + "version": "0x3", + "signature": [ + "0x60403ee3583a2788ffd74c0751927fb6e6534b517ffc426b17b13d246078d3f", + "0x60b06206003bd13ce6f024db3de363842a72e2dfaf96a85dd52ec2c48cf3a70" + ], + "nonce": "0x4d0184", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x8c2ea4a2733533d8868a6fa7531bbc9e", + "0xb0cf3cc328a27327294ae783c21770b3" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43ab5b760421ac182dea5668b69f1f060c7259da0ed81ede521f209655f2bfd", + "version": "0x3", + "signature": [ + "0x757014b5de0991f56e650e37d6fafdf50ca0404ff38c47886edb7dee826a4fa", + "0x32a2d68034521108132ce3c8051caa49caa219b4d2df45a3ca7bf2c90310a5" + ], + "nonce": "0x4d0185", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6cb669e9e840176ccf47a9277b5b546c594bad2ed23bcc3bfe63f2a355c0aaa", + "version": "0x3", + "signature": [ + "0x2f9e02c2da6bd71aaf2fe8e5dc41850b4b71c5f9aeed2907982b6f80679b41f", + "0x4ff5ee0aa770990fbc01be4a37889d5e7605982d4a7791195ca47e86a5c1a7b" + ], + "nonce": "0x4d0186", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x682a1dfabc52e9389041e904503c8bb8ac00e60744943ba4a5c0b49fd695cb2", + "version": "0x3", + "signature": [ + "0x7652bdfa1c64662c2803ed15a4c1cc254327b715c9e2852c024ec6664adbce4", + "0x6445d6fc40f5d9da7f94cba0f854ae8f8af70ada33928c9be4b3f346069b680" + ], + "nonce": "0x4d0187", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x31b", + "0x5a5f15fb688e606e7b10592d820575531ff03f8b8967c11e52f4b2e59dcc20c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4e06a9943b6d6ba718553a0d26c8970653d42e0467c88178f0e43aef3e17baf", + "version": "0x3", + "signature": [ + "0x20a4230d1fd6ec5ca52eea919f1b6c3c36e44b71fec9efeeb76ecca802d2201", + "0x65481bd5686770a79406161a4daaf5a6ad5efe72b6bc1604a73e50b2524ab94" + ], + "nonce": "0x4d0188", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x167", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x68", + "0x751201072461a296c0480292e1e56f472a2dbb069ecf219dcc0ac91061bbb26" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3be4539b702f9c0bed1d4b0e7f55695615c9a1b30bb3eea92adccf4c4c9b592", + "version": "0x3", + "signature": [ + "0x7ca961ad6b0dbc0a49ba55adbbb59e367de0379ff8801ed5762442f4d038ac7", + "0x295a876f6b4ed7697d6f107b737b034f380535db80074c476f8b2e12741bf82" + ], + "nonce": "0x4d0189", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xaa9b9e028dce00ad073a2eb2214d8d81", + "0x3e739a25b039c60df0f46da2ed791220", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x7c3025b407856e419977fac918917983", + "0xa43639678b6665ca74ab6d4dcb8d85f3" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5d882d8c4b11eaac9b90ab759d31b55db4db4a2bc2bb15dcd535d52a5d7327b", + "version": "0x3", + "signature": [ + "0x4b7e368a3cee5b92378629d2d715b955a18c61136d0584f74ea55a35212da0d", + "0x494ed7a5d040f428bc1feb1056c04940fcb4f9f88ffa73654121baea36bd5e0" + ], + "nonce": "0x4d018a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x18fe78a41a83218763a3964733074a3b1295f3f58d34f4027d25e1c861fe74e", + "version": "0x3", + "signature": [ + "0x3408bb569060b7c819336b3d0ec4b2c221db43a45e5746b65384af2ac7b3124", + "0x1465b30284cb366adbd696f640d306c4e24b391b1fb497013d6bd6d707c5013" + ], + "nonce": "0x4d018b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x17da35ce4ed77e22e3b9149fd965dba57351a6c29f588a7d245e208d073e4c1", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x3ba" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2eec5dde849a7db21d9ff42b8644047aed3be0ebad919eb2d9eae5a41d9c4ea", + "version": "0x3", + "signature": [ + "0x791adaba2fdd3f3d063e34b68c153f85be70c7182dfee6a12ae6bc829ebc25d", + "0x4dd3083d0a48a0b6a84fec91a7b25a60b0f19aca7af8f888be0ff58cc375c2f" + ], + "nonce": "0x4d018c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x3f7866b3b5a83ff31c0ab0a5c694f6b9", + "0xb7b49beaebe9c34669a779be584d6cd1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7e825afba370d536898ada535aff3c69b6568e73d99bfb4436a395cc81ec118", + "version": "0x3", + "signature": [ + "0x6587b12aaf7c7b996ab7fa6891dc44c2aa3bd9fb07e4445466f6fbeacd18d1d", + "0x2456191833a9059dec707c71829df2ff89c46415ca80fb8cdfa062bdd8a5d89" + ], + "nonce": "0x4d018d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4c7e561d814f2ead46f6213b700f5e38a4470ca3960d15019b174475385909c", + "version": "0x3", + "signature": [ + "0x5dab2c053f04ff63e496fd18bf564184cc4a551a986a22a4cccd87df478f140", + "0x31996b49c64e2b2cf2acdeba7a88c1a90f4025ed9e70a5720df2da50b84a858" + ], + "nonce": "0x4d018e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x142b6bcf36547f884b1cab10964260ba1835242b54256fbfb57eeab6b5f4d00", + "0x3", + "0x2fb05f4d8fadd53e1d6b45bd2fa78c4afc2865e5ae6db7cadc3477703d8ab43", + "0x578795f376d9ddb5cc6605a2396cc8af3df7e1fe90ab75ebdc019f20dc4b96b", + "0x426ed78e1959351c68092fe3f6490c33c79b06e0d1259c54a6e9b528064ed8c", + "0x473d988b13dd09132ef1afe3fe4efdc3ed2d901d4594911a67a38213f0c5f4a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x70b127661839b231914a28d21cf8ccde3641c51914ebbd7775fadb317bacecd", + "version": "0x3", + "signature": [ + "0x364c58221b81308abce776ee9b5e3ad4cdf7a7e2016abab156bb1194c1f62a0", + "0x5e4dc8a8d0e7f2313ebfb00859446f66d873f9cbdc72f5ec68dbcd4a7fbce3f" + ], + "nonce": "0x4d018f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x667613acec1e05d62feea472c7bf7342f8ab76cd78956df8e129e2e92149816", + "0x3", + "0x31942b9a90338b3289898641dd53d6b5ea36beef6ed91cf31745c42be99f7b", + "0x5f9e52bbd3fb0b2a60cbfaa1e721dfb27e7deb26503e3ec25aafd7f4ad6ff13", + "0x1379955dc7ec49b67d9a4bc7eca9e9264f3dd9f401ace94bd9be1e533852f30", + "0x1b5fa1cd803a9b406aef8347387c14ed5afcb831984c231db7f1e80174c1a5d", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x2a7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x14bafffb4ead9755982414413a7e09ef6ab4a9211d7a5d5fc5922efae9b822b", + "version": "0x3", + "signature": [ + "0x38ca60b94f75c458aee82acea7e3d20b3dd10a755be417e86b8ef8ed9ca7a99", + "0x152b09e78ce435ee7da806b4f47155f01df55d9a993ac13904feb8de9499756" + ], + "nonce": "0x4d0190", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0xb4" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xeec4d5c8d00e421e0540d4b4f7b90651e0cbe7f87201440f412ba67ea03117", + "version": "0x3", + "signature": [ + "0x4ffb9b97430f97f4c793528c74700eb72d9e6658930039e2d76f5829860bb75", + "0x54f331b883fac5aff02b6e914ec6d2b9388d1788c3acf97ec80884d2b2631a1" + ], + "nonce": "0x4d0191", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6f4f9f4df88b85af1f368c84e3e688296962556c740564dcb2d3894f8cf58c8", + "version": "0x3", + "signature": [ + "0xec3ffc5ff8af6bfd72e435c17d604f44dad55c41dd9e821a7af1582a6fd0a7", + "0x5a79b358b36a44e3895345e0fffe802ff40ddde20e74920ad2617ec03594dc4" + ], + "nonce": "0x4d0192", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x756589ba9549d394043d21c9d4aee85bf86558d5ff65bd723b5e597f4a7a92d", + "version": "0x3", + "signature": [ + "0x6e0dcdb32ef8666271060f2a079413c380da3c4c4d29f27cf836ff2f77135dc", + "0x6c7ff8b6b28770d548f95ae4516edb746d11f6fbb6ea262f9add1728a66189c" + ], + "nonce": "0x4d0193", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xb0196bc5ae24ced16d422956ff2b9a93", + "0xf956588739d1634d5135a9dce2634771", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x3785a9877d4bc218b69a84a3ed874b1", + "0x1ea49de635a5ab115043741bc5d55ceb" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6f39b750434a1a2442bf4d31819f4bb28d0e9eeab5c92231efc8fade6fb7c34", + "version": "0x3", + "signature": [ + "0x24478445f539e574f4b2f2dae2d2e0998b98363f010488da2b61befa94f35ad", + "0x771034f1c61ae99c9f0a4de3907eb0ec1e553692e87d79a996ebb45bb87fadd" + ], + "nonce": "0x4d0194", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x1f36f091f5bed9c103933eb6feaf7594389c0b6a1db02724e0429d92eb7fe90", + "0x3", + "0x63c9a23eadf48e4b2576985247b3d62a89cee1784dce0ee89eee786c7afdb54", + "0x1235a41a93d092a6db827337e30e23dfa55ae7b90a39660503a91e3ec16e491", + "0x6155321295ce63b9a593ae6c5da2719f34c72e32a56c04046e32b6136d2ac44", + "0x37ff0e2741e7c7c123e95c9f0a4a159995e63fac355a12d9ab14a97d19b0626", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x123", + "0x740c2266b76c503684363a12b484c612eff91f23918444eb37c9b6256ffcb1f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x24681963cc8a2c1903e7897e3df06f5dd5d09b1617be4a691a1255ce5b1bc5f", + "version": "0x3", + "signature": [ + "0x41a888569eac8613be1c30a6990047daf4f104c55810b786401d975ef8881b", + "0x61dd1b22e063b728e5b86172d4e2eed6a40ef749cca1d250c91f9a955e6ac36" + ], + "nonce": "0x4d0195", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5de374b729d1f7b05f30ab01b8e31ed075dca07ae8e979e5bd0767bab2a83a1", + "version": "0x3", + "signature": [ + "0x34e54e13c367d0137aa8c517223b93b6185cb355cd66447fa63239f4eacc017", + "0x42fe1888b3e4d0797b452ba377e19a07fc55604471e127e18a2d50b02ac8225" + ], + "nonce": "0x4d0196", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1ec65a53d552e931a56a0b869f34d8e8f4e6c90a9d516c720186198ea20575b", + "version": "0x3", + "signature": [ + "0x24ec756a969c898e21d2a3d7778486de30cdb5ab597ff30f5bee645596c44eb", + "0x674a7c91e0e39e2fddbab5314da242db5bf317b6a4119fe50e5c2bb70601bc6" + ], + "nonce": "0x4d0197", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x4e67627687c99b6e71e8da2b75b68e56", + "0x7560f66b3b9181ce3998e91d9149e380", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x78dc385cfbb57c86c71402930961f5d75bada1bf7f5da9ca2a4ed2466dcf47c", + "version": "0x3", + "signature": [ + "0x5ab70fe7d8bc75ad77f60649d13295d08f8c17820cad6c7b4ebbf675725caa9", + "0x1607e1085dde85e29fe6910755c1a6c9a32838b4ee0e39ed146d843fb0bbbcf" + ], + "nonce": "0x4d0198", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x3f", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x51ca4edb15d383783fbf9a4935a019872b6f0915f9a8b91adcc6284beab4975", + "version": "0x3", + "signature": [ + "0x4c98fd588f5b4a9f3bdfaca963e07a133edb2bcd5858df34455d46226f0bb91", + "0x446740d76fea2009b5d43afd525a81cdd94f92d5e9a088b001fe737815de892" + ], + "nonce": "0x4d0199", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5fd81c76f927c7ec755cbdb881c42b2996cd8edeef4baa4499ffd4930a00e1b", + "version": "0x3", + "signature": [ + "0x3552de0cbe84b1445713604c95bef5eeacdb6b44ff4e6bbf99561df2300c50b", + "0x75d972facf52480248bc86d76551f79a08fe4fdf82b6b2bf4153564f4d43788" + ], + "nonce": "0x4d019a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x359", + "0x5faa0b48ab3283c2c1f7c5086e2a537dc3f034f2f79e0ce514ec415405443fa" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43ecae51a7385d6740bb5212e85177e769336690c47312fd34879865a6ae128", + "version": "0x3", + "signature": [ + "0xd3cd59da26733610c4eb3903c11f593d392ba1747addba406f34914dab447", + "0x2be9f84727d7f223ff6383d8de9e0fb22b75bfbd677da79602221633ef6624f" + ], + "nonce": "0x4d019b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x7fe45fbb877c67b4c81300c8865bb88d8320227a2982fe6d2abf5c7f1f5d9ee", + "0x3", + "0x38a043df7c821e0228f34de5e6ca9c66126a0dfc22c880bf58b858a5e15a5f4", + "0x375f356b2e8c6ab26cf2bbaa1afb21c656ee756d5df7eed5a8370cfa9a5e356", + "0x171ec4173409d7182f4725f15e028182d74dde7d5004a995056604b4c9b6ca7", + "0x5be6e36ab789a39a93bbbb183f77ebcd28a1a559264ad7bec65b931d4e8cdbd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5cac6eabe55ce629945dfd77b50fdb2fcb0cd965a8d779af240347d4f7782b3", + "version": "0x3", + "signature": [ + "0x6779198f772f208d2737d5395569013b9950b1e4fd4b735dc60e7421fd1d24b", + "0x7009a8e714eed35fdc8af65e888eef9de82c395414955f3ec7d4b4510c46d75" + ], + "nonce": "0x4d019c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4e065a1c2373270e06b9b75bde0af35156c61004c20b490239697bf9740e77e", + "version": "0x3", + "signature": [ + "0x5c35f29e591df1293a9cebf4c81957d61f1e620a2208b730aaafa45694e4e3b", + "0x3ef336c8a8171e30ab229b0637ef6f1e82243c10911dfaf1ab88cefd2b1588e" + ], + "nonce": "0x4d019d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x60a765de354c0c986b2e30ef78a664295750d3c0589741d03f04c9a6c8599d7", + "version": "0x3", + "signature": [ + "0x453f95450bb4c3b54fea232d59a56f78ecc450f5e7e3e472ffd5f0ad601f83c", + "0x36debca89ca15a5e3a4590bbaddca7431c797076b2648bbb95bdad46b849f99" + ], + "nonce": "0x4d019e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x678e27be4a55016882eafaa3c8af3633ff4e173710ed70f661d93825e3e77a1", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x66a772a0d3e6c5d7c7e1b63959728795532610e4f09558423027fbd21c59072", + "version": "0x3", + "signature": [ + "0x58dcc414ae47d0f1e1b7f0823c4597d9a2d6e51c26610e771a6e651c24c6ab0", + "0x16a43a088b4e7f5ba3750c5ebb3f55e60a5c65684622272f57b656626f93238" + ], + "nonce": "0x4d019f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6aa07622164fe65d714df71810db7023a929e4b27e84684abeb8e1c96064a85", + "version": "0x3", + "signature": [ + "0x648eed821b858cbe17861e6ea85ca6cb9acab605e6f041dbf4dd39085694a7b", + "0x2d749bc8540394d5d73ed0687dcbf9c9b7dcccc9c40d25c49c8c56a71a82677" + ], + "nonce": "0x4d01a0", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x23b8b03167b032fcc9a9940f06b2784670efbb616fc89882d9e1ff2566fd6ba", + "version": "0x3", + "signature": [ + "0x75cb85a552c468130403ab186c58e3d72f171b213fe9a940724b1cb0b534bbf", + "0x7277ab0cefd1833b39170d8976aecf3271be3203f15bfb61ecc3971ef7366a9" + ], + "nonce": "0x4d01a1", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x339", + "0x2ee4b26e6043f1856d4241fe31e9f7b00789bf00a1885a25a747eac5930e823", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2d245511ace3e7d641229804cbb48f0d0be9adbdc4b225172020311322e8f2c", + "version": "0x3", + "signature": [ + "0x69c3cd015b74a829544cb9691a40ea36b9df17ebc30bf459e8dec45f3023ec2", + "0x12cdafccdca7abfa8ef81cea944f2c202193c0699dc4d63462a9ef768af8163" + ], + "nonce": "0x4d01a2", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x58adcf2ce439caeacefdc11343ceef2d", + "0x2029c221e793da002e3fec6ac835f387", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x2f6a4dafd4b5995afd16b32591b051316ebf6acd8316b8b42b9be19e00a8485", + "0x3", + "0x38e1b271efa38e66fa0721206ed3ec58e4356f48b2beebfe056582d0e6a902a", + "0x39c62c6bec0290e171c1c07474a979bf60dbe4e66feb5a1ca8b1451f5b04c8", + "0x1a6d87fb631fe8db63d90b9dc23727de8c5d794f27a678ae5234dc10a7384c8", + "0x5946b085d009980be9bedb74f07f5fbfb74a79afc61051bd4e4365090e2d699" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1e9428e365e5ecb40b3f3d745d985af23b79c8e803bf6f2c94c6208f4f8fb47", + "version": "0x3", + "signature": [ + "0x7fe54b84df7d544bf55b4148f181c65f834cb463b63f9e6118590f4dcd0ce67", + "0x3af034b7ae5c53f979e9afaeee2c064926551863ae5aa03e3ae43a61d1f8451" + ], + "nonce": "0x4d01a3", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4462cbfc474cdf82bdda15c125c8d7374343f9fac1936b341d4d3c99008d295", + "version": "0x3", + "signature": [ + "0x1dc60c2b624cf35944ff8864adb8700675ecb62290fc3d0a25df2b345f655aa", + "0x4c1640e39750834f0ee56fbc6ab72745fdb3e9f8c2f113a10dd59c807618f68" + ], + "nonce": "0x4d01a4", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x18f", + "0x15a509d13e2b1ebbe6cabee857db28b593267963e2744daca355e17c9c9cf12", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x564efa83d7ecc5f4249fd66b7991572405a7b3807d5090e71a30cfa841064a2", + "version": "0x3", + "signature": [ + "0x42b15f3ce43c8fec3e10cbbf3afba93d1f02b076137b656ea7800c1cbe8808f", + "0x6fbc416daf52acd3cd768cf0e9baf1affd6cb55917192becef9b6e88ffabc1f" + ], + "nonce": "0x4d01a5", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x9158ef2997f12596706e74a50cd7cca6", + "0xfcfcdcdca2c13bba5a976b76c7f8b012" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x80402dbf58af96914b672dd81487df42ac6a276efd175af1a08ff2c635f9d0", + "version": "0x3", + "signature": [ + "0x2f6b1b923e715a0a3f3e947b049592308ffd4a5388850b89291802ff89672bf", + "0x43e1375f1347077553b51223f5e9080abf93d51a7f1c4f61fb031275e73e908" + ], + "nonce": "0x4d01a6", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x7ec4336eb0a997030128bec0b10ad066", + "0xd72c6659127d0f527a5128ccec961874", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7bf4b7df521c148f06208299424f739a75f2da84b32d91f72b85a87e7ed7c77", + "version": "0x3", + "signature": [ + "0x527740ddcc3c00dd114f1ab7d7c40e2cb7be09377489e600fcb42b2db62b8f6", + "0x7e8f57bf6840512b964c52c871df2d16cc3136d182d222f756965ad77d78623" + ], + "nonce": "0x4d01a7", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xc0f34b01a9affb517f4e54d0ed3dfda0", + "0xd0bec7db0315483432b3bd158c618e1b" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6fdae1bbec976af03a6fb3b0db55c9c80b7f3cd01717fade7492cf0dc8f7cff", + "version": "0x3", + "signature": [ + "0x6219a66af0f6750d75026868dbea0384179f2fb616fa917afbb7201be10ffca", + "0x329ec2e9199ba7e955f1232921b4bb6603d20cb14630354f74f578e79c86510" + ], + "nonce": "0x4d01a8", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x61c76c61c66ac5d59cbab0af3c6d300cb3ad8ba11d1bd01b903049093748d69", + "0x3", + "0x5d492e30f6f53b57b82e522fbd1337df1f362004497ad7ac389d9f6719fa32f", + "0x37992970b26c4ad3327df6b8fe5a4cec2f15d600babdd5d9be3a83d9248b442", + "0x344cd7b9118311ee75a2676e1e6b8f7b5f38fe681f66f6807b32fc3740763d8", + "0x37bb32598800f79056c2a5ac299c1e42a7208ef683cba26ba2876b13e919bf7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6a8972df24b1bfb6c4d422a0a38a0561fccee5d046da5e9104aff7925c92d5d", + "version": "0x3", + "signature": [ + "0x4d24849f822d97015aac3ba6feebe47adc0442bd90f41686060770020dc3c9b", + "0x6a886cf35e233b120122c225760b919f8f35e7ab8465ed255553a763f8434a0" + ], + "nonce": "0x4d01a9", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2d7cf5d5a324a320f9f37804b1615a533fde487400b41af80f13f7ac5581325", + "0x4", + "0xf38276c4c6e7c36a8daf4d3eb949d9ff99fa4cda", + "0x2", + "0xb9", + "0x19d" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x18b0b3ada53834f73041a1f73c48a75530d6ee78b07d2a6d63a9b879ed093a", + "version": "0x3", + "signature": [ + "0x66ed93a50a4e202ad26917753394ada75ddd9fda3a18f3080e0943ef9a58a51", + "0xd4013492cfffbd54a7433dae15f1e139b04efae226b6903df072c7c682f7fa" + ], + "nonce": "0x4d01aa", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4034b35bb388cff7db00e210e74ff65d2ec792675ff71916d10f11e5b59a4f7", + "version": "0x3", + "signature": [ + "0x452812698c2204bbd5f4888b98650bac6bd1b14afa966ffa8969973a1e2f05c", + "0x3267a27e7d8db6b0772780d5bf07827906a54519e0c1f712db0a6b6dd08f5e1" + ], + "nonce": "0x4d01ab", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2bd8d12f680bdcae11f46c66e1865caabbf33e009eef38e1916220e77ddabea", + "version": "0x3", + "signature": [ + "0x5651388b008d08e43fc1506eaed494e1a50b78cb973b76cb9e86f5cebb6c59d", + "0xa5bb6d942719d71beb278c2e7f41561c2bf4ea831e49d8c443c8770640e4c9" + ], + "nonce": "0x4d01ac", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x628842facd73664855cf1990a3156b7b99a572583269bdd6c2922ad4fe7162e", + "version": "0x3", + "signature": [ + "0x4cd4b5f1f0501d86bdc190ec5e20f2289d98d7e18e3905a79f8b16ed4dd45ca", + "0x53fe878ee78caba8ec94a9bfc8f04441178e2ad04c106ec73bd6af533c97962" + ], + "nonce": "0x4d01ad", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7ac13b703386c3b9457f00900f7bd02ff6cd3efee6822637663a75ee453dac3", + "version": "0x3", + "signature": [ + "0x23da26c1ecfb70052ef38e6d76c16d1d818a169ed57792baffd47eab42e5485", + "0x138353981f1da71d2ecc38c76fb7f7c7e5f2de5041f2b16dbb6df5ead5468c8" + ], + "nonce": "0x4d01ae", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x6df2719d9039c83b6288a6e32e0e4049", + "0x4bd2489103c7cd8dc49e2e97e830eb41" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7671da415f19b8ea9fecc25e3d9f6ddf80bf3776344e694e35895f6df338520", + "version": "0x3", + "signature": [ + "0x240491cf39ded89daa8b13a6baca26da0a82765f2d1e933413148da9b71117f", + "0x254632b4afc2bae1e430b2fb93693c3877ec9ad99ce3f46378b84a84610af4d" + ], + "nonce": "0x4d01af", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3d68175d9560c0fb66e3c9d46a1857c32996cd8042bcd136e4ee42ce0d44e8", + "version": "0x3", + "signature": [ + "0x274bddaa0ec1e44237b8fac5c07e90a650e5339f463dd5d29a6ab23e27aace1", + "0x3cc32f9c8a16e4313f1e70120ef1ae0611964cd72c23c2f542a249829e71e6e" + ], + "nonce": "0x4d01b0", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2726ed06aa105ec21286f7829b86383bc1dbdbf9655c2cfc404389338c459a5", + "version": "0x3", + "signature": [ + "0x3213b511d72244f61d6243c5e24e9352abe311e5630cef9bb81bb0f67162449", + "0x746514dd8b9f6d434154bbc82ff9caf0bf5ea8d208e50c65e94f9773df288d5" + ], + "nonce": "0x4d01b1", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x7dfe43ee5864bb68d2157b25bc2f18d9", + "0x3a2d79d94b7dbc6070404228f415c9fb", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x48eaf919b239d7fe0c3d365b9b3e34a9", + "0x1e295074ebbe3645dba71b105e718c96" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2cc6eec3f1948533584950ecf1b5961faa03a0697eef8806322274440953918", + "version": "0x3", + "signature": [ + "0x7bb7a6dfb94ba627aa03ef35d82abd08e4cc430591c5c1866f19348a187b8b9", + "0x2f99aa4da0f8e87a713038f505e46c2651d764a330edeaae4b34558a2638583" + ], + "nonce": "0x4d01b2", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x549a6bb1bc30cca5e4878f2a3e6cd0ce3ae25f256bd58b8ace19f9326b55941", + "version": "0x3", + "signature": [ + "0x288f6e5775bd2cfc6071171834ff7a650cd71c68a431a87f35e735a59f9aa1a", + "0x51c101f32354a5c73e2b93396fc15ef408a66343b32cc865236e79fe4b9fecf" + ], + "nonce": "0x4d01b3", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x24cf703f5777fba9400b9dece8a72c3c4605a4ed1a3b28667dbe7e4c363c40d", + "version": "0x3", + "signature": [ + "0x2c512fd4155580d65fa5a6b4dcb8c0b935642a4d890bfaf2fc9853752f29515", + "0xb7f0441eb2aac602bf46e66381b7ba02a4fa0863ed605998c9d21ddb274f53" + ], + "nonce": "0x4d01b4", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2873ec1f7a8034cbbd2a309783121559959cc1a73b5eff3d803cbf35f7b9760", + "version": "0x3", + "signature": [ + "0x102f199b472e4542ab64fc20ded06044ccb24b884d889a80be99296405b1607", + "0x32c23ca2dd3aaa0ed3629837d514064d804d8ddf08bee2fa8711c94c87b8825" + ], + "nonce": "0x4d01b5", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7dfa74642e260cb91bb420d426895256ee04c28e81b6a5aee48a3b93923161c", + "version": "0x3", + "signature": [ + "0x367ff7efd365e711941e41b38094f36c371596f9f5457286aa7cf9d19d315a", + "0x36163f8d80f1a2f42a3a76f7e3c6a5131880636dbd3d63a822115bcb0b30e2c" + ], + "nonce": "0x4d01b6", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x6ac003e8ea4b49750f17f294b17be28912551f1feb15c56be04a86768280e6d", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5ded4f9880535fec58e68b47d5e34b33ad712c6831f1586948d99987045d55", + "version": "0x3", + "signature": [ + "0x2c528ec605d4179379a05f4d704d53f231615f8cb38596e2d222c4047f68881", + "0x5c41741cf26c5d78c9cdc83982cb5bd404252c649ffa52bc5d74ebbe88a33e5" + ], + "nonce": "0x4d01b7", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x678dd7800d8e3639c12d5bab33b3840caa43d26c28924b47b7e3f18ded665d2", + "0x3", + "0x1977beaa5aa8b4ad01386800e9992f33d3fbe68a2fd5041814276d376bd85e9", + "0x5a721a2eb73a5a67bd136637aa4e0da6fadd030964b789191dbfc629f3b8736", + "0x7265d69c224668a5aa44a21eb199de1e93e4007c31b4d67bc9476a2f87f88a", + "0x1b0994fc212e7673f5e419eccecaaa369147828cfa1017e539fe7b6165dad93" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x570208fa2538f1073401fb873078e566b367f0ac91946e62f1b96d485186fb8", + "version": "0x3", + "signature": [ + "0x111dcad906460fdd2a110d0b5312f1d9048779842ac5f55cffdd09b857e8ef4", + "0x6cc6a722f0e519ee6a79596115f63ff55e9016b9820199824032b21a394c169" + ], + "nonce": "0x4d01b8", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0xbd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x64e014591d13662140422a96aa3195ddc76518999d70fc587c194969994f60e", + "version": "0x3", + "signature": [ + "0x3eb66cc3db76456b47ed102e0fbf83284ac977070ac044f6569b80114c3131", + "0x1a1272d2616af30390ceb724e1e3544e3524f06aabb3ab47aa17ef385fa746e" + ], + "nonce": "0x4d01b9", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xc4c7d5798e75cd7f9fb3e1d482fc3c1a", + "0x68e714300306a7eab78be2c048f89716" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3d10f3b960faf026ad209cc47fd8a9f0f4d73a0978293676a026deda96453d3", + "version": "0x3", + "signature": [ + "0x159ba436e3225cbcc3a5c008326580a4ee087ac2458d648ce755644eab5385d", + "0x6ce6e3db67237857eb607a54bd01e3fb0dff5e937e355344d35d32c0b7023d" + ], + "nonce": "0x4d01ba", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xc57032f255d699c50fc84d20a4b86a90", + "0x25b79a36598ab8e2f9e3ed72e909effc", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x985b398d7e49f4d4690d8fb2b64005c3a0e32d88ab9cfa6664b54c1bf650e5", + "version": "0x3", + "signature": [ + "0x211db48e0a5156825739272d2546073fefcf50f945be057acd7df6bbd3ea01b", + "0x4f113b0915b1b0f7f08d7587e80fcc0e2342bbf4b5a1f2797fb31a7a09d3b7a" + ], + "nonce": "0x4d01bb", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x2c9", + "0x3dc59ef5f27dfa4b73acd9df91b8358c0d9aadb63c38b1769d5eec5d79d277f", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xf3a86f02a2a8486a72cb858f29f36844", + "0xad2d1807500cd23f5fde1e160954706a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xf0da58c49365418670f920f87a6b0e71760ca0a7f75ff48d41d855eafbd051", + "version": "0x3", + "signature": [ + "0x7f907afc9c8aa556ae21b2037724a52829fd7592ac3aa07ec8c848c2b42a5c", + "0x5138d034a9752055489567d53725e7c606757aba928f11aaf211390a9215123" + ], + "nonce": "0x4d01bc", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x201", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7b18a13104be83ea7d37c729861df5d7fe9009b6e0c1cba50132455a5847004", + "version": "0x3", + "signature": [ + "0x27ba5b6e484926a946d7cc37fb5188ac4891296ce8d501c8bd3d41503116419", + "0x5995ac08ba20e1613e822d99df9ede5d1599805995448cb6ca38232a8754a7e" + ], + "nonce": "0x4d01bd", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x7b9412038afc7aa5c01adb585b67aa55", + "0x1c73b4c15149027efe52503c4739d1e3", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x4014cd1c73dd57a1ed7584b6117e7115", + "0xdd2d5de0bab13650c732319b84bb7fe9" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x29eca77cefd146b8f237010c7a43dfa5b852c26ce8c99288a7dc4e451829d", + "version": "0x3", + "signature": [ + "0x54fd6d62896eee49e808a46f449a478029f91d8413295b783267024463dfc66", + "0x13087f43be0ae35cb4dc868aa7401ad5890a1de07b8da6551c071251187945a" + ], + "nonce": "0x4d01be", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5db932b3e999afb24503b9ce23a8a0c7a22bce650a3641983d1402a140ef5b4", + "version": "0x3", + "signature": [ + "0x6be671b281e0d11665bea559e350ce8b2e81b3a71fce447302420220a241993", + "0x579ba1cc0c76a6907a2217d1101417c6657c9bad736a6c8ce201940150bc635" + ], + "nonce": "0x4d01bf", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4844ca75bc10bff86b4db4c2662fa3790abdffde2c685bd6d7f116084185bf5", + "version": "0x3", + "signature": [ + "0x690b972b3d87f48a45f35e367319ce22f238a4920c615afbc0d7dca7a469a1f", + "0x1fa03b0343d116767398b1e9f4255a1b38cc9416a89a1e8f9252346d0aa97c8" + ], + "nonce": "0x4d01c0", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x87", + "0x1e902316d06eb9fd1d7ab1bc085c3865b22a139776df813d26a8cb0b9569969", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x50e072d51996873eae2b020502294fb9ac001395b00869108ed2f854c8fee2", + "version": "0x3", + "signature": [ + "0x71bcfd47080149312280986a849afe3f2c89b34922aedcd293d555b3726d33", + "0x3931e75efb3d0b11ed9cd953b023fbd34f74a80cbb63835dd2ba69c3bb2d623" + ], + "nonce": "0x4d01c1", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x4df105c97436d13814b5a3557e62f08c87e06ef711cd76bae9f880cc7cdcb34", + "0x3", + "0x3a8abec36b9ff192686cc6d554bc9487c99682333ceaf3b7b339160dcd1997c", + "0x5b79b5d32bf600a30ac095f6587976647a62ddfccd29b38b85979b560f91539", + "0xd94fd54f9f7d674703bba4af53f2d11daced123a6967da6386863611f133f7", + "0x673981bb1d1d04276c9992d588fb6923f2497a20fdce607b5f38a26bc58797e" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6a9b2b698b49f21bd9b91a507714a8d14afc37b707bcec25dff433ac569ea99", + "version": "0x3", + "signature": [ + "0x5655f6e65c8a52c2de50b6850e0d9ef9cbd06e05baca538d1c69d6f5d934829", + "0x2dde3666406afe26a36bb1fba9f73055ef355bc9cab130b465f10aac1b10ad8" + ], + "nonce": "0x4d01c2", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + } + ], + "timestamp": 1761654203, + "sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "transaction_receipts": [ + { + "execution_status": "SUCCEEDED", + "transaction_index": 0, + "transaction_hash": "0x2d5f54704fa03a419bd8206f4da767c078dfef38ab136ae4e5afcca9e23db0d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0148c69e1320", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 28133485 + } + }, + "actual_fee": "0xa0148c69e1320" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 1, + "transaction_hash": "0x1bd919403248da3ed5d9f4839d3c53accabbf46824e521a1d8e449d0a5e0b79", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b5cbc44fa60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 226, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003535 + } + }, + "actual_fee": "0x5b5cbc44fa60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 2, + "transaction_hash": "0x1fb1e6b962a752c7908452fb688da8fb1a10e1a7f31974937a68a0bcd083167", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5cfaa7f9f660", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 226, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1021295 + } + }, + "actual_fee": "0x5cfaa7f9f660" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 3, + "transaction_hash": "0x5fc4ba7708e32649f75ce8a73433211e6c7498661b859878d088a017f28bd38", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x2da691c6ea98b793c80ad0ea4326e30ee6980fe5806cbf07b730e9080bd239f", + "0x3", + "0x541114b6ab7d15ad94f4b926254cef4af78df6676807ded676d7b220bb2235d", + "0x78f0708246cc3c9eba6e196117d5811d43b0af8598e195f47cae9f4fcb6bbc2", + "0x11e74258f2da53cdc5106099a2d4ebb2b68118263fe031deefbabe261bd0f76" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 4, + "transaction_hash": "0x29591c07c917ced4789035fbf42ad34e49477b2bf0167e550512252afa53c44", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 5, + "transaction_hash": "0x255be68d67cd61f631460c085dddf2d794b2513d10762902c5ff1661d1b9f26", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa898cab37d40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "range_check_builtin": 226, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1851890 + } + }, + "actual_fee": "0xa898cab37d40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 6, + "transaction_hash": "0x43e198ad543d0cff82e4d3f41524cc9722691d8353d298fb010db1f8cdc50fd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x57ceb0f62e632d8e07ba5ad871c5c17b6d92628e420bd99db16fda1fc59ce81", + "0x3", + "0x78c29088e290497c4f26d1c524ab41fca6b9f83630510b79fdefc2be6808ad4", + "0x58daf38835834b28bfcff618f70a06cb6eb54fba222e893cacdfe05fb2b6faa", + "0x2d661e18cbc6550572f02c4f5c79b35e463d104d86a9c6a080d1b9841c61f84" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 7, + "transaction_hash": "0x4528ced42391594cac7e5febff81a6cdbf04ca6844ebe12533a247ba6dbb23a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 8, + "transaction_hash": "0x39d4e72ab77d7d850e8fb107ecac16692a650718ca0f69e72424816a8cc9372", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76f1dc06c8a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1306505 + } + }, + "actual_fee": "0x76f1dc06c8a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 9, + "transaction_hash": "0x43c372fb2854fc4b7e525c39bfe41982351145417c1955193c1168ad35f47f6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6e8f1ca4e7e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5986, + "builtin_instance_counter": { + "poseidon_builtin": 26, + "range_check_builtin": 311, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 416, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 448, + "l2_gas": 1214395 + } + }, + "actual_fee": "0x6e8f1ca4e7e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 10, + "transaction_hash": "0x7c4947c54416bda234525b40d2d721219c9d1fb922124fd26e80849726c8575", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xc5a07c9d6100", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2170760 + } + }, + "actual_fee": "0xc5a07c9d6100" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 11, + "transaction_hash": "0x2f9433c6fddc301eaf2dc0ed683387d2f8ea2d39096f881d9f57fdfcf4fa1e4", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x93510cb207a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1618145 + } + }, + "actual_fee": "0x93510cb207a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 12, + "transaction_hash": "0x628e4c573460da14afb676821478cd23a8e13d9db2bf453046f2ebc8060c2da", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 13, + "transaction_hash": "0x7a84eddaed207a43d6710bbfcc91b112c959eff3a4fc1280afc59be9c1f355a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x585e18ae05a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 970641 + } + }, + "actual_fee": "0x585e18ae05a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 14, + "transaction_hash": "0xa3046f3f3bed24b3b9c291e9e27166fa55263a7f45b15799f839b4dae5c105", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 15, + "transaction_hash": "0x62cd9e10069734ecbcfef62cde47de6889b625260ad4016b0b1a45d7bd676a2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 16, + "transaction_hash": "0x6be4278c3139e72fd3771aaaef10eaa5be7b6f6363aec249801035bf5581d0a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x275164c2685098b4d843fd4e22c20c947db9f8805e1e226c542757348212449", + "0x3", + "0x3ab7bf641fac93ecc111493fbe276b841514cf4e6cf290a71104526407b2b4b", + "0x40397468f898244863262181920befd444ed09a87f17ab0a6509a1bb90e9876", + "0x23659504490da0164bb499f1168b9072dac6cbb8e0664a4281dcd03129613dc" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x62bdf2acdce0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5428, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1084595 + } + }, + "actual_fee": "0x62bdf2acdce0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 17, + "transaction_hash": "0x471066e4bccadeeb87e76e85208eb258fda728c0b4e96642a177ac61711b4b3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 18, + "transaction_hash": "0x55f9bdbbe9ba5a3af8699cad62444f8d8b8c378c9c459876843890e06481c13", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 226, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 19, + "transaction_hash": "0x3e55f69bab145604f50583b8fb8f28dbc5036a34d3e8ce6b1787ec87d445afd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 20, + "transaction_hash": "0x1266043d904be5fe67b6f31f0706c8f1929630cbe4837358eb7cfa9dd3325cd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 21, + "transaction_hash": "0x315f82e41bea3e9f821499bc218cc71b931292c77279bfeb09e89c46da98c6f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7553f051cca0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1288745 + } + }, + "actual_fee": "0x7553f051cca0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 22, + "transaction_hash": "0x2dfcf3da412080423fed39f1c78bb02b761daf7e30d0099508ba1c8c9ee5860", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x41b7d3e2fb7ab639a524ab9dc87d83c477f34e9dd0d045d04ae0e0c79544d3d", + "0x3", + "0x74bf288bcbccb592b056bab596e6bfd0cc7eb9275e0415894aadf74243d6b52", + "0x49e8336ab770c86979be4d34b28df1517cb85d8f65b3f5fb08444f17bfbebd7", + "0x1a78dc60ae953c74f0639aa5b3a9e1cf06104f51654c8f9ab476c997e47ab96" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7fc5a496c0a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4940, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1403465 + } + }, + "actual_fee": "0x7fc5a496c0a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 23, + "transaction_hash": "0x58c8c359256d500ee6cb1bdaa7c4d02ba25c227239dd8b443f810f41ff5aa9a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 24, + "transaction_hash": "0x50c8999ced80ef12486df6ffa7f81db1212cdb18805b0dd9f81e4ea0a1eee43", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x76200cc7d3cedeb38b72b01ed7e82c14f3d0187c7ee495ef88f77bcb7cfca11", + "0x3", + "0x627053af3536a8619997349d3bf81c45ed4c89341bcd60a7452dfe88ac461a", + "0x3a8fb58d54e383ebfaa5f479e79c178bdb5d99fd81966202abc59612ab63c7d", + "0x78c97ae671e5e542df9a89644bb44c712f7d7fc856ef30c1f7b4e3931a6ea01" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 25, + "transaction_hash": "0x394b7afe03c49e5461b686d8c52b86029be783054aa7e8b6d2420b74f251676", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x1fd5a414d80fbf1cc6804be94b1184ae4229259217432aad0ba6f4ab2982f78", + "0x3", + "0x7294bc4c47ebd4253f1576693f45e5bea3e7a7366174c3c750d1996d51ee4c4", + "0x39a8b46b09527db2ebd9a4d94def5c7a3856084325f1a0cf052cc8d0779d15c", + "0x501deb30ae663e765dd54d258378b06c0a42a126f753634b673d7ff4d0f9a35" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 26, + "transaction_hash": "0x519a333f63ded28c9d39770b68d3196449661a9e4d5d1e9b8b75cc6269f33f9", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x9972086c2aa0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1685465 + } + }, + "actual_fee": "0x9972086c2aa0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 27, + "transaction_hash": "0x35a0ccf953c2d6805e6bfcf6d8d4f1300ffae64979171bde7a03f65ea3b97eb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 18, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 28, + "transaction_hash": "0x617dc764acf0b98a79a6c32c332a25e543d3cb98cb46a293d92f4d4491ecc7b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7963c655b1a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1333361 + } + }, + "actual_fee": "0x7963c655b1a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 29, + "transaction_hash": "0x10ced6c96d1073a78ca1729f5b679837075c3a29327a2ce829e5bd80650b25c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 30, + "transaction_hash": "0x1bcc79d1b785ee82e90d78069e1f8c444ae1c68b197291b0431102c021ea17c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 31, + "transaction_hash": "0x4e830afaed8677b20c355c02a4bb25e1477190620cf9ffdeae20884f96d634d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa492e2601480", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1807700 + } + }, + "actual_fee": "0xa492e2601480" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 32, + "transaction_hash": "0x29861e592ac9f417094a1c3178a7d190e1feceb3a1df97f93c2946d435ae77c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x24a4d16026ca3a14274645bb5f2642e4833bebba74bb6223374aa89cfbbb591", + "0x3", + "0x7ed8fe3a856e99355f8fc62abb7ea52b60c04acc87bd91f2ad7691d67e9fa7", + "0x168b137ee6ad08cf97ca45eb03ede30b664b7eee35b1db359d2bf23839e412f", + "0x1a4670e4184d04e55ef8fbb38d875bbbf1bb38acd79e50af84608f8af19802d" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 33, + "transaction_hash": "0x374cb830a9562c948279d570242fe6bb500adfaa353e32d4484f00a6cd59e67", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66fb88c491000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 18098784 + } + }, + "actual_fee": "0x66fb88c491000" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 34, + "transaction_hash": "0x6d3e19e0b423a6908630ad2ee90e4978d1b8eef958a32a595cbb5a9158dc81", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 35, + "transaction_hash": "0x233988005928a56978e8a681261876d44634a7e07e822a443efd0ed620fdea", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x64ddeb069860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1107935 + } + }, + "actual_fee": "0x64ddeb069860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 36, + "transaction_hash": "0x55e265645d8dbfab39be8e9b7bc1849a05abd43276d23c3fa56d60f5c3a062f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 37, + "transaction_hash": "0x652ce5e3658cb7ec8ff8105ab26e1894df398907beac85b89302d7396a4b33", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58fcac3c2e20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 977445 + } + }, + "actual_fee": "0x58fcac3c2e20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 38, + "transaction_hash": "0x3ed477e8998a45c1f8244c6fd85f1c875c32903eedecbce94eb0f26de43ed63", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x35a890bc64a0015669903e7269c47954f4c3fc895ae20ff777a252852726172", + "0x3", + "0x3b50b5443e605818d187adc0684a9b6e990ac3c0495acb51dc195f1c93b3652", + "0x2c04530e5be9bde05cafda18a246e458f73ebd76f5f613541a8f9a8a14cf54a", + "0x2d5c9e608aa128c38b759e2e1498a49bc4a441cff51ca7c9f4e0b6b3919d1bf" + ] + }, + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x2af760730fbb6e60dad195de3286cab3f1be17735ef92821a9f6581a1357dc3", + "0x3", + "0x29f85ed8e76afdcead0f62203ddad6a388c5048d941598c2585fbaa6f2570d3", + "0x6329645550b34a5ebfed1fc1ad92383885528943f919e94993603945ae3db86", + "0xc4e4e3be78c1348ed3c811a57a2512da5c4d619d4230cb5761ee631421befd" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x661940c156a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4962, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 25, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1121465 + } + }, + "actual_fee": "0x661940c156a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 39, + "transaction_hash": "0x7e323a597e4d3adf826d1bcff7a1172de0d5a54252e0bd5447de56477f41cbd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 40, + "transaction_hash": "0x7f2909cd116ad26c28152bfdc4af5286d5e99e8dbe363de69436a23719bc6c5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 41, + "transaction_hash": "0x43bc2d5bf7eab046f6cab7f4e6eaf8c8afea959e2fabe53f09b107ead447900", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0xe6f608f5bcf247a3d3d456ec17aa379779e9171cfc152d695bfa101808574e", + "0x3", + "0x2649e5274e32e5b0751b9ec437a6219f6fa962e952c879f0274984791e8a670", + "0x58ed8a68cf518ee6029ad4366927a28832c906ce2b2bb90a6cc0d3d608ef0c2", + "0x67be8d0e95078b9b4ad71be93ca150b6e6003821116e6bc99f84df8b9a17151" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xabf418c7f700", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 22, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1888760 + } + }, + "actual_fee": "0xabf418c7f700" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 42, + "transaction_hash": "0x1d338eb6af5b54d7f39841f687731f3f87d0465105d3b07af894efa80eda651", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5766ad1cd2a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 960025 + } + }, + "actual_fee": "0x5766ad1cd2a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 43, + "transaction_hash": "0x7edd47f2401c6a2b3a827fcab356f6baf133ddb39356abcfc52b3675afb84ef", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x790ea505a86b085b4d7463c5e44e1af87088b0817940cf813ebde54f954d678", + "0x3", + "0x335114f7a0c12d0cc614a634e878191a76dfa07a2c15cb208a9b0161042ca37", + "0x40d3ae85973c539bc8091a4bf860a0f2fada87fa5923b146edd1a31eb2eb680", + "0x228d5ea66e091968821fd3b76d8ac1d25a1b92bfec553f8b5801e0e93c4c7e8" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7fc5a496c0a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4940, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1403465 + } + }, + "actual_fee": "0x7fc5a496c0a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 44, + "transaction_hash": "0x45d6ceeacb1901b4fbd0b3db1a1c024b2f16312e7036fd5738807abfafe5d42", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 45, + "transaction_hash": "0x78ecf21281939f2aac484a4678d78f6046efa75bccfe44fe50f0b984441cbaf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 46, + "transaction_hash": "0xbb3ddbee7397d1b5dad2cb0c91b0bcb61f1970a0d1fc6bcedff7c37dd082ed", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xfc43710c1e60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2770895 + } + }, + "actual_fee": "0xfc43710c1e60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 47, + "transaction_hash": "0x57e8309d3f663b5f73a69ef50b32d843b71daf5d145fd2ce595ca25a9c882a5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 48, + "transaction_hash": "0x2f360e49a734ba3d245633d65726c7ed70a47cfa003c94308794514a0fe0769", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58fcac3c2e20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 977445 + } + }, + "actual_fee": "0x58fcac3c2e20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 49, + "transaction_hash": "0x6c03ae0b4f311945f42190cff1d5642db4b5029b257673bbf9ee227000164ab", + "l2_to_l1_messages": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "to_address": "0xF62753241Ef2185CE47eED2f967BebCB07dacB36", + "payload": [ + "0x67", + "0x2f" + ] + } + ], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x64480cf3a630e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 28144, + "l1_data_gas": 128, + "l2_gas": 826355 + } + }, + "actual_fee": "0x64480cf3a630e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 50, + "transaction_hash": "0x5840667191c7cd5453f0f08abf8c05090fda0d206a9889f03d7945fc416203d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 51, + "transaction_hash": "0x1490e7e6439bf66483b54c74b96cf288c43a81b95c547ba61cbbb71ba07e1bf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 52, + "transaction_hash": "0x483eb8e5c08de8fc3d41be6894dd6cc512cceb0544e5c7d82826f5c5baa4a92", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 53, + "transaction_hash": "0x50898c111be82241d1b1fab2dee71b571e9ae905dc837c8323ea345b82319ca", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b64a8da9ae0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 226, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003875 + } + }, + "actual_fee": "0x5b64a8da9ae0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 54, + "transaction_hash": "0x30dbda93226f54f567575005e2d0de30cc42bf24d528c3ae70b27e13df32e21", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5c0d65c639e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5505, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 243, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 1011115 + } + }, + "actual_fee": "0x5c0d65c639e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 55, + "transaction_hash": "0x559a3aeb577be88c912f1ad0c6cb0b31b08e66a68303443045c57a262f4e7c2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 56, + "transaction_hash": "0x679cdbb308dd3f335077bc45fd257fef0f8d3f9e4a5e7e2ea334269f33beffd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 57, + "transaction_hash": "0x2a0bca9093a5ef703c4872381cd707449769d8f43c2656e59e24bdbca1fa307", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 18, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 58, + "transaction_hash": "0x79741409ba3e0379a72e501219b56cb40afb19b46d1279039005fe037e52c12", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5c5c146bcde0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "range_check_builtin": 226, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1014491 + } + }, + "actual_fee": "0x5c5c146bcde0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 59, + "transaction_hash": "0x78e92b1e5a4a41df9c9e5019f7d5d5f7154c159c8f1de1f679356a4aa8de1e8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa492e2601480", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1807700 + } + }, + "actual_fee": "0xa492e2601480" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 60, + "transaction_hash": "0x2881b3b65aed03a4a5d9aaa4adf5b877fab77c8c82f0e5a00925770adc46f79", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 61, + "transaction_hash": "0x6f07beed301165403bf1c8bc57812349e8013f094c8404d1719e086662bb5d0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 62, + "transaction_hash": "0x19a5af4415d374cfcc2dd7c34a09771e7f0303cb75f7ea9fbd022404f2777e2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b5cbc44fa60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "pedersen_builtin": 4, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003535 + } + }, + "actual_fee": "0x5b5cbc44fa60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 63, + "transaction_hash": "0x6de3ad4c3dc339028265abe12108e2c5e71d56f8d5a64192f7980b156e4d161", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6502ff3a50860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 17752415 + } + }, + "actual_fee": "0x6502ff3a50860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 64, + "transaction_hash": "0x6ab843f88f99b0d33d49003a899dd75d8fbdeb88682f600e788ec93d2623b36", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 18, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 65, + "transaction_hash": "0xddbe034b7e91762e6ddda1463a367f56de1ca24dc0126ef025f0899086597b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0xe2bd93c7cede114f9f5c08e5e99be4ed16b347b51e9eae51a2279483eb8009", + "0x3", + "0x3560fd5478d45a380431e0d8ab96ab10f9346464f26c85ddfa81b55295eaec", + "0x791669035612bb867ebfec753cad73103c3b6c46f6438297e18cb28b780ee46", + "0x290b20e8f700dc1654864984bd086c136bf6d7b3503a9bf0e232eaa8a02757a" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xabf418c7f700", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1888760 + } + }, + "actual_fee": "0xabf418c7f700" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 66, + "transaction_hash": "0x406d59707ce09c40a0ff5faf4f10aeb3842dbc0f48eb90e3101236f7d511e0b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 67, + "transaction_hash": "0x7c17c7ffbacb568783a5ac01764316485bf7f7ef9d3529e5929e60381ae17f8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 68, + "transaction_hash": "0x1c82298c91256bff5e780f80d74bc3fadddd925d9f17f44486f63e91094b65d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 69, + "transaction_hash": "0x5b3e6f853ffbcda3cfcb2fb456d2f292300dde3f8892e5fc79b23dd01ef75ad", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 70, + "transaction_hash": "0x5a1cdee2b6a2452b9bbac646fa278f10a82bf1be49fdcfe217d23e88f6a0e0e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 71, + "transaction_hash": "0x7a2db82291a15ba0be8a579f1bff71ed0f5fada1bd8bd838c43dfe167804225", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8ca0a98e4000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1544672 + } + }, + "actual_fee": "0x8ca0a98e4000" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 72, + "transaction_hash": "0x368c1fdaa923585ba2ae3a93b81c1c8bd370d6d4cae5a523eca0aae969b211d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7201062517e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1252235 + } + }, + "actual_fee": "0x7201062517e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 73, + "transaction_hash": "0x50e27dc65f920e4bf74c57142c47ca6f9023a0ef3c757a5c8ab81055da8bc14", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6b9afbe69400", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1181952 + } + }, + "actual_fee": "0x6b9afbe69400" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 74, + "transaction_hash": "0x1fa07d8b02a7fde81af8bdd8b2c5b400999bc04d3d02dbc90abd12c7d42fbce", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8ca0a98e4000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1544672 + } + }, + "actual_fee": "0x8ca0a98e4000" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 75, + "transaction_hash": "0x75b965e4c7b51deba1ef144dbb7c1e6939840530b1d52fdf026daa08190323b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x538dbffe9a20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 917765 + } + }, + "actual_fee": "0x538dbffe9a20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 76, + "transaction_hash": "0x3379b2417050bb2c78a4e6c498a97662433f237b41849e0c7b7ea08b5f95c0c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 77, + "transaction_hash": "0x7b3de63a1859af6c3885a9d47b4384aada357c93ffad39b5a8432be1d748338", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 78, + "transaction_hash": "0x7794f102c917ee5fbf9faaa7535ceade6b942617fbfce7cc1f5bf92cf1cc816", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 79, + "transaction_hash": "0x47446b9c54dfd8f9a34edcbdd63d5ac1f9d03adeca950a7b8ad1db33170442d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x44796343856f93ef0b27ed9a89ae0ad85294e4f8a7a7c548bfa83ba2db5bf0f", + "0x3", + "0x12f129bdec2acaae798eee4a2171561d735306d9c36fb01542103c01b312762", + "0x3b0307ddafa2de1118ab395146120d869ba3ae2a087ef52c58d2fbb8f776729", + "0x248d38a905c1251c27ae655c5e773c135578334b27163e4ef1d42607886f548" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6055f60e7020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1058165 + } + }, + "actual_fee": "0x6055f60e7020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 80, + "transaction_hash": "0x63b5f5493d8ec8404edd7ca19d3ab4f0c3ea2173da098b5830385e9d4140a85", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x28bd8f18ee747343462d9fe2a97096a70132db0c63bf8a0e6e56874bf9fb07", + "0x3", + "0x55849057db65e5e2b01aa2a7fb7ed0fab704ce4747b4828e66c1d435c9f2b86", + "0x120c79262a7af5c1d7a93928568095f7ea189d49c2da1ad09e1eed2b78053a7", + "0x6c1076e44df71f50b64745f4876744b44409ec58521a8b86df7d4a09f7414d" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5eb80a597420", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4934, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1040405 + } + }, + "actual_fee": "0x5eb80a597420" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 81, + "transaction_hash": "0x5f0c85d57fca71c14bdacaffa33a4300b0627ccd3bf8d837e7de204347fa48d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 82, + "transaction_hash": "0x263ea3baf9d649af9e26288b8e2f99e16431de1cb125371ce5dfd8f30c0ff7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7963c655b1a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1333361 + } + }, + "actual_fee": "0x7963c655b1a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 83, + "transaction_hash": "0x3690c3c1b3a59657cdd30a94bdaf344b1ee5f789134c7868ce4107f0e6ef6f2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x55cb57adc500", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 942376 + } + }, + "actual_fee": "0x55cb57adc500" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 84, + "transaction_hash": "0x3599287586559a69d1d9dded984cec4d5d73a31a320d46d49c5429e87a12b1f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 85, + "transaction_hash": "0x27723c0aaf06f65fe818cdaade5a51b724568c5c14fe35a08515cbe3357474f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 86, + "transaction_hash": "0x2d753ab60df24f92032f0701d8efa57664eb08b31e1ef8cb5f90da2e0a05f50", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x1525eb0c3a1b4f4fb804a232edb4a1d9cac97ff8cb65e096bdd67f49c0ab00f", + "0x3", + "0x72869728bdc2b1dd37f5f4a418ffb092a6d6a6a51b03af3b78e861564b80237", + "0xfb87961d4d14e243855fa11639f556dc13ef30d63551b099bba72e5a9fb5fe", + "0x37a14def8c81055d2422c68c13858fe7004ec3a4b28132f7601f59151a6a6dc" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 87, + "transaction_hash": "0x6b9ea588451dc23bdf40e4d931c5aa63aad4a6f28b1f213a5a1c5123fdc41c2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x49d7dfdf83f92fa1b62659083be2d1e9f253cd9026ba6f2df59cc14a70d92ab", + "0x3", + "0x6724f48b05976d6af1a5ca82ba209959aac0348a4c41fc2d36cd76591d5c62c", + "0x3c9a4cdf45641b3b943dedc9ff264ba41d51114f2ebd61f8b28b19f455303e", + "0x12d45e92d41ecbe44eea1adc697dd04788cc30bcddac54dbe8694a573edd8c7" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xabf418c7f700", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1888760 + } + }, + "actual_fee": "0xabf418c7f700" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 88, + "transaction_hash": "0x48aff85af163ad6be379229b0b90e79dd78dd66015034c63405449eaa7546db", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x40d1517ea40288599fa49983a4985777b05d68ea2537512028dc04d1a08db55", + "0x3", + "0x6d83c4b98f89f7a73c4bca6982a19d3ca849672e46314af1e6dc3afd6679951", + "0x68c9cf9111eebfb3b52fe7c9acf98fb0e6e877c1acf2ad14d8d3bda6bcc23da", + "0x785366ebf7be8bc6ef9c51c483f84b5832fce2bc6ece04508719db1f4c8a470" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 89, + "transaction_hash": "0x21bb750db9268c068bd3be09151027c8a5a5c11c4db428cb369ad69d297c0f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xc5a07c9d6100", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2170760 + } + }, + "actual_fee": "0xc5a07c9d6100" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 90, + "transaction_hash": "0x1a41a120dfcd8c7d30f21709bd698f36e32dd3315f8e83bb62aec8cdd55f3b3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 91, + "transaction_hash": "0x1ad407fa40b1c51e68728e19119bb01de61a028627572703178a018a4a256c6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x56c54c6df617293c68fcd480a8d025653631d8d718443f9789c343de7a17a37", + "0x3", + "0x39cd0cfb60e3ba5c5beb979bf40f636b20d300942720659581fee6b33c93aaa", + "0x1cd37a5e72630e45805899c3911130ef19ef2fe37202e7b73ae8c7318c6d6e3", + "0x72f08ba97d46da3f16208ead9d7e49c6004fbc4eaecd56c522eed7d9b8f96cf" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5ebff6ef14a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4934, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1040745 + } + }, + "actual_fee": "0x5ebff6ef14a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 92, + "transaction_hash": "0x5d0c53d940dd40310e3cd6e403e676abdb27ef041aef4885f48acb92ee84262", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 93, + "transaction_hash": "0xdc9172b0939c55055abcfca80d22508e98946628f3275b7ba39a0e5ca26371", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b64a8da9ae0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 226, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003875 + } + }, + "actual_fee": "0x5b64a8da9ae0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 94, + "transaction_hash": "0x2ea650c14256a321d8bfe3f4222859aa16d0d0033d576c5b489c5b886060b2a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x5b695c85f5a6a609acf40c39d657ef67e1a8aface9fcebda88bd639a0d1a898", + "0x3", + "0x52415f22cf903f332994ebfc1595eba480961e23eb7dadf1a45a1c7c23446d1", + "0x48c6aacee21303d4fb44c4486a34bcdcf7ef9fb907aef3d6506405f0f5f179", + "0x7d66296881529c77acf7b961219359c840666540c35f7d8c977da562283e4ac" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 95, + "transaction_hash": "0x3a8b70080546e1115cebe0ac8775a0bb7d0b2a5361b2a4c6189746c170a7716", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58f4bfa68da0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 977105 + } + }, + "actual_fee": "0x58f4bfa68da0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 96, + "transaction_hash": "0x34e49e459c9d56d2aecb8dc5bcef2579c80d0a678d69241cecfac7a38e154ca", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5a92ab5b89a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 994865 + } + }, + "actual_fee": "0x5a92ab5b89a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 97, + "transaction_hash": "0x437fe99f5ed2e91c239a2f193c6231fbe5d9e6dfe99ac5015ccd8a81d158257", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 98, + "transaction_hash": "0x33d3d994860b9781de37cc32474b690a43dd0033a3ee93c1a78586abaed433", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 99, + "transaction_hash": "0x70e59c4408a6a188ed0ab92765a279e6fb2cdb27757442f43e3d83b2f91fc13", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x575ec0873220", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 959685 + } + }, + "actual_fee": "0x575ec0873220" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 100, + "transaction_hash": "0x3d8b140f57faaac61c5db43df6b3937df36c6e85cedd5142d41d6eac7ca0673", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7959d8a53560", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5406, + "builtin_instance_counter": { + "range_check_builtin": 226, + "poseidon_builtin": 23, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1332935 + } + }, + "actual_fee": "0x7959d8a53560" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 101, + "transaction_hash": "0x40c3e30d8b804488c5b38adc445b66aa18551d50fd8636a0e2a6c361a5941bd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 102, + "transaction_hash": "0x4f4d9052d23c94ca8d57fc94452d4915501b5eb898b03c531edbd30cbe00b8c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 103, + "transaction_hash": "0xc230e0a01e5292ca97dbe75679cf9accb611cd9a2226a5219ce7349780a02a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8ca0a98e4000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1544672 + } + }, + "actual_fee": "0x8ca0a98e4000" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 104, + "transaction_hash": "0x5717cd13714106eb52bf0db6fd0e19bb4c90461a7be87b070f16a970fc678eb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 105, + "transaction_hash": "0x4d52785977eb0e1c201dc2a6e831447d66ac2f4d68721b30cb1dacef55d5dea", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x55cb57adc500", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 942376 + } + }, + "actual_fee": "0x55cb57adc500" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 106, + "transaction_hash": "0x45a7193004281b75002f28ea9993f60608d7da687787515c6361c10d2e8d388", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x585e18ae05a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 970641 + } + }, + "actual_fee": "0x585e18ae05a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 107, + "transaction_hash": "0x1c11b145f791e96f5520d8bdac6264bd065407228bb05b5c1afdf7925cb3b40", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5c0d65c639e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5505, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 21, + "range_check_builtin": 243 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 1011115 + } + }, + "actual_fee": "0x5c0d65c639e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 108, + "transaction_hash": "0x21a7f05588bace54bfd48efd588d3728b54ef24f51bd8f3cc9174840f64a562", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 109, + "transaction_hash": "0x5585477075305d5cc6ff69020c0f6b2c301be2a8f2ffb6b54f9d53521c1d9b1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8084c145fda0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1411665 + } + }, + "actual_fee": "0x8084c145fda0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 110, + "transaction_hash": "0x4ec4c5f2b51a0f3459a829972f9fa96724286e3c8a0836e77090e108cb70909", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x3092e624513c7808549ffaf38668d02cf5c88e8131d4024312bf58bc4a87241", + "0x3", + "0x27a8ed7e7a9996ca2de2be150973e2e4ab9f97d8a446d73713afc87f57e1a2c", + "0x29a1abce762e3855ef3ebf326af3583b4d9be276e37d877a0f8e6a65d5713e1", + "0x30732a4669df28200c274ee92127c51b38a176ea9d2777ea9a7966624ae17fd" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 111, + "transaction_hash": "0x4a8b04451eed7807c6c2bf011db317fca65aecdabe9a6f7cb9a303c61706812", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa630ce151080", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1825460 + } + }, + "actual_fee": "0xa630ce151080" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 112, + "transaction_hash": "0x1ae22f43fdcb5372ec25dfcec438ef605b0fbd38c40fa4d111df7b36e2111fc", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x675a997e343e6f730b647553b7ba3c3e155cfc5ec3052f531b9c2f6a7a140e2", + "0x3", + "0x3dcffe144429184e30eb98330fa3aedd1d9a083cd58cdf627e76a6f2f8a68c5", + "0xf1c6c33291b34522bfe022f10c059dfa751f7867074d0681f8ede28d943f59", + "0x79462f3595db91268e0366fb5ac565d49a3f2cee379e3e09a08f1e46069379a" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x62bdf2acdce0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5428, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 25, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1084595 + } + }, + "actual_fee": "0x62bdf2acdce0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 113, + "transaction_hash": "0x40815bef4280c025ff044f4aec6e67016764309a50645edb8b852db986a7cf4", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x3228ea46d26f1f549cb10e8ba7b6a5da4577c2a94c1aca25e7bd2ef80b3763e", + "0x3", + "0x110b1c3644c612c21775ca993c7f02c2849a5423833aa6c5a0305b4360c5365", + "0x20a33335c00d39229a9b0babfa2b12eeb98ca1ac4a1546eb98f4ead57f866bb", + "0x68f51ad115cd23a12ed5ea848b0455c9b86d6c3ccb94e53ed35150a10f89313" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 114, + "transaction_hash": "0x4c39f95fb91d6425da908312f53cda2dce62c49531d4ac51e323f8021e30aa6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 115, + "transaction_hash": "0x7f86ad9bba5ddff1d30ed29b3c369943fa744d56e8765fa6a75e13736120358", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 116, + "transaction_hash": "0x34f213996fea783fae9823d68f212fcccf387b746c3b5a7e513f2bd7f21b212", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 226, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 117, + "transaction_hash": "0x1b3439dbbc3b2f0dcbef56639a75960309aa292c910e12f1b3334d908eaede", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0c3837dd240", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1765850 + } + }, + "actual_fee": "0xa0c3837dd240" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 118, + "transaction_hash": "0x6da94168c3a8a96df9d0d212e4ebd508f21adb7faf04459875783d504491c97", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58562c186520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 970301 + } + }, + "actual_fee": "0x58562c186520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 119, + "transaction_hash": "0x52d9f6700689144e6280dcdd15f0a0548f9747f8892f7ebaca84ac30fd2f097", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5766ad1cd2a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 960025 + } + }, + "actual_fee": "0x5766ad1cd2a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 120, + "transaction_hash": "0x60ea07dc482349c414abcd73cf54bd3fccb0a493de29c2962619110f74ce108", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0148c69e1320", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 28133485 + } + }, + "actual_fee": "0xa0148c69e1320" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 121, + "transaction_hash": "0x7ce2e971ca121f986a6fe34f573f32c5dd22d5fad2f1a8ac4ba25cd1937c426", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x575ec0873220", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 959685 + } + }, + "actual_fee": "0x575ec0873220" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 122, + "transaction_hash": "0x6cba62e7fbe0a8a6176ddbe553cd2fedcf67cceb02ef1437d7a63a231e32e02", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 18, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 123, + "transaction_hash": "0x241cd3f31a7960105887d71def0ec6bb85380860814c38b9c8d281f73209302", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 124, + "transaction_hash": "0x3ede37d0221dd006d88ebe64d032f24e9f8845283f187c9fd896b53f75a7b1b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x1b055f792267a9f2a3a2b1885c5b6638b8232411e1e856e807a40c82037b9d6", + "0x3", + "0x32ba356b72afd10016e6cdbaf5817188045d867f25b12375c21bf6baf85f2ce", + "0x739c18b8790c10f150fc4ccb71d042a3e75be6353528b235f1af5f0e53bb1a1", + "0x57f85ad22cbada7722edd2a284a9db27ce8e3f6649348bd7e1eed396b1a4bc6" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8aee88f55120", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4956, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 24, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1526045 + } + }, + "actual_fee": "0x8aee88f55120" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 125, + "transaction_hash": "0x646de6a56efaf91036a1caa30f8ea3c80b9e69314c03d1941a8c0fc14fb1ad", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa49acef5b500", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1808040 + } + }, + "actual_fee": "0xa49acef5b500" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 126, + "transaction_hash": "0xb607b6a99bcc7f0a24fc58a971cc6caad949afb568401543020ac07f177d3c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 18, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 127, + "transaction_hash": "0x370f3fe56d78358bff8f4fb5c9f5e20d0aafc23decc71d0500f9077688f5529", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x216de594e86e6d8f5a5439c38e1c2389684e8feea5aff15f9fc7b6789da6988", + "0x3", + "0x13a2306eeac64b25abb778a4f9b9bd7649504cc4248449a707868ed3c35186", + "0x3b34b2035d24f084da72490e28e1cd4e33406323978472b739a17036d368d93", + "0x763f7b4dace138e8732b5a5f316032f5b63069e8eee718e8a423a3684e31784" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7cb526b9af20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4940, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1369805 + } + }, + "actual_fee": "0x7cb526b9af20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 128, + "transaction_hash": "0x1955bd7dc79c7e810e4daa349e0b0ca3d420cc82738563b595737ca8e4b12fc", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5c0d65c639e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5505, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 21, + "range_check_builtin": 243 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 1011115 + } + }, + "actual_fee": "0x5c0d65c639e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 129, + "transaction_hash": "0x2b788f511d6766ed1a3cf5bf8e50e00f29bbd7ca8bd65edc2594f7b3446673f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 130, + "transaction_hash": "0x5beaf7504c6d497908fab99170b6421e8ce4f82a36c05e81e57c68de288a538", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5766ad1cd2a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 960025 + } + }, + "actual_fee": "0x5766ad1cd2a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 131, + "transaction_hash": "0x39c64217f8c6e5f78e918a0794c93bfb55a0786952bab69651f65284c6305fc", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 132, + "transaction_hash": "0xabd75faeebf43dc2ae30ec29d35500c731c15ff52fd840f199a5582346b990", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x59f417cd6120", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 988061 + } + }, + "actual_fee": "0x59f417cd6120" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 133, + "transaction_hash": "0x2246a2b64efecf4997825f48400ddf936c26b51dbfd88d9ad865407572d367c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 134, + "transaction_hash": "0x389927bf21a3f9e09d98b6b69c08682955ed39770a8d1667e556b25e74612d0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xc28ffec04f80", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2137100 + } + }, + "actual_fee": "0xc28ffec04f80" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 135, + "transaction_hash": "0x34e7b36295ddc4bc4c2ac8543f32e26d6cdd96a85c4135716f9c58532db8fb9", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 136, + "transaction_hash": "0x38aa094b71b02ae3191694ffcd99a4dfe0b970624d1582b62838a7c66ab04a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58fcac3c2e20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 977445 + } + }, + "actual_fee": "0x58fcac3c2e20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 137, + "transaction_hash": "0x643269bb0a98ad55e59d93d819d4d33b5da76a83041262bf2627437ac6f463f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x575ec0873220", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 959685 + } + }, + "actual_fee": "0x575ec0873220" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 138, + "transaction_hash": "0x56cfe3ac23ee2ca090c1f6244893a55c1dd90cc5cdf4b58b5a3b5f7a8b46d4c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7553f051cca0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1288745 + } + }, + "actual_fee": "0x7553f051cca0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 139, + "transaction_hash": "0x43ab5b760421ac182dea5668b69f1f060c7259da0ed81ede521f209655f2bfd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 140, + "transaction_hash": "0x6cb669e9e840176ccf47a9277b5b546c594bad2ed23bcc3bfe63f2a355c0aaa", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5955843f38a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 981257 + } + }, + "actual_fee": "0x5955843f38a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 141, + "transaction_hash": "0x682a1dfabc52e9389041e904503c8bb8ac00e60744943ba4a5c0b49fd695cb2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b5cbc44fa60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "range_check_builtin": 226, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003535 + } + }, + "actual_fee": "0x5b5cbc44fa60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 142, + "transaction_hash": "0x4e06a9943b6d6ba718553a0d26c8970653d42e0467c88178f0e43aef3e17baf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b64a8da9ae0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "pedersen_builtin": 4, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003875 + } + }, + "actual_fee": "0x5b64a8da9ae0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 143, + "transaction_hash": "0x3be4539b702f9c0bed1d4b0e7f55695615c9a1b30bb3eea92adccf4c4c9b592", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x9972086c2aa0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1685465 + } + }, + "actual_fee": "0x9972086c2aa0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 144, + "transaction_hash": "0x5d882d8c4b11eaac9b90ab759d31b55db4db4a2bc2bb15dcd535d52a5d7327b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 145, + "transaction_hash": "0x18fe78a41a83218763a3964733074a3b1295f3f58d34f4027d25e1c861fe74e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x651c35c7e7580", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 17769724 + } + }, + "actual_fee": "0x651c35c7e7580" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 146, + "transaction_hash": "0x2eec5dde849a7db21d9ff42b8644047aed3be0ebad919eb2d9eae5a41d9c4ea", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7553f051cca0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1288745 + } + }, + "actual_fee": "0x7553f051cca0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 147, + "transaction_hash": "0x7e825afba370d536898ada535aff3c69b6568e73d99bfb4436a395cc81ec118", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 148, + "transaction_hash": "0x4c7e561d814f2ead46f6213b700f5e38a4470ca3960d15019b174475385909c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x142b6bcf36547f884b1cab10964260ba1835242b54256fbfb57eeab6b5f4d00", + "0x3", + "0x2fb05f4d8fadd53e1d6b45bd2fa78c4afc2865e5ae6db7cadc3477703d8ab43", + "0x578795f376d9ddb5cc6605a2396cc8af3df7e1fe90ab75ebdc019f20dc4b96b", + "0x426ed78e1959351c68092fe3f6490c33c79b06e0d1259c54a6e9b528064ed8c" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xabf418c7f700", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1888760 + } + }, + "actual_fee": "0xabf418c7f700" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 149, + "transaction_hash": "0x70b127661839b231914a28d21cf8ccde3641c51914ebbd7775fadb317bacecd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x667613acec1e05d62feea472c7bf7342f8ab76cd78956df8e129e2e92149816", + "0x3", + "0x31942b9a90338b3289898641dd53d6b5ea36beef6ed91cf31745c42be99f7b", + "0x5f9e52bbd3fb0b2a60cbfaa1e721dfb27e7deb26503e3ec25aafd7f4ad6ff13", + "0x1379955dc7ec49b67d9a4bc7eca9e9264f3dd9f401ace94bd9be1e533852f30" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5ebff6ef14a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4934, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1040745 + } + }, + "actual_fee": "0x5ebff6ef14a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 150, + "transaction_hash": "0x14bafffb4ead9755982414413a7e09ef6ab4a9211d7a5d5fc5922efae9b822b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x55d344436580", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 942716 + } + }, + "actual_fee": "0x55d344436580" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 151, + "transaction_hash": "0xeec4d5c8d00e421e0540d4b4f7b90651e0cbe7f87201440f412ba67ea03117", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58562c186520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 970301 + } + }, + "actual_fee": "0x58562c186520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 152, + "transaction_hash": "0x6f4f9f4df88b85af1f368c84e3e688296962556c740564dcb2d3894f8cf58c8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 153, + "transaction_hash": "0x756589ba9549d394043d21c9d4aee85bf86558d5ff65bd723b5e597f4a7a92d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x93510cb207a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 21, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1618145 + } + }, + "actual_fee": "0x93510cb207a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 154, + "transaction_hash": "0x6f39b750434a1a2442bf4d31819f4bb28d0e9eeab5c92231efc8fade6fb7c34", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x1f36f091f5bed9c103933eb6feaf7594389c0b6a1db02724e0429d92eb7fe90", + "0x3", + "0x63c9a23eadf48e4b2576985247b3d62a89cee1784dce0ee89eee786c7afdb54", + "0x1235a41a93d092a6db827337e30e23dfa55ae7b90a39660503a91e3ec16e491", + "0x6155321295ce63b9a593ae6c5da2719f34c72e32a56c04046e32b6136d2ac44" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x62bdf2acdce0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5428, + "builtin_instance_counter": { + "poseidon_builtin": 25, + "pedersen_builtin": 4, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1084595 + } + }, + "actual_fee": "0x62bdf2acdce0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 155, + "transaction_hash": "0x24681963cc8a2c1903e7897e3df06f5dd5d09b1617be4a691a1255ce5b1bc5f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 156, + "transaction_hash": "0x5de374b729d1f7b05f30ab01b8e31ed075dca07ae8e979e5bd0767bab2a83a1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 157, + "transaction_hash": "0x1ec65a53d552e931a56a0b869f34d8e8f4e6c90a9d516c720186198ea20575b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xc28ffec04f80", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2137100 + } + }, + "actual_fee": "0xc28ffec04f80" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 158, + "transaction_hash": "0x78dc385cfbb57c86c71402930961f5d75bada1bf7f5da9ca2a4ed2466dcf47c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x55d344436580", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 942716 + } + }, + "actual_fee": "0x55d344436580" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 159, + "transaction_hash": "0x51ca4edb15d383783fbf9a4935a019872b6f0915f9a8b91adcc6284beab4975", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0148c69e1320", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 28133485 + } + }, + "actual_fee": "0xa0148c69e1320" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 160, + "transaction_hash": "0x5fd81c76f927c7ec755cbdb881c42b2996cd8edeef4baa4499ffd4930a00e1b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 161, + "transaction_hash": "0x43ecae51a7385d6740bb5212e85177e769336690c47312fd34879865a6ae128", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x7fe45fbb877c67b4c81300c8865bb88d8320227a2982fe6d2abf5c7f1f5d9ee", + "0x3", + "0x38a043df7c821e0228f34de5e6ca9c66126a0dfc22c880bf58b858a5e15a5f4", + "0x375f356b2e8c6ab26cf2bbaa1afb21c656ee756d5df7eed5a8370cfa9a5e356", + "0x171ec4173409d7182f4725f15e028182d74dde7d5004a995056604b4c9b6ca7" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 162, + "transaction_hash": "0x5cac6eabe55ce629945dfd77b50fdb2fcb0cd965a8d779af240347d4f7782b3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 163, + "transaction_hash": "0x4e065a1c2373270e06b9b75bde0af35156c61004c20b490239697bf9740e77e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x59f417cd6120", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 988061 + } + }, + "actual_fee": "0x59f417cd6120" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 164, + "transaction_hash": "0x60a765de354c0c986b2e30ef78a664295750d3c0589741d03f04c9a6c8599d7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xb7c542c00200", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5522, + "builtin_instance_counter": { + "poseidon_builtin": 23, + "range_check_builtin": 243, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 2018560 + } + }, + "actual_fee": "0xb7c542c00200" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 165, + "transaction_hash": "0x66a772a0d3e6c5d7c7e1b63959728795532610e4f09558423027fbd21c59072", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 166, + "transaction_hash": "0x6aa07622164fe65d714df71810db7023a929e4b27e84684abeb8e1c96064a85", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 167, + "transaction_hash": "0x23b8b03167b032fcc9a9940f06b2784670efbb616fc89882d9e1ff2566fd6ba", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa898cab37d40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1851890 + } + }, + "actual_fee": "0xa898cab37d40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 168, + "transaction_hash": "0x2d245511ace3e7d641229804cbb48f0d0be9adbdc4b225172020311322e8f2c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x2f6a4dafd4b5995afd16b32591b051316ebf6acd8316b8b42b9be19e00a8485", + "0x3", + "0x38e1b271efa38e66fa0721206ed3ec58e4356f48b2beebfe056582d0e6a902a", + "0x39c62c6bec0290e171c1c07474a979bf60dbe4e66feb5a1ca8b1451f5b04c8", + "0x1a6d87fb631fe8db63d90b9dc23727de8c5d794f27a678ae5234dc10a7384c8" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7fc5a496c0a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4940, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1403465 + } + }, + "actual_fee": "0x7fc5a496c0a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 169, + "transaction_hash": "0x1e9428e365e5ecb40b3f3d745d985af23b79c8e803bf6f2c94c6208f4f8fb47", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 170, + "transaction_hash": "0x4462cbfc474cdf82bdda15c125c8d7374343f9fac1936b341d4d3c99008d295", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa898cab37d40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 226, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1851890 + } + }, + "actual_fee": "0xa898cab37d40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 171, + "transaction_hash": "0x564efa83d7ecc5f4249fd66b7991572405a7b3807d5090e71a30cfa841064a2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76d8f1eb1180", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1305436 + } + }, + "actual_fee": "0x76d8f1eb1180" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 172, + "transaction_hash": "0x80402dbf58af96914b672dd81487df42ac6a276efd175af1a08ff2c635f9d0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 173, + "transaction_hash": "0x7bf4b7df521c148f06208299424f739a75f2da84b32d91f72b85a87e7ed7c77", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 174, + "transaction_hash": "0x6fdae1bbec976af03a6fb3b0db55c9c80b7f3cd01717fade7492cf0dc8f7cff", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x61c76c61c66ac5d59cbab0af3c6d300cb3ad8ba11d1bd01b903049093748d69", + "0x3", + "0x5d492e30f6f53b57b82e522fbd1337df1f362004497ad7ac389d9f6719fa32f", + "0x37992970b26c4ad3327df6b8fe5a4cec2f15d600babdd5d9be3a83d9248b442", + "0x344cd7b9118311ee75a2676e1e6b8f7b5f38fe681f66f6807b32fc3740763d8" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 175, + "transaction_hash": "0x6a8972df24b1bfb6c4d422a0a38a0561fccee5d046da5e9104aff7925c92d5d", + "l2_to_l1_messages": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "to_address": "0xf38276C4C6E7c36A8daF4d3EB949D9fF99FA4CdA", + "payload": [ + "0xb9", + "0x19d" + ] + } + ], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x64480cf3a630e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 28144, + "l1_data_gas": 128, + "l2_gas": 826355 + } + }, + "actual_fee": "0x64480cf3a630e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 176, + "transaction_hash": "0x18b0b3ada53834f73041a1f73c48a75530d6ee78b07d2a6d63a9b879ed093a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa492e2601480", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1807700 + } + }, + "actual_fee": "0xa492e2601480" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 177, + "transaction_hash": "0x4034b35bb388cff7db00e210e74ff65d2ec792675ff71916d10f11e5b59a4f7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5756d3f191a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 959345 + } + }, + "actual_fee": "0x5756d3f191a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 178, + "transaction_hash": "0x2bd8d12f680bdcae11f46c66e1865caabbf33e009eef38e1916220e77ddabea", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 179, + "transaction_hash": "0x628842facd73664855cf1990a3156b7b99a572583269bdd6c2922ad4fe7162e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6b930f50f380", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1181612 + } + }, + "actual_fee": "0x6b930f50f380" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 180, + "transaction_hash": "0x7ac13b703386c3b9457f00900f7bd02ff6cd3efee6822637663a75ee453dac3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 181, + "transaction_hash": "0x7671da415f19b8ea9fecc25e3d9f6ddf80bf3776344e694e35895f6df338520", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 182, + "transaction_hash": "0x3d68175d9560c0fb66e3c9d46a1857c32996cd8042bcd136e4ee42ce0d44e8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 18, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 183, + "transaction_hash": "0x2726ed06aa105ec21286f7829b86383bc1dbdbf9655c2cfc404389338c459a5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x9972086c2aa0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1685465 + } + }, + "actual_fee": "0x9972086c2aa0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 184, + "transaction_hash": "0x2cc6eec3f1948533584950ecf1b5961faa03a0697eef8806322274440953918", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 185, + "transaction_hash": "0x549a6bb1bc30cca5e4878f2a3e6cd0ce3ae25f256bd58b8ace19f9326b55941", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6a07930d26e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1164643 + } + }, + "actual_fee": "0x6a07930d26e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 186, + "transaction_hash": "0x24cf703f5777fba9400b9dece8a72c3c4605a4ed1a3b28667dbe7e4c363c40d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 187, + "transaction_hash": "0x2873ec1f7a8034cbbd2a309783121559959cc1a73b5eff3d803cbf35f7b9760", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0148c69e1320", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 28133485 + } + }, + "actual_fee": "0xa0148c69e1320" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 188, + "transaction_hash": "0x7dfa74642e260cb91bb420d426895256ee04c28e81b6a5aee48a3b93923161c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xb7c542c00200", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5522, + "builtin_instance_counter": { + "range_check_builtin": 243, + "pedersen_builtin": 4, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 2018560 + } + }, + "actual_fee": "0xb7c542c00200" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 189, + "transaction_hash": "0x5ded4f9880535fec58e68b47d5e34b33ad712c6831f1586948d99987045d55", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x678dd7800d8e3639c12d5bab33b3840caa43d26c28924b47b7e3f18ded665d2", + "0x3", + "0x1977beaa5aa8b4ad01386800e9992f33d3fbe68a2fd5041814276d376bd85e9", + "0x5a721a2eb73a5a67bd136637aa4e0da6fadd030964b789191dbfc629f3b8736", + "0x7265d69c224668a5aa44a21eb199de1e93e4007c31b4d67bc9476a2f87f88a" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d2c8e15a780", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1023436 + } + }, + "actual_fee": "0x5d2c8e15a780" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 190, + "transaction_hash": "0x570208fa2538f1073401fb873078e566b367f0ac91946e62f1b96d485186fb8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 191, + "transaction_hash": "0x64e014591d13662140422a96aa3195ddc76518999d70fc587c194969994f60e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 18, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 192, + "transaction_hash": "0x3d10f3b960faf026ad209cc47fd8a9f0f4d73a0978293676a026deda96453d3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7553f051cca0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1288745 + } + }, + "actual_fee": "0x7553f051cca0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 193, + "transaction_hash": "0x985b398d7e49f4d4690d8fb2b64005c3a0e32d88ab9cfa6664b54c1bf650e5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7c6a568246e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5406, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1366595 + } + }, + "actual_fee": "0x7c6a568246e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 194, + "transaction_hash": "0xf0da58c49365418670f920f87a6b0e71760ca0a7f75ff48d41d855eafbd051", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa49acef5b500", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1808040 + } + }, + "actual_fee": "0xa49acef5b500" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 195, + "transaction_hash": "0x7b18a13104be83ea7d37c729861df5d7fe9009b6e0c1cba50132455a5847004", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x96618a8f1920", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "poseidon_builtin": 21, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1651805 + } + }, + "actual_fee": "0x96618a8f1920" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 196, + "transaction_hash": "0x29eca77cefd146b8f237010c7a43dfa5b852c26ce8c99288a7dc4e451829d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 197, + "transaction_hash": "0x5db932b3e999afb24503b9ce23a8a0c7a22bce650a3641983d1402a140ef5b4", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 198, + "transaction_hash": "0x4844ca75bc10bff86b4db4c2662fa3790abdffde2c685bd6d7f116084185bf5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa898cab37d40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1851890 + } + }, + "actual_fee": "0xa898cab37d40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 199, + "transaction_hash": "0x50e072d51996873eae2b020502294fb9ac001395b00869108ed2f854c8fee2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x4df105c97436d13814b5a3557e62f08c87e06ef711cd76bae9f880cc7cdcb34", + "0x3", + "0x3a8abec36b9ff192686cc6d554bc9487c99682333ceaf3b7b339160dcd1997c", + "0x5b79b5d32bf600a30ac095f6587976647a62ddfccd29b38b85979b560f91539", + "0xd94fd54f9f7d674703bba4af53f2d11daced123a6967da6386863611f133f7" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 200, + "transaction_hash": "0x6a9b2b698b49f21bd9b91a507714a8d14afc37b707bcec25dff433ac569ea99", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + } + ], + "starknet_version": "0.14.1" + }, + "state_update": { + "block_hash": "0x7c6517ec2c503f9fc80ade2df901a1dbe067ab8cfb8c6bf8e7d04a29c1dde0b", + "new_root": "0x7e472f4392adc406f482ed52f8f85c5b1c7649d390c259b073b79f5e5adee5c", + "old_root": "0x495229662ee48716b4933b8ce3482fcb9286049ce50e4afff66072c0faed268", + "state_diff": { + "storage_diffs": { + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d": [ + { + "key": "0x3d", + "value": "0x3a30b01aadd50092a944b38fa42c1df949b403e754576e8d0ccd7f00e9d0223" + }, + { + "key": "0x68", + "value": "0x751201072461a296c0480292e1e56f472a2dbb069ecf219dcc0ac91061bbb26" + }, + { + "key": "0x10e", + "value": "0x5a79bef4e1fee587e3346900eafd02ead5523d57e61b5d30e56c04a131bc1e1" + }, + { + "key": "0x18f", + "value": "0x15a509d13e2b1ebbe6cabee857db28b593267963e2744daca355e17c9c9cf12" + }, + { + "key": "0x1ed", + "value": "0x1d413563c6231b24d293d9a71ee542cbe50b28505f0768740c065ae8a8fbaa5" + }, + { + "key": "0x232", + "value": "0x53573a50029c302941b4093fba22151eaf301182dc683f8281cdf6ad97b1e6" + }, + { + "key": "0x2c9", + "value": "0x3dc59ef5f27dfa4b73acd9df91b8358c0d9aadb63c38b1769d5eec5d79d277f" + }, + { + "key": "0x31b", + "value": "0x5a5f15fb688e606e7b10592d820575531ff03f8b8967c11e52f4b2e59dcc20c" + }, + { + "key": "0x339", + "value": "0x2ee4b26e6043f1856d4241fe31e9f7b00789bf00a1885a25a747eac5930e823" + }, + { + "key": "0x3c2", + "value": "0x6f4cdc9797523d6279f585c4fce5b8ab8a4dbba64233045697e2b84f4d25384" + }, + { + "key": "0x3c9", + "value": "0x1bbe85cc5abacb5c162e974a5ed0b8307f9697b87f3f537665586e9ddd3833b" + }, + { + "key": "0x3d3", + "value": "0x4baca172fca51b57f0b0117558458e8a2f91357f9630fbb08039b4ab8259b11" + } + ], + "0x3931a5320d0a21477c444afdd762d02d0bdaa4cb2008e5d8a7697b8cfe99000": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x2": [ + { + "key": "0x0", + "value": "0x7c869" + }, + { + "key": "0x1a9b0ac200ec8c04c8b531bcf02f706e65d52ccc14e608ea3d556440f6955fe", + "value": "0x7c863" + }, + { + "key": "0x3163b7daeb9027199cbfe3739e272ac31c050437f339c7de1093d2eae9c0834", + "value": "0x7c864" + }, + { + "key": "0x3931a5320d0a21477c444afdd762d02d0bdaa4cb2008e5d8a7697b8cfe99000", + "value": "0x7c865" + }, + { + "key": "0x5923c1e1b47ec15ab8c588711ca385bb7879a8324e5373ff284232c394315be", + "value": "0x7c866" + }, + { + "key": "0x6717e629d7bc11bcd7f2692a57bb3b81bb16290fb55fc71bc68770973cae410", + "value": "0x7c867" + }, + { + "key": "0x78450a876febd027a35db491dcd473eb65bd9e628782f9d36d25e28bdc01a56", + "value": "0x7c868" + } + ], + "0x5923c1e1b47ec15ab8c588711ca385bb7879a8324e5373ff284232c394315be": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d": [ + { + "key": "0x1bc06e01c8edbc022b2a63178e2e2f2bc1bc498a6b2fa743a0e99ec2be6ac16", + "value": "0x33bea1cb80d563589877300" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x49d5343ba97db9bf2451" + } + ], + "0x78450a876febd027a35db491dcd473eb65bd9e628782f9d36d25e28bdc01a56": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035": [ + { + "key": "0x87", + "value": "0x1e902316d06eb9fd1d7ab1bc085c3865b22a139776df813d26a8cb0b9569969" + }, + { + "key": "0x123", + "value": "0x740c2266b76c503684363a12b484c612eff91f23918444eb37c9b6256ffcb1f" + }, + { + "key": "0x18f", + "value": "0x42d2bcdd8985d0b7797cabb2271b2e6042770594d77f3009d35a04d6c8ec5f1" + }, + { + "key": "0x271", + "value": "0x3342d39567deeb95aaf8039328deeb6c42a2b3aa8b97681f3920bd6638bb2cf" + }, + { + "key": "0x2b8", + "value": "0x25c5a466e8713262b43b225c35eb1e87ae570efcc3590b443fa776d383a7ce5" + }, + { + "key": "0x2c4", + "value": "0x4ec7529541867a4c17ee33755fd6411502e5266bcf86e72f190ba18088fa564" + }, + { + "key": "0x331", + "value": "0x10bf93a08d0f1de17947dee726ba218e194826832da2eba5b00ac0b709e6cc3" + }, + { + "key": "0x337", + "value": "0x4743d6b100caf4f48d9ec4e078b0e07f4ab51acd94fb1f461d0fff76242577" + }, + { + "key": "0x359", + "value": "0x5faa0b48ab3283c2c1f7c5086e2a537dc3f034f2f79e0ce514ec415405443fa" + }, + { + "key": "0x361", + "value": "0x3316f824e8163d5e4075210f50556edc99567ca4c6ead30b491917070995701" + } + ], + "0x6717e629d7bc11bcd7f2692a57bb3b81bb16290fb55fc71bc68770973cae410": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x1a9b0ac200ec8c04c8b531bcf02f706e65d52ccc14e608ea3d556440f6955fe": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x3163b7daeb9027199cbfe3739e272ac31c050437f339c7de1093d2eae9c0834": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x1": [ + { + "key": "0x2ef600", + "value": "0xf1ff3e098d8d5a5ca715ad226dc9938029eb9ac58db99f30142d7f8d0e5dce" + } + ] + }, + "nonces": { + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43": "0x4d01c3" + }, + "deployed_contracts": [ + { + "address": "0x1a9b0ac200ec8c04c8b531bcf02f706e65d52ccc14e608ea3d556440f6955fe", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x3163b7daeb9027199cbfe3739e272ac31c050437f339c7de1093d2eae9c0834", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x3931a5320d0a21477c444afdd762d02d0bdaa4cb2008e5d8a7697b8cfe99000", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x5923c1e1b47ec15ab8c588711ca385bb7879a8324e5373ff284232c394315be", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x6717e629d7bc11bcd7f2692a57bb3b81bb16290fb55fc71bc68770973cae410", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x78450a876febd027a35db491dcd473eb65bd9e628782f9d36d25e28bdc01a56", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + } + ], + "old_declared_contracts": [], + "declared_classes": [], + "migrated_compiled_classes": [ + { + "class_hash": "0x941a2dc3ab607819fdc929bea95831a2e0c1aab2f2f34b3a23c55cebc8a040", + "compiled_class_hash": "0x6c1f99f23865abe822bd9690f8d6cd181d43b1ff5535842aa973363aa7c7bb3" + }, + { + "class_hash": "0x345354e2d801833068de73d1a2028e2f619f71045dd5229e79469fa7f598038", + "compiled_class_hash": "0x4ba630be0cd6cdb8d4407bf7c4715b0780e63f890b26b032e8eccaf9c7338e2" + }, + { + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "compiled_class_hash": "0x292e005a8cd53053cdf4667d74e96da648a5fdac00bfb2616a2051631cc62b6" + } + ], + "replaced_classes": [] + } + } +} diff --git a/crates/gateway-test-fixtures/src/lib.rs b/crates/gateway-test-fixtures/src/lib.rs index d594983077..d160c67946 100644 --- a/crates/gateway-test-fixtures/src/lib.rs +++ b/crates/gateway-test-fixtures/src/lib.rs @@ -100,6 +100,13 @@ pub mod v0_14_0 { } } +pub mod v0_14_1 { + pub mod state_update_with_block { + pub const SEPOLIA_INTEGRATION_3077642: &str = + str_fixture!("0.14.1/state_update/sepolia_integration_3077642.json"); + } +} + pub mod add_transaction { pub const INVOKE_CONTRACT_WITH_SIGNATURE: &str = str_fixture!("add-transaction/invoke-contract-with-signature.json"); diff --git a/crates/gateway-types/src/reply.rs b/crates/gateway-types/src/reply.rs index 76c5368589..3b6773b39d 100644 --- a/crates/gateway-types/src/reply.rs +++ b/crates/gateway-types/src/reply.rs @@ -2110,6 +2110,15 @@ impl From for pathfinder_common::StateUpdate { state_update = state_update.with_declared_sierra_class(class_hash, compiled_class_hash); } + for state_update::MigratedCompiledClass { + class_hash, + compiled_class_hash, + } in gateway.state_diff.migrated_compiled_classes + { + state_update = + state_update.with_migrated_compiled_class(class_hash, compiled_class_hash); + } + state_update.declared_cairo_classes = gateway.state_diff.old_declared_contracts; state_update @@ -2136,6 +2145,11 @@ pub mod state_update { pub declared_classes: Vec, pub nonces: HashMap, pub replaced_classes: Vec, + // Migrated compiled classes have been added in Starknet 0.14.1. + // On a Starknet >= 0.14.1 network this field will always be present + // (possibly empty), but on older networks it is missing. + #[serde(default)] + pub migrated_compiled_classes: Vec, } impl StateDiff { @@ -2213,6 +2227,16 @@ pub mod state_update { pub address: ContractAddress, pub class_hash: ClassHash, } + + /// Describes a Sierra class for which the compiled class hash has been + /// migrated to the new CASM hash algorithm using Blake2s. Maps class + /// hash to the new compiled class hash. + #[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq, PartialOrd, Ord)] + #[serde(deny_unknown_fields)] + pub struct MigratedCompiledClass { + pub class_hash: SierraHash, + pub compiled_class_hash: CasmHash, + } } /// Used to deserialize replies to Starknet Ethereum contract requests. @@ -2324,6 +2348,7 @@ mod tests { use crate::reply::state_update::{ DeclaredSierraClass, DeployedContract, + MigratedCompiledClass, ReplacedClass, StorageDiff, }; @@ -2352,6 +2377,10 @@ mod tests { sierra_hash_bytes!(b"sierra class"), casm_hash_bytes!(b"casm hash"), ) + .with_migrated_compiled_class( + sierra_hash_bytes!(b"migrated class"), + casm_hash_bytes!(b"migrated casm"), + ) .with_contract_nonce( contract_address_bytes!(b"contract 0"), contract_nonce_bytes!(b"nonce 0"), @@ -2403,6 +2432,10 @@ mod tests { address: contract_address_bytes!(b"contract 0"), class_hash: class_hash_bytes!(b"replaced class"), }], + migrated_compiled_classes: vec![MigratedCompiledClass { + class_hash: sierra_hash_bytes!(b"migrated class"), + compiled_class_hash: casm_hash_bytes!(b"migrated casm"), + }], }, }; diff --git a/crates/load-test/Cargo.lock b/crates/load-test/Cargo.lock index c1a216236c..fa8e30a26e 100644 --- a/crates/load-test/Cargo.lock +++ b/crates/load-test/Cargo.lock @@ -1002,7 +1002,7 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "pathfinder-crypto" -version = "0.20.5" +version = "0.21.0" dependencies = [ "bitvec", "fake", diff --git a/crates/merkle-tree/src/starknet_state.rs b/crates/merkle-tree/src/starknet_state.rs index 8e9b5669a5..1b7ebcb3a6 100644 --- a/crates/merkle-tree/src/starknet_state.rs +++ b/crates/merkle-tree/src/starknet_state.rs @@ -116,7 +116,11 @@ pub fn update_starknet_state( } .with_verify_hashes(verify_hashes); - for (sierra, casm) in state_update.declared_sierra_classes { + for (sierra, casm) in state_update + .declared_sierra_classes + .iter() + .chain(state_update.migrated_compiled_classes.iter()) + { let leaf_hash = pathfinder_common::calculate_class_commitment_leaf_hash(*casm); transaction diff --git a/crates/p2p/src/sync/client/peer_agnostic/fixtures.rs b/crates/p2p/src/sync/client/peer_agnostic/fixtures.rs index 2c7aecfcc7..f70148f8a6 100644 --- a/crates/p2p/src/sync/client/peer_agnostic/fixtures.rs +++ b/crates/p2p/src/sync/client/peer_agnostic/fixtures.rs @@ -277,6 +277,7 @@ pub fn state_diff(tag: i32) -> StateUpdateData { system_contract_updates, declared_cairo_classes, declared_sierra_classes, + migrated_compiled_classes: Default::default(), }) .unwrap() .data diff --git a/crates/pathfinder/Cargo.toml b/crates/pathfinder/Cargo.toml index 693070d32d..f65bd99dde 100644 --- a/crates/pathfinder/Cargo.toml +++ b/crates/pathfinder/Cargo.toml @@ -38,6 +38,7 @@ p2p = { path = "../p2p" } p2p_proto = { path = "../p2p_proto" } paste = { workspace = true } pathfinder-block-hashes = { path = "../block-hashes" } +pathfinder-casm-hashes = { path = "../casm-hashes" } pathfinder-class-hash = { path = "../class-hash" } pathfinder-common = { path = "../common" } pathfinder-compiler = { path = "../compiler" } @@ -98,6 +99,7 @@ pretty_assertions_sorted = { workspace = true } proptest = { workspace = true } rand_chacha = { workspace = true } rstest = { workspace = true } +rusqlite = { workspace = true, features = ["bundled"] } serde_with = { workspace = true } starknet-gateway-test-fixtures = { path = "../gateway-test-fixtures" } test-log = { workspace = true, features = ["trace"] } diff --git a/crates/pathfinder/examples/recompute_casm_class_hashes.rs b/crates/pathfinder/examples/recompute_casm_class_hashes.rs new file mode 100644 index 0000000000..7810482bef --- /dev/null +++ b/crates/pathfinder/examples/recompute_casm_class_hashes.rs @@ -0,0 +1,67 @@ +use std::io::Write; + +use pathfinder_common::ClassHash; +use pathfinder_crypto::Felt; +use rayon::prelude::*; + +fn main() -> Result<(), Box> { + if std::env::args().count() != 3 { + println!( + "USAGE: {} db_file output_file", + std::env::args() + .next() + .as_deref() + .unwrap_or("recompute_casm_class_hashes") + ); + std::process::exit(1); + } + + let database_path = std::env::args().nth(1).unwrap(); + let database_path = std::path::PathBuf::from(database_path); + let output_path = std::env::args().nth(2).unwrap(); + let output_path = std::path::PathBuf::from(output_path); + + let mut db = rusqlite::Connection::open(database_path)?; + let transaction = db.transaction()?; + let mut stmt = transaction.prepare("SELECT hash, definition FROM casm_definitions")?; + let casm_definitions: Vec<_> = stmt + .query_map([], |row| { + let class_hash: Vec = row.get(0)?; + let class_hash = ClassHash( + Felt::from_be_slice(&class_hash) + .map_err(|e| rusqlite::types::FromSqlError::Other(e.into()))?, + ); + let definition: Vec = row.get(1)?; + + Ok((class_hash, definition)) + })? + .collect(); + + let casm_v2_hashes: Vec<_> = casm_definitions + .into_par_iter() + .map(|result| { + let (class_hash, definition) = result.unwrap(); + let definition = zstd::decode_all(definition.as_slice()) + .map_err(|e| rusqlite::types::FromSqlError::Other(e.into())) + .unwrap(); + let computed_hash = pathfinder_compiler::casm_class_hash_v2(&definition).unwrap(); + println!( + "Computed CASM hash for class {:?}: {:x?}", + class_hash, computed_hash.0 + ); + (class_hash, computed_hash) + }) + .collect(); + + println!("Computed {} CASM v2 hashes", casm_v2_hashes.len()); + + let output = std::fs::File::create(output_path)?; + let mut writer = std::io::BufWriter::new(output); + for (class_hash, casm_v2_hash) in casm_v2_hashes { + writer.write_all(class_hash.0.as_be_bytes())?; + writer.write_all(casm_v2_hash.0.as_be_bytes())?; + } + writer.flush()?; + + Ok(()) +} diff --git a/crates/pathfinder/src/config.rs b/crates/pathfinder/src/config.rs index 06fd1155df..7ef034d8bb 100644 --- a/crates/pathfinder/src/config.rs +++ b/crates/pathfinder/src/config.rs @@ -679,6 +679,17 @@ struct ConsensusCli { env = "PATHFINDER_CONSENSUS_PROPOSER_ADDRESSES", )] proposer_addresses: Vec, + + #[arg( + long = "consensus.history-depth", + long_help = "How many historical consensus engines (ie. those prior to the current one) to keep enabled. Warning!Setting this value to 0 may stall small networks in some circumstances.", + action = clap::ArgAction::Set, + default_value = "10", + value_name = "DEPTH", + value_parser = clap::value_parser!(u64).range(0..=10), + env = "PATHFINDER_CONSENSUS_HISTORY_DEPTH", + )] + history_depth: u64, } #[derive(clap::ValueEnum, Clone, serde::Deserialize)] @@ -920,6 +931,9 @@ pub struct ConsensusConfig { pub validator_addresses: Vec, /// The proposer addresses of all proposers in the proposer set. pub proposer_addresses: Vec, + /// How many historical consensus engines (ie. those prior to the current + /// one) to keep enabled. + pub history_depth: u64, } #[cfg(not(feature = "p2p"))] @@ -1075,6 +1089,7 @@ impl ConsensusConfig { .into_iter() .map(ContractAddress) .collect(), + history_depth: consensus_cli.history_depth, } }) } diff --git a/crates/pathfinder/src/config/integration_testing.rs b/crates/pathfinder/src/config/integration_testing.rs index 47194bfeb1..9a05871584 100644 --- a/crates/pathfinder/src/config/integration_testing.rs +++ b/crates/pathfinder/src/config/integration_testing.rs @@ -1,3 +1,5 @@ +use std::str::FromStr; + #[cfg(not(all( feature = "p2p", feature = "consensus-integration-tests", @@ -11,14 +13,69 @@ pub use disabled::*; ))] pub use enabled::*; +#[derive(Copy, Clone, PartialEq, Eq)] +pub enum InjectFailureTrigger { + ProposalInitRx, + BlockInfoRx, + TransactionBatchRx, + TransactionsFinRx, + ProposalCommitmentRx, + ProposalFinRx, + EntireProposalRx, + EntireProposalPersisted, + PrevoteRx, + PrecommitRx, + ProposalDecided, + ProposalCommitted, +} + +impl InjectFailureTrigger { + pub fn as_str(&self) -> &'static str { + match self { + InjectFailureTrigger::ProposalInitRx => "proposal_init_rx", + InjectFailureTrigger::BlockInfoRx => "block_info_rx", + InjectFailureTrigger::TransactionBatchRx => "txn_batch_rx", + InjectFailureTrigger::TransactionsFinRx => "txns_fin_rx", + InjectFailureTrigger::ProposalCommitmentRx => "proposal_commitment_rx", + InjectFailureTrigger::ProposalFinRx => "proposal_fin_rx", + InjectFailureTrigger::EntireProposalRx => "entire_proposal_rx", + InjectFailureTrigger::EntireProposalPersisted => "entire_proposal_persisted", + InjectFailureTrigger::PrevoteRx => "prevote_rx", + InjectFailureTrigger::PrecommitRx => "precommit_rx", + InjectFailureTrigger::ProposalDecided => "proposal_decided", + InjectFailureTrigger::ProposalCommitted => "proposal_committed", + } + } +} + +impl FromStr for InjectFailureTrigger { + type Err = String; + + fn from_str(s: &str) -> Result { + match s { + "proposal_init_rx" => Ok(InjectFailureTrigger::ProposalInitRx), + "block_info_rx" => Ok(InjectFailureTrigger::BlockInfoRx), + "txn_batch_rx" => Ok(InjectFailureTrigger::TransactionBatchRx), + "txns_fin_rx" => Ok(InjectFailureTrigger::TransactionsFinRx), + "proposal_commitment_rx" => Ok(InjectFailureTrigger::ProposalCommitmentRx), + "proposal_fin_rx" => Ok(InjectFailureTrigger::ProposalFinRx), + "entire_proposal_rx" => Ok(InjectFailureTrigger::EntireProposalRx), + "entire_proposal_persisted" => Ok(InjectFailureTrigger::EntireProposalPersisted), + "prevote_rx" => Ok(InjectFailureTrigger::PrevoteRx), + "precommit_rx" => Ok(InjectFailureTrigger::PrecommitRx), + "proposal_decided" => Ok(InjectFailureTrigger::ProposalDecided), + "proposal_committed" => Ok(InjectFailureTrigger::ProposalCommitted), + _ => Err(format!("Unknown inject failure event: {s}")), + } + } +} + #[cfg(all( feature = "p2p", feature = "consensus-integration-tests", debug_assertions ))] mod enabled { - use clap::builder::RangedU64ValueParser; - #[derive(clap::Args)] pub struct IntegrationTestingCli { #[arg( @@ -27,68 +84,51 @@ mod enabled { default_value = "false" )] disable_db_verification: bool, + #[arg( - long = "integration-tests.inject-failure.on-proposal-rx", - action = clap::ArgAction::Set, - value_parser = up_to_15_height_parser(), - )] - inject_failure_on_proposal_rx: Option, - #[arg( - long = "integration-tests.inject-failure.on-proposal-decided", + long = "integration-tests.inject-failure", action = clap::ArgAction::Set, - value_parser = up_to_15_height_parser(), + value_parser = parse_inject_failure, )] - inject_failure_on_proposal_decided: Option, - } - - fn up_to_15_height_parser() -> RangedU64ValueParser { - (0..=15).into() - } - - #[derive(Copy, Clone)] - pub struct IntegrationTestingConfig { - disable_db_verification: bool, - inject_failure: InjectFailureConfig, + inject_failure: Option, } #[derive(Copy, Clone)] pub struct InjectFailureConfig { - pub on_proposal_rx: Option, - pub on_proposal_decided: Option, + pub height: u64, + pub trigger: super::InjectFailureTrigger, } - #[derive(Copy, Clone)] - pub struct FailureInjection { - height: u64, - prefix: &'static str, - } - - impl FailureInjection { - fn new(height: u64, prefix: &'static str) -> Self { - Self { height, prefix } + fn parse_inject_failure(s: &str) -> Result { + let mut items = s.split(','); + let height: u64 = items + .next() + .ok_or_else(|| "Expected block height".to_string())? + .parse() + .map_err(|_| "Expected a number (u64)".to_string())?; + if height > 15 { + return Err("Expected range (0..=15)".to_string()); } + let trigger = items + .next() + .ok_or_else(|| "Expected inject failure trigger".to_string())? + .parse() + .map_err(|e| format!("Expected inject failure trigger: {e}"))?; - pub fn height(&self) -> u64 { - self.height - } + Ok(InjectFailureConfig { height, trigger }) + } - pub fn prefix(&self) -> &'static str { - self.prefix - } + #[derive(Copy, Clone)] + pub struct IntegrationTestingConfig { + disable_db_verification: bool, + inject_failure: Option, } impl IntegrationTestingConfig { pub fn parse(cli: IntegrationTestingCli) -> Self { Self { disable_db_verification: cli.disable_db_verification, - inject_failure: InjectFailureConfig { - on_proposal_rx: cli - .inject_failure_on_proposal_rx - .map(|h| FailureInjection::new(h, "proposal_rx")), - on_proposal_decided: cli - .inject_failure_on_proposal_decided - .map(|h| FailureInjection::new(h, "proposal_decided")), - }, + inject_failure: cli.inject_failure, } } @@ -96,7 +136,7 @@ mod enabled { self.disable_db_verification } - pub fn inject_failure_config(&self) -> InjectFailureConfig { + pub fn inject_failure_config(&self) -> Option { self.inject_failure } } @@ -114,15 +154,12 @@ mod disabled { #[derive(Copy, Clone)] pub struct IntegrationTestingConfig; - #[derive(Copy, Clone, Default)] + #[derive(Copy, Clone)] pub struct InjectFailureConfig { - pub on_proposal_rx: Option, - pub on_proposal_decided: Option, + pub height: u64, + pub trigger: super::InjectFailureTrigger, } - #[derive(Copy, Clone)] - pub struct FailureInjection; - impl IntegrationTestingConfig { pub fn parse(_: IntegrationTestingCli) -> Self { Self @@ -132,8 +169,8 @@ mod disabled { false } - pub fn inject_failure_config(&self) -> InjectFailureConfig { - InjectFailureConfig::default() + pub fn inject_failure_config(&self) -> Option { + None } } } diff --git a/crates/pathfinder/src/consensus.rs b/crates/pathfinder/src/consensus.rs index 3df7edabea..5f73894d84 100644 --- a/crates/pathfinder/src/consensus.rs +++ b/crates/pathfinder/src/consensus.rs @@ -5,7 +5,8 @@ use pathfinder_common::{ChainId, ConsensusInfo}; use pathfinder_storage::Storage; use tokio::sync::{mpsc, watch}; -use crate::config::{integration_testing, ConsensusConfig}; +use crate::config::integration_testing::InjectFailureConfig; +use crate::config::ConsensusConfig; #[cfg(feature = "p2p")] mod inner; @@ -39,7 +40,7 @@ pub fn start( p2p_event_rx: mpsc::UnboundedReceiver, data_directory: &Path, // Does nothing in production builds. Used for integration testing only. - inject_failure_config: integration_testing::InjectFailureConfig, + inject_failure_config: Option, ) -> ConsensusTaskHandles { inner::start( config, @@ -66,7 +67,7 @@ mod inner { _: Client, _: mpsc::UnboundedReceiver, _: &Path, - _: integration_testing::InjectFailureConfig, + _: Option, ) -> ConsensusTaskHandles { ConsensusTaskHandles::pending() } diff --git a/crates/pathfinder/src/consensus/inner.rs b/crates/pathfinder/src/consensus/inner.rs index 4de1f98861..1b54ca503e 100644 --- a/crates/pathfinder/src/consensus/inner.rs +++ b/crates/pathfinder/src/consensus/inner.rs @@ -4,6 +4,7 @@ mod conv; mod dto; mod fetch_proposers; mod fetch_validators; +mod integration_testing; mod p2p_task; mod persist_proposals; @@ -24,7 +25,8 @@ use serde::{Deserialize, Serialize}; use tokio::sync::{mpsc, watch}; use super::ConsensusTaskHandles; -use crate::config::{integration_testing, ConsensusConfig}; +use crate::config::integration_testing::InjectFailureConfig; +use crate::config::ConsensusConfig; use crate::validator::FinalizedBlock; #[allow(clippy::too_many_arguments)] @@ -36,7 +38,7 @@ pub fn start( p2p_client: Client, p2p_event_rx: mpsc::UnboundedReceiver, data_directory: &Path, - inject_failure_config: integration_testing::InjectFailureConfig, + inject_failure_config: Option, ) -> ConsensusTaskHandles { // Events that are produced by the P2P task and consumed by the consensus task. // TODO determine sufficient buffer size. 1 is not enough. @@ -50,13 +52,15 @@ pub fn start( let consensus_p2p_event_processing_handle = p2p_task::spawn( chain_id, - config.my_validator_address, + (&config).into(), p2p_client, storage.clone(), p2p_event_rx, tx_to_consensus, rx_from_consensus, consensus_storage.clone(), + data_directory, + inject_failure_config, ); let (info_watch_tx, consensus_info_watch) = watch::channel(None); @@ -130,6 +134,21 @@ enum P2PTaskEvent { CommitBlock(HeightAndRound, ConsensusValue), } +#[derive(Copy, Clone, Debug)] +struct P2PTaskConfig { + my_validator_address: ContractAddress, + history_depth: u64, +} + +impl From<&ConsensusConfig> for P2PTaskConfig { + fn from(config: &ConsensusConfig) -> Self { + Self { + my_validator_address: config.my_validator_address, + history_depth: config.history_depth, + } + } +} + #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] struct ConsensusValue(ProposalCommitment); diff --git a/crates/pathfinder/src/consensus/inner/batch_execution.rs b/crates/pathfinder/src/consensus/inner/batch_execution.rs index f01346c16c..2767bb5f51 100644 --- a/crates/pathfinder/src/consensus/inner/batch_execution.rs +++ b/crates/pathfinder/src/consensus/inner/batch_execution.rs @@ -4,7 +4,7 @@ //! transaction batches with the ability to rollback when TransactionsFin //! indicates fewer transactions were actually executed by the proposer. -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use anyhow::Context; use p2p::consensus::HeightAndRound; @@ -17,38 +17,54 @@ use crate::validator::ValidatorTransactionBatchStage; /// Manages batch execution with rollback support for TransactionsFin #[derive(Debug, Clone)] pub struct BatchExecutionManager { - /// Tracks execution state for each height/round - executions: HashMap, -} - -/// State for a single proposal's batch execution -#[derive(Debug, Clone)] -struct BatchExecutionState { - /// Whether each batch has been executed (indexed by arrival order) - batch_executed: Vec, - /// Current execution state - current_state: ExecutionState, - /// Total transactions executed so far - total_executed: usize, -} - -/// Current execution state -#[derive(Debug, Clone, PartialEq)] -pub enum ExecutionState { - /// Waiting for more batches - Collecting, - /// Finalized with specific batch count - Finalized { executed_batch_count: usize }, + /// Tracks which proposals (height/round) have started execution. + /// An entry exists here if at least one batch has been executed (not + /// deferred). + executing: HashSet, + /// Tracks which proposals (height/round) have had TransactionsFin + /// processed. An entry exists here if TransactionsFin has been + /// successfully processed for this height/round. + transactions_fin_processed: HashSet, } impl BatchExecutionManager { /// Create a new batch execution manager pub fn new() -> Self { Self { - executions: HashMap::new(), + executing: HashSet::new(), + transactions_fin_processed: HashSet::new(), } } + /// Check if execution has started for the given height and round + /// + /// Returns `true` if at least one batch has been executed (not deferred) + /// for this height/round. + pub fn is_executing(&self, height_and_round: &HeightAndRound) -> bool { + self.executing.contains(height_and_round) + } + + /// Check if TransactionsFin has been processed for the given height and + /// round + /// + /// Returns `true` if TransactionsFin has been successfully processed + /// for this height/round. + pub fn is_transactions_fin_processed(&self, height_and_round: &HeightAndRound) -> bool { + self.transactions_fin_processed.contains(height_and_round) + } + + /// Check if ProposalFin should be deferred for the given height and round + /// + /// ProposalFin should be deferred if execution has started but + /// TransactionsFin hasn't been processed yet. This ensures that we + /// don't finalize a proposal before we know the final transaction + /// count. + /// + /// Note: This is in its own method to prevent drift with tests. + pub fn should_defer_proposal_fin(&self, height_and_round: &HeightAndRound) -> bool { + self.is_executing(height_and_round) && !self.is_transactions_fin_processed(height_and_round) + } + /// Process a transaction batch with deferral support /// /// This is the main method that should be used by the P2P task @@ -79,6 +95,7 @@ impl BatchExecutionManager { // Execute any previously deferred transactions first let deferred = deferred_executions.remove(&height_and_round); let deferred_txns_len = deferred.as_ref().map_or(0, |d| d.transactions.len()); + let deferred_transactions_fin = deferred.as_ref().and_then(|d| d.transactions_fin.clone()); let mut all_transactions = transactions; if let Some(DeferredExecution { @@ -94,37 +111,89 @@ impl BatchExecutionManager { .execute_batch(all_transactions) .context("Failed to execute transaction batch")?; - // Update execution state - let state = - self.executions - .entry(height_and_round) - .or_insert_with(|| BatchExecutionState { - batch_executed: Vec::new(), - current_state: ExecutionState::Collecting, - total_executed: 0, - }); - - state.total_executed += 1; + // Mark that execution has started for this height/round + self.executing.insert(height_and_round); tracing::debug!( "Transaction batch execution for height and round {height_and_round} is complete, \ additionally {deferred_txns_len} previously deferred transactions were executed", ); + // If TransactionsFin was deferred (arrived before execution started, e.g., + // because batches were deferred), process it now that execution has + // started. + // Assuming message ordering is guaranteed... + // (see p2p::consensus::handle_incoming_proposal_message) + // ...if TransactionsFin is deferred, all batches are also in the deferred + // entry, so we can safely process TransactionsFin here. + if let Some(transactions_fin) = deferred_transactions_fin { + tracing::debug!( + "Processing deferred TransactionsFin for {height_and_round} after batch execution \ + started" + ); + self.process_transactions_fin(height_and_round, transactions_fin, validator)?; + } + + Ok(()) + } + + /// Execute a batch of transactions and track execution state + /// + /// This is a simpler variant that doesn't handle deferral - used when we + /// know execution should proceed immediately (e.g., when executing + /// previously deferred transactions after the parent block is + /// committed). + pub fn execute_batch( + &mut self, + height_and_round: HeightAndRound, + transactions: Vec, + validator: &mut ValidatorTransactionBatchStage, + ) -> anyhow::Result<()> { + // Mark that execution has started for this height/round, even if batch is + // empty. This is necessary because TransactionsFin may arrive later and + // requires execution to have started. + self.executing.insert(height_and_round); + + if transactions.is_empty() { + tracing::debug!( + "Empty transaction batch for height and round {height_and_round} - execution \ + marked as started" + ); + return Ok(()); + } + + // Execute the batch + validator + .execute_batch(transactions) + .context("Failed to execute transaction batch")?; + + tracing::debug!( + "Transaction batch execution for height and round {height_and_round} is complete" + ); + Ok(()) } /// Process TransactionsFin message + /// + /// Processes TransactionsFin immediately with rollback support. Assumes + /// execution has already started (at least one batch executed). If + /// transactions are deferred, deferral should be handled by the caller + /// before calling this function. pub fn process_transactions_fin( &mut self, height_and_round: HeightAndRound, transactions_fin: proto_consensus::TransactionsFin, validator: &mut ValidatorTransactionBatchStage, ) -> anyhow::Result<()> { - let state = self - .executions - .get_mut(&height_and_round) - .ok_or_else(|| anyhow::anyhow!("No execution state found for {height_and_round}"))?; + // Verify that execution has started (at least one batch was executed, not + // deferred) + if !self.executing.contains(&height_and_round) { + return Err(anyhow::anyhow!( + "No execution state found for {height_and_round}. Execution should have started \ + before processing TransactionsFin." + )); + } let target_transaction_count = transactions_fin.executed_transaction_count as usize; let current_transaction_count = validator.transaction_count(); @@ -142,46 +211,44 @@ impl BatchExecutionManager { ); // Roll back to the target transaction count + // Note: rollback_to_transaction takes a 0-based index, but + // executed_transaction_count is a count. To keep N transactions, + // we need to rollback to index N-1 (which keeps transactions 0 through N-1). + let target_index = target_transaction_count + .checked_sub(1) + .context("Cannot rollback to 0 transactions")?; validator - .rollback_to_transaction(target_transaction_count) + .rollback_to_transaction(target_index) .context("Failed to rollback to target transaction count")?; - - // Update state to reflect rollback - state.total_executed = target_transaction_count; - for i in target_transaction_count..state.batch_executed.len() { - state.batch_executed[i] = false; - } + } else if target_transaction_count > current_transaction_count { + // This shouldn't happen with proper message ordering and no protocol errors. + // Ordering is guaranteed by p2p::consensus::handle_incoming_proposal_message. + // TransactionsFin should arrive after all TransactionBatches, so we should have + // at least as many transactions as TransactionsFin indicates. + tracing::warn!( + "TransactionsFin for {height_and_round} indicates {} transactions, but we only \ + have {} transactions. This may indicate a protocol violation or missing batches.", + target_transaction_count, + current_transaction_count + ); } - state.current_state = ExecutionState::Finalized { - executed_batch_count: target_transaction_count, - }; - tracing::info!( "Finalized {height_and_round} with {target_transaction_count} executed transactions" ); - Ok(()) - } + // Mark TransactionsFin as processed for this height/round + self.transactions_fin_processed.insert(height_and_round); - /// Get the current execution state for a proposal - #[cfg(test)] - pub fn get_execution_state( - &self, - height_and_round: &HeightAndRound, - ) -> Option<&ExecutionState> { - self.executions - .get(height_and_round) - .map(|state| &state.current_state) + Ok(()) } /// Clean up completed executions pub fn cleanup(&mut self, height_and_round: &HeightAndRound) { - if let Some(state) = self.executions.remove(height_and_round) { - tracing::debug!( - "Cleaned up execution state for {height_and_round}: {} batches", - state.batch_executed.len() - ); + let had_execution = self.executing.remove(height_and_round); + let had_transactions_fin = self.transactions_fin_processed.remove(height_and_round); + if had_execution || had_transactions_fin { + tracing::debug!("Cleaned up execution state for {height_and_round}"); } } } @@ -195,11 +262,13 @@ impl Default for BatchExecutionManager { /// Represents transactions received from the network that are waiting for /// previous block to be committed before they can be executed. Also holds /// optional proposal commitment and proposer address in case that the entire -/// proposal has been received. +/// proposal has been received. May also store TransactionsFin if it arrives +/// while transactions are deferred. #[derive(Debug, Clone, Default)] pub struct DeferredExecution { pub transactions: Vec, pub commitment: Option, + pub transactions_fin: Option, } /// Proposal commitment and the address of its proposer. @@ -241,127 +310,50 @@ pub fn should_defer_execution( #[cfg(test)] mod tests { - use p2p_proto::consensus::TransactionVariant; - use p2p_proto::transaction::L1HandlerV0; use pathfinder_crypto::Felt; use super::*; - fn create_test_transaction(index: usize) -> proto_consensus::Transaction { - // Create a simple L1Handler transaction - let txn = TransactionVariant::L1HandlerV0(L1HandlerV0 { - nonce: Felt::from_hex_str(&format!("0x{index}")).unwrap(), - address: p2p_proto::common::Address( - Felt::from_hex_str(&format!("0x{index:x}")).unwrap(), - ), - entry_point_selector: Felt::from_hex_str(&format!("0x{index}")).unwrap(), - calldata: vec![Felt::from_hex_str(&format!("0x{index}")).unwrap()], - }); - - let l1_handler = pathfinder_common::transaction::L1HandlerTransaction { - nonce: pathfinder_common::TransactionNonce( - Felt::from_hex_str(&format!("0x{index}")).unwrap(), - ), - contract_address: pathfinder_common::ContractAddress::new_or_panic( - Felt::from_hex_str(&format!("0x{index:x}")).unwrap(), - ), - entry_point_selector: pathfinder_common::EntryPoint( - Felt::from_hex_str(&format!("0x{index}")).unwrap(), - ), - calldata: vec![pathfinder_common::CallParam( - Felt::from_hex_str(&format!("0x{index}")).unwrap(), - )], - }; - - // Calculate the correct hash - let chain_id = pathfinder_common::ChainId::SEPOLIA_TESTNET; - let hash = l1_handler.calculate_hash(chain_id); + /// Helper function to create a committed parent block in storage + fn create_committed_parent_block( + storage: &pathfinder_storage::Storage, + parent_height: u64, + ) -> anyhow::Result<()> { + use pathfinder_common::prelude::*; + let mut db_conn = storage.connection()?; + let db_tx = db_conn.transaction()?; + let block_id = BlockId::Number(BlockNumber::new_or_panic(parent_height)); - proto_consensus::Transaction { - transaction_hash: p2p_proto::common::Hash(hash.0), - txn, + // Check if block already exists + if db_tx.block_exists(block_id)? { + return Ok(()); } - } - - /// Test deferral mechanism with real transactions - #[tokio::test] - async fn test_deferral_mechanism() { - use p2p::consensus::HeightAndRound; - use pathfinder_common::{ChainId, ContractAddress}; - - use crate::consensus::inner::test_helpers::{ - create_test_proposal, - create_transaction_batch, - }; - use crate::validator::ValidatorBlockInfoStage; - // Setup test storage (temp database with larger connection pool) - let storage = pathfinder_storage::StorageBuilder::in_tempdir() - .expect("Failed to create temp database"); - let mut db_conn = storage.connection().unwrap(); - let db_tx = db_conn.transaction().unwrap(); - let chain_id = ChainId::SEPOLIA_TESTNET; - let proposer = - ContractAddress::new_or_panic(pathfinder_crypto::Felt::from_hex_str("0x123").unwrap()); - - // Create test proposal with transactions - let height = 100; // Use a high height to trigger deferral - let round = 1; - let transactions = create_transaction_batch(20, 3, chain_id); - let (proposal_init, block_info) = - create_test_proposal(chain_id, height, round, proposer, transactions.clone()); - - // Create validator - let mut validator = ValidatorBlockInfoStage::new(chain_id, proposal_init) - .expect("Failed to create ValidatorBlockInfoStage") - .validate_consensus_block_info(block_info, storage.clone()) - .expect("Failed to create ValidatorTransactionBatchStage"); - - // Create batch execution manager - let mut manager = BatchExecutionManager::new(); - let height_and_round = HeightAndRound::new(height, round); - let mut deferred_executions = std::collections::HashMap::new(); - - // Test deferral mechanism - let batch = vec![transactions[0].clone()]; - let result = manager.process_batch_with_deferral( - height_and_round, - batch, - &mut validator, - &db_tx, - &mut deferred_executions, - ); - // Should succeed (either execute or defer) - assert!(result.is_ok()); - - // Verify the batch was either executed or deferred - let _state = manager.get_execution_state(&height_and_round); - // State might be Collecting (if executed) or None (if deferred) - // Both are valid outcomes for this test + // Create a unique hash for this block to avoid conflicts + let hash = BlockHash(Felt::from_hex_str(&format!("0x{parent_height:064x}")).unwrap()); + let parent_header = BlockHeader::builder() + .number(BlockNumber::new_or_panic(parent_height)) + .timestamp(BlockTimestamp::new_or_panic(1000)) + .calculated_state_commitment(StorageCommitment(Felt::ZERO), ClassCommitment(Felt::ZERO)) + .sequencer_address(SequencerAddress::ZERO) + .finalize_with_hash(hash); + db_tx.insert_block_header(&parent_header)?; + db_tx.commit()?; + Ok(()) } - /// Simulate receiving batches from the network and executing them with - /// rollback. An end-to-end test that verifies the rollback logic. - #[tokio::test] - async fn test_full_flow_with_rollback() { + /// Helper function to create BlockInfo for tests + fn create_test_block_info(number: u64) -> pathfinder_executor::types::BlockInfo { use pathfinder_common::{ BlockNumber, BlockTimestamp, - ChainId, GasPrice, L1DataAvailabilityMode, SequencerAddress, StarknetVersion, }; - use pathfinder_executor::types::BlockInfo; - use pathfinder_storage::StorageBuilder; - - // Setup test environment - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = BlockInfo { - number: BlockNumber::new_or_panic(1), + pathfinder_executor::types::BlockInfo { + number: BlockNumber::new_or_panic(number), timestamp: BlockTimestamp::new_or_panic(1000), sequencer_address: SequencerAddress::ZERO, l1_da_mode: L1DataAvailabilityMode::Calldata, @@ -372,109 +364,17 @@ mod tests { strk_l2_gas_price: GasPrice::ZERO, eth_l2_gas_price: GasPrice::ZERO, starknet_version: StarknetVersion::new(0, 14, 0, 0), - }; - - // Create test transactions - let mut all_transactions = Vec::new(); - for i in 0..20 { - all_transactions.push(create_test_transaction(i)); - } - - // Group transactions into batches with variable sizes (simulating real network - // reception) - let batch_sizes = vec![3, 7, 4, 6]; - let mut batches = Vec::new(); - let mut start_idx = 0; - for &batch_size in &batch_sizes { - let end_idx = start_idx + batch_size; - if end_idx <= all_transactions.len() { - batches.push(all_transactions[start_idx..end_idx].to_vec()); - start_idx = end_idx; - } - } - - // Create validator stage - let mut validator_stage = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage) - .expect("Failed to create validator stage"); - - // Execute all batches (simulating normal flow) - for batch in batches.iter() { - validator_stage - .execute_batch(batch.clone()) - .expect("Failed to execute batch"); - } - - // Simulate TransactionsFin pointing to transaction 7 (within batch 1) - let target_transaction_idx = 7; - - validator_stage - .rollback_to_transaction(target_transaction_idx) - .expect("Failed to rollback"); - - let mut target_batch = 0; - let mut cumulative_size = 0; - for (batch_idx, &batch_size) in batch_sizes.iter().enumerate() { - if cumulative_size + batch_size > target_transaction_idx { - target_batch = batch_idx; - break; - } - cumulative_size += batch_size; - } - - let final_transactions = validator_stage.transaction_count(); - let final_receipts = validator_stage.receipt_count(); - let final_events = validator_stage.event_count(); - let final_executors = validator_stage.batch_executor_count(); - - assert_eq!(final_transactions, target_transaction_idx + 1); - assert_eq!(final_receipts, target_transaction_idx + 1); - assert_eq!(final_events, target_transaction_idx + 1); - assert_eq!(final_executors, target_batch + 1); - - assert_eq!(validator_stage.batch_executor_count(), target_batch + 1); - - // Verify transaction indices are sequential and correct - for (i, receipt) in validator_stage.receipts().iter().enumerate() { - let expected_index = i as u64; - let actual_index = receipt.transaction_index.get(); - assert_eq!( - actual_index, expected_index, - "Transaction index mismatch at position {i}: expected {expected_index}, got \ - {actual_index}" - ); - } - - // Verify specific transaction index ranges after rollback and re-execution - let receipts = validator_stage.receipts(); - assert_eq!( - receipts.len(), - 8, - "Should have 8 receipts after rollback and re-execution" - ); - - // First receipts should be from batch 0 (indices 0, 1, 2) - for (i, receipt) in receipts.iter().enumerate().take(3) { - assert_eq!( - receipt.transaction_index.get(), - i as u64, - "Receipt {i} should have index {i}" - ); - } - - // Next receipts should be from partial batch 1 (indices 3, 4, 5, 6) - for (i, receipt) in receipts.iter().enumerate().skip(3).take(4) { - assert_eq!( - receipt.transaction_index.get(), - i as u64, - "Receipt {i} should have index {i}" - ); } } - /// Test rollback to a transaction within the first batch - #[test] - fn test_rollback_to_first_batch_transaction() { + /// Test that BatchExecutionManager correctly tracks execution state and + /// TransactionsFin processing. This verifies the tracking methods that + /// are used by defer_or_execute_proposal_fin to determine + /// whether ProposalFin should be deferred. + #[tokio::test] + async fn test_execution_state_tracking() { + use p2p::consensus::HeightAndRound; + use p2p_proto::consensus::TransactionsFin; use pathfinder_common::{ BlockNumber, BlockTimestamp, @@ -487,7 +387,8 @@ mod tests { use pathfinder_executor::types::BlockInfo; use pathfinder_storage::StorageBuilder; - // Create test storage and block info + use crate::consensus::inner::test_helpers::create_transaction_batch; + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); let chain_id = ChainId::SEPOLIA_TESTNET; @@ -505,67 +406,77 @@ mod tests { starknet_version: StarknetVersion::new(0, 14, 0, 0), }; - // Create test transactions - let mut all_transactions = Vec::new(); - for i in 0..10 { - all_transactions.push(create_test_transaction(i)); - } - - // Group into batches: [5, 5] - so transaction 2 is in batch 0 - let batch_sizes = vec![5, 5]; - let mut batches = Vec::new(); - let mut start_idx = 0; - for &batch_size in &batch_sizes { - let end_idx = start_idx + batch_size; - if end_idx <= all_transactions.len() { - batches.push(all_transactions[start_idx..end_idx].to_vec()); - start_idx = end_idx; - } - } - - // Create validator stage let mut validator_stage = ValidatorTransactionBatchStage::new(chain_id, block_info, storage) .expect("Failed to create validator stage"); - // Execute all batches - for batch in batches.iter() { - validator_stage - .execute_batch(batch.clone()) - .expect("Failed to execute batch"); - } + let mut batch_execution_manager = BatchExecutionManager::new(); + let height_and_round = HeightAndRound::new(2, 1); - // Try to rollback to transaction 2 (which is in the first batch) - let target_transaction_idx = 2; + // Initially, execution should not have started + assert!( + !batch_execution_manager.is_executing(&height_and_round), + "Execution should not have started initially" + ); + assert!( + !batch_execution_manager.is_transactions_fin_processed(&height_and_round), + "TransactionsFin should not be processed initially" + ); - // This should work, not throw an error - validator_stage - .rollback_to_transaction(target_transaction_idx) - .expect("Failed to rollback to first batch transaction"); + // Execute a batch to start execution + let transactions = create_transaction_batch(0, 5, chain_id); + batch_execution_manager + .execute_batch(height_and_round, transactions, &mut validator_stage) + .expect("Failed to execute batch"); - let final_transactions = validator_stage.transaction_count(); - let final_receipts = validator_stage.receipt_count(); - let final_events = validator_stage.event_count(); + // Verify execution has started + assert!( + batch_execution_manager.is_executing(&height_and_round), + "Execution should have started after execute_batch" + ); - // Should have exactly 3 transactions (0, 1, 2) - assert_eq!(final_transactions, target_transaction_idx + 1); - assert_eq!(final_receipts, target_transaction_idx + 1); - assert_eq!(final_events, target_transaction_idx + 1); + // Verify TransactionsFin has NOT been processed yet + assert!( + !batch_execution_manager.is_transactions_fin_processed(&height_and_round), + "TransactionsFin should not be processed yet" + ); - // Verify transaction indices are sequential - for i in 0..final_transactions { - let receipt = &validator_stage.receipts()[i]; - assert_eq!( - receipt.transaction_index.get(), - i as u64, - "Receipt {i} should have index {i}", - ); - } + // Verify that ProposalFin should be deferred + assert!( + batch_execution_manager.should_defer_proposal_fin(&height_and_round), + "ProposalFin should be deferred when execution started but TransactionsFin not \ + processed" + ); + + // Now process TransactionsFin + let transactions_fin = TransactionsFin { + executed_transaction_count: 5, + }; + batch_execution_manager + .process_transactions_fin(height_and_round, transactions_fin, &mut validator_stage) + .expect("Failed to process TransactionsFin"); + + // Verify TransactionsFin is now marked as processed + assert!( + batch_execution_manager.is_transactions_fin_processed(&height_and_round), + "TransactionsFin should be marked as processed after process_transactions_fin" + ); + + // Now ProposalFin should NOT be deferred + assert!( + !batch_execution_manager.should_defer_proposal_fin(&height_and_round), + "ProposalFin should NOT be deferred after TransactionsFin is processed" + ); } - /// Test transaction index ordering across multiple batches and rollbacks - #[test] - fn test_transaction_ordering_integrity_across_batches() { + /// Test that TransactionsFin arriving before any TransactionBatch is + /// handled gracefully. TransactionsFin should be stored in deferred entry + /// even if no batches have been deferred yet. + #[tokio::test] + async fn test_transactions_fin_before_any_batch() { + use p2p::consensus::HeightAndRound; + use p2p_proto::consensus::TransactionsFin; + use pathfinder_common::prelude::*; use pathfinder_common::{ BlockNumber, BlockTimestamp, @@ -578,9 +489,28 @@ mod tests { use pathfinder_executor::types::BlockInfo; use pathfinder_storage::StorageBuilder; + use crate::consensus::inner::test_helpers::create_transaction_batch; + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); let chain_id = ChainId::SEPOLIA_TESTNET; + // Create and commit parent block (height 1) so height 2 won't be deferred + { + let mut db_conn = storage.connection().unwrap(); + let db_tx = db_conn.transaction().unwrap(); + let parent_header = BlockHeader::builder() + .number(BlockNumber::new_or_panic(1)) + .timestamp(BlockTimestamp::new_or_panic(1000)) + .calculated_state_commitment( + StorageCommitment(Felt::ZERO), + ClassCommitment(Felt::ZERO), + ) + .sequencer_address(SequencerAddress::ZERO) + .finalize_with_hash(BlockHash(Felt::ZERO)); + db_tx.insert_block_header(&parent_header).unwrap(); + db_tx.commit().unwrap(); + } + let block_info = BlockInfo { number: BlockNumber::new_or_panic(1), timestamp: BlockTimestamp::new_or_panic(1000), @@ -595,335 +525,374 @@ mod tests { starknet_version: StarknetVersion::new(0, 14, 0, 0), }; - // Create transactions with unique identifiers for ordering validation - let mut all_transactions = Vec::new(); - for i in 0..15 { - all_transactions.push(create_test_transaction(i)); - } - - // Create batches with different sizes to test complex scenarios - let batch_sizes = vec![3, 5, 4, 3]; // Total: 15 transactions - let mut batches = Vec::new(); - let mut start_idx = 0; - for &batch_size in &batch_sizes { - let end_idx = start_idx + batch_size; - if end_idx <= all_transactions.len() { - batches.push(all_transactions[start_idx..end_idx].to_vec()); - start_idx = end_idx; - } - } - - // Full execution ordering let mut validator_stage = ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) .expect("Failed to create validator stage"); - for batch in batches.iter() { - validator_stage - .execute_batch(batch.clone()) - .expect("Failed to execute batch"); - } + let mut batch_execution_manager = BatchExecutionManager::new(); + let height_and_round = HeightAndRound::new(2, 1); + let mut deferred_executions: std::collections::HashMap = + std::collections::HashMap::new(); - // Validate global ordering after full execution - let receipts = validator_stage.receipts(); - assert_eq!( - receipts.len(), - 15, - "Should have 15 receipts after full execution" + // Initially, no execution and no deferred entry + assert!( + !batch_execution_manager.is_executing(&height_and_round), + "Execution should not have started initially" + ); + assert!( + !deferred_executions.contains_key(&height_and_round), + "No deferred entry should exist initially" ); - for (i, receipt) in receipts.iter().enumerate() { - let expected_index = i as u64; - let actual_index = receipt.transaction_index.get(); - assert_eq!( - actual_index, expected_index, - "Transaction index mismatch at position {i}: expected {expected_index}, got \ - {actual_index}", - ); - } + // Step 1: TransactionsFin arrives when execution hasn't started yet + // (Note: With P2P message ordering guarantees, TransactionsFin will always + // arrive after all TransactionBatches, but execution may not have started + // if batches were deferred. This test simulates the case where TransactionsFin + // arrives before execution starts, e.g., because batches were deferred.) + let transactions_fin = TransactionsFin { + executed_transaction_count: 5, + }; - // Rollback to batch boundary - let target_transaction_idx = 7; // End of batch 1 - validator_stage - .rollback_to_transaction(target_transaction_idx) - .expect("Failed to rollback"); + // Simulate the fix: create deferred entry and store TransactionsFin + let deferred = deferred_executions.entry(height_and_round).or_default(); + deferred.transactions_fin = Some(transactions_fin.clone()); - let receipts_after_rollback = validator_stage.receipts(); - assert_eq!( - receipts_after_rollback.len(), - 8, - "Should have 8 receipts after rollback to transaction 7" + // Verify TransactionsFin was stored + assert!( + deferred_executions + .get(&height_and_round) + .and_then(|d| d.transactions_fin.as_ref()) + .is_some(), + "TransactionsFin should be stored in deferred entry" ); - // Validate ordering after rollback - for (i, receipt) in receipts_after_rollback.iter().enumerate() { - let expected_index = i as u64; - let actual_index = receipt.transaction_index.get(); - assert_eq!( - actual_index, expected_index, - "Transaction index mismatch after rollback at position {i}: expected \ - {expected_index}, got {actual_index}", - ); - } - - // Rollback to mid-batch - // Re-execute to get back to full state - let mut validator_stage2 = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) - .expect("Failed to create validator stage"); - - for batch in batches.iter() { - validator_stage2 - .execute_batch(batch.clone()) - .expect("Failed to execute batch"); - } + // Step 2: TransactionBatch arrives and executes + let transactions = create_transaction_batch(0, 5, chain_id); + let mut db_conn = storage.connection().unwrap(); + let db_tx = db_conn.transaction().unwrap(); + batch_execution_manager + .process_batch_with_deferral( + height_and_round, + transactions, + &mut validator_stage, + &db_tx, + &mut deferred_executions, + ) + .expect("Failed to process batch"); + + // Verify execution has started + assert!( + batch_execution_manager.is_executing(&height_and_round), + "Execution should have started after batch execution" + ); - let target_transaction_idx = 10; // Mid-batch 2 - validator_stage2 - .rollback_to_transaction(target_transaction_idx) - .expect("Failed to rollback"); + // Verify TransactionsFin was processed (marked as processed) + assert!( + batch_execution_manager.is_transactions_fin_processed(&height_and_round), + "TransactionsFin should be processed after batch execution" + ); - let receipts_after_mid_rollback = validator_stage2.receipts(); + // Verify validator state matches TransactionsFin count assert_eq!( - receipts_after_mid_rollback.len(), - 11, - "Should have 11 receipts after rollback to transaction 10" + validator_stage.transaction_count(), + 5, + "Validator should have 5 transactions matching TransactionsFin count" ); + } - // Validate ordering after mid-batch rollback - for (i, receipt) in receipts_after_mid_rollback.iter().enumerate() { - let expected_index = i as u64; - let actual_index = receipt.transaction_index.get(); - assert_eq!( - actual_index, expected_index, - "Transaction index mismatch after mid-batch rollback at position {i}: expected \ - {expected_index}, got {actual_index}" - ); - } + /// Test deferral and immediate execution of transaction batches. + /// A few things are covered here: + /// - deferral when parent not committed, + /// - immediate execution when parent committed + /// - deferred batch execution + /// - multiple batches with mixed deferral + #[tokio::test] + async fn test_deferral_and_execution() { + use p2p::consensus::HeightAndRound; + use pathfinder_common::ChainId; + use pathfinder_storage::StorageBuilder; - // Batch boundary consistency validation - let mut validator_stage3 = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage) - .expect("Failed to create validator stage"); + use crate::consensus::inner::test_helpers::create_transaction_batch; - for (batch_idx, batch) in batches.iter().enumerate() { - validator_stage3 - .execute_batch(batch.clone()) - .expect("Failed to execute batch"); + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let block_info = create_test_block_info(1); - // Validate batch boundary after each batch - let receipts = validator_stage3.receipts(); - let expected_end_index = validator_stage3.transaction_count() - 1; - let actual_end_index = receipts.last().unwrap().transaction_index.get(); + let mut validator_stage = + ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) + .expect("Failed to create validator stage"); + let mut batch_execution_manager = BatchExecutionManager::new(); + let height_and_round = HeightAndRound::new(2, 1); + let mut deferred_executions: std::collections::HashMap = + std::collections::HashMap::new(); + + // Test 1: Deferral when parent not committed + { + let mut db_conn = storage.connection().unwrap(); + let db_tx = db_conn.transaction().unwrap(); + let transactions = create_transaction_batch(0, 3, chain_id); + + batch_execution_manager + .process_batch_with_deferral( + height_and_round, + transactions, + &mut validator_stage, + &db_tx, + &mut deferred_executions, + ) + .expect("Failed to process batch"); + + // Verify deferral: transactions stored, execution NOT started + assert!( + !batch_execution_manager.is_executing(&height_and_round), + "Execution should NOT have started when parent not committed" + ); + assert!( + deferred_executions + .get(&height_and_round) + .map(|d| d.transactions.len()) + .unwrap_or(0) + == 3, + "Deferred transactions should be stored" + ); assert_eq!( - actual_end_index, expected_end_index as u64, - "Batch {batch_idx} end index mismatch: expected {expected_end_index}, got \ - {actual_end_index}", + validator_stage.transaction_count(), + 0, + "No transactions should be executed when deferred" ); } - // Cross-batch ordering integrity - let receipts = validator_stage3.receipts(); - - // Verify that transaction indices form a perfect sequence - for i in 0..receipts.len() - 1 { - let current_index = receipts[i].transaction_index.get(); - let next_index = receipts[i + 1].transaction_index.get(); + // Test 2: Commit parent block and execute deferred batch + // Create parent block at height 1 (required for height 2 to execute) + create_committed_parent_block(&storage, 1).expect("Failed to create parent block"); + { + let mut db_conn = storage.connection().unwrap(); + let db_tx = db_conn.transaction().unwrap(); + let transactions = create_transaction_batch(3, 2, chain_id); + + batch_execution_manager + .process_batch_with_deferral( + height_and_round, + transactions, + &mut validator_stage, + &db_tx, + &mut deferred_executions, + ) + .expect("Failed to process batch"); + + // Verify execution: deferred + new transactions executed, execution started + assert!( + batch_execution_manager.is_executing(&height_and_round), + "Execution should have started after parent committed" + ); + assert!( + !deferred_executions.contains_key(&height_and_round), + "Deferred entry should be removed after execution" + ); assert_eq!( - next_index, - current_index + 1, - "Non-sequential transaction indices: {current_index} followed by {next_index}", + validator_stage.transaction_count(), + 5, + "All transactions (3 deferred + 2 new) should be executed" ); } - // Rollback preserves exact sequence - let original_receipts = validator_stage3.receipts().to_vec(); + // Test 3: Multiple batches with immediate execution (parent already committed) + let height_and_round_2 = HeightAndRound::new(3, 1); + let mut validator_stage_2 = ValidatorTransactionBatchStage::new( + chain_id, + create_test_block_info(2), + storage.clone(), + ) + .expect("Failed to create validator stage"); - // Rollback to transaction 6 - validator_stage3 - .rollback_to_transaction(6) - .expect("Failed to rollback"); - let rollback_receipts = validator_stage3.receipts(); + create_committed_parent_block(&storage, 2).expect("Failed to create parent block"); - // Verify that the first 7 transactions are identical - for i in 0..7 { + { + let mut db_conn = storage.connection().unwrap(); + let db_tx = db_conn.transaction().unwrap(); + + // Execute multiple batches + for i in 0..3 { + let transactions = create_transaction_batch(i * 2, 2, chain_id); + batch_execution_manager + .process_batch_with_deferral( + height_and_round_2, + transactions, + &mut validator_stage_2, + &db_tx, + &mut deferred_executions, + ) + .expect("Failed to process batch"); + } + + assert!( + batch_execution_manager.is_executing(&height_and_round_2), + "Execution should have started" + ); assert_eq!( - rollback_receipts[i].transaction_index.get(), - original_receipts[i].transaction_index.get(), - "Transaction {i} index changed after rollback: original {original_index}, \ - rollback {rollback_index}", - original_index = original_receipts[i].transaction_index.get(), - rollback_index = rollback_receipts[i].transaction_index.get() + validator_stage_2.transaction_count(), + 6, + "All batches should be executed immediately" ); } } - /// Test rollback executor cleanup and verification - #[test] - fn test_rollback_cleanup() { - use pathfinder_common::{ - BlockNumber, - BlockTimestamp, - ChainId, - GasPrice, - L1DataAvailabilityMode, - SequencerAddress, - StarknetVersion, - }; - use pathfinder_executor::types::BlockInfo; + /// Test TransactionsFin processing with rollback support. + #[tokio::test] + async fn test_transactions_fin_rollback() { + use p2p::consensus::HeightAndRound; + use p2p_proto::consensus::TransactionsFin; + use pathfinder_common::ChainId; use pathfinder_storage::StorageBuilder; use crate::consensus::inner::test_helpers::create_transaction_batch; let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = BlockInfo { - number: BlockNumber::new_or_panic(1), - timestamp: BlockTimestamp::new_or_panic(1000), - sequencer_address: SequencerAddress::ZERO, - l1_da_mode: L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: GasPrice::ZERO, - strk_l1_gas_price: GasPrice::ZERO, - eth_l1_data_gas_price: GasPrice::ZERO, - strk_l1_data_gas_price: GasPrice::ZERO, - strk_l2_gas_price: GasPrice::ZERO, - eth_l2_gas_price: GasPrice::ZERO, - starknet_version: StarknetVersion::new(0, 14, 0, 0), - }; + let block_info = create_test_block_info(1); let mut validator_stage = ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) .expect("Failed to create validator stage"); - // Create many executors - for i in 0..10 { - let transactions = create_transaction_batch(i * 10, 2, chain_id); - validator_stage - .execute_batch(transactions) - .expect("Failed to execute batch"); - } - - let before_rollback_count = validator_stage.batch_executor_count(); + let mut batch_execution_manager = BatchExecutionManager::new(); + let height_and_round = HeightAndRound::new(2, 1); - // Rollback to batch 3 (should drop executors 4-9) - validator_stage - .rollback_to_batch(3) - .expect("Failed to rollback"); + // Execute multiple batches: 3 + 7 + 4 = 14 transactions total + let batch1 = create_transaction_batch(0, 3, chain_id); + let batch2 = create_transaction_batch(3, 7, chain_id); + let batch3 = create_transaction_batch(10, 4, chain_id); - let after_rollback_count = validator_stage.batch_executor_count(); + batch_execution_manager + .execute_batch(height_and_round, batch1, &mut validator_stage) + .expect("Failed to execute batch 1"); + batch_execution_manager + .execute_batch(height_and_round, batch2, &mut validator_stage) + .expect("Failed to execute batch 2"); + batch_execution_manager + .execute_batch(height_and_round, batch3, &mut validator_stage) + .expect("Failed to execute batch 3"); assert_eq!( - after_rollback_count, 4, - "Should have 4 executors after rollback to batch 3" - ); - assert!( - after_rollback_count < before_rollback_count, - "Rollback should reduce executor count" + validator_stage.transaction_count(), + 14, + "Should have 14 transactions before TransactionsFin" ); - // Execute more batches - for i in 10..20 { - let transactions = create_transaction_batch(i * 10, 2, chain_id); - validator_stage - .execute_batch(transactions) - .expect("Failed to execute batch"); - } + // Test 1: Normal case - no rollback (TransactionsFin matches current count) + { + let transactions_fin = TransactionsFin { + executed_transaction_count: 14, + }; - let before_multiple_rollback = validator_stage.batch_executor_count(); + batch_execution_manager + .process_transactions_fin(height_and_round, transactions_fin, &mut validator_stage) + .expect("Failed to process TransactionsFin"); - // Perform multiple rollbacks - validator_stage - .rollback_to_batch(5) - .expect("Failed to rollback to batch 5"); - let after_rollback_1 = validator_stage.batch_executor_count(); + assert!( + batch_execution_manager.is_transactions_fin_processed(&height_and_round), + "TransactionsFin should be marked as processed" + ); + assert_eq!( + validator_stage.transaction_count(), + 14, + "Transaction count should remain 14 (no rollback)" + ); + } - validator_stage - .rollback_to_batch(2) - .expect("Failed to rollback to batch 2"); - let after_rollback_2 = validator_stage.batch_executor_count(); + // Test 2: Rollback case - TransactionsFin indicates fewer transactions + // Re-execute batches to get back to 14 transactions + let storage_2 = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let mut validator_stage_2 = + ValidatorTransactionBatchStage::new(chain_id, create_test_block_info(1), storage_2) + .expect("Failed to create validator stage"); - validator_stage - .rollback_to_batch(0) - .expect("Failed to rollback to batch 0"); - let after_rollback_3 = validator_stage.batch_executor_count(); + let batch1_2 = create_transaction_batch(0, 3, chain_id); + let batch2_2 = create_transaction_batch(3, 7, chain_id); + let batch3_2 = create_transaction_batch(10, 4, chain_id); + + let height_and_round_2 = HeightAndRound::new(3, 1); + batch_execution_manager + .execute_batch(height_and_round_2, batch1_2, &mut validator_stage_2) + .expect("Failed to execute batch 1"); + batch_execution_manager + .execute_batch(height_and_round_2, batch2_2, &mut validator_stage_2) + .expect("Failed to execute batch 2"); + batch_execution_manager + .execute_batch(height_and_round_2, batch3_2, &mut validator_stage_2) + .expect("Failed to execute batch 3"); + + let transactions_fin_rollback = TransactionsFin { + executed_transaction_count: 7, // Rollback from 14 to 7 + }; + + batch_execution_manager + .process_transactions_fin( + height_and_round_2, + transactions_fin_rollback, + &mut validator_stage_2, + ) + .expect("Failed to process TransactionsFin with rollback"); - // Verify progressive cleanup - assert!( - after_rollback_1 < before_multiple_rollback, - "First rollback should reduce executors" - ); - assert!( - after_rollback_2 < after_rollback_1, - "Second rollback should reduce executors further" - ); assert!( - after_rollback_3 < after_rollback_2, - "Third rollback should reduce executors even more" + batch_execution_manager.is_transactions_fin_processed(&height_and_round_2), + "TransactionsFin should be marked as processed after rollback" ); - - // Execute some batches - for i in 0..5 { - let transactions = create_transaction_batch(i * 10, 2, chain_id); - validator_stage - .execute_batch(transactions) - .expect("Failed to execute batch"); - } - - // Rollback to transaction 1 (within first batch) - validator_stage - .rollback_to_transaction(1) - .expect("Failed to rollback to transaction 1"); - - let after_first_batch_rollback = validator_stage.batch_executor_count(); - - // Should have only 1 executor (for the partial first batch) assert_eq!( - after_first_batch_rollback, 1, - "Should have 1 executor after first-batch rollback" + validator_stage_2.transaction_count(), + 7, + "Transaction count should be rolled back to 7 (matching TransactionsFin count)" ); + } - // Create a large number of batches to test memory pressure - let large_batch_count = 20; - for i in 0..large_batch_count { - let transactions = create_transaction_batch(i * 100, 3, chain_id); - validator_stage - .execute_batch(transactions) - .expect("Failed to execute batch"); - } + /// Test empty batch handling. + #[tokio::test] + async fn test_empty_batch() { + use p2p::consensus::HeightAndRound; + use p2p_proto::consensus::TransactionsFin; + use pathfinder_common::ChainId; + use pathfinder_storage::StorageBuilder; - let peak_executor_count = validator_stage.batch_executor_count(); + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let block_info = create_test_block_info(1); - // Perform aggressive rollbacks - validator_stage - .rollback_to_batch(10) - .expect("Failed to rollback to batch 10"); - let after_aggressive_rollback_1 = validator_stage.batch_executor_count(); + let mut validator_stage = + ValidatorTransactionBatchStage::new(chain_id, block_info, storage) + .expect("Failed to create validator stage"); - validator_stage - .rollback_to_batch(5) - .expect("Failed to rollback to batch 5"); - let after_aggressive_rollback_2 = validator_stage.batch_executor_count(); + let mut batch_execution_manager = BatchExecutionManager::new(); + let height_and_round = HeightAndRound::new(2, 1); - validator_stage - .rollback_to_batch(0) - .expect("Failed to rollback to batch 0"); - let after_aggressive_rollback_3 = validator_stage.batch_executor_count(); + // Empty batch still marks execution as started + batch_execution_manager + .execute_batch(height_and_round, vec![], &mut validator_stage) + .expect("Failed to execute empty batch"); - // Verify memory is properly reclaimed assert!( - after_aggressive_rollback_1 < peak_executor_count, - "First aggressive rollback should reduce executors" + batch_execution_manager.is_executing(&height_and_round), + "Execution should be marked as started even for empty batch" ); - assert!( - after_aggressive_rollback_2 < after_aggressive_rollback_1, - "Second aggressive rollback should reduce executors further" + assert_eq!( + validator_stage.transaction_count(), + 0, + "No transactions should be executed" ); + + // TransactionsFin can be processed after empty batch + let transactions_fin = TransactionsFin { + executed_transaction_count: 0, + }; + + batch_execution_manager + .process_transactions_fin(height_and_round, transactions_fin, &mut validator_stage) + .expect("Failed to process TransactionsFin after empty batch"); + assert!( - after_aggressive_rollback_3 < after_aggressive_rollback_2, - "Third aggressive rollback should reduce executors even more" + batch_execution_manager.is_transactions_fin_processed(&height_and_round), + "TransactionsFin should be processed after empty batch" ); } } diff --git a/crates/pathfinder/src/consensus/inner/consensus_task.rs b/crates/pathfinder/src/consensus/inner/consensus_task.rs index fea0ae3bbd..0e5c63133f 100644 --- a/crates/pathfinder/src/consensus/inner/consensus_task.rs +++ b/crates/pathfinder/src/consensus/inner/consensus_task.rs @@ -52,7 +52,8 @@ use tokio::sync::{mpsc, watch}; use super::fetch_proposers::L2ProposerSelector; use super::fetch_validators::L2ValidatorSetProvider; -use super::{ConsensusTaskEvent, ConsensusValue, HeightExt, P2PTaskEvent}; +use super::{integration_testing, ConsensusTaskEvent, ConsensusValue, HeightExt, P2PTaskEvent}; +use crate::config::integration_testing::InjectFailureConfig; use crate::config::ConsensusConfig; use crate::state::block_hash::{ calculate_event_commitment, @@ -61,8 +62,6 @@ use crate::state::block_hash::{ }; use crate::validator::{FinalizedBlock, ValidatorBlockInfoStage}; -mod integration_testing; - #[allow(clippy::too_many_arguments)] pub fn spawn( chain_id: pathfinder_common::ChainId, @@ -75,7 +74,7 @@ pub fn spawn( fake_proposals_storage: Storage, data_directory: &Path, // Does nothing in production builds. Used for integration testing only. - inject_failure: crate::config::integration_testing::InjectFailureConfig, + inject_failure: Option, ) -> tokio::task::JoinHandle> { let data_directory = data_directory.to_path_buf(); @@ -92,15 +91,7 @@ pub fn spawn( let mut consensus = Consensus::::recover_with_proposal_selector( Config::new(validator_address) - .with_wal_dir(wal_directory) - .with_history_depth( - // TODO: We don't support round certificates yet, and we want to limit - // rebroadcasting to a minimum. Rebroadcast timeouts will happen for - // historical engines which are finalized because - // the effect `CancelAllTimeouts` is only triggered - // upon a new round or a new height. - 0, - ), + .with_wal_dir(wal_directory), // TODO use a dynamic validator set provider, once fetching the validator set from // the staking contract is implemented. Related issue: https://github.com/eqlabs/pathfinder/issues/2936 Arc::new(validator_set_provider.clone()), @@ -249,10 +240,10 @@ pub fn spawn( round {round}", ); - // Does nothing in production builds. Used for integration testing only. - integration_testing::debug_fail_on( + // Does nothing in production builds. + integration_testing::debug_fail_on_decided( height, - inject_failure.on_proposal_decided, + inject_failure, &data_directory, ); @@ -327,16 +318,6 @@ pub fn spawn( // consensus engine is already started for this new height carried in those // messages. ConsensusCommand::Proposal(_) | ConsensusCommand::Vote(_) => { - if let ConsensusCommand::Proposal(_) = &cmd { - // Does nothing in production builds. Used for - // integration testing only. - integration_testing::debug_fail_on( - cmd_height, - inject_failure.on_proposal_rx, - &data_directory, - ) - } - // TODO catch up with the current height of the consensus network using // sync, for the time being just observe the height in the rebroadcasted // votes or in the proposals. @@ -491,9 +472,7 @@ fn create_empty_proposal( vec![ ProposalPart::Init(proposal_init), ProposalPart::BlockInfo(block_info), - // TODO empty proposal in the spec actually skips this part, - // make sure our code handles the case where this part is missing - ProposalPart::TransactionBatch(vec![]), + // Note: Per spec, empty proposals skip TransactionBatch entirely. ProposalPart::ProposalCommitment(proposal_commitment), ProposalPart::Fin(ProposalFin { proposal_commitment: proposal_commitment_hash, @@ -502,3 +481,77 @@ fn create_empty_proposal( finalized_block, )) } + +#[cfg(test)] +mod tests { + use pathfinder_crypto::Felt; + use pathfinder_storage::StorageBuilder; + + use super::*; + + /// Tests that create_empty_proposal successfully creates an empty proposal + /// and finalizes it without requiring an executor. + #[test] + fn test_create_empty_proposal() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let height = 0u64; + let round = Round::new(0); + let proposer = ContractAddress::new_or_panic(Felt::from_hex_str("0x1").unwrap()); + + // Create an empty proposal - this should succeed without an executor + let (proposal_parts, finalized_block) = + create_empty_proposal(chain_id, height, round, proposer, storage) + .expect("create_empty_proposal should succeed for empty proposals"); + + // Verify proposal structure + assert!( + proposal_parts.len() >= 4, + "Empty proposal should have at least Init, BlockInfo, ProposalCommitment, and Fin" + ); + + // Verify it starts with Init + assert!( + matches!(proposal_parts[0], ProposalPart::Init(_)), + "First part should be ProposalInit" + ); + + // Verify it has BlockInfo + assert!( + matches!(proposal_parts[1], ProposalPart::BlockInfo(_)), + "Second part should be BlockInfo" + ); + + // Verify it ends with Fin + let last_part = proposal_parts.last().expect("Proposal should have parts"); + assert!( + matches!(last_part, ProposalPart::Fin(_)), + "Last part should be ProposalFin" + ); + + // Verify finalized block has empty state + assert_eq!( + finalized_block.header.transaction_count, 0, + "Empty proposal should have 0 transaction count" + ); + assert_eq!( + finalized_block.header.event_count, 0, + "Empty proposal should have 0 event count" + ); + assert_eq!( + finalized_block.state_update.contract_updates.len(), + 0, + "Empty proposal should have no contract updates" + ); + assert_eq!( + finalized_block.state_update.system_contract_updates.len(), + 0, + "Empty proposal should have no system contract updates" + ); + assert_eq!( + finalized_block.transactions_and_receipts.len(), + 0, + "Empty proposal should have no transactions" + ); + } +} diff --git a/crates/pathfinder/src/consensus/inner/consensus_task/integration_testing.rs b/crates/pathfinder/src/consensus/inner/consensus_task/integration_testing.rs deleted file mode 100644 index 867098accb..0000000000 --- a/crates/pathfinder/src/consensus/inner/consensus_task/integration_testing.rs +++ /dev/null @@ -1,77 +0,0 @@ -//! Integration testing helpers for the consensus task. These are only -//! active in debug builds when both the "p2p" and "consensus-integration-tests" -//! features are enabled. - -use std::path::Path; - -/// ## Important -/// This function does nothing in production builds. -/// -/// ## Integration testing -/// Exits the process with error code of value `1` if the current height -/// matches. This function is only active in debug builds when both the -/// "p2p" and "consensus-integration-tests" features are enabled. A marker file -/// is created in the data directory to indicate that the failure has been -/// triggered. If the file already exists, it is removed instead. This allows -/// for easy detection of whether the failure has been triggered or not. -/// The file is named `fail_on_{prefix}_{height}`. -/// -/// ## Panics -/// The function will panic if it fails to create the marker file or fails to -/// remove it when the file exists. -pub fn debug_fail_on( - _current_height: u64, - _config: Option, - _data_directory: &Path, -) { - #[cfg(all( - feature = "p2p", - feature = "consensus-integration-tests", - debug_assertions - ))] - debug_fail_on_impl(_current_height, _config, _data_directory); -} - -#[cfg(all( - feature = "p2p", - feature = "consensus-integration-tests", - debug_assertions -))] -fn debug_fail_on_impl( - current_height: u64, - config: Option, - data_directory: &Path, -) { - let Some(config) = config else { - return; - }; - - if current_height != config.height() { - return; - } - - let failure_height = config.height(); - let prefix = config.prefix(); - let marker_file = data_directory.join(format!("fail_on_{prefix}_{failure_height}")); - - if marker_file.exists() { - std::fs::remove_file(&marker_file) - .unwrap_or_else(|_| panic!("Failed to remove marker file {}", marker_file.display())); - tracing::trace!( - marker_file=%marker_file.display(), - "💥 ❌ Integration testing: removed", - ); - } else { - std::fs::File::create(&marker_file) - .unwrap_or_else(|_| panic!("Failed to create marker file {}", marker_file.display())); - tracing::trace!( - marker_file=%marker_file.display(), - "💥 ✅ Integration testing: created", - ); - tracing::info!( - "💥 💥 Integration testing: exiting process with error code 1 at height \ - {failure_height} on {prefix}, as configured" - ); - std::process::exit(1); - } -} diff --git a/crates/pathfinder/src/consensus/inner/conv.rs b/crates/pathfinder/src/consensus/inner/conv.rs index 9e9ab0fce8..705cc2d42b 100644 --- a/crates/pathfinder/src/consensus/inner/conv.rs +++ b/crates/pathfinder/src/consensus/inner/conv.rs @@ -52,6 +52,11 @@ impl IntoModel for dto::ProposalPart { dto::ProposalPart::TransactionBatch(batch) => proto::ProposalPart::TransactionBatch( batch.into_iter().map(|t| t.into_model()).collect(), ), + dto::ProposalPart::TransactionsFin(p) => { + proto::ProposalPart::TransactionsFin(proto::TransactionsFin { + executed_transaction_count: p.executed_transaction_count, + }) + } dto::ProposalPart::ProposalCommitment(p) => { proto::ProposalPart::ProposalCommitment(proto::ProposalCommitment { block_number: p.block_number, @@ -313,8 +318,10 @@ impl TryIntoDto for dto::ProposalPart { .collect::, _>>()?, ) } - proto::ProposalPart::TransactionsFin(_) => { - todo!("TODO: TransactionsFin not supported yet") + proto::ProposalPart::TransactionsFin(q) => { + dto::ProposalPart::TransactionsFin(dto::TransactionsFin { + executed_transaction_count: q.executed_transaction_count, + }) } proto::ProposalPart::ProposalCommitment(q) => { dto::ProposalPart::ProposalCommitment(Box::new(dto::ProposalCommitment { @@ -678,6 +685,7 @@ impl IntoModel for dto::StateUpdateData { system_contract_updates, declared_cairo_classes, declared_sierra_classes, + migrated_compiled_classes, } = self; state_update::StateUpdateData { contract_updates: contract_updates @@ -692,6 +700,7 @@ impl IntoModel for dto::StateUpdateData { .collect(), declared_cairo_classes: declared_cairo_classes.into_iter().collect(), declared_sierra_classes: declared_sierra_classes.line.into_iter().collect(), + migrated_compiled_classes: migrated_compiled_classes.line.into_iter().collect(), } } } @@ -930,6 +939,7 @@ impl TryIntoDto for dto::StateUpdateData { system_contract_updates, declared_cairo_classes, declared_sierra_classes, + migrated_compiled_classes, } = u; let res = dto::StateUpdateData { contract_updates: @@ -959,6 +969,9 @@ impl TryIntoDto for dto::StateUpdateData { declared_sierra_classes: dto::LinearMap { line: declared_sierra_classes.into_iter().collect(), }, + migrated_compiled_classes: dto::LinearMap { + line: migrated_compiled_classes.into_iter().collect(), + }, }; Ok(res) } diff --git a/crates/pathfinder/src/consensus/inner/dto.rs b/crates/pathfinder/src/consensus/inner/dto.rs index 4a8b4f7ecd..823c3ef66a 100644 --- a/crates/pathfinder/src/consensus/inner/dto.rs +++ b/crates/pathfinder/src/consensus/inner/dto.rs @@ -19,6 +19,7 @@ pub enum ProposalPart { Fin(ProposalFin), BlockInfo(BlockInfo), TransactionBatch(Vec), + TransactionsFin(TransactionsFin), ProposalCommitment(Box), } @@ -53,6 +54,11 @@ pub struct TransactionWithClass { pub hash: MinimalFelt, } +#[derive(Debug, Deserialize, Serialize)] +pub struct TransactionsFin { + pub executed_transaction_count: u64, +} + #[derive(Debug, Deserialize, Serialize)] pub struct ProposalCommitment { pub block_number: u64, @@ -156,6 +162,8 @@ pub struct StateUpdateData { pub declared_cairo_classes: Vec, pub declared_sierra_classes: LinearMap, + pub migrated_compiled_classes: + LinearMap, } #[derive(Debug, Deserialize, Serialize)] diff --git a/crates/pathfinder/src/consensus/inner/integration_testing.rs b/crates/pathfinder/src/consensus/inner/integration_testing.rs new file mode 100644 index 0000000000..f4e3296e6d --- /dev/null +++ b/crates/pathfinder/src/consensus/inner/integration_testing.rs @@ -0,0 +1,208 @@ +//! Integration testing helpers for the consensus task. These are only +//! active in debug builds when both the "p2p" and "consensus-integration-tests" +//! features are enabled. + +use std::path::Path; + +use p2p_proto::consensus::ProposalPart; + +use crate::config::integration_testing::{InjectFailureConfig, InjectFailureTrigger}; + +/// ## Important +/// This function does nothing in production builds. +/// +/// ## Integration testing +/// Exits the process with error code of value `1` if the current height +/// matches. This function is only active in debug builds when both the +/// "p2p" and "consensus-integration-tests" features are enabled. A marker file +/// is created in the data directory to indicate that the failure has been +/// triggered. If the file already exists, it is removed instead. This allows +/// for easy detection of whether the failure has been triggered or not. +/// The file is named `fail_on_{prefix}_{height}`. +/// +/// ## Panics +/// The function will panic if it fails to create the marker file or fails to +/// remove it when the file exists. +pub fn debug_fail_on( + _trigger_match_fn: impl FnOnce(InjectFailureTrigger) -> bool, + _current_height: u64, + _config: Option, + _data_directory: &Path, +) { + #[cfg(all( + feature = "p2p", + feature = "consensus-integration-tests", + debug_assertions + ))] + debug_fail_on_impl(_trigger_match_fn, _current_height, _config, _data_directory); +} + +#[cfg(all( + feature = "p2p", + feature = "consensus-integration-tests", + debug_assertions +))] +fn debug_fail_on_impl( + trigger_match_fn: impl FnOnce(InjectFailureTrigger) -> bool, + current_height: u64, + config: Option, + data_directory: &Path, +) { + let Some(config) = config else { + return; + }; + + if current_height != config.height { + return; + } + + if !trigger_match_fn(config.trigger) { + return; + } + + let failure_height = config.height; + let prefix = config.trigger.as_str(); + let path = data_directory.join(format!("fail_on_{prefix}_{failure_height}")); + + match std::fs::exists(&path) { + Ok(true) => (), + Ok(false) => { + // Create the marker file to indicate that the failure has been + // triggered. + let file = std::fs::File::create(&path) + .unwrap_or_else(|_| panic!("Failed to create marker file {}", path.display())); + // Ensure the file is written to disk. We've seen cases of TOCTOU issues here + // during test execution. + file.sync_all() + .unwrap_or_else(|_| panic!("Failed to sync marker file {}", path.display())); + tracing::trace!( + marker_file=%path.display(), + "💥 ✅ Integration testing: created", + ); + tracing::info!( + "💥 💥 Integration testing: exiting process with error code 1 at height \ + {failure_height} on {prefix}, as configured" + ); + std::process::exit(1); + } + Err(e) => { + panic!( + "Failed to check existence of marker file {}, {}", + path.display(), + e + ); + } + } +} + +pub fn debug_fail_on_proposal_part( + proposal_part: &ProposalPart, + height: u64, + config: Option, + data_directory: &Path, +) { + debug_fail_on( + |trigger| { + matches!( + (proposal_part, trigger), + (ProposalPart::Init(_), InjectFailureTrigger::ProposalInitRx) + | ( + ProposalPart::BlockInfo(_), + InjectFailureTrigger::BlockInfoRx + ) + | ( + ProposalPart::TransactionBatch(_), + InjectFailureTrigger::TransactionBatchRx + ) + | ( + ProposalPart::ProposalCommitment(_), + InjectFailureTrigger::ProposalCommitmentRx + ) + | ( + ProposalPart::TransactionsFin(_), + InjectFailureTrigger::TransactionsFinRx + ) + | (ProposalPart::Fin(_), InjectFailureTrigger::ProposalFinRx) + ) + }, + height, + config, + data_directory, + ); +} + +pub fn debug_fail_on_entire_proposal_rx( + height: u64, + inject_failure: Option, + data_directory: &Path, +) { + debug_fail_on( + |trigger| matches!(trigger, InjectFailureTrigger::EntireProposalRx), + height, + inject_failure, + data_directory, + ); +} + +pub fn debug_fail_on_entire_proposal_persisted( + height: u64, + inject_failure: Option, + data_directory: &Path, +) { + debug_fail_on( + |trigger| matches!(trigger, InjectFailureTrigger::EntireProposalPersisted), + height, + inject_failure, + data_directory, + ); +} + +pub fn debug_fail_on_proposal_committed( + height: u64, + inject_failure: Option, + data_directory: &Path, +) { + debug_fail_on( + |trigger| matches!(trigger, InjectFailureTrigger::ProposalCommitted), + height, + inject_failure, + data_directory, + ); +} + +pub fn debug_fail_on_vote( + vote: &p2p_proto::consensus::Vote, + inject_failure: Option, + data_directory: &Path, +) { + debug_fail_on( + |trigger| { + matches!( + (trigger, vote.vote_type), + ( + InjectFailureTrigger::PrevoteRx, + p2p_proto::consensus::VoteType::Prevote + ) | ( + InjectFailureTrigger::PrecommitRx, + p2p_proto::consensus::VoteType::Precommit + ) + ) + }, + vote.block_number, + inject_failure, + data_directory, + ); +} + +pub fn debug_fail_on_decided( + height: u64, + inject_failure: Option, + data_directory: &Path, +) { + debug_fail_on( + |trigger| trigger == InjectFailureTrigger::ProposalDecided, + height, + inject_failure, + data_directory, + ); +} diff --git a/crates/pathfinder/src/consensus/inner/p2p_task.rs b/crates/pathfinder/src/consensus/inner/p2p_task.rs index 564bc68b59..796f28f555 100644 --- a/crates/pathfinder/src/consensus/inner/p2p_task.rs +++ b/crates/pathfinder/src/consensus/inner/p2p_task.rs @@ -11,6 +11,7 @@ //! be proposed by us in another round at the same height use std::collections::{BTreeMap, HashMap}; +use std::path::Path; use std::sync::{Arc, Mutex}; use std::time::Duration; @@ -32,7 +33,8 @@ use pathfinder_consensus::{ use pathfinder_storage::{Storage, Transaction, TransactionBehavior}; use tokio::sync::mpsc; -use super::{ConsensusTaskEvent, P2PTaskEvent}; +use super::{integration_testing, ConsensusTaskEvent, P2PTaskConfig, P2PTaskEvent}; +use crate::config::integration_testing::InjectFailureConfig; use crate::consensus::inner::batch_execution::{ should_defer_execution, BatchExecutionManager, @@ -68,14 +70,18 @@ const EVENT_CHANNEL_SIZE_LIMIT: usize = 1024; #[allow(clippy::too_many_arguments)] pub fn spawn( chain_id: ChainId, - validator_address: ContractAddress, + config: P2PTaskConfig, p2p_client: Client, storage: Storage, mut p2p_event_rx: mpsc::UnboundedReceiver, tx_to_consensus: mpsc::Sender, mut rx_from_consensus: mpsc::Receiver, consensus_storage: Storage, + data_directory: &Path, + // Does nothing in production builds. Used for integration testing only. + inject_failure: Option, ) -> tokio::task::JoinHandle> { + let validator_address = config.my_validator_address; // TODO validators are long-lived but not persisted let validator_cache = ValidatorCache::new(); // Contains transaction batches and proposal finalizations that are @@ -88,6 +94,8 @@ pub fn spawn( // event channel size exceeding the limit, to avoid spamming the logs. let mut channel_size_warning_emitted = false; + let data_directory = data_directory.to_path_buf(); + util::task::spawn(async move { let readonly_storage = storage.clone(); let mut db_conn = storage @@ -136,7 +144,17 @@ pub fn spawn( P2PTaskEvent::P2PEvent(event) => { tracing::info!("🖧 💌 {validator_address} incoming p2p event: {event:?}"); - if is_outdated_p2p_event(&db_tx, &event)? { + // Even though rebroadcast certificates are not implemented yet, it still + // does make sense to keep `history_depth` nonzero. This is due to race + // conditions that occur between the current height, which is being + // committed and the next height which is being proposed. For example: we + // may have 3 nodes, from which ours has already committed H, while the + // other 2 have not. If we fall over and respawn, the other nodes will still + // be voting for H, while we are at H+1 and we are actively discarding votes + // for H, so the other 2 nodes will not make any progress at H. And since + // we're not keeping any historical engines (ie. including for H), we will + // not help the other 2 nodes in the voting process. + if is_outdated_p2p_event(&db_tx, &event, config.history_depth)? { // TODO consider punishing the sender if the event is too old return Ok(ComputationSuccess::Continue); } @@ -145,8 +163,6 @@ pub fn spawn( Event::Proposal(height_and_round, proposal_part) => { let vcache = validator_cache.clone(); let dex = deferred_executions.clone(); - let mut batch_execution_manager_inner = - batch_execution_manager.clone(); let result = handle_incoming_proposal_part( chain_id, validator_address, @@ -157,10 +173,19 @@ pub fn spawn( &db_tx, readonly_storage.clone(), &cons_tx, - &mut batch_execution_manager_inner, + &mut batch_execution_manager, + &data_directory, + inject_failure, ); match result { Ok(Some(commitment)) => { + // Does nothing in production builds. + integration_testing::debug_fail_on_entire_proposal_rx( + height_and_round.height(), + inject_failure, + &data_directory, + ); + anyhow::Ok(ComputationSuccess::IncomingProposalCommitment( height_and_round, commitment, @@ -186,7 +211,16 @@ pub fn spawn( } } - Event::Vote(vote) => Ok(ComputationSuccess::EventVote(vote)), + Event::Vote(vote) => { + // Does nothing in production builds. + integration_testing::debug_fail_on_vote( + &vote, + inject_failure, + &data_directory, + ); + + Ok(ComputationSuccess::EventVote(vote)) + } } } @@ -350,6 +384,14 @@ pub fn spawn( commit_finalized_block(&db_tx, finalized_block.clone())?; db_tx.commit().context("Committing database transaction")?; + + // Does nothing in production builds. + integration_testing::debug_fail_on_proposal_committed( + height_and_round.height(), + inject_failure, + &data_directory, + ); + db_tx = db_conn .transaction() .context("Create unused database transaction")?; @@ -382,6 +424,7 @@ pub fn spawn( height_and_round.height() ); remove_proposal_parts(&cons_tx, height_and_round.height(), None)?; + anyhow::Ok(()) }?; @@ -389,6 +432,7 @@ pub fn spawn( height_and_round, validator_cache.clone(), deferred_executions.clone(), + &mut batch_execution_manager, )?; // If we finalized the proposal, we can now inform the consensus engine // about it. Otherwise the rest of the transaction batches could be still be @@ -413,6 +457,13 @@ pub fn spawn( match success { ComputationSuccess::Continue => (), ComputationSuccess::IncomingProposalCommitment(height_and_round, commitment) => { + // Does nothing in production builds. + integration_testing::debug_fail_on_entire_proposal_persisted( + height_and_round.height(), + inject_failure, + &data_directory, + ); + send_proposal_to_consensus(&tx_to_consensus, height_and_round, commitment) .await; } @@ -517,6 +568,7 @@ fn execute_deferred_for_next_height( height_and_round: HeightAndRound, mut validator_cache: ValidatorCache, deferred_executions: Arc>>, + batch_execution_manager: &mut BatchExecutionManager, ) -> anyhow::Result> { // Retrieve and execute any deferred transactions or proposal finalizations // for the next height, if any. Sort by (height, round) in ascending order. @@ -537,12 +589,35 @@ fn execute_deferred_for_next_height( let validator_stage = validator_cache.remove(&hnr)?; let mut validator = validator_stage.try_into_transaction_batch_stage()?; + // Execute deferred transactions first. let (validator, opt_commitment) = { - // Execute deferred transactions first. + // Parent block is now committed, so we can execute directly without deferral + // checks if !deferred.transactions.is_empty() { - validator.execute_batch(deferred.transactions)?; + batch_execution_manager.execute_batch( + hnr, + deferred.transactions, + &mut validator, + )?; + } + + // Process deferred TransactionsFin + if let Some(transactions_fin) = deferred.transactions_fin { + tracing::debug!( + "🖧 ⚙️ processing deferred TransactionsFin for height and round {hnr}" + ); + // Execution has started at this point (from execute_batch above, if + // transactions were non-empty). If transactions were empty, + // execute_batch handles marking execution as started, so we can + // process TransactionsFin immediately. + batch_execution_manager.process_transactions_fin( + hnr, + transactions_fin, + &mut validator, + )?; } + // Process deferred commitment if let Some(commitment) = deferred.commitment { // We've executed all transactions at the height, we can now // finalize the proposal. @@ -580,15 +655,19 @@ fn execute_deferred_for_next_height( /// Check whether the incoming p2p event is outdated, i.e. it refers to a block /// that is already committed to the database. If so, log it and return `true`, /// otherwise return `false`. -fn is_outdated_p2p_event(db_tx: &Transaction<'_>, event: &Event) -> anyhow::Result { +fn is_outdated_p2p_event( + db_tx: &Transaction<'_>, + event: &Event, + history_depth: u64, +) -> anyhow::Result { // Ignore messages that refer to already committed blocks. let incoming_height = event.height(); let latest_committed = db_tx.block_number(BlockId::Latest)?; if let Some(latest_committed) = latest_committed { - if incoming_height <= latest_committed.get() { + if incoming_height < latest_committed.get().saturating_sub(history_depth) { tracing::info!( "🖧 ⛔ ignoring incoming p2p event {} for height {incoming_height} because latest \ - committed block is {latest_committed}", + committed block is {latest_committed} and history depth is {history_depth}", event.type_name() ); return Ok(true); @@ -676,6 +755,8 @@ fn handle_incoming_proposal_part( storage: Storage, cons_tx: &Transaction<'_>, batch_execution_manager: &mut BatchExecutionManager, + data_directory: &Path, + inject_failure_config: Option, ) -> anyhow::Result> { let mut parts = foreign_proposal_parts( cons_tx, @@ -685,6 +766,14 @@ fn handle_incoming_proposal_part( )? .unwrap_or_default(); + // Does nothing in production builds. + integration_testing::debug_fail_on_proposal_part( + &proposal_part, + height_and_round.height(), + inject_failure_config, + data_directory, + ); + match proposal_part { ProposalPart::Init(ref prop_init) => { if !parts.is_empty() { @@ -855,6 +944,7 @@ fn handle_incoming_proposal_part( db_tx, validator, deferred_executions, + batch_execution_manager, )?; validator_cache.insert(height_and_round, validator); @@ -868,17 +958,61 @@ fn handle_incoming_proposal_part( let validator_stage = validator_cache.remove(&height_and_round)?; let mut validator = validator_stage.try_into_transaction_batch_stage()?; - // Use BatchExecutionManager to handle TransactionsFin with rollback - batch_execution_manager.process_transactions_fin( - height_and_round, - transactions_fin, - &mut validator, - )?; + // Check if execution has started + let execution_started = batch_execution_manager.is_executing(&height_and_round); + + if !execution_started { + // Execution hasn't started - store TransactionsFin for later processing + // This can happen if: + // 1. Transactions are deferred (deferred entry already exists) + // 2. TransactionsFin arrives before execution starts (need to create deferred + // entry) + // Note: With message ordering guarantees, TransactionsFin should always arrive + // after all TransactionBatches, but execution may not have started yet if + // batches were deferred. + let mut dex = deferred_executions.lock().unwrap(); + + let deferred = dex.entry(height_and_round).or_default(); + deferred.transactions_fin = Some(transactions_fin.clone()); + tracing::debug!( + "TransactionsFin for {height_and_round} is deferred - storing for later \ + processing (execution not started yet)" + ); + } else { + // Execution has started - process TransactionsFin immediately + batch_execution_manager.process_transactions_fin( + height_and_round, + transactions_fin, + &mut validator, + )?; + + // After processing TransactionsFin, check if ProposalFin was deferred + // and should now be finalized + let mut dex = deferred_executions.lock().unwrap(); + if let Some(deferred) = dex.get_mut(&height_and_round) { + if let Some(deferred_commitment) = deferred.commitment.take() { + drop(dex); + // TransactionsFin is now processed, we can finalize the proposal + let validator = validator + .consensus_finalize(deferred_commitment.proposal_commitment)?; + tracing::debug!( + "🖧 ⚙️ finalizing deferred ProposalFin for height and round \ + {height_and_round} after TransactionsFin was processed" + ); + validator_cache.insert( + height_and_round, + ValidatorStage::Finalize(Box::new(validator)), + ); + return Ok(Some(deferred_commitment)); + } + } + } validator_cache.insert( height_and_round, ValidatorStage::TransactionBatch(validator), ); + Ok(None) } } @@ -889,6 +1023,7 @@ fn handle_incoming_proposal_part( /// commitment and proposer address are stored for later finalization. If /// execution is performed, any previously deferred transactions for the height /// and round are executed first, then the proposal is finalized. +#[allow(clippy::too_many_arguments)] fn defer_or_execute_proposal_fin( height_and_round: HeightAndRound, proposal_commitment: Hash, @@ -897,6 +1032,7 @@ fn defer_or_execute_proposal_fin( db_tx: &Transaction<'_>, mut validator: Box, deferred_executions: Arc>>, + batch_execution_manager: &mut BatchExecutionManager, ) -> anyhow::Result<(ValidatorStage, Option)> { let commitment = ProposalCommitmentWithOrigin { proposal_commitment: ProposalCommitment(proposal_commitment.0), @@ -921,15 +1057,74 @@ fn defer_or_execute_proposal_fin( // The proposal can be finalized now, because the previous // block is committed. First execute any deferred transactions // for the height and round, if any, then finalize the proposal. - let mut deferred_executions = deferred_executions.lock().unwrap(); - let deferred = deferred_executions.remove(&height_and_round); + let deferred = { + let mut dex = deferred_executions.lock().unwrap(); + dex.remove(&height_and_round) + }; let deferred_txns_len = deferred.as_ref().map_or(0, |d| d.transactions.len()); - if let Some(DeferredExecution { transactions, .. }) = deferred { - if !transactions.is_empty() { - validator.execute_batch(transactions)?; + if let Some(deferred) = deferred { + if !deferred.transactions.is_empty() { + batch_execution_manager.execute_batch( + height_and_round, + deferred.transactions, + &mut validator, + )?; + } + + // Process deferred TransactionsFin if it was stored + if let Some(transactions_fin) = deferred.transactions_fin { + tracing::debug!( + "🖧 ⚙️ processing deferred TransactionsFin for height and round \ + {height_and_round}" + ); + // Execution has started at this point (from execute_batch), + // so we can process TransactionsFin immediately + batch_execution_manager.process_transactions_fin( + height_and_round, + transactions_fin, + &mut validator, + )?; + } + + // Process deferred commitment if it was stored (use it instead of the new one) + // (they should match, but the deferred one was received earlier) + if let Some(deferred_commitment) = deferred.commitment { + tracing::debug!( + "🖧 ⚙️ using deferred commitment for height and round {height_and_round}" + ); + // We've executed all transactions at the height, we can now finalize the + // proposal. + let validator = + validator.consensus_finalize(deferred_commitment.proposal_commitment)?; + tracing::debug!( + "🖧 ⚙️ consensus finalization for height and round {height_and_round} is \ + complete, additionally {deferred_txns_len} previously deferred transactions \ + were executed", + ); + return Ok(( + ValidatorStage::Finalize(Box::new(validator)), + Some(deferred_commitment), + )); } } + + // Check if execution has started but TransactionsFin hasn't been processed yet + // If so, defer ProposalFin until TransactionsFin arrives + if batch_execution_manager.should_defer_proposal_fin(&height_and_round) { + tracing::debug!( + "🖧 ⚙️ consensus finalize for height and round {height_and_round} is deferred \ + because TransactionsFin hasn't been processed yet" + ); + + let mut deferred_executions = deferred_executions.lock().unwrap(); + deferred_executions + .entry(height_and_round) + .or_default() + .commitment = Some(commitment); + return Ok((ValidatorStage::TransactionBatch(validator), None)); + } + let validator = validator.consensus_finalize(commitment.proposal_commitment)?; tracing::debug!( diff --git a/crates/pathfinder/src/p2p_network/sync/sync_handlers/tests.rs b/crates/pathfinder/src/p2p_network/sync/sync_handlers/tests.rs index cfa4408ccd..da31abf67f 100644 --- a/crates/pathfinder/src/p2p_network/sync/sync_handlers/tests.rs +++ b/crates/pathfinder/src/p2p_network/sync/sync_handlers/tests.rs @@ -331,7 +331,7 @@ mod prop { // A list of Cairo definitions cairo_defs.into_iter().map(|(_, def)| def).collect::>(), // A list of Sierra definitions, Casm is ignored - sierra_defs.into_iter().map(|(_, sierra_def, _)| sierra_def).collect::>() + sierra_defs.into_iter().map(|(_, sierra_def, _, _)| sierra_def).collect::>() ) ).collect::>(); diff --git a/crates/pathfinder/src/state/sync.rs b/crates/pathfinder/src/state/sync.rs index 5fd59a7c24..11d98821a7 100644 --- a/crates/pathfinder/src/state/sync.rs +++ b/crates/pathfinder/src/state/sync.rs @@ -69,6 +69,7 @@ pub enum SyncEvent { sierra_hash: SierraHash, casm_definition: Vec, casm_hash: CasmHash, + casm_hash_v2: CasmHash, }, /// A new L2 pending update was polled. Pending((Box, Box)), @@ -623,7 +624,7 @@ async fn consumer( } CairoClass { definition, hash } => { tracing::trace!("Inserting new Cairo class with hash: {hash}"); - tx.insert_cairo_class(hash, &definition) + tx.insert_cairo_class_definition(hash, &definition) .context("Inserting new cairo class")?; tracing::debug!(%hash, "Inserted new Cairo class"); @@ -635,13 +636,14 @@ async fn consumer( sierra_hash, casm_definition, casm_hash, + casm_hash_v2, } => { tracing::trace!("Inserting new Sierra class with hash: {sierra_hash}"); - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &sierra_hash, &sierra_definition, - &casm_hash, &casm_definition, + &casm_hash_v2, ) .context("Inserting sierra class")?; @@ -1933,6 +1935,7 @@ mod tests { sierra_hash: SierraHash(class_hash), casm_definition: b"casm definition".to_vec(), casm_hash: casm_hash_bytes!(b"casm hash"), + casm_hash_v2: casm_hash_bytes!(b"casm hash blake"), }) .await .unwrap(); @@ -1956,6 +1959,9 @@ mod tests { let definition = tx.class_definition(ClassHash(class_hash)).unwrap().unwrap(); assert_eq!(definition, expected_definition); + + let casm_hash_v2 = tx.casm_hash_v2(ClassHash(class_hash)).unwrap().unwrap(); + assert_eq!(casm_hash_v2, casm_hash_bytes!(b"casm hash blake")); } #[tokio::test(flavor = "multi_thread")] @@ -2837,6 +2843,7 @@ Blockchain history must include the reorg tail and its parent block to perform a let sierra_definition = b"sierra definition".to_vec(); let casm_definition = b"casm definition".to_vec(); let casm_hash = casm_hash_bytes!(b"casm hash"); + let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); // Add the class definition. event_tx @@ -2845,6 +2852,7 @@ Blockchain history must include the reorg tail and its parent block to perform a sierra_hash: removed_class_hash, casm_definition, casm_hash, + casm_hash_v2, }) .await .unwrap(); diff --git a/crates/pathfinder/src/state/sync/class.rs b/crates/pathfinder/src/state/sync/class.rs index a198797d79..d09356f93b 100644 --- a/crates/pathfinder/src/state/sync/class.rs +++ b/crates/pathfinder/src/state/sync/class.rs @@ -1,5 +1,5 @@ use anyhow::Context; -use pathfinder_common::{ClassHash, SierraHash}; +use pathfinder_common::{CasmHash, ClassHash, SierraHash}; use starknet_gateway_client::GatewayApi; pub enum DownloadedClass { @@ -11,6 +11,7 @@ pub enum DownloadedClass { sierra_definition: Vec, sierra_hash: SierraHash, casm_definition: Vec, + casm_hash_v2: CasmHash, }, } @@ -96,10 +97,33 @@ pub async fn download_class( (sierra_definition, casm_definition) }; + // Check if the CASM v2 hash has been pre-computed for this class + let (casm_definition, casm_hash_v2) = + match pathfinder_casm_hashes::get_precomputed_casm_v2_hash(&hash) { + Some(casm_hash_v2) => (casm_definition, *casm_hash_v2), + None => { + // Compute Blake2 hash for CASM class + let (send, recv) = tokio::sync::oneshot::channel(); + rayon::spawn(move || { + let casm_hash_v2 = + pathfinder_compiler::casm_class_hash_v2(&casm_definition) + .context("Computing CASM Blake2 hash"); + let _ = send.send((casm_definition, casm_hash_v2)); + }); + let (casm_definition, casm_hash_v2) = + recv.await.expect("Panic on rayon thread"); + + let casm_hash_v2 = casm_hash_v2?; + + (casm_definition, casm_hash_v2) + } + }; + Ok(DownloadedClass::Sierra { sierra_definition, sierra_hash: SierraHash(hash.0), casm_definition, + casm_hash_v2, }) } } diff --git a/crates/pathfinder/src/state/sync/l2.rs b/crates/pathfinder/src/state/sync/l2.rs index cd31f96bed..52a86a26c0 100644 --- a/crates/pathfinder/src/state/sync/l2.rs +++ b/crates/pathfinder/src/state/sync/l2.rs @@ -903,6 +903,7 @@ pub(super) async fn emit_events_for_downloaded_classes( sierra_definition, sierra_hash, casm_definition, + casm_hash_v2, } => { // NOTE: we _have_ to use the same compiled_class_class hash as returned by the // feeder gateway, since that's what has been added to the class @@ -923,6 +924,7 @@ pub(super) async fn emit_events_for_downloaded_classes( sierra_hash, casm_definition, casm_hash, + casm_hash_v2, }) .await .with_context(|| { diff --git a/crates/pathfinder/src/state/sync/pending.rs b/crates/pathfinder/src/state/sync/pending.rs index e7423082f3..a2c5f2eb6b 100644 --- a/crates/pathfinder/src/state/sync/pending.rs +++ b/crates/pathfinder/src/state/sync/pending.rs @@ -337,6 +337,7 @@ mod tests { use starknet_gateway_types::reply::state_update::{ DeclaredSierraClass, DeployedContract, + MigratedCompiledClass, ReplacedClass, StateDiff, StorageDiff, @@ -504,6 +505,10 @@ mod tests { address: contract_address_bytes!(b"contract 0"), class_hash: class_hash_bytes!(b"replaced class"), }], + migrated_compiled_classes: vec![MigratedCompiledClass { + class_hash: sierra_hash_bytes!(b"migrated class"), + compiled_class_hash: casm_hash_bytes!(b"migrated casm"), + }], }), None, ], diff --git a/crates/pathfinder/src/sync.rs b/crates/pathfinder/src/sync.rs index 8a20261491..91f96cbfc7 100644 --- a/crates/pathfinder/src/sync.rs +++ b/crates/pathfinder/src/sync.rs @@ -616,7 +616,7 @@ mod tests { .sierra_defs .into_iter() // All sierra fixtures are not compile-able - .map(|(h, s, _)| (h, (s, b"I'm from the fgw!".to_vec()))) + .map(|(h, s, _, _)| (h, (s, starknet_gateway_test_fixtures::class_definitions::CAIRO_1_1_0_BALANCE_CASM_JSON.to_vec()))) .collect::>(), "block {}", block_number @@ -860,7 +860,7 @@ mod tests { })) }) .chain(b.sierra_defs.into_iter().map( - move |(hash, sierra_definition, _)| { + move |(hash, sierra_definition, _, _)| { Ok(PeerData::for_tests(ClassDefinition::Sierra { block_number, sierra_definition, @@ -1001,7 +1001,7 @@ mod tests { .chain( b.sierra_defs .iter() - .map(|(h, x, _)| ClassDefinition::Sierra { + .map(|(h, x, _, _)| ClassDefinition::Sierra { block_number: block, sierra_definition: x.clone(), hash: *h, @@ -1063,7 +1063,9 @@ mod tests { #[async_trait::async_trait] impl GatewayApi for FakeFgw { async fn pending_casm_by_hash(&self, _: ClassHash) -> Result { - Ok(bytes::Bytes::from_static(b"I'm from the fgw!")) + Ok(bytes::Bytes::from_static( + starknet_gateway_test_fixtures::class_definitions::CAIRO_1_1_0_BALANCE_CASM_JSON, + )) } async fn block_header( diff --git a/crates/pathfinder/src/sync/checkpoint.rs b/crates/pathfinder/src/sync/checkpoint.rs index ce5b7ec017..b13514a234 100644 --- a/crates/pathfinder/src/sync/checkpoint.rs +++ b/crates/pathfinder/src/sync/checkpoint.rs @@ -1370,6 +1370,7 @@ mod tests { use starknet_gateway_test_fixtures::class_definitions::{ CAIRO_0_10_TUPLES_INTEGRATION as CAIRO, CAIRO_0_11_SIERRA as SIERRA0, + CAIRO_1_1_0_BALANCE_CASM_JSON as CASM2, CAIRO_2_0_0_STACK_OVERFLOW as SIERRA2, }; use starknet_gateway_types::error::SequencerError; @@ -1391,7 +1392,7 @@ mod tests { &self, _: ClassHash, ) -> Result { - Ok(bytes::Bytes::from_static(b"I'm from the fgw!")) + Ok(bytes::Bytes::from_static(CASM2)) } } @@ -1436,14 +1437,13 @@ mod tests { /// The genesis block contains no declared classes async fn setup(expect_correct_class_hashes: bool) -> Setup { tokio::task::spawn_blocking(move || { - let fake_block = |n| { + let fake_block = |n, state_update| { let mut block = Block::default(); block.header.header.number = BlockNumber::GENESIS + n; block.header.header.hash = Faker.fake(); - block.state_update = Some(Default::default()); + block.state_update = Some(state_update); block }; - let mut blocks = vec![fake_block(0), fake_block(1)]; let (cairo_hash, sierra0_hash, sierra2_hash) = if expect_correct_class_hashes { ( @@ -1457,26 +1457,31 @@ mod tests { Default::default() }; - blocks[1] - .state_update - .as_mut() - .unwrap() - .declared_cairo_classes = [cairo_hash].into(); - blocks[1] - .state_update - .as_mut() - .unwrap() - .declared_sierra_classes = [ - (sierra0_hash, Default::default()), - (sierra2_hash, Default::default()), - ] - .into(); + let state_update1 = StateUpdate::default() + .with_declared_cairo_class(cairo_hash) + .with_declared_sierra_class(sierra0_hash, Default::default()) + .with_declared_sierra_class(sierra2_hash, Default::default()); + let mut blocks = vec![ + fake_block(0, Default::default()), + fake_block(1, state_update1), + ]; + blocks[1].cairo_defs = vec![(cairo_hash, CAIRO.to_vec())]; blocks[1].sierra_defs = vec![ // Does not compile - (sierra0_hash, SIERRA0.to_vec(), Default::default()), + ( + sierra0_hash, + SIERRA0.to_vec(), + Default::default(), + Default::default(), + ), // Compiles just fine - (sierra2_hash, SIERRA2.to_vec(), Default::default()), + ( + sierra2_hash, + SIERRA2.to_vec(), + Default::default(), + Default::default(), + ), ]; let streamed_classes = vec![ @@ -1558,7 +1563,7 @@ mod tests { db.casm_definition(ClassHash(SIERRA0_HASH.0)) .unwrap() .unwrap(), - b"I'm from the fgw!" + CASM2 ); assert!(serde_json::from_slice::( &db.casm_definition(ClassHash(SIERRA2_HASH.0)) diff --git a/crates/pathfinder/src/sync/class_definitions.rs b/crates/pathfinder/src/sync/class_definitions.rs index f963ed5150..f2ab703a28 100644 --- a/crates/pathfinder/src/sync/class_definitions.rs +++ b/crates/pathfinder/src/sync/class_definitions.rs @@ -61,6 +61,7 @@ pub enum CompiledClassDefinition { Sierra { sierra_definition: Vec, casm_definition: Vec, + casm_hash_v2: CasmHash, }, } @@ -494,9 +495,17 @@ fn compile_or_fetch_impl( .to_vec(), }; + let casm_hash_v2 = pathfinder_casm_hashes::get_precomputed_casm_v2_hash(&hash); + let casm_hash_v2 = match casm_hash_v2 { + Some(casm_hash_v2) => *casm_hash_v2, + None => pathfinder_compiler::casm_class_hash_v2(&casm_definition) + .context("Computing CASM Blake2 hash")?, + }; + CompiledClassDefinition::Sierra { sierra_definition, casm_definition, + casm_hash_v2, } } }; @@ -573,23 +582,19 @@ fn persist_impl( ) -> anyhow::Result<()> { match definition { CompiledClassDefinition::Cairo(definition) => { - db.update_cairo_class(hash, &definition) + db.update_cairo_class_definition(hash, &definition) .context("Updating cairo class definition")?; } CompiledClassDefinition::Sierra { sierra_definition, casm_definition, + casm_hash_v2, } => { - let casm_hash = db - .casm_hash(hash) - .context("Getting casm hash for sierra class")? - .context("Casm hash not found")?; - - db.update_sierra_class( + db.update_sierra_class_definition( &SierraHash(hash.0), &sierra_definition, - &casm_hash, &casm_definition, + &casm_hash_v2, ) .context("Updating sierra class definition")?; } diff --git a/crates/pathfinder/src/sync/state_updates.rs b/crates/pathfinder/src/sync/state_updates.rs index 37ec9263d7..14ffe96653 100644 --- a/crates/pathfinder/src/sync/state_updates.rs +++ b/crates/pathfinder/src/sync/state_updates.rs @@ -147,6 +147,7 @@ mod multi_block { pub system_contract_updates: HashMap, pub declared_cairo_classes: HashSet, pub declared_sierra_classes: HashMap, + pub migrated_compiled_classes: HashMap, } #[derive(Default, Debug, Clone, PartialEq)] @@ -197,6 +198,7 @@ mod multi_block { }) .collect(), declared_sierra_classes: &update.declared_sierra_classes, + migrated_compiled_classes: &update.migrated_compiled_classes, } } } diff --git a/crates/pathfinder/src/sync/track.rs b/crates/pathfinder/src/sync/track.rs index f3949881d7..5b54857c84 100644 --- a/crates/pathfinder/src/sync/track.rs +++ b/crates/pathfinder/src/sync/track.rs @@ -829,22 +829,19 @@ impl ProcessStage for StoreBlock { }| { match definition { class_definitions::CompiledClassDefinition::Cairo(cairo) => db - .update_cairo_class(hash, &cairo) + .update_cairo_class_definition(hash, &cairo) .context("Inserting cairo class definition"), class_definitions::CompiledClassDefinition::Sierra { sierra_definition, casm_definition, + casm_hash_v2, } => { let sierra_hash = SierraHash(hash.0); - let casm_hash = db - .casm_hash(hash) - .context("Getting casm hash")? - .context("Casm not found")?; - db.update_sierra_class( + db.update_sierra_class_definition( &sierra_hash, &sierra_definition, - &casm_hash, &casm_definition, + &casm_hash_v2, ) .context("Inserting sierra class definition") } diff --git a/crates/pathfinder/src/validator.rs b/crates/pathfinder/src/validator.rs index b867feae35..6312656555 100644 --- a/crates/pathfinder/src/validator.rs +++ b/crates/pathfinder/src/validator.rs @@ -1,4 +1,5 @@ use std::str::FromStr; +use std::sync::Arc; use std::time::Instant; use anyhow::Context; @@ -10,7 +11,7 @@ use p2p_proto::transaction::DeclareV3WithClass; use pathfinder_common::class_definition::{SelectorAndFunctionIndex, SierraEntryPoints}; use pathfinder_common::event::Event; use pathfinder_common::receipt::Receipt; -use pathfinder_common::state_update::StateUpdateData; +use pathfinder_common::state_update::{StateUpdate, StateUpdateData}; use pathfinder_common::transaction::{Transaction, TransactionVariant}; use pathfinder_common::{ class_definition, @@ -147,7 +148,8 @@ impl ValidatorBlockInfoStage { transactions: Vec::new(), receipts: Vec::new(), events: Vec::new(), - batch_executors: Vec::new(), + executor: None, + cumulative_state_updates: Vec::new(), batch_sizes: Vec::new(), batch_p2p_transactions: Vec::new(), storage, @@ -161,12 +163,13 @@ pub struct ValidatorTransactionBatchStage { is_l3: bool, block_info: pathfinder_executor::types::BlockInfo, expected_block_header: Option, - block_executor: LazyBlockExecutor, transactions: Vec, receipts: Vec, events: Vec>, - /// Per-batch executors for fine-grained rollback - batch_executors: Vec, + /// Single executor for all batches (optimized from multiple executors) + executor: Option, + /// Cumulative state updates after each batch (for rollback reconstruction) + cumulative_state_updates: Vec, /// Size of each batch (for proper rollback calculations) batch_sizes: Vec, /// Original p2p transactions per batch (for partial execution) @@ -175,92 +178,8 @@ pub struct ValidatorTransactionBatchStage { storage: Storage, } -enum LazyBlockExecutor { - /// This variant holds the data necessary to initialize the `BlockExecutor` - /// on first use. - Uninitialized { - chain_id: ChainId, - is_l3: bool, - block_info: Box, - storage: Storage, - }, - /// This variant is used to temporarily take ownership of the - /// `chain_id`, `block_info` and `storage` fields while initializing - /// the `BlockExecutor` and occurs only briefly in - /// [`get_or_init()`](Self::get_or_init). - Initializing, - /// This variant holds the initialized `BlockExecutor` and keeps the storage - /// reference for potential restoration. - Initialized { executor: Box }, -} - -impl LazyBlockExecutor { - fn new( - chain_id: ChainId, - is_l3: bool, - block_info: pathfinder_executor::types::BlockInfo, - storage: Storage, - ) -> Self { - LazyBlockExecutor::Uninitialized { - chain_id, - is_l3, - block_info: Box::new(block_info), - storage, - } - } - - fn get_or_init(&mut self) -> anyhow::Result<&mut BlockExecutor> { - if let LazyBlockExecutor::Initialized { executor, .. } = self { - Ok(executor) - } else { - let this = std::mem::replace(self, Self::Initializing); - let LazyBlockExecutor::Uninitialized { - chain_id, - is_l3, - block_info, - storage, - } = this - else { - panic!("Unexpected state in LazyBlockExecutor"); - }; - - let db_conn = storage.connection().context("Create database connection")?; - let be = BlockExecutor::new( - chain_id, - is_l3, - *block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - db_conn, - ) - .context("Creating BlockExecutor")?; - *self = LazyBlockExecutor::Initialized { - executor: Box::new(be), - }; - let LazyBlockExecutor::Initialized { executor, .. } = self else { - unreachable!("Block executor is initialized"); - }; - Ok(executor) - } - } - - /// Takes the initialized [`BlockExecutor`], invoking - /// [`get_or_init()`](Self::get_or_init) if necessary. - fn take(mut self) -> anyhow::Result> { - self.get_or_init()?; - let LazyBlockExecutor::Initialized { executor, .. } = self else { - unreachable!("Block executor is initialized"); - }; - Ok(executor) - } -} - impl ValidatorTransactionBatchStage { /// Create a new ValidatorTransactionBatchStage - /// - /// Note: This method is primarily used in tests. For production code, use - /// `ValidatorBlockInfoStage::validate_consensus_block_info` which properly - /// passes `is_l3` from the network config. pub fn new( chain_id: ChainId, block_info: pathfinder_executor::types::BlockInfo, @@ -274,11 +193,11 @@ impl ValidatorTransactionBatchStage { is_l3, block_info, expected_block_header: None, - block_executor: LazyBlockExecutor::new(chain_id, is_l3, block_info, storage.clone()), transactions: Vec::new(), receipts: Vec::new(), events: Vec::new(), - batch_executors: Vec::new(), + executor: None, + cumulative_state_updates: Vec::new(), batch_sizes: Vec::new(), batch_p2p_transactions: Vec::new(), storage, @@ -294,8 +213,41 @@ impl ValidatorTransactionBatchStage { self.transactions.len() } - /// Execute a batch of transactions, creating a new executor with chained - /// initial state + /// Reconstruct executor from a cumulative state update + /// This is used for rollback scenarios where we need to recreate the + /// executor from a stored state diff checkpoint + fn reconstruct_executor_from_state_update( + &self, + state_update_data: &StateUpdateData, + ) -> anyhow::Result { + // Convert StateUpdateData to StateUpdate + let state_update = StateUpdate { + block_hash: pathfinder_common::BlockHash::ZERO, + parent_state_commitment: pathfinder_common::StateCommitment::ZERO, + state_commitment: pathfinder_common::StateCommitment::ZERO, + contract_updates: state_update_data.contract_updates.clone(), + system_contract_updates: state_update_data.system_contract_updates.clone(), + declared_cairo_classes: state_update_data.declared_cairo_classes.clone(), + declared_sierra_classes: state_update_data.declared_sierra_classes.clone(), + migrated_compiled_classes: state_update_data.migrated_compiled_classes.clone(), + }; + + // Create BlockExecutor from the StateUpdate + BlockExecutor::new_with_pending_state( + self.chain_id, + self.block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + self.storage + .connection() + .context("Creating database connection for executor reconstruction")?, + Arc::new(state_update), + ) + .context("Creating BlockExecutor from state update") + } + + /// Execute a batch of transactions using a single executor and extract + /// state diffs pub fn execute_batch( &mut self, transactions: Vec, @@ -305,7 +257,7 @@ impl ValidatorTransactionBatchStage { } let batch_size = transactions.len(); - let batch_index = self.batch_executors.len(); + let batch_index = self.cumulative_state_updates.len(); tracing::debug!( "Executing batch {} with {} transactions", @@ -336,27 +288,10 @@ impl ValidatorTransactionBatchStage { .collect::>>() .context("Verifying transaction hashes")?; - // Create a new executor for this batch with chaining support - let mut batch_executor = if self.batch_executors.is_empty() { + // Initialize executor on first batch, or use existing executor + if self.executor.is_none() { // First batch - start from initial state - BlockExecutor::new( - self.chain_id, - self.is_l3, - self.block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - self.storage - .connection() - .context("Creating database connection")?, - )? - } else { - // Subsequent batches - chain from previous batch's final state - let last_executor = self - .batch_executors - .last() - .context("Should have previous executor for chaining")?; - let previous_state = last_executor.get_final_state()?; - BlockExecutor::new_with_initial_state( + self.executor = Some(BlockExecutor::new( self.chain_id, self.is_l3, self.block_info, @@ -365,16 +300,26 @@ impl ValidatorTransactionBatchStage { self.storage .connection() .context("Creating database connection")?, - previous_state, - )? - }; + )?); + } + + // Get mutable reference to executor + let executor = self + .executor + .as_mut() + .context("Executor should be initialized")?; // Set the correct transaction index - batch_executor.set_transaction_index(self.transactions.len()); + executor.set_transaction_index(self.transactions.len()); - // Execute the batch transactions in the NEW executor + // Execute the batch transactions in the single executor let (receipts, events): (Vec<_>, Vec<_>) = - batch_executor.execute(executor_txns)?.into_iter().unzip(); + executor.execute(executor_txns)?.into_iter().unzip(); + + // Extract cumulative state diff after batch execution + let state_diff = executor.extract_state_diff()?; + let state_update_data: StateUpdateData = state_diff.into(); + self.cumulative_state_updates.push(state_update_data); // Convert receipts to common format with correct sequential transaction indices let base_transaction_index = self.transactions.len(); @@ -395,9 +340,7 @@ impl ValidatorTransactionBatchStage { }) .collect(); - // Store the executor, batch size, and original p2p transactions for potential - // rollback - self.batch_executors.push(batch_executor); + // Store batch size and original p2p transactions for potential rollback self.batch_sizes.push(batch_size); self.batch_p2p_transactions.push(transactions); @@ -421,11 +364,11 @@ impl ValidatorTransactionBatchStage { /// Rollback to the state after a specific batch (discard later batches) pub fn rollback_to_batch(&mut self, target_batch: usize) -> anyhow::Result<()> { - if target_batch >= self.batch_executors.len() { + if target_batch >= self.cumulative_state_updates.len() { return Err(anyhow::anyhow!( "Target batch {} exceeds available batches {}", target_batch, - self.batch_executors.len() + self.cumulative_state_updates.len() )); } @@ -437,10 +380,18 @@ impl ValidatorTransactionBatchStage { self.transactions.truncate(transactions_to_keep); self.receipts.truncate(transactions_to_keep); self.events.truncate(transactions_to_keep); - self.batch_executors.truncate(target_batch + 1); + self.cumulative_state_updates.truncate(target_batch + 1); self.batch_sizes.truncate(target_batch + 1); self.batch_p2p_transactions.truncate(target_batch + 1); + // Reconstruct executor from the state update at target batch + let state_update_at_target = &self.cumulative_state_updates[target_batch]; + self.executor = Some(self.reconstruct_executor_from_state_update(state_update_at_target)?); + self.executor + .as_mut() + .context("Executor should be initialized after reconstruction")? + .set_transaction_index(transactions_to_keep); + // Validate consistency after rollback self.validate_batch_consistency()?; @@ -479,7 +430,8 @@ impl ValidatorTransactionBatchStage { self.transactions.clear(); self.receipts.clear(); self.events.clear(); - self.batch_executors.clear(); + self.executor = None; + self.cumulative_state_updates.clear(); self.batch_sizes.clear(); self.batch_p2p_transactions.clear(); @@ -521,20 +473,20 @@ impl ValidatorTransactionBatchStage { /// Finalize with the current state (up to the last executed transaction) pub fn finalize(&mut self) -> anyhow::Result> { - if self.batch_executors.is_empty() { + if self.executor.is_none() { return Ok(None); } - // Take the last batch executor and finalize it - let last_executor = self.batch_executors.pop().unwrap(); - let state_diff = last_executor.finalize()?; + // Take the single executor and finalize it + let executor = self.executor.take().context("Executor should exist")?; + let state_diff = executor.finalize()?; Ok(Some(state_diff)) } - /// Get the number of batch executors - pub fn batch_executor_count(&self) -> usize { - self.batch_executors.len() + /// Get the number of batches + pub fn batch_count(&self) -> usize { + self.cumulative_state_updates.len() } /// Get the number of receipts @@ -555,10 +507,10 @@ impl ValidatorTransactionBatchStage { /// Validate that batch tracking vectors are consistent fn validate_batch_consistency(&self) -> anyhow::Result<()> { - if self.batch_executors.len() != self.batch_sizes.len() { + if self.cumulative_state_updates.len() != self.batch_sizes.len() { return Err(anyhow::anyhow!( - "Batch consistency error: {} executors but {} batch sizes", - self.batch_executors.len(), + "Batch consistency error: {} state updates but {} batch sizes", + self.cumulative_state_updates.len(), self.batch_sizes.len() )); } @@ -601,16 +553,6 @@ impl ValidatorTransactionBatchStage { self.transactions.len() )); } - - // Validate that BlockExecutor is in a valid state - // After restoration, it should be either Uninitialized (clean) or Initialized - // (clean) - if matches!(self.block_executor, LazyBlockExecutor::Initializing) { - return Err(anyhow::anyhow!( - "BlockExecutor is in invalid initializing state" - )); - } - Ok(()) } @@ -682,7 +624,7 @@ impl ValidatorTransactionBatchStage { let Self { block_info, expected_block_header, - block_executor, + executor, transactions, receipts, events, @@ -698,7 +640,15 @@ impl ValidatorTransactionBatchStage { let start = Instant::now(); - let state_diff = block_executor.take()?.finalize()?; + // For empty proposals (no transactions), we don't need an executor. + // Use an empty state diff instead. + let state_update = if executor.is_none() && transactions.is_empty() { + StateUpdateData::default() + } else { + let executor = executor.context("Executor should exist for finalization")?; + let state_diff = executor.finalize()?; + StateUpdateData::from(state_diff) + }; let transaction_commitment = calculate_transaction_commitment(&transactions, block_info.starknet_version)?; @@ -710,8 +660,6 @@ impl ValidatorTransactionBatchStage { .collect::>(); let event_commitment = calculate_event_commitment(&events_ref_by_txn, block_info.starknet_version)?; - - let state_update = StateUpdateData::from(state_diff); let state_diff_commitment = state_update.compute_state_diff_commitment(); let header = BlockHeader { @@ -756,7 +704,7 @@ impl ValidatorTransactionBatchStage { header, state_update, transactions, - receipts: receipts.clone(), + receipts, events, }) } @@ -1045,3 +993,506 @@ fn deployed_address(txnv: &TransactionVariant) -> Option p2p_proto::consensus::Transaction { + let txn = TransactionVariant::L1HandlerV0(L1HandlerV0 { + nonce: Felt::from_hex_str(&format!("0x{index}")).unwrap(), + address: p2p_proto::common::Address( + Felt::from_hex_str(&format!("0x{index:x}")).unwrap(), + ), + entry_point_selector: Felt::from_hex_str(&format!("0x{index}")).unwrap(), + calldata: vec![Felt::from_hex_str(&format!("0x{index}")).unwrap()], + }); + + let l1_handler = pathfinder_common::transaction::L1HandlerTransaction { + nonce: pathfinder_common::TransactionNonce( + Felt::from_hex_str(&format!("0x{index}")).unwrap(), + ), + contract_address: pathfinder_common::ContractAddress::new_or_panic( + Felt::from_hex_str(&format!("0x{index:x}")).unwrap(), + ), + entry_point_selector: pathfinder_common::EntryPoint( + Felt::from_hex_str(&format!("0x{index}")).unwrap(), + ), + calldata: vec![pathfinder_common::CallParam( + Felt::from_hex_str(&format!("0x{index}")).unwrap(), + )], + }; + + let chain_id = ChainId::SEPOLIA_TESTNET; + let hash = l1_handler.calculate_hash(chain_id); + + p2p_proto::consensus::Transaction { + transaction_hash: p2p_proto::common::Hash(hash.0), + txn, + } + } + + /// Tests that single executor with state diff storage works + #[test] + fn test_single_executor_optimization() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + + let block_info = BlockInfo { + number: BlockNumber::new_or_panic(1), + timestamp: BlockTimestamp::new_or_panic(1000), + sequencer_address: SequencerAddress::ZERO, + l1_da_mode: L1DataAvailabilityMode::Calldata, + eth_l1_gas_price: GasPrice::ZERO, + strk_l1_gas_price: GasPrice::ZERO, + eth_l1_data_gas_price: GasPrice::ZERO, + strk_l1_data_gas_price: GasPrice::ZERO, + strk_l2_gas_price: GasPrice::ZERO, + eth_l2_gas_price: GasPrice::ZERO, + starknet_version: StarknetVersion::new(0, 14, 0, 0), + }; + + let mut validator_stage = + ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) + .expect("Failed to create validator stage"); + + // Create batches: 3 batches with 2 transactions each + let batches = [ + vec![create_test_transaction(0), create_test_transaction(1)], + vec![create_test_transaction(2), create_test_transaction(3)], + vec![create_test_transaction(4), create_test_transaction(5)], + ]; + + // Execute batch 1 + validator_stage + .execute_batch(batches[0].clone()) + .expect("Failed to execute batch 1"); + + // Should have 1 batch (state update) after first execution + assert_eq!( + validator_stage.batch_count(), + 1, + "Should have 1 batch after first execution" + ); + assert_eq!( + validator_stage.transaction_count(), + 2, + "Should have 2 transactions" + ); + + // Execute batch 2 + validator_stage + .execute_batch(batches[1].clone()) + .expect("Failed to execute batch 2"); + + // Should have 2 batches and 2 state updates + assert_eq!(validator_stage.batch_count(), 2, "Should have 2 batches"); + assert_eq!( + validator_stage.transaction_count(), + 4, + "Should have 4 transactions" + ); + + // Execute batch 3 + validator_stage + .execute_batch(batches[2].clone()) + .expect("Failed to execute batch 3"); + + // Should have 3 batches now with 6 transactions + assert_eq!(validator_stage.batch_count(), 3, "Should have 3 batches"); + assert_eq!( + validator_stage.transaction_count(), + 6, + "Should have 6 transactions" + ); + + // Rollback to batch 1 should reconstruct executor from stored state + validator_stage + .rollback_to_batch(1) + .expect("Failed to rollback to batch 1"); + + assert_eq!( + validator_stage.batch_count(), + 2, + "Should have 2 batches after rollback" + ); + assert_eq!( + validator_stage.transaction_count(), + 4, + "Should have 4 transactions after rollback" + ); + + // Make sure we can continue executing after rollback + validator_stage + .execute_batch(batches[2].clone()) + .expect("Failed to execute batch 3 after rollback"); + + assert_eq!( + validator_stage.batch_count(), + 3, + "Should have 3 batches after re-execution" + ); + assert_eq!( + validator_stage.transaction_count(), + 6, + "Should have 6 transactions after re-execution" + ); + + // Receipts should be consistent + let receipts = validator_stage.receipts(); + assert_eq!(receipts.len(), 6, "Should have 6 receipts"); + + // Verify transaction indices are sequential + for (i, receipt) in receipts.iter().enumerate() { + assert_eq!( + receipt.transaction_index.get(), + i as u64, + "Transaction index mismatch at position {i}" + ); + } + + // Finalize should work with single executor + // Note: State diffs may be empty for L1Handler transactions, which is fine + let _state_diff = validator_stage + .finalize() + .expect("Failed to finalize") + .expect("Should have state diff"); + } + + /// Test that rollback reconstruction produces identical state + #[test] + fn test_rollback_reconstruction_consistency() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + + let block_info = BlockInfo { + number: BlockNumber::new_or_panic(1), + timestamp: BlockTimestamp::new_or_panic(1000), + sequencer_address: SequencerAddress::ZERO, + l1_da_mode: L1DataAvailabilityMode::Calldata, + eth_l1_gas_price: GasPrice::ZERO, + strk_l1_gas_price: GasPrice::ZERO, + eth_l1_data_gas_price: GasPrice::ZERO, + strk_l1_data_gas_price: GasPrice::ZERO, + strk_l2_gas_price: GasPrice::ZERO, + eth_l2_gas_price: GasPrice::ZERO, + starknet_version: StarknetVersion::new(0, 14, 0, 0), + }; + + let batches = [ + vec![create_test_transaction(0), create_test_transaction(1)], + vec![create_test_transaction(2), create_test_transaction(3)], + ]; + + // Create first validator and execute both batches + let mut validator1 = + ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) + .expect("Failed to create validator stage"); + + validator1 + .execute_batch(batches[0].clone()) + .expect("Failed to execute batch 1"); + validator1 + .execute_batch(batches[1].clone()) + .expect("Failed to execute batch 2"); + + let receipts1 = validator1.receipts().to_vec(); + + // Create second validator and execute, then rollback and re-execute + let mut validator2 = + ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) + .expect("Failed to create validator stage"); + + validator2 + .execute_batch(batches[0].clone()) + .expect("Failed to execute batch 1"); + validator2 + .execute_batch(batches[1].clone()) + .expect("Failed to execute batch 2"); + + // Rollback and re-execute + validator2.rollback_to_batch(0).expect("Failed to rollback"); + validator2 + .execute_batch(batches[1].clone()) + .expect("Failed to re-execute batch 2"); + + let receipts2 = validator2.receipts(); + + // Receipts should be identical + assert_eq!( + receipts1.len(), + receipts2.len(), + "Receipt count should match" + ); + for (i, (r1, r2)) in receipts1.iter().zip(receipts2.iter()).enumerate() { + assert_eq!( + r1.transaction_index, r2.transaction_index, + "Transaction index mismatch at position {i}" + ); + assert_eq!( + r1.transaction_hash, r2.transaction_hash, + "Transaction hash mismatch at position {i}" + ); + } + } + + /// Test edge cases in find_batch_containing_transaction and rollback logic + /// This verifies: + /// - find_batch_containing_transaction correctly identifies batches at + /// boundaries + /// - rollback_to_transaction handles edge cases correctly (including + /// target_count == 0) + #[test] + fn test_rollback_edge_cases() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + + let block_info = BlockInfo { + number: BlockNumber::new_or_panic(1), + timestamp: BlockTimestamp::new_or_panic(1000), + sequencer_address: SequencerAddress::ZERO, + l1_da_mode: L1DataAvailabilityMode::Calldata, + eth_l1_gas_price: GasPrice::ZERO, + strk_l1_gas_price: GasPrice::ZERO, + eth_l1_data_gas_price: GasPrice::ZERO, + strk_l1_data_gas_price: GasPrice::ZERO, + strk_l2_gas_price: GasPrice::ZERO, + eth_l2_gas_price: GasPrice::ZERO, + starknet_version: StarknetVersion::new(0, 14, 0, 0), + }; + + let mut validator_stage = + ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) + .expect("Failed to create validator stage"); + + // Create batches with different sizes to test boundary conditions + // Batch 0: 3 transactions (tx's 0, 1, 2) + // Batch 1: 2 transactions (tx's 3, 4) + // Batch 2: 2 transactions (tx's 5, 6) + let batches = [ + vec![ + create_test_transaction(0), + create_test_transaction(1), + create_test_transaction(2), + ], + vec![create_test_transaction(3), create_test_transaction(4)], + vec![create_test_transaction(5), create_test_transaction(6)], + ]; + + // Execute all batches + validator_stage + .execute_batch(batches[0].clone()) + .expect("Failed to execute batch 0"); + validator_stage + .execute_batch(batches[1].clone()) + .expect("Failed to execute batch 1"); + validator_stage + .execute_batch(batches[2].clone()) + .expect("Failed to execute batch 2"); + + assert_eq!( + validator_stage.transaction_count(), + 7, + "Should have 7 transactions" + ); + + // Rollback to transaction at batch boundary (end of batch 0 = transaction 2) + // This should rollback to batch 0 + validator_stage + .rollback_to_transaction(2) + .expect("Failed to rollback to transaction 2"); + assert_eq!( + validator_stage.transaction_count(), + 3, + "Should have 3 transactions after rollback to transaction 2" + ); + assert_eq!( + validator_stage.batch_count(), + 1, + "Should have 1 batch after rollback to transaction 2" + ); + + // Re-execute to get back to 7 transactions + validator_stage + .execute_batch(batches[1].clone()) + .expect("Failed to re-execute batch 1"); + validator_stage + .execute_batch(batches[2].clone()) + .expect("Failed to re-execute batch 2"); + + // Rollback to transaction at batch boundary (start of batch 1 = transaction 3) + // This should rollback to batch 1 (which includes transaction 3) + validator_stage + .rollback_to_transaction(3) + .expect("Failed to rollback to transaction 3"); + assert_eq!( + validator_stage.transaction_count(), + 4, + "Should have 4 transactions after rollback to transaction 3" + ); + assert_eq!( + validator_stage.batch_count(), + 2, + "Should have 2 batches after rollback to transaction 3" + ); + + // Re-execute to get back to 7 transactions + validator_stage + .execute_batch(batches[2].clone()) + .expect("Failed to re-execute batch 2"); + + // Rollback to transaction in middle of batch (transaction 1 in batch 0) + // This should rollback to transaction 1, keeping only first 2 transactions + validator_stage + .rollback_to_transaction(1) + .expect("Failed to rollback to transaction 1"); + assert_eq!( + validator_stage.transaction_count(), + 2, + "Should have 2 transactions after rollback to transaction 1" + ); + assert_eq!( + validator_stage.batch_count(), + 1, + "Should have 1 batch after rollback to transaction 1" + ); + + // Rollback to transaction 0 (first transaction) + // This should keep only the first transaction + // First, we need to get back to having multiple transactions + validator_stage + .execute_batch(vec![create_test_transaction(2)]) + .expect("Failed to add transaction 2 back"); + validator_stage + .execute_batch(batches[1].clone()) + .expect("Failed to re-execute batch 1"); + + validator_stage + .rollback_to_transaction(0) + .expect("Failed to rollback to transaction 0"); + assert_eq!( + validator_stage.transaction_count(), + 1, + "Should have 1 transaction after rollback to transaction 0" + ); + assert_eq!( + validator_stage.batch_count(), + 1, + "Should have 1 batch after rollback to transaction 0" + ); + + // Verify an out of bounds rollback error + let result = validator_stage.rollback_to_transaction(10); + assert!( + result.is_err(), + "Rollback to transaction 10 (out of bounds) should error" + ); + } + + /// Tests that empty proposals (no transactions, no executor) can be + /// finalized. + /// + /// This test covers the case where a proposal has no transactions and + /// therefore no executor is created. The finalization should succeed with + /// an empty state diff. + #[test] + fn test_empty_proposal_finalization() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + + // Create a proposal init for height 0 + let proposal_init = p2p_proto::consensus::ProposalInit { + block_number: 0, + round: 0, + valid_round: None, + proposer: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), + }; + + // Create block info + let block_info = p2p_proto::consensus::BlockInfo { + block_number: 0, + timestamp: 1000, + builder: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), + l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, + l2_gas_price_fri: 1, + l1_gas_price_wei: 1_000_000_000, + l1_data_gas_price_wei: 1, + eth_to_strk_rate: 1_000_000_000, + }; + + // Create validator stages (empty proposal path) + let validator_block_info = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .expect("Failed to create ValidatorBlockInfoStage"); + + let validator_transaction_batch = validator_block_info + .validate_consensus_block_info(block_info, storage.clone()) + .expect("Failed to validate block info"); + + // Verify the validator is in the expected empty state + assert_eq!( + validator_transaction_batch.transaction_count(), + 0, + "Empty proposal should have 0 transactions" + ); + assert!( + validator_transaction_batch.executor.is_none(), + "Empty proposal should have no executor" + ); + + // Finalize the empty proposal - this should succeed without an executor + let validator_finalize = validator_transaction_batch + .consensus_finalize0() + .expect("Empty proposal finalization should succeed"); + + // Verify the finalized header has correct empty commitments + assert_eq!( + validator_finalize.header.transaction_count, 0, + "Empty proposal should have 0 transaction count" + ); + assert_eq!( + validator_finalize.header.event_count, 0, + "Empty proposal should have 0 event count" + ); + assert_eq!( + validator_finalize.state_update.contract_updates.len(), + 0, + "Empty proposal should have no contract updates" + ); + assert_eq!( + validator_finalize + .state_update + .system_contract_updates + .len(), + 0, + "Empty proposal should have no system contract updates" + ); + assert_eq!( + validator_finalize.state_update.declared_cairo_classes.len(), + 0, + "Empty proposal should have no declared Cairo classes" + ); + assert_eq!( + validator_finalize + .state_update + .declared_sierra_classes + .len(), + 0, + "Empty proposal should have no declared Sierra classes" + ); + } +} diff --git a/crates/pathfinder/tests/common/pathfinder_instance.rs b/crates/pathfinder/tests/common/pathfinder_instance.rs index 73cb1081e9..1749b35af4 100644 --- a/crates/pathfinder/tests/common/pathfinder_instance.rs +++ b/crates/pathfinder/tests/common/pathfinder_instance.rs @@ -9,6 +9,7 @@ use std::time::{Duration, Instant}; use anyhow::Context as _; use http::StatusCode; +use pathfinder_lib::config::integration_testing::InjectFailureConfig; use tokio::signal::unix::{signal, SignalKind}; use tokio::sync::watch; use tokio::task::JoinHandle; @@ -20,8 +21,8 @@ pub struct PathfinderInstance { name: &'static str, monitor_port: AtomicU16, consensus_p2p_port: AtomicU16, - rpc_port_watch_tx: watch::Sender, - rpc_port_watch_rx: watch::Receiver, + rpc_port_watch_tx: watch::Sender<(u32, u16)>, + rpc_port_watch_rx: watch::Receiver<(u32, u16)>, db_dir: PathBuf, stdout_path: PathBuf, stderr_path: PathBuf, @@ -31,7 +32,7 @@ pub struct PathfinderInstance { } /// Configuration for a Pathfinder instance. -#[derive(Debug, Clone)] +#[derive(Clone)] pub struct Config { pub name: &'static str, pub boot_port: Option, @@ -40,14 +41,10 @@ pub struct Config { pub pathfinder_bin: PathBuf, pub fixture_dir: PathBuf, pub test_dir: PathBuf, - pub inject_failure: Option, + pub inject_failure: Option, } -#[derive(Debug, Clone, Copy)] -pub enum InjectFailure { - OnProposalRx(u64), - _OnProposalDecided(u64), -} +pub type RpcPortWatch = (watch::Sender<(u32, u16)>, watch::Receiver<(u32, u16)>); impl PathfinderInstance { /// Spawns a new Pathfinder instance with the given configuration. The @@ -106,6 +103,7 @@ impl PathfinderInstance { .join(",") ) .as_str(), + "--consensus.history-depth=2", format!("--p2p.consensus.identity-config-file={}", id_file.display()).as_str(), "--p2p.consensus.listen-on=/ip4/127.0.0.1/tcp/0", "--p2p.consensus.experimental.direct-connection-timeout=1", @@ -121,7 +119,11 @@ impl PathfinderInstance { config.inject_failure.map(|i| { command - .arg(i.as_cli_arg()) + .arg(format!( + "--integration-tests.inject-failure={},{}", + i.height, + i.trigger.as_str() + )) .arg("--integration-tests.disable-db-verification=true") }); @@ -135,7 +137,11 @@ impl PathfinderInstance { process.id() ); - let (rpc_port_watch_tx, rpc_port_watch_rx) = watch::channel(0u16); + let (rpc_port_watch_tx, rpc_port_watch_rx) = watch::channel((0u32, 0u16)); + // Keep the refcount at at least 1 to achieve 'static lifetime, especially when + // an instance is terminated and then respawned. + let rpc_port_watch_tx2 = rpc_port_watch_tx.clone(); + _ = Box::leak(Box::new(rpc_port_watch_tx2)); Ok(Self { process, @@ -151,10 +157,7 @@ impl PathfinderInstance { }) } - pub fn with_rpc_port_watch( - mut self, - (tx, rx): (watch::Sender, watch::Receiver), - ) -> Self { + pub fn with_rpc_port_watch(mut self, (tx, rx): RpcPortWatch) -> Self { self.rpc_port_watch_tx = tx; self.rpc_port_watch_rx = rx; self @@ -163,14 +166,29 @@ impl PathfinderInstance { /// Checks if the instance has exited with a non-zero exit code. pub fn exited_with_error(&mut self) -> anyhow::Result { match self.process.try_wait() { + // The process has exited with some error exit code. Ok(Some(status)) if !status.success() => { self.is_terminated = true; + // The previous port value is invalid, and the new Pathfinder instance hasn't + // been spawned yet. + self.rpc_port_watch_tx + .send((0, 0)) + .context("Clearing rpc port")?; Ok(true) } - Ok(Some(_)) | Ok(None) => { + // The process has exited with 0 code. + Ok(Some(_)) => { self.is_terminated = true; + // The previous port value is invalid, and the new Pathfinder instance hasn't + // been spawned yet. + self.rpc_port_watch_tx + .send((0, 0)) + .context("Clearing rpc port")?; Ok(false) } + // The process is still running. The previous port value is still valid. + Ok(None) => Ok(false), + // An error occurred while checking the process status. Err(e) => Err(anyhow::anyhow!( "Error checking if Pathfinder instance {} (pid: {}) has exited: {e}", self.name, @@ -187,9 +205,9 @@ impl PathfinderInstance { poll_interval: Duration, timeout: Duration, ) -> anyhow::Result<()> { + let pid = self.process.id(); let fut = async move { let stopwatch = Instant::now(); - let pid = self.process.id(); let (monitor_port, rpc_port, p2p_port) = tokio::join!( Self::wait_for_port(pid, "monitor", &self.db_dir, poll_interval), Self::wait_for_port(pid, "rpc", &self.db_dir, poll_interval), @@ -197,20 +215,25 @@ impl PathfinderInstance { ); let monitor_port = monitor_port?; self.monitor_port.store(monitor_port, Ordering::Relaxed); - self.rpc_port_watch_tx.send(rpc_port?)?; + self.rpc_port_watch_tx + .send((pid, rpc_port?)) + .context("Updating rpc port")?; self.consensus_p2p_port.store(p2p_port?, Ordering::Relaxed); loop { match reqwest::get(format!("http://127.0.0.1:{monitor_port}/ready")).await { Ok(response) if response.status() == StatusCode::OK => { println!( - "Pathfinder instance {:<7} ready after {} s", + "Pathfinder instance {:<7} (pid: {pid}) ready after {} s", self.name, stopwatch.elapsed().as_secs() ); return anyhow::Ok(()); } - _ => println!("Pathfinder instance {:<7} not ready yet", self.name), + _ => println!( + "Pathfinder instance {:<7} (pid: {pid}) not ready yet", + self.name, + ), } sleep(poll_interval).await; @@ -221,7 +244,7 @@ impl PathfinderInstance { Ok(Err(e)) => Err(e), Err(_) => { anyhow::bail!( - "Timeout waiting for Pathfinder instance {} to be ready", + "Timeout waiting for Pathfinder instance {} (pid: {pid}) to be ready", self.name ) } @@ -263,11 +286,11 @@ impl PathfinderInstance { self.name } - pub fn rpc_port_watch_rx(&self) -> watch::Receiver { + pub fn rpc_port_watch_rx(&self) -> watch::Receiver<(u32, u16)> { self.rpc_port_watch_rx.clone() } - pub fn rpc_port_watch(&self) -> (watch::Sender, watch::Receiver) { + pub fn rpc_port_watch(&self) -> RpcPortWatch { ( self.rpc_port_watch_tx.clone(), self.rpc_port_watch_rx.clone(), @@ -417,7 +440,7 @@ impl Config { .collect() } - pub fn with_inject_failure(mut self, inject_failure: Option) -> Self { + pub fn with_inject_failure(mut self, inject_failure: Option) -> Self { self.inject_failure = inject_failure; self } @@ -428,19 +451,6 @@ impl Config { } } -impl InjectFailure { - pub fn as_cli_arg(&self) -> String { - match self { - Self::OnProposalRx(n) => { - format!("--integration-tests.inject-failure.on-proposal-rx={n}") - } - Self::_OnProposalDecided(n) => { - format!("--integration-tests.inject-failure.on-proposal-decided={n}") - } - } - } -} - /// A guard that aborts the task when dropped. pub struct AbortGuard { jh: tokio::task::JoinHandle>, diff --git a/crates/pathfinder/tests/common/rpc_client.rs b/crates/pathfinder/tests/common/rpc_client.rs index 1e5d310c62..8b05deb587 100644 --- a/crates/pathfinder/tests/common/rpc_client.rs +++ b/crates/pathfinder/tests/common/rpc_client.rs @@ -2,7 +2,6 @@ use std::time::Duration; -use anyhow::Context; use serde::Deserialize; use tokio::sync::watch; use tokio::task::JoinHandle; @@ -17,7 +16,7 @@ pub fn wait_for_height( instance: &PathfinderInstance, height: u64, poll_interval: Duration, -) -> JoinHandle> { +) -> JoinHandle<()> { tokio::spawn(wait_for_height_fut( instance.name(), instance.rpc_port_watch_rx().clone(), @@ -30,22 +29,26 @@ pub fn wait_for_height( /// Polls every `poll_interval`. async fn wait_for_height_fut( name: &'static str, - mut rpc_port_watch_rx: watch::Receiver, + mut rpc_port_watch_rx: watch::Receiver<(u32, u16)>, height: u64, poll_interval: Duration, -) -> anyhow::Result<()> { - rpc_port_watch_rx - .wait_for(|port| *port != 0) - .await - .context("Waiting for port to change from 0")?; - +) { loop { - let rpc_port = *rpc_port_watch_rx.borrow(); - // Sleeping first actually makes sense here, because the node will likely not // have any decided heights immediately after the RPC server is ready. sleep(poll_interval).await; + // We're waiting for the rpc port to change from 0 on each iteriation, because + // in case of tests where the instance is terminated and then respawned the RPC + // port number will temporarily be reset to 0. + let (pid, rpc_port) = + if let Ok(borrowed) = rpc_port_watch_rx.wait_for(|port| *port != (0, 0)).await { + *borrowed + } else { + println!("Rpc port watch for {name} is closed"); + continue; + }; + let Ok(reply) = reqwest::Client::new() .post(format!( "http://127.0.0.1:{rpc_port}/rpc/pathfinder/unstable" @@ -55,7 +58,9 @@ async fn wait_for_height_fut( .send() .await else { - println!("Pathfinder instance {name:<7} not responding yet"); + println!( + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} not responding yet" + ); continue; }; @@ -65,11 +70,14 @@ async fn wait_for_height_fut( }, } = reply.json::().await.unwrap(); - println!("Pathfinder instance {name:<7} decided height: {highest_decided_height:?}"); + println!( + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} decided height: \ + {highest_decided_height:?}" + ); if let Some(highest_decided_height) = highest_decided_height { if highest_decided_height >= height { - return Ok(()); + return; } } } diff --git a/crates/pathfinder/tests/common/utils.rs b/crates/pathfinder/tests/common/utils.rs index 00d7d3d492..41fb3228e5 100644 --- a/crates/pathfinder/tests/common/utils.rs +++ b/crates/pathfinder/tests/common/utils.rs @@ -60,7 +60,7 @@ pub fn log_elapsed(stopwatch: Instant) { /// Waits for either all RPC client tasks to complete, the test timeout to /// elapse, or for the user to interrupt the test with Ctrl-C. pub async fn wait_for_test_end( - rpc_client_handles: Vec>>, + rpc_client_handles: Vec>, test_timeout: Duration, ) -> anyhow::Result<()> { tokio::select! { @@ -70,8 +70,7 @@ pub async fn wait_for_test_end( } test_result = futures::future::join_all(rpc_client_handles) => { - test_result.into_iter().collect::, JoinError>>().context("Joining all RPC client tasks")? - .into_iter().collect::, anyhow::Error>>().context("Checking if any RPC client tasks failed")?; + test_result.into_iter().collect::, JoinError>>().context("Joining all RPC client tasks")?; // Don't dump logs if the test succeeded. PathfinderInstance::enable_log_dump(false); Ok(()) diff --git a/crates/pathfinder/tests/consensus.rs b/crates/pathfinder/tests/consensus.rs index 1c6d84d051..a2844a3cbf 100644 --- a/crates/pathfinder/tests/consensus.rs +++ b/crates/pathfinder/tests/consensus.rs @@ -5,8 +5,14 @@ //! //! Run the test: //! ``` -//! cargo test --test consensus -p pathfinder -F p2p -F consensus-integration-tests -- --nocapture +//! PATHFINDER_TEST_ENABLE_PORT_MARKER_FILES=1 cargo nextest run --test consensus -p pathfinder --features p2p,consensus-integration-tests //! ``` +//! +//! # Important +//! +//! Please do not use `cargo test` as it does not run parallel test cases in +//! separate processes, and this will interfere with `PathfinderInstance` using +//! `SIGCHLD` to detect that a Pathfinder process has exited. #[cfg(all(feature = "p2p", feature = "consensus-integration-tests"))] mod common; @@ -17,50 +23,66 @@ mod test { use std::vec; use futures::future::Either; + use pathfinder_lib::config::integration_testing::{InjectFailureConfig, InjectFailureTrigger}; use rstest::rstest; - use crate::common::pathfinder_instance::{respawn_on_fail, InjectFailure, PathfinderInstance}; + use crate::common::pathfinder_instance::{respawn_on_fail, PathfinderInstance}; use crate::common::rpc_client::wait_for_height; use crate::common::utils; // TODO Test cases that should be supported by the integration tests: // - proposals: - // - non-empty proposals (L1 handlers + transactions that modify storage), - // - empty proposals, which follow the spec, ie. no transaction batches: + // - [ ] non-empty proposals (L1 handlers + transactions that modify storage), + // - [ ] empty proposals, which follow the spec, ie. no transaction batches: // - ProposalInit, // - ProposalCommitment, // - ProposalFin, - // - consider supporting empty proposals with an empty transaction batch, not - // fully following the spec: + // - [x] consider supporting empty proposals with an empty transaction batch, + // not fully following the spec: // - ProposalInit, // - BlockInfo, // - TransactionBatch([]), - // - TransactionsFin, + // - (TransactionsFin cannot be sent in this case), // - ProposalCommitment, // - ProposalFin, // - node set sizes: - // - 3 nodes, network stalls if 1 node fails, - // - 4 nodes, network continues if 1 node fails, catchup via sync mechanism is - // activated, - // - failure injection (tests recovery from crashes/terminations at different - // stages): - // - none (happy path), - // - fail on the first part of a proposal received, - // - fail before transactions fin received, - // - fail before proposal fin received, - // - fail on proposal decided but not committed, - // - fail on proposal committed, - // - fail on prevote received, - // - fail on precommit received. + // - [x] 3 nodes, network stalls if 1 node fails, + // - [ ] 4 nodes, network continues if 1 node fails, catchup via sync + // mechanism is activated, + // - [x] failure injection (tests recovery from crashes/terminations at + // different stages), + // - [ ] ??? any missing significant failure injection points ???. #[rstest] #[case::happy_path(None)] - #[case::fail_on_proposal_rx(Some(InjectFailure::OnProposalRx(12)))] - // TODO this test currently fails because the node doesn't properly recover proposals that - // were decided but not committed before crashing. - // #[case::fail_on_proposal_decided(Some(InjectFailure::_OnProposalDecided(12)))] + // TODO Usually proposal parts at H=13 arrive before the local consensus engine emits a decided + // upon event for H=12. The network moves to H=13, while locally H=12 is uncommitted, so + // executing and thus committing H=13 locally is deferred indefinitely. With fully implemented + // proposal recovery, this should be resolved. + #[ignore = "TODO Determine why the test fails"] + #[case::fail_on_proposal_init_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalInitRx }))] + #[ignore = "TODO Determine why the test fails"] + #[case::fail_on_block_info_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::BlockInfoRx }))] + #[ignore = "TODO Determine why the test fails"] + #[case::fail_on_transaction_batch_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::TransactionBatchRx }))] + #[ignore = "TransactionsFin is not currently present in fake proposals, so this test is the \ + same as the happy path right now."] + #[case::fail_on_transactions_fin_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::TransactionsFinRx }))] + #[ignore = "TODO Determine why the test fails"] + #[case::fail_on_proposal_commitment_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalCommitmentRx }))] + #[ignore = "TODO Determine why the test fails"] + #[case::fail_on_proposal_fin_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalFinRx }))] + #[case::fail_on_entire_proposal_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::EntireProposalRx }))] + #[case::fail_on_entire_proposal_persisted(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::EntireProposalPersisted }))] + #[ignore = "TODO Determine why the test fails"] + #[case::fail_on_prevote_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::PrevoteRx }))] + #[ignore = "TODO Proposal recovery not fully implemented yet"] + #[case::fail_on_precommit_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::PrecommitRx }))] + #[ignore = "TODO Proposal recovery not fully implemented yet"] + #[case::fail_on_proposal_decided(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalDecided }))] + #[case::fail_on_proposal_committed(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalCommitted }))] #[tokio::test] async fn consensus_3_nodes( - #[case] inject_failure: Option, + #[case] inject_failure: Option, ) -> anyhow::Result<()> { const NUM_NODES: usize = 3; // System contracts start to matter after block 10 diff --git a/crates/rpc/fixtures/0.10.0/state_updates/full.json b/crates/rpc/fixtures/0.10.0/state_updates/full.json index e51d3e6dae..20580a1c73 100644 --- a/crates/rpc/fixtures/0.10.0/state_updates/full.json +++ b/crates/rpc/fixtures/0.10.0/state_updates/full.json @@ -14,7 +14,9 @@ ] } ], - "deprecated_declared_classes": [ "0xcdef" ], + "deprecated_declared_classes": [ + "0xcdef" + ], "declared_classes": [ { "class_hash": "0xabcd", @@ -33,6 +35,12 @@ "class_hash": "0xdac" } ], + "migrated_compiled_classes": [ + { + "class_hash": "0xabcd", + "compiled_class_hash": "0xdcbb" + } + ], "nonces": [ { "contract_address": "0xca", @@ -41,4 +49,3 @@ ] } } - diff --git a/crates/rpc/fixtures/0.10.0/state_updates/pre_confirmed.json b/crates/rpc/fixtures/0.10.0/state_updates/pre_confirmed.json index 2724ef5f94..bf365bbfcc 100644 --- a/crates/rpc/fixtures/0.10.0/state_updates/pre_confirmed.json +++ b/crates/rpc/fixtures/0.10.0/state_updates/pre_confirmed.json @@ -11,7 +11,9 @@ ] } ], - "deprecated_declared_classes": [ "0xcdef" ], + "deprecated_declared_classes": [ + "0xcdef" + ], "declared_classes": [ { "class_hash": "0xabcd", @@ -30,6 +32,12 @@ "class_hash": "0xdac" } ], + "migrated_compiled_classes": [ + { + "class_hash": "0xabcd", + "compiled_class_hash": "0xdcbb" + } + ], "nonces": [ { "contract_address": "0xca", @@ -38,4 +46,3 @@ ] } } - diff --git a/crates/rpc/fixtures/0.10.0/traces/multiple_pending_txs.json b/crates/rpc/fixtures/0.10.0/traces/multiple_pending_txs.json index 536c292c92..5c745002ac 100644 --- a/crates/rpc/fixtures/0.10.0/traces/multiple_pending_txs.json +++ b/crates/rpc/fixtures/0.10.0/traces/multiple_pending_txs.json @@ -50,6 +50,7 @@ "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" } ], + "migrated_compiled_classes": [], "deployed_contracts": [], "deprecated_declared_classes": [], "nonces": [ @@ -238,6 +239,7 @@ }, "state_diff": { "declared_classes": [], + "migrated_compiled_classes": [], "deployed_contracts": [ { "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", @@ -395,6 +397,7 @@ }, "state_diff": { "declared_classes": [], + "migrated_compiled_classes": [], "deployed_contracts": [], "deprecated_declared_classes": [], "nonces": [ @@ -449,4 +452,4 @@ }, "transaction_hash": "0x2a973a52127349ccb6ecd72c31a7b1fc444a526643b4afe8a275a536075cb0e" } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.10.0/traces/multiple_txs.json b/crates/rpc/fixtures/0.10.0/traces/multiple_txs.json index 536c292c92..5c745002ac 100644 --- a/crates/rpc/fixtures/0.10.0/traces/multiple_txs.json +++ b/crates/rpc/fixtures/0.10.0/traces/multiple_txs.json @@ -50,6 +50,7 @@ "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" } ], + "migrated_compiled_classes": [], "deployed_contracts": [], "deprecated_declared_classes": [], "nonces": [ @@ -238,6 +239,7 @@ }, "state_diff": { "declared_classes": [], + "migrated_compiled_classes": [], "deployed_contracts": [ { "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", @@ -395,6 +397,7 @@ }, "state_diff": { "declared_classes": [], + "migrated_compiled_classes": [], "deployed_contracts": [], "deprecated_declared_classes": [], "nonces": [ @@ -449,4 +452,4 @@ }, "transaction_hash": "0x2a973a52127349ccb6ecd72c31a7b1fc444a526643b4afe8a275a536075cb0e" } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/mainnet.sqlite b/crates/rpc/fixtures/mainnet.sqlite index a820c03be1..0c6bb3d1b8 100644 Binary files a/crates/rpc/fixtures/mainnet.sqlite and b/crates/rpc/fixtures/mainnet.sqlite differ diff --git a/crates/rpc/src/dto/simulation.rs b/crates/rpc/src/dto/simulation.rs index 4e21dd1368..1f91359f3f 100644 --- a/crates/rpc/src/dto/simulation.rs +++ b/crates/rpc/src/dto/simulation.rs @@ -354,6 +354,13 @@ impl crate::dto::SerializeForVersion for pathfinder_executor::types::StateDiff { self.declared_classes.len(), &mut self.declared_classes.iter(), )?; + if serializer.version >= RpcVersion::V10 { + serializer.serialize_iter( + "migrated_compiled_classes", + self.migrated_compiled_classes.len(), + &mut self.migrated_compiled_classes.iter(), + )?; + } serializer.serialize_iter( "deployed_contracts", self.deployed_contracts.len(), @@ -412,6 +419,18 @@ impl crate::dto::SerializeForVersion for &pathfinder_executor::types::DeclaredSi } } +impl crate::dto::SerializeForVersion for &pathfinder_executor::types::MigratedCompiledClass { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("class_hash", &self.class_hash)?; + serializer.serialize_field("compiled_class_hash", &self.compiled_class_hash)?; + serializer.end() + } +} + impl crate::dto::SerializeForVersion for &pathfinder_executor::types::DeployedContract { fn serialize( &self, diff --git a/crates/rpc/src/dto/state_update.rs b/crates/rpc/src/dto/state_update.rs index 5811ea31d1..0786c1ff98 100644 --- a/crates/rpc/src/dto/state_update.rs +++ b/crates/rpc/src/dto/state_update.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use pathfinder_common::prelude::*; +use serde::Serialize; use crate::dto::{SerializeForVersion, Serializer}; use crate::{dto, RpcVersion}; @@ -55,6 +56,10 @@ impl SerializeForVersion for StateDiff<'_> { address: &'a ContractAddress, hash: &'a ClassHash, } + struct MigratedCompiledClass<'a> { + sierra: &'a SierraHash, + casm: &'a CasmHash, + } struct Nonce<'a> { address: &'a ContractAddress, nonce: &'a ContractNonce, @@ -88,6 +93,20 @@ impl SerializeForVersion for StateDiff<'_> { } } + impl SerializeForVersion for MigratedCompiledClass<'_> { + fn serialize( + &self, + serializer: Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + + serializer.serialize_field("class_hash", &self.sierra.0)?; + serializer.serialize_field("compiled_class_hash", &self.casm.0)?; + + serializer.end() + } + } + impl SerializeForVersion for Nonce<'_> { fn serialize( &self, @@ -153,6 +172,12 @@ impl SerializeForVersion for StateDiff<'_> { .map(|hash| ReplacedClass { address, hash }) }); + let mut migrated_compiled_classes = self + .0 + .migrated_compiled_classes + .iter() + .map(|(sierra, casm)| MigratedCompiledClass { sierra, casm }); + let mut nonces = self .0 .contract_updates @@ -182,6 +207,13 @@ impl SerializeForVersion for StateDiff<'_> { replaced_classes.clone().count(), &mut replaced_classes, )?; + if serializer.version >= RpcVersion::V10 { + serializer.serialize_iter( + "migrated_compiled_classes", + migrated_compiled_classes.clone().count(), + &mut migrated_compiled_classes, + )?; + } serializer.serialize_iter("nonces", nonces.clone().count(), &mut nonces)?; serializer.end() diff --git a/crates/rpc/src/lib.rs b/crates/rpc/src/lib.rs index 586687e60a..cc1fbe8aee 100644 --- a/crates/rpc/src/lib.rs +++ b/crates/rpc/src/lib.rs @@ -361,6 +361,9 @@ pub mod test_utils { let class1_hash = class_hash_bytes!(b"class 1 hash"); let class2_hash = class_hash_bytes!(b"class 2 hash (sierra)"); let class_hash_pending = class_hash_bytes!(b"class pending hash"); + let sierra_class = SierraHash(class2_hash.0); + let sierra_casm_hash = casm_hash_bytes!(b"casm hash"); + let sierra_casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); let storage_addr = storage_address_bytes!(b"storage addr 0"); @@ -377,6 +380,7 @@ pub mod test_utils { ); let state_update2 = StateUpdate::default() + .with_declared_sierra_class(sierra_class, sierra_casm_hash) .with_deployed_contract(contract2_addr, class2_hash) .with_contract_nonce(contract1_addr, contract_nonce!("0x10")) .with_contract_nonce(contract2_addr, contract_nonce!("0xfeed")) @@ -400,25 +404,22 @@ pub mod test_utils { let sierra_class_definition = starknet_gateway_test_fixtures::class_definitions::CAIRO_0_11_SIERRA.to_vec(); - let sierra_class = SierraHash(class2_hash.0); - let sierra_casm_hash = casm_hash_bytes!(b"non-existent"); - db_txn - .insert_cairo_class(class0_hash, &class0_definition) + .insert_cairo_class_definition(class0_hash, &class0_definition) .unwrap(); db_txn - .insert_cairo_class(class1_hash, class1_definition) + .insert_cairo_class_definition(class1_hash, class1_definition) .unwrap(); db_txn - .insert_sierra_class( + .insert_sierra_class_definition( &sierra_class, &sierra_class_definition, - &sierra_casm_hash, &[], + &sierra_casm_hash_v2, ) .unwrap(); db_txn - .insert_cairo_class(class_hash_pending, &class0_definition) + .insert_cairo_class_definition(class_hash_pending, &class0_definition) .unwrap(); // Update block 0 @@ -867,11 +868,12 @@ pub mod test_utils { starknet_gateway_test_fixtures::class_definitions::CONTRACT_DEFINITION; for cairo in state_update_copy.declared_cairo_classes { - tx.insert_cairo_class(cairo, class_definition).unwrap(); + tx.insert_cairo_class_definition(cairo, class_definition) + .unwrap(); } for (sierra, casm) in state_update_copy.declared_sierra_classes { - tx.insert_sierra_class(&sierra, b"sierra def", &casm, b"casm def") + tx.insert_sierra_class_definition(&sierra, b"sierra def", b"casm def", &casm) .unwrap(); } @@ -1064,11 +1066,12 @@ pub mod test_utils { starknet_gateway_test_fixtures::class_definitions::CONTRACT_DEFINITION; for cairo in state_update_copy.declared_cairo_classes { - tx.insert_cairo_class(cairo, class_definition).unwrap(); + tx.insert_cairo_class_definition(cairo, class_definition) + .unwrap(); } for (sierra, casm) in state_update_copy.declared_sierra_classes { - tx.insert_sierra_class(&sierra, b"sierra def", &casm, b"casm def") + tx.insert_sierra_class_definition(&sierra, b"sierra def", b"casm def", &casm) .unwrap(); } @@ -1420,18 +1423,20 @@ pub mod test_utils { starknet_gateway_test_fixtures::class_definitions::CONTRACT_DEFINITION; for cairo in pre_latest_state_update.declared_cairo_classes { - tx.insert_cairo_class(cairo, class_definition).unwrap(); + tx.insert_cairo_class_definition(cairo, class_definition) + .unwrap(); } for (sierra, casm) in pre_latest_state_update.declared_sierra_classes { - tx.insert_sierra_class(&sierra, b"sierra def", &casm, b"casm def") + tx.insert_sierra_class_definition(&sierra, b"sierra def", b"casm def", &casm) .unwrap(); } for cairo in pre_confirmed_state_update_copy.declared_cairo_classes { - tx.insert_cairo_class(cairo, class_definition).unwrap(); + tx.insert_cairo_class_definition(cairo, class_definition) + .unwrap(); } for (sierra, casm) in pre_confirmed_state_update_copy.declared_sierra_classes { - tx.insert_sierra_class(&sierra, b"sierra def", &casm, b"casm def") + tx.insert_sierra_class_definition(&sierra, b"sierra def", b"casm def", &casm) .unwrap(); } diff --git a/crates/rpc/src/method/call.rs b/crates/rpc/src/method/call.rs index c4f908bb2a..562518cb43 100644 --- a/crates/rpc/src/method/call.rs +++ b/crates/rpc/src/method/call.rs @@ -289,7 +289,7 @@ mod tests { let block1_number = BlockNumber::GENESIS + 1; let block1_hash = BlockHash(felt!("0xb01")); - tx.insert_cairo_class(CONTRACT_DEFINITION_CLASS_HASH, CONTRACT_DEFINITION) + tx.insert_cairo_class_definition(CONTRACT_DEFINITION_CLASS_HASH, CONTRACT_DEFINITION) .unwrap(); let header = BlockHeader::builder() @@ -425,11 +425,17 @@ mod tests { let casm_definition = include_bytes!("../../fixtures/contracts/storage_access.casm"); let casm_hash = casm_hash!("0x069032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8"); + let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); let mut connection = context.storage.connection().unwrap(); let tx = connection.transaction().unwrap(); - tx.insert_sierra_class(&sierra_hash, sierra_definition, &casm_hash, casm_definition) - .unwrap(); + tx.insert_sierra_class_definition( + &sierra_hash, + sierra_definition, + casm_definition, + &casm_hash_v2, + ) + .unwrap(); tx.commit().unwrap(); drop(connection); @@ -499,11 +505,17 @@ mod tests { let casm_definition = include_bytes!("../../fixtures/contracts/storage_access.casm"); let casm_hash = casm_hash!("0x069032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8"); + let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); let mut connection = context.storage.connection().unwrap(); let tx = connection.transaction().unwrap(); - tx.insert_sierra_class(&sierra_hash, sierra_definition, &casm_hash, casm_definition) - .unwrap(); + tx.insert_sierra_class_definition( + &sierra_hash, + sierra_definition, + casm_definition, + &casm_hash_v2, + ) + .unwrap(); tx.commit().unwrap(); drop(connection); @@ -594,6 +606,7 @@ mod tests { let casm_definition = include_bytes!("../../fixtures/contracts/storage_access.casm"); let casm_hash = casm_hash!("0x069032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8"); + let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); let block_number = BlockNumber::new_or_panic(last_block_header.number.get() + 1); let contract_address = contract_address!("0xcaaaa"); @@ -603,8 +616,13 @@ mod tests { let mut connection = context.storage.connection().unwrap(); let tx = connection.transaction().unwrap(); - tx.insert_sierra_class(&sierra_hash, sierra_definition, &casm_hash, casm_definition) - .unwrap(); + tx.insert_sierra_class_definition( + &sierra_hash, + sierra_definition, + casm_definition, + &casm_hash_v2, + ) + .unwrap(); let header = BlockHeader::builder() .number(block_number) @@ -724,6 +742,7 @@ mod tests { let casm_definition = include_bytes!("../../fixtures/contracts/storage_access.casm"); let casm_hash = casm_hash!("0x069032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8"); + let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); let block_number = BlockNumber::new_or_panic(last_block_header.number.get() + 1); let contract_address = contract_address!("0xcaaaa"); @@ -751,17 +770,23 @@ mod tests { ); let caller_casm_hash = casm_hash!("0x02027e88d6cde8be7669d1baf9ac51f47fe52e600ced31cafba80eee1972a25b"); + let caller_casm_hash_v2 = casm_hash_bytes!(b"caller casm hash blake"); let mut connection = context.storage.connection().unwrap(); let tx = connection.transaction().unwrap(); - tx.insert_sierra_class(&sierra_hash, sierra_definition, &casm_hash, casm_definition) - .unwrap(); - tx.insert_sierra_class( + tx.insert_sierra_class_definition( + &sierra_hash, + sierra_definition, + casm_definition, + &casm_hash_v2, + ) + .unwrap(); + tx.insert_sierra_class_definition( &caller_sierra_hash, &caller_sierra_definition, - &caller_casm_hash, caller_casm_definition, + &caller_casm_hash_v2, ) .unwrap(); diff --git a/crates/rpc/src/method/estimate_message_fee.rs b/crates/rpc/src/method/estimate_message_fee.rs index 2dc8741e50..6c1ee2ea0a 100644 --- a/crates/rpc/src/method/estimate_message_fee.rs +++ b/crates/rpc/src/method/estimate_message_fee.rs @@ -305,11 +305,11 @@ mod tests { let class_hash = class_hash!("0x032908a85d43275f8509ba5f2acae88811b293463a3521dc05ab06d534b40848"); - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &SierraHash(class_hash.0), sierra_json, - &casm_hash!("0x0564bc2cef7e8e8ded01da5999b2028ac5962669a12e12b33aee1b17b0332435"), casm_json, + &casm_hash_bytes!(b"casm hash blake"), ) .expect("insert class"); diff --git a/crates/rpc/src/method/get_compiled_casm.rs b/crates/rpc/src/method/get_compiled_casm.rs index 42453efbda..d93a0dca5d 100644 --- a/crates/rpc/src/method/get_compiled_casm.rs +++ b/crates/rpc/src/method/get_compiled_casm.rs @@ -112,7 +112,7 @@ mod tests { CasmContractEntryPoint, CasmContractEntryPoints, }; - use pathfinder_common::{casm_hash, class_hash, felt, sierra_hash, EntryPoint}; + use pathfinder_common::{casm_hash_bytes, class_hash, felt, sierra_hash, EntryPoint}; use serde_json::json; use starknet_gateway_test_fixtures::class_definitions::{ CAIRO_1_1_0_BALANCE_CASM_JSON, @@ -169,11 +169,11 @@ mod tests { let mut db = storage.connection().expect("db connection"); let tx = db.transaction().expect("tx"); - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &sierra_hash!("0x0484c163658bcce5f9916f486171ac60143a92897533aa7ff7ac800b16c63311"), CAIRO_1_1_0_BALANCE_SIERRA_JSON, - &casm_hash!("0x0484c163658bcce5f9916f486171ac60143a92897533aa7ff7ac800b16c63311"), CAIRO_1_1_0_BALANCE_CASM_JSON, + &casm_hash_bytes!(b"casm hash blake"), ) .expect("insert class"); diff --git a/crates/rpc/src/method/get_state_update.rs b/crates/rpc/src/method/get_state_update.rs index 51c3b1e008..76691c9f6a 100644 --- a/crates/rpc/src/method/get_state_update.rs +++ b/crates/rpc/src/method/get_state_update.rs @@ -466,6 +466,10 @@ mod tests { system_contract_updates: Default::default(), declared_cairo_classes, declared_sierra_classes, + migrated_compiled_classes: HashMap::from([( + sierra_hash!("0xabcd"), + casm_hash!("0xdcbb"), + )]), }; let output_full = Output::Full(Box::new(state_update.clone())); diff --git a/crates/rpc/src/method/simulate_transactions.rs b/crates/rpc/src/method/simulate_transactions.rs index 213ca197ec..9cc7d420e8 100644 --- a/crates/rpc/src/method/simulate_transactions.rs +++ b/crates/rpc/src/method/simulate_transactions.rs @@ -453,6 +453,7 @@ pub(crate) mod tests { } ], replaced_classes: vec![], + migrated_compiled_classes: vec![], nonces: BTreeMap::from([( DEPLOYED_CONTRACT_ADDRESS, contract_nonce!("0x1"), @@ -616,6 +617,7 @@ pub(crate) mod tests { declared_classes: vec![], deployed_contracts: vec![], replaced_classes: vec![], + migrated_compiled_classes: vec![], nonces: BTreeMap::from([ (account_contract_address, contract_nonce!("0x1")), ]), @@ -958,6 +960,7 @@ pub(crate) mod tests { }], deployed_contracts: vec![], replaced_classes: vec![], + migrated_compiled_classes: vec![], nonces: BTreeMap::from([(account_contract_address, contract_nonce!("0x1"))]), } } @@ -1163,6 +1166,7 @@ pub(crate) mod tests { class_hash: SIERRA_HASH, }], replaced_classes: vec![], + migrated_compiled_classes: vec![], nonces: BTreeMap::from([(account_contract_address, contract_nonce!("0x2"))]), } } @@ -1485,6 +1489,7 @@ pub(crate) mod tests { declared_classes: vec![], deployed_contracts: vec![], replaced_classes: vec![], + migrated_compiled_classes: vec![], nonces: BTreeMap::from([(account_contract_address, contract_nonce!("0x3"))]), } } @@ -1742,6 +1747,7 @@ pub(crate) mod tests { }], deployed_contracts: vec![], replaced_classes: vec![], + migrated_compiled_classes: vec![], nonces: BTreeMap::from([(account_contract_address, contract_nonce!("0x1"))]), } } @@ -1947,6 +1953,7 @@ pub(crate) mod tests { class_hash: SIERRA_HASH, }], replaced_classes: vec![], + migrated_compiled_classes: vec![], nonces: BTreeMap::from([(account_contract_address, contract_nonce!("0x2"))]), } } @@ -2269,6 +2276,7 @@ pub(crate) mod tests { declared_classes: vec![], deployed_contracts: vec![], replaced_classes: vec![], + migrated_compiled_classes: vec![], nonces: BTreeMap::from([(account_contract_address, contract_nonce!("0x3"))]), } } diff --git a/crates/rpc/src/method/trace_block_transactions.rs b/crates/rpc/src/method/trace_block_transactions.rs index a4c38c97b1..c6dce90066 100644 --- a/crates/rpc/src/method/trace_block_transactions.rs +++ b/crates/rpc/src/method/trace_block_transactions.rs @@ -720,11 +720,11 @@ pub(crate) mod tests { let mut db = storage.connection()?; let tx = db.transaction()?; - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &SierraHash(fixtures::SIERRA_HASH.0), fixtures::SIERRA_DEFINITION, - &fixtures::CASM_HASH, fixtures::CASM_DEFINITION, + &casm_hash_bytes!(b"casm hash blake"), )?; let next_block_header = BlockHeader::child_builder(&last_block_header) @@ -936,11 +936,11 @@ pub(crate) mod tests { let mut db = storage.connection()?; let tx = db.transaction()?; - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &SierraHash(fixtures::SIERRA_HASH.0), fixtures::SIERRA_DEFINITION, - &fixtures::CASM_HASH, fixtures::CASM_DEFINITION, + &casm_hash_bytes!(b"casm hash blake"), )?; let dummy_receipt = Receipt { @@ -1055,11 +1055,11 @@ pub(crate) mod tests { let mut db = storage.connection()?; let tx = db.transaction()?; - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &SierraHash(fixtures::SIERRA_HASH.0), fixtures::SIERRA_DEFINITION, - &fixtures::CASM_HASH, fixtures::CASM_DEFINITION, + &casm_hash_bytes!(b"casm hash blake"), )?; let dummy_receipt = Receipt { @@ -1201,11 +1201,11 @@ pub(crate) mod tests { let mut db = storage.connection()?; let tx = db.transaction()?; - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &SierraHash(fixtures::SIERRA_HASH.0), fixtures::SIERRA_DEFINITION, - &fixtures::CASM_HASH, fixtures::CASM_DEFINITION, + &casm_hash_bytes!(b"casm hash blake"), )?; let transaction_receipts: Vec<_> = pre_confirmed_transactions diff --git a/crates/rpc/src/test_setup.rs b/crates/rpc/src/test_setup.rs index ee702fe95d..644922c031 100644 --- a/crates/rpc/src/test_setup.rs +++ b/crates/rpc/src/test_setup.rs @@ -40,11 +40,11 @@ pub async fn test_storage StateUpdate>( ); let openzeppelin_account_casm_hash = casm_hash!("0x0224b815fab6827eb21993e02e45e532e5476af6536dcf1f7085989ba9dc5bf0"); - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &openzeppelin_account_sierra_hash, openzeppelin_account_class_definition, - &openzeppelin_account_casm_hash, openzeppelin_account_casm_definition, + &casm_hash_bytes!(b"casm hash blake"), ) .unwrap(); @@ -53,7 +53,7 @@ pub async fn test_storage StateUpdate>( include_bytes!("../fixtures/contracts/universal_deployer.json"); let universal_deployer_class_hash = class_hash!("0x06f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc"); - tx.insert_cairo_class(universal_deployer_class_hash, universal_deployer_definition) + tx.insert_cairo_class_definition(universal_deployer_class_hash, universal_deployer_definition) .unwrap(); // Declare ERC20 fee token contract class @@ -61,7 +61,7 @@ pub async fn test_storage StateUpdate>( starknet_gateway_test_fixtures::class_definitions::ERC20_CONTRACT_DEFINITION_CLASS_HASH; let erc20_class_definition = starknet_gateway_test_fixtures::class_definitions::ERC20_CONTRACT_DEFINITION; - tx.insert_cairo_class(erc20_class_hash, erc20_class_definition) + tx.insert_cairo_class_definition(erc20_class_hash, erc20_class_definition) .unwrap(); let header = BlockHeader::child_builder(&genesis) diff --git a/crates/serde/Cargo.toml b/crates/serde/Cargo.toml index bab15578c8..c431b78a35 100644 --- a/crates/serde/Cargo.toml +++ b/crates/serde/Cargo.toml @@ -18,8 +18,8 @@ categories = [ [dependencies] anyhow = { workspace = true } num-bigint = { workspace = true } -pathfinder-common = { version = "0.20.5", path = "../common" } -pathfinder-crypto = { version = "0.20.5", path = "../crypto" } +pathfinder-common = { version = "0.21.0", path = "../common" } +pathfinder-crypto = { version = "0.21.0", path = "../crypto" } primitive-types = { workspace = true, features = ["serde"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index a8d1f2edfd..1453b15e8d 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -24,8 +24,10 @@ flume = { version = "0.11.0", default-features = false, features = [ hex = { workspace = true } metrics = { workspace = true } paste = { workspace = true } +pathfinder-casm-hashes = { path = "../casm-hashes" } pathfinder-class-hash = { path = "../class-hash" } pathfinder-common = { path = "../common" } +pathfinder-compiler = { path = "../compiler" } pathfinder-crypto = { path = "../crypto" } pathfinder-ethereum = { path = "../ethereum" } pathfinder-serde = { path = "../serde" } @@ -33,6 +35,7 @@ primitive-types = { workspace = true } r2d2 = { workspace = true } r2d2_sqlite = { workspace = true } rand = { workspace = true } +rayon = { workspace = true } rusqlite = { workspace = true, features = [ "bundled", "functions", diff --git a/crates/storage/src/connection/block.rs b/crates/storage/src/connection/block.rs index 8d5d090fc6..9106f4d4b8 100644 --- a/crates/storage/src/connection/block.rs +++ b/crates/storage/src/connection/block.rs @@ -789,7 +789,7 @@ mod tests { // Add a class to test that purging a block unsets its block number; let cairo_hash = class_hash!("0x1234"); - tx.insert_cairo_class(cairo_hash, &[]).unwrap(); + tx.insert_cairo_class_definition(cairo_hash, &[]).unwrap(); tx.insert_state_update( latest.number, &StateUpdate::default().with_declared_cairo_class(cairo_hash), diff --git a/crates/storage/src/connection/class.rs b/crates/storage/src/connection/class.rs index bf546ad638..3d05eb597c 100644 --- a/crates/storage/src/connection/class.rs +++ b/crates/storage/src/connection/class.rs @@ -11,12 +11,13 @@ use pathfinder_common::{ use crate::prelude::*; impl Transaction<'_> { - pub fn insert_sierra_class( + pub fn insert_sierra_class_definition( &self, sierra_hash: &SierraHash, sierra_definition: &[u8], - casm_hash: &CasmHash, casm_definition: &[u8], + // Blake2 hash of the compiled class definition + casm_hash_v2: &CasmHash, ) -> anyhow::Result<()> { let mut compressor = zstd::bulk::Compressor::new(10).context("Creating zstd compressor")?; let sierra_definition = compressor @@ -37,26 +38,39 @@ impl Transaction<'_> { .execute( r" INSERT OR REPLACE INTO casm_definitions - (hash, definition, compiled_class_hash) - VALUES (:hash, :definition, :compiled_class_hash) + (hash, definition) + VALUES (:hash, :definition) ", named_params! { ":hash": sierra_hash, ":definition": &casm_definition, - ":compiled_class_hash": casm_hash, }, ) - .context("Inserting casm definition")?; + .context("Inserting CASM definition")?; + + self.inner() + .execute( + r" + INSERT OR REPLACE INTO casm_class_hashes_v2 + (hash, compiled_class_hash) + VALUES (:hash, :compiled_class_hash) + ", + named_params! { + ":hash": sierra_hash, + ":compiled_class_hash": casm_hash_v2, + }, + ) + .context("Inserting CASM Blake2 hash")?; Ok(()) } - pub fn update_sierra_class( + pub fn update_sierra_class_definition( &self, sierra_hash: &SierraHash, sierra_definition: &[u8], - casm_hash: &CasmHash, casm_definition: &[u8], + casm_hash_v2: &CasmHash, ) -> anyhow::Result<()> { let mut compressor = zstd::bulk::Compressor::new(10).context("Creating zstd compressor")?; let sierra_definition = compressor @@ -68,26 +82,38 @@ impl Transaction<'_> { self.inner() .execute( - r"UPDATE class_definitions SET definition=? WHERE hash=?", - params![&sierra_definition, sierra_hash], + r"UPDATE class_definitions SET definition=:definition WHERE hash=:hash", + named_params! { + ":definition": &sierra_definition, + ":hash": sierra_hash + }, ) .context("Updating sierra definition")?; self.inner() .execute( - r"UPDATE casm_definitions SET definition=:definition, compiled_class_hash=:compiled_class_hash WHERE hash=:hash", + r"INSERT OR REPLACE INTO casm_definitions(hash, definition) VALUES(:hash, :definition)", named_params! { ":definition": &casm_definition, - ":compiled_class_hash": casm_hash, ":hash": sierra_hash, }, ) .context("Updating casm definition")?; + self.inner() + .execute( + r"INSERT OR REPLACE INTO casm_class_hashes_v2(hash, compiled_class_hash) VALUES(:hash, :compiled_class_hash)", + named_params! { + ":compiled_class_hash": casm_hash_v2, + ":hash": sierra_hash, + }, + ) + .context("Inserting CASM Blake2 hash")?; + Ok(()) } - pub fn insert_cairo_class( + pub fn insert_cairo_class_definition( &self, cairo_hash: ClassHash, definition: &[u8], @@ -107,7 +133,7 @@ impl Transaction<'_> { Ok(()) } - pub fn update_cairo_class( + pub fn update_cairo_class_definition( &self, cairo_hash: ClassHash, definition: &[u8], @@ -413,9 +439,10 @@ impl Transaction<'_> { /// Returns the compiled class hash for a class. pub fn casm_hash(&self, class_hash: ClassHash) -> anyhow::Result> { - let mut stmt = self - .inner() - .prepare_cached("SELECT compiled_class_hash FROM casm_definitions WHERE hash = ?")?; + let mut stmt = self.inner().prepare_cached( + "SELECT compiled_class_hash FROM casm_class_hashes WHERE hash = ? ORDER BY \ + block_number DESC LIMIT 1", + )?; let compiled_class_hash = stmt .query_row(params![&class_hash], |row| row.get_casm_hash(0)) .optional() @@ -432,51 +459,68 @@ impl Transaction<'_> { class_hash: ClassHash, ) -> anyhow::Result> { let compiled_class_hash = match block_id { - BlockId::Latest => { - let mut stmt = self.inner().prepare_cached( - r#"SELECT - casm_definitions.compiled_class_hash - FROM - casm_definitions - INNER JOIN class_definitions ON ( - class_definitions.hash = casm_definitions.hash - ) - WHERE - casm_definitions.hash = ? - AND class_definitions.block_number IS NOT NULL"#)?; - stmt.query_row(params![&class_hash], |row| row.get_casm_hash(0)) - } - BlockId::Number(number) => { - let mut stmt = self.inner().prepare_cached( - r#"SELECT - casm_definitions.compiled_class_hash - FROM - casm_definitions - INNER JOIN class_definitions ON ( - class_definitions.hash = casm_definitions.hash - ) - WHERE - casm_definitions.hash = ? - AND class_definitions.block_number <= ?"#)?; - stmt.query_row(params![&class_hash, &number], |row| row.get_casm_hash(0)) - } - BlockId::Hash(hash) => { - let mut stmt = self.inner().prepare_cached( - r#"SELECT - casm_definitions.compiled_class_hash - FROM - casm_definitions - INNER JOIN class_definitions ON ( - class_definitions.hash = casm_definitions.hash - ) - WHERE - casm_definitions.hash = ? - AND class_definitions.block_number <= (SELECT number FROM block_headers WHERE hash = ?)"#)?; - stmt.query_row(params![&class_hash, &hash], |row| row.get_casm_hash(0)) + BlockId::Latest => { + let mut stmt = self.inner().prepare_cached( + r"SELECT + compiled_class_hash + FROM + casm_class_hashes + WHERE + hash = ? + AND block_number IS NOT NULL + ORDER BY + block_number DESC + LIMIT 1 + ", + )?; + stmt.query_row(params![&class_hash], |row| row.get_casm_hash(0)) + } + BlockId::Number(number) => { + let mut stmt = self.inner().prepare_cached( + r"SELECT + compiled_class_hash + FROM + casm_class_hashes + WHERE + hash = ? + AND block_number <= ? + ORDER BY + block_number DESC + LIMIT 1", + )?; + stmt.query_row(params![&class_hash, &number], |row| row.get_casm_hash(0)) + } + BlockId::Hash(hash) => { + let mut stmt = self.inner().prepare_cached( + r"SELECT + compiled_class_hash + FROM + casm_class_hashes + WHERE + hash = ? + AND block_number <= (SELECT number FROM block_headers WHERE hash = ?) + ORDER BY + block_number DESC + LIMIT 1", + )?; + stmt.query_row(params![&class_hash, &hash], |row| row.get_casm_hash(0)) + } } + .optional() + .context("Querying for class definition")?; + + Ok(compiled_class_hash) } - .optional() - .context("Querying for class definition")?; + + /// Returns the Blake2 compiled class hash for a class. + pub fn casm_hash_v2(&self, class_hash: ClassHash) -> anyhow::Result> { + let mut stmt = self.inner().prepare_cached( + "SELECT compiled_class_hash FROM casm_class_hashes_v2 WHERE hash = ?", + )?; + let compiled_class_hash = stmt + .query_row(params![&class_hash], |row| row.get_casm_hash(0)) + .optional() + .context("Querying for compiled class definition")?; Ok(compiled_class_hash) } @@ -527,7 +571,6 @@ impl Transaction<'_> { #[cfg(test)] mod tests { use pathfinder_common::macro_prelude::*; - use pathfinder_crypto::Felt; use super::*; @@ -536,7 +579,9 @@ mod tests { let definition = br#"{"abi":{"see":"above"},"program":{"huge":"hash"},"entry_points_by_type":{"this might be a":"hash"}}"#; - transaction.insert_cairo_class(hash, definition).unwrap(); + transaction + .insert_cairo_class_definition(hash, definition) + .unwrap(); ( hash, @@ -574,7 +619,8 @@ mod tests { let cairo_hash = class_hash_bytes!(b"cairo hash"); let cairo_definition = b"example cairo program"; - tx.insert_cairo_class(cairo_hash, cairo_definition).unwrap(); + tx.insert_cairo_class_definition(cairo_hash, cairo_definition) + .unwrap(); let definition = tx.class_definition(cairo_hash).unwrap().unwrap(); @@ -590,39 +636,32 @@ mod tests { let tx = connection.transaction().unwrap(); let sierra_hash = sierra_hash_bytes!(b"sierra hash"); - let casm_hash = casm_hash_bytes!(b"casm hash"); let sierra_definition = b"example sierra program"; let casm_definition = b"compiled sierra program"; + let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); - tx.insert_sierra_class(&sierra_hash, sierra_definition, &casm_hash, casm_definition) - .unwrap(); + tx.insert_sierra_class_definition( + &sierra_hash, + sierra_definition, + casm_definition, + &casm_hash_v2, + ) + .unwrap(); - let casm_result = tx - .inner() - .query_row( - r"SELECT * FROM casm_definitions - WHERE hash = ?", - params![&sierra_hash], - |row| { - let casm_hash = row.get_blob("compiled_class_hash").unwrap(); - let casm_hash = CasmHash(Felt::from_be_slice(casm_hash).unwrap()); - - let casm_definition = row.get_blob("definition").unwrap().to_vec(); - let casm_definition = zstd::decode_all(casm_definition.as_slice()).unwrap(); - - Ok((casm_hash, casm_definition)) - }, - ) + let definition = tx + .casm_definition(ClassHash(sierra_hash.0)) + .unwrap() .unwrap(); - - assert_eq!(casm_result.0, casm_hash); - assert_eq!(casm_result.1, casm_definition); + assert_eq!(definition, casm_definition); let definition = tx .class_definition(ClassHash(sierra_hash.0)) .unwrap() .unwrap(); assert_eq!(definition, sierra_definition); + + let retrieved_casm_hash_v2 = tx.casm_hash_v2(ClassHash(sierra_hash.0)).unwrap().unwrap(); + assert_eq!(retrieved_casm_hash_v2, casm_hash_v2); } #[test] diff --git a/crates/storage/src/connection/state_update.rs b/crates/storage/src/connection/state_update.rs index 61657a93fe..8afaca0452 100644 --- a/crates/storage/src/connection/state_update.rs +++ b/crates/storage/src/connection/state_update.rs @@ -29,6 +29,7 @@ impl Transaction<'_> { &state_update.system_contract_updates, &state_update.declared_cairo_classes, &state_update.declared_sierra_classes, + &state_update.migrated_compiled_classes, ) } @@ -43,6 +44,7 @@ impl Transaction<'_> { &state_update.system_contract_updates, &state_update.declared_cairo_classes, &state_update.declared_sierra_classes, + &state_update.migrated_compiled_classes, ) } @@ -53,6 +55,7 @@ impl Transaction<'_> { system_contract_updates: &HashMap, declared_cairo_classes: &HashSet, declared_sierra_classes: &HashMap, + migrated_compiled_classes: &HashMap, ) -> anyhow::Result<()> { let mut query_contract_address = self .inner() @@ -119,12 +122,11 @@ impl Transaction<'_> { ) .context("Preparing redeclared class insert statement")?; - // OR IGNORE is required to handle legacy syncing logic, where the casm - // definition is inserted before the state update let mut insert_casm_hash = self .inner() .prepare_cached( - "INSERT OR IGNORE INTO casm_definitions (hash, compiled_class_hash) VALUES (?, ?)", + "INSERT OR IGNORE INTO casm_class_hashes (hash, block_number, \ + compiled_class_hash) VALUES (?, ?, ?)", ) .context("Preparing casm hash insert statement")?; @@ -240,8 +242,16 @@ impl Transaction<'_> { for (sierra_hash, casm_hash) in declared_sierra_classes { insert_casm_hash - .execute(params![sierra_hash, casm_hash]) - .context("Inserting casm hash")?; + .execute(params![sierra_hash, &block_number, casm_hash]) + .context("Inserting CASM hash")?; + } + + // Starknet 0.14.1 introduced CASM hash migrations: CASM class hashes are + // gradually migrated to the new hash algorithm (using Blake2). + for (sierra_hash, casm_hash) in migrated_compiled_classes { + insert_casm_hash + .execute(params![sierra_hash, &block_number, casm_hash]) + .context("Inserting migrated CASM hash")?; } Ok(()) @@ -371,11 +381,11 @@ impl Transaction<'_> { .prepare_cached( r"SELECT class_definitions.hash AS class_hash, - casm_definitions.compiled_class_hash AS compiled_class_hash + casm_class_hashes.compiled_class_hash AS compiled_class_hash FROM class_definitions LEFT OUTER JOIN - casm_definitions ON casm_definitions.hash = class_definitions.hash + casm_class_hashes ON casm_class_hashes.hash = class_definitions.hash AND casm_class_hashes.block_number = class_definitions.block_number WHERE class_definitions.block_number = ?", ) @@ -419,6 +429,38 @@ impl Transaction<'_> { state_update = state_update.with_declared_cairo_class(class_hash); } + let mut stmt = self + .inner() + .prepare_cached( + r" + SELECT + ch1.hash AS class_hash, + ch1.compiled_class_hash AS casm_hash + FROM + casm_class_hashes ch1 + LEFT OUTER JOIN + casm_class_hashes ch2 ON ch1.hash = ch2.hash AND ch2.block_number < ch1.block_number + WHERE + ch1.block_number = ? AND ch2.block_number IS NOT NULL + ", + ) + .context("Preparing migrated compiled class query statement")?; + let mut migrated_compiled_classes = stmt + .query_map(params![&block_number], |row| { + let class_hash: ClassHash = row.get_class_hash(0)?; + let casm_hash: CasmHash = row.get_casm_hash(1)?; + + Ok((SierraHash(class_hash.0), casm_hash)) + }) + .context("Querying migrated compiled classes")?; + while let Some((sierra_hash, casm_hash)) = migrated_compiled_classes + .next() + .transpose() + .context("Iterating over migrated compiled class query rows")? + { + state_update = state_update.with_migrated_compiled_class(sierra_hash, casm_hash); + } + let mut stmt = self .inner().prepare_cached( r"SELECT @@ -966,30 +1008,28 @@ impl Transaction<'_> { to_block: BlockNumber, ) -> anyhow::Result)>> { let mut stmt = self.inner().prepare_cached( - r"WITH declared_sierra_classes(class_hash) AS ( + r"WITH sierra_casm_class_hash_changes(class_hash) AS ( SELECT - class_definitions.hash AS class_hash + hash AS class_hash FROM - class_definitions - INNER JOIN casm_definitions ON casm_definitions.hash = class_definitions.hash + casm_class_hashes WHERE - class_definitions.block_number > ?2 - AND class_definitions.block_number <= ?1 + block_number > ?2 + AND block_number <= ?1 ) SELECT class_hash, ( SELECT - casm_definitions.compiled_class_hash + compiled_class_hash FROM - class_definitions - INNER JOIN casm_definitions ON casm_definitions.hash = class_definitions.hash + casm_class_hashes WHERE - class_definitions.hash = declared_sierra_classes.class_hash - AND class_definitions.block_number <= ?2 + hash = sierra_casm_class_hash_changes.class_hash + AND block_number <= ?2 ) AS compiled_class_hash FROM - declared_sierra_classes + sierra_casm_class_hash_changes ", )?; @@ -1037,7 +1077,7 @@ mod tests { let state_update = StateUpdate::default().with_declared_cairo_class(target_class); - tx.insert_cairo_class(target_class, &[]).unwrap(); + tx.insert_cairo_class_definition(target_class, &[]).unwrap(); tx.insert_block_header(&header_0).unwrap(); tx.insert_block_header(&header_1).unwrap(); tx.insert_state_update(header_0.number, &state_update) @@ -1091,8 +1131,10 @@ mod tests { let diff_3 = StateUpdate::default(); let diff_4 = StateUpdate::default(); - tx.insert_cairo_class(original_class, definition).unwrap(); - tx.insert_cairo_class(replaced_class, definition).unwrap(); + tx.insert_cairo_class_definition(original_class, definition) + .unwrap(); + tx.insert_cairo_class_definition(replaced_class, definition) + .unwrap(); tx.insert_block_header(&header_0).unwrap(); tx.insert_block_header(&header_1).unwrap(); @@ -1161,6 +1203,7 @@ mod tests { const CAIRO_HASH: ClassHash = class_hash_bytes!(b"cairo class hash"); const SIERRA_HASH: SierraHash = sierra_hash_bytes!(b"sierra hash"); const CASM_HASH: CasmHash = casm_hash_bytes!(b"casm hash"); + const CASM_HASH_V2: CasmHash = casm_hash_bytes!(b"casm hash blake"); const CAIRO_HASH2: ClassHash = class_hash_bytes!(b"cairo class hash again"); const CONTRACT_ADDRESS: ContractAddress = contract_address_bytes!(b"contract addr"); @@ -1173,16 +1216,16 @@ mod tests { // Submit the class definitions since this occurs out of band of the header and // state diff. - tx.insert_cairo_class(CAIRO_HASH, b"cairo definition") + tx.insert_cairo_class_definition(CAIRO_HASH, b"cairo definition") .unwrap(); - tx.insert_cairo_class(CAIRO_HASH2, b"cairo definition 2") + tx.insert_cairo_class_definition(CAIRO_HASH2, b"cairo definition 2") .unwrap(); - tx.insert_sierra_class( + tx.insert_sierra_class_definition( &SIERRA_HASH, b"sierra definition", - &CASM_HASH, b"casm definition", + &CASM_HASH_V2, ) .unwrap(); @@ -1241,7 +1284,7 @@ mod tests { let tx = db.transaction().unwrap(); let result = tx.state_update(header.number.into()).unwrap().unwrap(); - assert_eq!(result, state_update); + pretty_assertions_sorted::assert_eq!(result, state_update); // check getters for compiled class let hash = tx @@ -1289,6 +1332,29 @@ mod tests { assert_eq!(result[0], 1); } + #[test] + fn migrated_compiled_classes() { + let (mut db, _state_update, header) = setup(); + + let tx = db.transaction().unwrap(); + let new_header = header + .child_builder() + .finalize_with_hash(block_hash!("0xabcdee")); + let new_state_update = StateUpdate::default() + .with_block_hash(new_header.hash) + .with_migrated_compiled_class(SIERRA_HASH, casm_hash_bytes!(b"casm hash 2")); + tx.insert_block_header(&new_header).unwrap(); + tx.insert_state_update(new_header.number, &new_state_update) + .unwrap(); + + tx.commit().unwrap(); + + let tx = db.transaction().unwrap(); + + let result = tx.state_update(new_header.number.into()).unwrap().unwrap(); + assert_eq!(result, new_state_update); + } + #[test] fn reverse_state_update() { let (mut db, _state_update, header) = setup(); diff --git a/crates/storage/src/fake.rs b/crates/storage/src/fake.rs index 5637d4460a..83b144ca69 100644 --- a/crates/storage/src/fake.rs +++ b/crates/storage/src/fake.rs @@ -34,8 +34,10 @@ pub struct Block { /// update and the user can choose to remove it prior to calling /// [`fill`] by setting it to `None`. pub state_update: Option, - pub cairo_defs: Vec<(ClassHash, Vec)>, // Cairo 0 definitions - pub sierra_defs: Vec<(SierraHash, Vec, Vec)>, // Sierra + Casm definitions + // Cairo 0 definitions + pub cairo_defs: Vec<(ClassHash, Vec)>, + // Sierra + Casm definitions + Casm Blake2 hash + pub sierra_defs: Vec<(SierraHash, Vec, Vec, CasmHash)>, } pub type BlockHashFn = Box BlockHash>; @@ -150,25 +152,21 @@ pub fn fill(storage: &Storage, blocks: &[Block], update_tries: Option(rng).into_bytes()), + ( + def, + Faker.fake_with_rng::(rng).into_bytes(), + Faker.fake_with_rng::(rng), + ), ) }) .collect::>(); @@ -445,11 +447,12 @@ pub mod generate { .collect() } }, + migrated_compiled_classes: Default::default(), }), cairo_defs: cairo_defs.into_iter().collect(), sierra_defs: sierra_defs .into_iter() - .map(|(h, (s, c))| (h, s, c)) + .map(|(h, (s, c, casm_hash_v2))| (h, s, c, casm_hash_v2)) .collect(), }); diff --git a/crates/storage/src/schema.rs b/crates/storage/src/schema.rs index f61f51fb97..870651b211 100644 --- a/crates/storage/src/schema.rs +++ b/crates/storage/src/schema.rs @@ -34,6 +34,8 @@ mod revision_0071; mod revision_0072; pub(crate) mod revision_0073; mod revision_0074; +mod revision_0075; +mod revision_0076; pub(crate) use base::base_schema; @@ -76,6 +78,8 @@ pub fn migrations() -> &'static [MigrationFn] { revision_0072::migrate, revision_0073::migrate, revision_0074::migrate, + revision_0075::migrate, + revision_0076::migrate, ] } diff --git a/crates/storage/src/schema/revision_0075.rs b/crates/storage/src/schema/revision_0075.rs new file mode 100644 index 0000000000..86fa1779aa --- /dev/null +++ b/crates/storage/src/schema/revision_0075.rs @@ -0,0 +1,63 @@ +use anyhow::Context; + +pub(crate) fn migrate(tx: &rusqlite::Transaction<'_>) -> anyhow::Result<()> { + tracing::info!("Migrating CASM definitions"); + + tx.execute_batch( + r" + CREATE TABLE casm_definitions_new( + hash BLOB PRIMARY KEY NOT NULL, + definition BLOB, + FOREIGN KEY(hash) REFERENCES class_definitions(hash) ON DELETE CASCADE + ); + CREATE TABLE casm_class_hashes( + hash BLOB NOT NULL, + block_number INTEGER, + compiled_class_hash BLOB NOT NULL, + FOREIGN KEY(hash) REFERENCES class_definitions(hash) ON DELETE CASCADE + ); + CREATE UNIQUE INDEX casm_class_hashes_hash_block_number + ON casm_class_hashes(hash, block_number); + ", + ) + .context("Creating new casm_definitions and casm_class_hashes tables")?; + + tx.execute_batch( + r" + INSERT INTO + casm_class_hashes(hash, block_number, compiled_class_hash) + SELECT + cd.hash AS hash, + cd.block_number AS block_number, + cdm.compiled_class_hash AS compiled_class_hash + FROM + class_definitions cd + INNER JOIN + casm_definitions cdm ON cd.hash = cdm.hash; + ", + ) + .context("Transferring CASM class hashes to new casm_class_hashes table")?; + + tx.execute_batch( + r" + INSERT INTO + casm_definitions_new(hash, definition) + SELECT + hash, + definition + FROM + casm_definitions; + ", + ) + .context("Transferring data to new casm_definitions table")?; + + tx.execute_batch( + r" + DROP TABLE casm_definitions; + ALTER TABLE casm_definitions_new RENAME TO casm_definitions; + ", + ) + .context("Replacing old casm_definitions with the new table")?; + + Ok(()) +} diff --git a/crates/storage/src/schema/revision_0076.rs b/crates/storage/src/schema/revision_0076.rs new file mode 100644 index 0000000000..0548c38291 --- /dev/null +++ b/crates/storage/src/schema/revision_0076.rs @@ -0,0 +1,71 @@ +use anyhow::Context; +use pathfinder_casm_hashes::get_precomputed_casm_v2_hash; +use pathfinder_common::ClassHash; +use pathfinder_crypto::Felt; +use rayon::prelude::*; + +use crate::prelude::*; + +pub(crate) fn migrate(tx: &rusqlite::Transaction<'_>) -> anyhow::Result<()> { + tracing::info!("Computing CASM v2 class hashes"); + + tx.execute_batch( + r" + CREATE TABLE casm_class_hashes_v2( + hash BLOB PRIMARY KEY NOT NULL, + compiled_class_hash BLOB NOT NULL, + FOREIGN KEY(hash) REFERENCES class_definitions(hash) ON DELETE CASCADE + ); + ", + ) + .context("Creating new casm_class_hashes_v2 tables")?; + + let mut read_casm_classes_stmt: rusqlite::Statement<'_> = + tx.prepare("SELECT hash, definition FROM casm_definitions")?; + let casm_definitions: Vec<_> = read_casm_classes_stmt + .query_map([], |row| { + let class_hash: Vec = row.get(0)?; + let class_hash = ClassHash( + Felt::from_be_slice(&class_hash) + .map_err(|e| rusqlite::types::FromSqlError::Other(e.into()))?, + ); + + match get_precomputed_casm_v2_hash(&class_hash) { + Some(casm_hash) => Ok((class_hash, Some(*casm_hash), None)), + None => { + let definition: Vec = row.get(1)?; + Ok((class_hash, None, Some(definition))) + } + } + })? + .collect(); + + let casm_v2_hashes: Vec<_> = casm_definitions + .into_par_iter() + .map(|result| { + let (class_hash, casm_hash, definition) = result.unwrap(); + match casm_hash { + Some(casm_hash) => (class_hash, casm_hash), + None => { + let definition = definition.expect("Definition must be present"); + let definition = zstd::decode_all(definition.as_slice()) + .map_err(|e| rusqlite::types::FromSqlError::Other(e.into())) + .unwrap(); + let computed_hash = + pathfinder_compiler::casm_class_hash_v2(&definition).unwrap(); + (class_hash, computed_hash) + } + } + }) + .collect(); + + tracing::info!(number_of_class_hashes=%casm_v2_hashes.len(), "Inserting CASM v2 class hashes into the database"); + + let mut insert_casm_v2_hashes_stmt: rusqlite::Statement<'_> = + tx.prepare("INSERT INTO casm_class_hashes_v2(hash, compiled_class_hash) VALUES (?, ?)")?; + for (class_hash, casm_v2_hash) in casm_v2_hashes { + insert_casm_v2_hashes_stmt.execute(params![&class_hash, &casm_v2_hash])?; + } + + Ok(()) +} diff --git a/justfile b/justfile index 52682641ef..e3292e6d22 100644 --- a/justfile +++ b/justfile @@ -1,18 +1,17 @@ default: just --summary --unsorted -test $RUST_BACKTRACE="1" *args="": test-consensus +test $RUST_BACKTRACE="1" *args="": test-consensus build-pathfinder-release cargo nextest run --no-fail-fast --all-targets --features p2p --workspace --locked \ -E 'not (test(/^p2p_network::sync_handlers::tests::prop/) | test(/^test::consensus_3_nodes/))' \ {{args}} -test-all-features $RUST_BACKTRACE="1" *args="": test-consensus +test-all-features $RUST_BACKTRACE="1" *args="": test-consensus build-pathfinder-release cargo nextest run --no-fail-fast --all-targets --all-features --workspace --locked \ -E 'not (test(/^p2p_network::sync_handlers::tests::prop/) | test(/^test::consensus_3_nodes/))' \ {{args}} test-consensus $RUST_BACKTRACE="1" *args="": - cargo build --release -p pathfinder --bin pathfinder -F p2p,consensus-integration-tests PATHFINDER_TEST_ENABLE_PORT_MARKER_FILES=1 cargo nextest run --test consensus -p pathfinder --features p2p,consensus-integration-tests --locked \ {{args}} @@ -27,6 +26,10 @@ build: build-all-features: cargo build --workspace --all-targets --all-features +# This target is used in `integration_testing_cli` test. +build-pathfinder-release: + cargo build --release -p pathfinder --bin pathfinder -F p2p,consensus-integration-tests + check: cargo check --workspace --all-targets