From 2b60b4e486945ac1bf0abb1beb0a6b2fb49061f1 Mon Sep 17 00:00:00 2001 From: megakabi Date: Wed, 26 Nov 2025 18:10:14 +0800 Subject: [PATCH] refactor: optimize vector initialization with size hints in state and precompile modules --- crates/database/src/states/state.rs | 8 +++++--- crates/precompile/src/bls12_381/blst.rs | 10 ++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/crates/database/src/states/state.rs b/crates/database/src/states/state.rs index 22f8263343..756dab1b68 100644 --- a/crates/database/src/states/state.rs +++ b/crates/database/src/states/state.rs @@ -122,9 +122,11 @@ impl State { addresses: impl IntoIterator, ) -> Result, DB::Error> { // Make transition and update cache state - let mut transitions = Vec::new(); - let mut balances = Vec::new(); - for address in addresses { + let addresses_iter = addresses.into_iter(); + let (lower, _) = addresses_iter.size_hint(); + let mut transitions = Vec::with_capacity(lower); + let mut balances = Vec::with_capacity(lower); + for address in addresses_iter { let original_account = self.load_cache_account(address)?; let (balance, transition) = original_account.drain_balance(); balances.push(balance); diff --git a/crates/precompile/src/bls12_381/blst.rs b/crates/precompile/src/bls12_381/blst.rs index d20c7af561..6200382a25 100644 --- a/crates/precompile/src/bls12_381/blst.rs +++ b/crates/precompile/src/bls12_381/blst.rs @@ -681,8 +681,9 @@ pub(crate) fn map_fp2_to_g2_bytes( pub(crate) fn p1_msm_bytes( point_scalar_pairs: impl Iterator>, ) -> Result<[u8; G1_LENGTH], crate::PrecompileError> { - let mut g1_points = Vec::new(); - let mut scalars = Vec::new(); + let (lower, _) = point_scalar_pairs.size_hint(); + let mut g1_points = Vec::with_capacity(lower); + let mut scalars = Vec::with_capacity(lower); // Parse all points and scalars for pair_result in point_scalar_pairs { @@ -718,8 +719,9 @@ pub(crate) fn p1_msm_bytes( pub(crate) fn p2_msm_bytes( point_scalar_pairs: impl Iterator>, ) -> Result<[u8; G2_LENGTH], crate::PrecompileError> { - let mut g2_points = Vec::new(); - let mut scalars = Vec::new(); + let (lower, _) = point_scalar_pairs.size_hint(); + let mut g2_points = Vec::with_capacity(lower); + let mut scalars = Vec::with_capacity(lower); // Parse all points and scalars for pair_result in point_scalar_pairs {