Skip to content

Commit ef66f41

Browse files
authored
feat: handle codec v8 (#196)
1 parent 8bd0c93 commit ef66f41

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

crates/codec/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ scroll-l1.workspace = true
1818
derive_more = { version = "2.0", default-features = false }
1919
eyre = { workspace = true, optional = true }
2020
thiserror = { version = "2.0", default-features = false }
21-
zstd = "0.13"
21+
zstd = "=0.13.3"
2222

2323
[dev-dependencies]
2424
eyre.workspace = true

crates/codec/src/decoding/v7/mod.rs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub fn decode_v7(blob: &[u8]) -> Result<Batch, DecodingError> {
3131

3232
// check version.
3333
let version = from_be_bytes_slice_and_advance_buf!(u8, buf);
34-
debug_assert!(version == 7, "incorrect blob version");
34+
debug_assert!((version == 7) | (version == 8), "incorrect blob version");
3535

3636
let blob_payload_size = from_be_bytes_slice_and_advance_buf!(u32, 3, buf) as usize;
3737

@@ -249,4 +249,46 @@ mod tests {
249249

250250
Ok(())
251251
}
252+
253+
#[test]
254+
fn test_should_decode_v8_compressed() -> eyre::Result<()> {
255+
let blob = read_to_bytes("./testdata/blob_v8_compressed.bin")?;
256+
let data = decode_v7(&blob)?.data;
257+
let blocks = data.l2_blocks();
258+
259+
assert_eq!(blocks.len(), 58);
260+
261+
let last_block = blocks.last().expect("should have 58 blocks");
262+
let expected_block = L2Block {
263+
transactions: vec![
264+
bytes!(
265+
"02f8758308275083143d60843b9aca0084b2d05e00834c4b40943a905745e381ad6d7c4db8212d0c30d4bbe37725808474a7cbcdc001a0470e60befbfdba0b3fd7590404a48132c95842f0c3b1d84f8ac3c506c628f635a021144d1b9f5da723bd27fbb2627d3b50954cfcad5f72bed964f2cc8f32c46654"
266+
),
267+
bytes!(
268+
"02f8958308275083143d61843b9aca0084b2d05e00832dc6c0943a905745e381ad6d7c4db8212d0c30d4bbe3772580a4d09e4bbf0000000000000000000000000000000000000000000000000000000000000007c080a0a4bd8a066265dce20a7a1e96c95789c880ff02b708ba3c7ff08dae0d7bf8de1fa05c5b5d1c2697f4ba7fd87cf20f4c930aa5cf35199badf27f943639de81bb5fd8"
269+
),
270+
bytes!(
271+
"02f8958308275083143d62843b9aca0084b2d05e00832dc6c0943a905745e381ad6d7c4db8212d0c30d4bbe3772580a44625b410000000000000000000000000000000000000000000000000000000000000000cc001a0e6ac53b914e54ccb2eef57e496f8eac1f5b52dbb99251d0afa7a85c14255de89a05abab3d12b042d18f3b1188e3bfdd009283093369b7988df29103d71526e2d0d"
272+
),
273+
bytes!(
274+
"02f8958308275083143d63843b9aca0084b2d05e00832dc6c0943a905745e381ad6d7c4db8212d0c30d4bbe3772580a4d09e4bbf0000000000000000000000000000000000000000000000000000000000000003c001a0bd35feb72aa8938ec5a3aa5f8098f8691c9cdd630ff6a528f318c5b30da0fb8ca07cbb21086720fe2b7af34340768b3d720cc5373c6d31856be573f8fe12f065fe"
275+
),
276+
bytes!(
277+
"02f8758308275083143d64843b9aca0084b2d05e00834c4b40943a905745e381ad6d7c4db8212d0c30d4bbe37725808474a7cbcdc001a0cd0acc35b4469b9dafabc9d73cd4bc879fa7a3d93b6732b32c2f6483c546e5fca07c4dec06bcda6d9098b6901f3c4b4f6bb3e3a38ba9b88b922c415c4fd5fa77cc"
278+
),
279+
],
280+
context: BlockContext {
281+
number: 16586209,
282+
timestamp: 1752226578,
283+
base_fee: U256::from(2400297),
284+
gas_limit: 20000000,
285+
num_transactions: 5,
286+
num_l1_messages: 0,
287+
},
288+
};
289+
290+
assert_eq!(last_block, &expected_block);
291+
292+
Ok(())
293+
}
252294
}

crates/codec/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ impl Codec {
5959
let blob = input.blob().ok_or(DecodingError::MissingBlob)?;
6060
decode_v4(calldata, blob.as_ref())?
6161
}
62-
7 => {
62+
7..=8 => {
6363
let blob = input.blob().ok_or(DecodingError::MissingBlob)?;
6464
decode_v7(blob.as_ref())?
6565
}

crates/codec/testdata/blob_v8_compressed.bin

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)