From df4786ad352f26e6d393a78cd81155cc112f9a7c Mon Sep 17 00:00:00 2001 From: Jon C Date: Thu, 17 Jul 2025 23:02:29 +0200 Subject: [PATCH 1/2] runtime: Inline `extend_and_hash` #### Problem `solana_sha256_hasher::extend_and_hash` requires dynamic allocation because of the vec creation, which means adding a `std` feature to the crate. However, the function is only used in one place, so it would be easier to remove it and simplify the hasher crate. #### Summary of changes Inline the usage of `extend_and_hash` so it can be safely removed from the hasher crate. --- runtime/src/bank.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 5ed84e988bba25..31a78253d0766b 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -127,7 +127,7 @@ use { runtime_transaction::RuntimeTransaction, transaction_with_meta::TransactionWithMeta, }, solana_sdk_ids::{bpf_loader_upgradeable, incinerator, native_loader}, - solana_sha256_hasher::{extend_and_hash, hashv}, + solana_sha256_hasher::hashv, solana_signature::Signature, solana_slot_hashes::SlotHashes, solana_slot_history::{Check, SlotHistory}, @@ -4455,7 +4455,9 @@ impl Bank { .unwrap() .get_hash_data(slot, self.parent_slot()); if let Some(buf) = buf { - let hard_forked_hash = extend_and_hash(&hash, &buf); + let mut hash_data = hash.as_ref().to_vec(); + hash_data.extend_from_slice(&buf); + let hard_forked_hash = hashv(&[&hash_data]); warn!("hard fork at slot {slot} by hashing {buf:?}: {hash} => {hard_forked_hash}"); hash = hard_forked_hash; } From daeebf2b4b6a91b2c30206c72acd19caad19c37d Mon Sep 17 00:00:00 2001 From: Jon C Date: Fri, 18 Jul 2025 16:15:18 +0200 Subject: [PATCH 2/2] Simplify extend_and_hash impl --- runtime/src/bank.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 31a78253d0766b..9513d539a5856f 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -4455,9 +4455,7 @@ impl Bank { .unwrap() .get_hash_data(slot, self.parent_slot()); if let Some(buf) = buf { - let mut hash_data = hash.as_ref().to_vec(); - hash_data.extend_from_slice(&buf); - let hard_forked_hash = hashv(&[&hash_data]); + let hard_forked_hash = hashv(&[hash.as_ref(), &buf]); warn!("hard fork at slot {slot} by hashing {buf:?}: {hash} => {hard_forked_hash}"); hash = hard_forked_hash; }