From 7baf239871bcbb3dfbc2f83594d0317d91636954 Mon Sep 17 00:00:00 2001 From: StackOverflowExcept1on <109800286+StackOverflowExcept1on@users.noreply.github.com> Date: Sun, 22 Dec 2024 15:46:28 +0300 Subject: [PATCH] fix(alloy-eips): `SimpleCoder::decode_one()` should return `Ok(None)` --- crates/eips/src/eip4844/builder.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/crates/eips/src/eip4844/builder.rs b/crates/eips/src/eip4844/builder.rs index 137144ae216..b88e8858e9c 100644 --- a/crates/eips/src/eip4844/builder.rs +++ b/crates/eips/src/eip4844/builder.rs @@ -192,10 +192,12 @@ impl SimpleCoder { /// Decode an some bytes from an iterator of valid FEs. /// /// Returns `Ok(Some(data))` if there is some data. - /// Returns `Ok(None)` if there is no data (length prefix is 0). + /// Returns `Ok(None)` if there is no data (empty iterator, length prefix is 0). /// Returns `Err(())` if there is an error. fn decode_one<'a>(mut fes: impl Iterator>) -> Result>, ()> { - let first = fes.next().ok_or(())?; + let Some(first) = fes.next() else { + return Ok(None); + }; let mut num_bytes = u64::from_be_bytes(first.as_ref()[1..9].try_into().unwrap()) as usize; // if no more bytes is 0, we're done @@ -434,6 +436,17 @@ mod tests { assert_eq!(decoded, data); } + #[test] + fn big_ingestion_strategy() { + let data = vec![1u8; 126_945]; + let builder = SidecarBuilder::::from_slice(&data); + + let blobs = builder.take(); + let decoded = SimpleCoder.decode_all(&blobs).unwrap().concat(); + + assert_eq!(decoded, data); + } + #[test] fn it_ingests() { // test ingesting a lot of data.