From 74162cf2b197dacf3c83a6bd0ce1d6d415d952db Mon Sep 17 00:00:00 2001 From: UfukNode <208284577+UfukNode@users.noreply.github.com> Date: Sun, 9 Aug 2026 16:20:53 +0300 Subject: [PATCH] fix(store): guard nullifier sync page invariant --- crates/store/src/db/models/queries/nullifiers.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/store/src/db/models/queries/nullifiers.rs b/crates/store/src/db/models/queries/nullifiers.rs index 7dc319adb..e29c87e16 100644 --- a/crates/store/src/db/models/queries/nullifiers.rs +++ b/crates/store/src/db/models/queries/nullifiers.rs @@ -72,6 +72,13 @@ pub(crate) fn select_nullifiers_by_prefix( pub const BLOCK_NUM_BYTES: usize = 4; // 32 bits per block number pub const ROW_OVERHEAD_BYTES: usize = NULLIFIER_BYTES + BLOCK_NUM_BYTES; // 36 bytes pub const MAX_ROWS: usize = MAX_RESPONSE_PAYLOAD_BYTES / ROW_OVERHEAD_BYTES; + // Pagination reports the last fully-included block, so it only makes progress if every block + // fits within a single page. A block that exceeded `MAX_ROWS` nullifiers would produce an + // empty page and stall clients forever on that block. + const _: () = assert!( + miden_protocol::MAX_INPUT_NOTES_PER_BLOCK <= MAX_ROWS, + "a block's nullifiers must fit in one response page or pagination cannot make progress", + ); assert_eq!(prefix_len, 16, "Only 16-bit prefixes are supported");