From 1a4ebf957309c09c9b3a1b762643e6903db334bf Mon Sep 17 00:00:00 2001 From: James Date: Fri, 22 Aug 2025 10:50:21 -0400 Subject: [PATCH 1/2] refactor: BREAKING JournalEncode::encoded produces Bytes --- src/journal/coder.rs | 11 +++++------ src/journal/update.rs | 8 ++++---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/journal/coder.rs b/src/journal/coder.rs index 435bdf3..02721a5 100644 --- a/src/journal/coder.rs +++ b/src/journal/coder.rs @@ -2,7 +2,7 @@ use crate::journal::{AcctDiff, BundleStateIndex, InfoOutcome}; use alloy::{ consensus::Header, primitives::{Address, Bytes, B256, U256}, - rlp::{Buf, BufMut}, + rlp::{Buf, BufMut, BytesMut}, }; use revm::{ bytecode::eip7702::{Eip7702Bytecode, Eip7702DecodeError}, @@ -13,7 +13,6 @@ use std::{ borrow::{Cow, ToOwned}, collections::BTreeMap, fmt::Debug, - vec::Vec, }; type Result = core::result::Result; @@ -156,10 +155,10 @@ pub trait JournalEncode: Debug { fn encode(&self, buf: &mut dyn BufMut); /// Shortcut to encode the type into a new vec. - fn encoded(&self) -> Vec { - let mut buf = Vec::new(); + fn encoded(&self) -> Bytes { + let mut buf = BytesMut::with_capacity(self.serialized_size()); self.encode(&mut buf); - buf + buf.freeze().into() } } @@ -641,7 +640,7 @@ mod test { let enc = JournalEncode::encoded(expected); let ty_name = core::any::type_name::(); assert_eq!(enc.len(), expected.serialized_size(), "{ty_name}"); - let dec = T::decode(&mut enc.as_slice()).expect("decoding failed"); + let dec = T::decode(&mut enc.as_ref()).expect("decoding failed"); assert_eq!(&dec, expected, "{ty_name}"); } diff --git a/src/journal/update.rs b/src/journal/update.rs index 4e9d7f1..f741f83 100644 --- a/src/journal/update.rs +++ b/src/journal/update.rs @@ -1,5 +1,5 @@ use crate::journal::{BundleStateIndex, JournalDecode, JournalDecodeError, JournalEncode}; -use alloy::primitives::{keccak256, B256}; +use alloy::primitives::{keccak256, Bytes, B256}; use std::sync::OnceLock; /// Journal associated with a block @@ -15,7 +15,7 @@ pub struct BlockUpdate<'a> { journal: BundleStateIndex<'a>, /// The serialized journal - serialized: OnceLock>, + serialized: OnceLock, /// The hash of the serialized journal hash: OnceLock, @@ -50,7 +50,7 @@ impl<'a> BlockUpdate<'a> { /// Serialize the block update. pub fn serialized(&self) -> &[u8] { - self.serialized.get_or_init(|| JournalEncode::encoded(self)).as_slice() + self.serialized.get_or_init(|| JournalEncode::encoded(self)).as_ref() } /// Serialize and hash the block update. @@ -78,7 +78,7 @@ impl JournalDecode for BlockUpdate<'static> { height: JournalDecode::decode(buf)?, prev_journal_hash: JournalDecode::decode(buf)?, journal: JournalDecode::decode(buf)?, - serialized: OnceLock::from(original.to_vec()), + serialized: OnceLock::from(Bytes::copy_from_slice(original)), hash: OnceLock::from(keccak256(original)), }) } From f190766e6d93df3fcc5c19907b5bafdc8df5768f Mon Sep 17 00:00:00 2001 From: James Date: Fri, 22 Aug 2025 10:51:25 -0400 Subject: [PATCH 2/2] chore: version bump --- Cargo.toml | 2 +- src/journal/index.rs | 2 +- src/journal/mod.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index acd3b37..26acd51 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "trevm" -version = "0.27.1" +version = "0.27.2" rust-version = "1.83.0" edition = "2021" authors = ["init4"] diff --git a/src/journal/index.rs b/src/journal/index.rs index 609c170..630c15d 100644 --- a/src/journal/index.rs +++ b/src/journal/index.rs @@ -160,7 +160,7 @@ impl From> for BundleAccount { /// # fn make_index(bundle_state: &BundleState) -> Result<(), JournalDecodeError> { /// let index = BundleStateIndex::from(bundle_state); /// let serialized_index = index.encoded(); -/// let decoded = BundleStateIndex::decode(&mut serialized_index.as_slice())?; +/// let decoded = BundleStateIndex::decode(&mut serialized_index.as_ref())?; /// assert_eq!(index, decoded); /// # Ok(()) /// # } diff --git a/src/journal/mod.rs b/src/journal/mod.rs index 89fedc1..1e3249e 100644 --- a/src/journal/mod.rs +++ b/src/journal/mod.rs @@ -31,7 +31,7 @@ //! //! // We can serialize it and deserialize it :) //! let serialized_index = index.encoded(); -//! let decoded = BundleStateIndex::decode(&mut serialized_index.as_slice())?; +//! let decoded = BundleStateIndex::decode(&mut serialized_index.as_ref())?; //! assert_eq!(index, decoded); //! //! // It contains information about accounts