Skip to content

Commit f3596c0

Browse files
committed
chore(fast-inbox): follow the checkpoint header inHash removal through stdlib and node (A-1387)
Mirror the consensus-format change in the stdlib CheckpointHeader (struct, serialization, viem, hash fixtures) and the circuit-ABI stdlib types (ParityPublicInputs, InboxParityPrivateInputs) and their noir conversion mappings. Sweep the header-inHash populate/read sites: the lightweight checkpoint builder, the checkpoint-proving orchestrator, the sequencer fixture writer, and the checkpoint proposal (its block-level inHash now sources zero rather than the removed header field). Regenerate the checkpoint p2p wire fixture for the shorter header. Replace NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP with MAX_L1_TO_L2_MSGS_PER_CHECKPOINT across the TS consumers. The block-level inHash struct fields (BlockProposal, L2Block) and stdlib/src/messaging/in_hash.ts remain for the node cleanup issue.
1 parent 69fb76a commit f3596c0

32 files changed

Lines changed: 74 additions & 161 deletions

File tree

yarn-project/archiver/src/l1/calldata_retriever.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,7 +1252,7 @@ describe('CalldataRetriever', () => {
12521252
expect(result.blockHash).toBe(tx.blockHash);
12531253

12541254
// Verify all components are properly decoded
1255-
expect(result.header.inHash).toBeInstanceOf(Fr);
1255+
expect(result.header.inboxRollingHash).toBeInstanceOf(Fr);
12561256
expect(result.header.gasFees).toBeInstanceOf(GasFees);
12571257

12581258
// Verify instrumentation was called
@@ -1326,7 +1326,7 @@ describe('CalldataRetriever', () => {
13261326
expect(result.blockHash).toBe(blockHash);
13271327

13281328
// Verify all components are properly decoded
1329-
expect(result.header.inHash).toBeInstanceOf(Fr);
1329+
expect(result.header.inboxRollingHash).toBeInstanceOf(Fr);
13301330
expect(result.header.gasFees).toBeInstanceOf(GasFees);
13311331

13321332
// Verify proxy implementation was checked

yarn-project/archiver/src/store/message_store.test.ts

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
1+
import { MAX_L1_TO_L2_MSGS_PER_CHECKPOINT } from '@aztec/constants';
22
import { CheckpointNumber } from '@aztec/foundation/branded-types';
33
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
44
import { Fr } from '@aztec/foundation/curves/bn254';
@@ -165,9 +165,9 @@ describe('MessageStore', () => {
165165

166166
await checkMessages(msgs);
167167
const blockMessages = await messageStore.getL1ToL2Messages(CheckpointNumber(initialCheckpointNumber + 1));
168-
expect(blockMessages).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
168+
expect(blockMessages).toHaveLength(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT);
169169
expect(blockMessages).toEqual(
170-
msgs.slice(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * 2).map(m => m.leaf),
170+
msgs.slice(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT, MAX_L1_TO_L2_MSGS_PER_CHECKPOINT * 2).map(m => m.leaf),
171171
);
172172
});
173173

@@ -244,7 +244,7 @@ describe('MessageStore', () => {
244244
overrideFn: (msg, i) => ({
245245
...msg,
246246
checkpointNumber: CheckpointNumber(2),
247-
index: BigInt(i + NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * 2),
247+
index: BigInt(i + MAX_L1_TO_L2_MSGS_PER_CHECKPOINT * 2),
248248
}),
249249
});
250250
msgs[1].index++;
@@ -257,31 +257,19 @@ describe('MessageStore', () => {
257257
await messageStore.addL1ToL2Messages(msgs);
258258
await checkMessages(msgs);
259259

260-
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(1))).toHaveLength(
261-
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
262-
);
263-
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(2))).toHaveLength(
264-
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
265-
);
266-
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(3))).toHaveLength(
267-
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
268-
);
269-
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(4))).toHaveLength(
270-
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
271-
);
260+
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(1))).toHaveLength(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT);
261+
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(2))).toHaveLength(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT);
262+
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(3))).toHaveLength(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT);
263+
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(4))).toHaveLength(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT);
272264

273265
await messageStore.rollbackL1ToL2MessagesToCheckpoint(CheckpointNumber(2));
274266

275-
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(1))).toHaveLength(
276-
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
277-
);
278-
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(2))).toHaveLength(
279-
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
280-
);
267+
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(1))).toHaveLength(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT);
268+
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(2))).toHaveLength(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT);
281269
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(3))).toHaveLength(0);
282270
expect(await messageStore.getL1ToL2Messages(CheckpointNumber(4))).toHaveLength(0);
283271

284-
await checkMessages(msgs.slice(0, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * 2));
272+
await checkMessages(msgs.slice(0, MAX_L1_TO_L2_MSGS_PER_CHECKPOINT * 2));
285273
});
286274

287275
it('removes messages starting with the given index', async () => {

yarn-project/archiver/src/test/mock_structs.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
import {
2-
MAX_NOTE_HASHES_PER_TX,
3-
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
4-
PRIVATE_LOG_SIZE_IN_FIELDS,
5-
} from '@aztec/constants';
1+
import { MAX_L1_TO_L2_MSGS_PER_CHECKPOINT, MAX_NOTE_HASHES_PER_TX, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
62
import { makeTuple } from '@aztec/foundation/array';
73
import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
84
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
@@ -101,13 +97,13 @@ export function makeInboxMessagesWithFullBlocks(
10197
opts: { initialCheckpointNumber?: CheckpointNumber } = {},
10298
): InboxMessage[] {
10399
const { initialCheckpointNumber = CheckpointNumber(13) } = opts;
104-
return makeInboxMessages(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * blockCount, {
100+
return makeInboxMessages(MAX_L1_TO_L2_MSGS_PER_CHECKPOINT * blockCount, {
105101
overrideFn: (msg, i) => {
106102
const checkpointNumber = CheckpointNumber(
107-
initialCheckpointNumber + Math.floor(i / NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP),
103+
initialCheckpointNumber + Math.floor(i / MAX_L1_TO_L2_MSGS_PER_CHECKPOINT),
108104
);
109105
const index =
110-
InboxLeaf.smallestIndexForCheckpoint(checkpointNumber) + BigInt(i % NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
106+
InboxLeaf.smallestIndexForCheckpoint(checkpointNumber) + BigInt(i % MAX_L1_TO_L2_MSGS_PER_CHECKPOINT);
111107
return { ...msg, checkpointNumber, index };
112108
},
113109
});

yarn-project/ethereum/src/contracts/rollup.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ export type ViemHeader = {
7979
lastArchiveRoot: `0x${string}`;
8080
blockHeadersHash: `0x${string}`;
8181
blobsHash: `0x${string}`;
82-
inHash: `0x${string}`;
8382
inboxRollingHash: `0x${string}`;
8483
outHash: `0x${string}`;
8584
slotNumber: bigint;

yarn-project/ivc-integration/src/base_parity_inputs.test.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { createLogger } from '@aztec/foundation/log';
1515
import { Noir } from '@aztec/noir-noir_js';
1616
import { ServerCircuitArtifacts } from '@aztec/noir-protocol-circuits-types/server';
1717
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
18-
import { L1ToL2MessageSponge, computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
18+
import { L1ToL2MessageSponge } from '@aztec/stdlib/messaging';
1919
import { InboxParityPrivateInputs } from '@aztec/stdlib/parity';
2020

2121
import { jest } from '@jest/globals';
@@ -47,7 +47,6 @@ describe('Inbox Parity Benchmark Inputs', () => {
4747
l1ToL2Messages,
4848
Fr.ZERO,
4949
L1ToL2MessageSponge.empty(),
50-
computeInHashFromL1ToL2Messages(l1ToL2Messages),
5150
vkTreeRoot,
5251
Fr.random(),
5352
);
@@ -75,8 +74,6 @@ describe('Inbox Parity Benchmark Inputs', () => {
7574
num_absorbed: startSponge.numAbsorbed,
7675
},
7776
// eslint-disable-next-line camelcase
78-
in_hash: inputs.inHash.toString(),
79-
// eslint-disable-next-line camelcase
8077
vk_tree_root: inputs.vkTreeRoot.toString(),
8178
// eslint-disable-next-line camelcase
8279
prover_id: inputs.proverId.toString(),

yarn-project/ivc-integration/src/bb_js_debug.test.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { createLogger } from '@aztec/foundation/log';
1212
import { Noir } from '@aztec/noir-noir_js';
1313
import { ServerCircuitArtifacts } from '@aztec/noir-protocol-circuits-types/server';
1414
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
15-
import { L1ToL2MessageSponge, computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
15+
import { L1ToL2MessageSponge } from '@aztec/stdlib/messaging';
1616
import { InboxParityPrivateInputs } from '@aztec/stdlib/parity';
1717

1818
import { jest } from '@jest/globals';
@@ -62,7 +62,6 @@ describe('BB.js Debug Wrapper', () => {
6262
l1ToL2Messages,
6363
Fr.ZERO,
6464
L1ToL2MessageSponge.empty(),
65-
computeInHashFromL1ToL2Messages(l1ToL2Messages),
6665
vkTreeRoot,
6766
Fr.random(),
6867
);
@@ -88,8 +87,6 @@ describe('BB.js Debug Wrapper', () => {
8887
num_absorbed: startSponge.numAbsorbed,
8988
},
9089
// eslint-disable-next-line camelcase
91-
in_hash: inboxParityInputs.inHash.toString(),
92-
// eslint-disable-next-line camelcase
9390
vk_tree_root: inboxParityInputs.vkTreeRoot.toString(),
9491
// eslint-disable-next-line camelcase
9592
prover_id: inboxParityInputs.proverId.toString(),

yarn-project/noir-protocol-circuits-types/src/conversion/server.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,6 @@ export function mapAvmProofDataToNoir(
481481

482482
function mapParityPublicInputsToNoir(parityPublicInputs: ParityPublicInputs): ParityPublicInputsNoir {
483483
return {
484-
in_hash: mapFieldToNoir(parityPublicInputs.inHash),
485484
start_rolling_hash: mapFieldToNoir(parityPublicInputs.startRollingHash),
486485
end_rolling_hash: mapFieldToNoir(parityPublicInputs.endRollingHash),
487486
start_sponge: mapL1ToL2MessageSpongeToNoir(parityPublicInputs.startSponge),
@@ -520,7 +519,6 @@ export function mapRootRollupPublicInputsFromNoir(
520519
*/
521520
export function mapParityPublicInputsFromNoir(parityPublicInputs: ParityPublicInputsNoir): ParityPublicInputs {
522521
return new ParityPublicInputs(
523-
mapFieldFromNoir(parityPublicInputs.in_hash),
524522
mapFieldFromNoir(parityPublicInputs.start_rolling_hash),
525523
mapFieldFromNoir(parityPublicInputs.end_rolling_hash),
526524
mapL1ToL2MessageSpongeFromNoir(parityPublicInputs.start_sponge),
@@ -739,7 +737,6 @@ export function mapInboxParityPrivateInputsToNoir(inputs: InboxParityPrivateInpu
739737
num_msgs: mapNumberToNoir(inputs.numMessages),
740738
start_rolling_hash: mapFieldToNoir(inputs.startRollingHash),
741739
start_sponge: mapL1ToL2MessageSpongeToNoir(inputs.startSponge),
742-
in_hash: mapFieldToNoir(inputs.inHash),
743740
vk_tree_root: mapFieldToNoir(inputs.vkTreeRoot),
744741
prover_id: mapFieldToNoir(inputs.proverId),
745742
};

yarn-project/prover-client/src/light/lightweight_checkpoint_builder.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ export class LightweightCheckpointBuilder {
253253
this.blocks.push(block);
254254

255255
// Accumulate the streaming bundle now that the block is fully built, so a mid-build throw above leaves the
256-
// checkpoint's message list (and thus its inHash/rolling hash) consistent with the blocks actually built.
256+
// checkpoint's message list (and thus its rolling hash) consistent with the blocks actually built.
257257
if (opts.l1ToL2Messages !== undefined) {
258258
this.l1ToL2Messages.push(...opts.l1ToL2Messages);
259259
}
@@ -290,9 +290,6 @@ export class LightweightCheckpointBuilder {
290290
const blobs = await getBlobsPerL1Block(this.blobFields);
291291
const blobsHash = computeBlobsHashFromBlobs(blobs);
292292

293-
// Legacy inHash is dead post-flip; the checkpoint header carries zero (AZIP-22 Fast Inbox). The consensus
294-
// rolling hash over the consumed messages is the authoritative Inbox commitment.
295-
const inHash = Fr.ZERO;
296293
const inboxRollingHash = accumulateInboxRollingHash(this.previousInboxRollingHash, this.l1ToL2Messages);
297294

298295
const { slotNumber, coinbase, feeRecipient, gasFees } = this.constants;
@@ -310,7 +307,6 @@ export class LightweightCheckpointBuilder {
310307
const header = CheckpointHeader.from({
311308
lastArchiveRoot: this.lastArchives[0].root,
312309
blobsHash,
313-
inHash,
314310
inboxRollingHash,
315311
epochOutHash,
316312
blockHeadersHash,

yarn-project/prover-client/src/orchestrator/checkpoint-proving-state.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,15 +161,13 @@ export class CheckpointProvingState {
161161
/**
162162
* Builds the checkpoint's single InboxParity input. The circuit is sized to the smallest ladder rung that fits the
163163
* message count; the rolling hash starts from the previous checkpoint's end and the message sponge starts empty (it
164-
* resets per checkpoint). `in_hash` (the L1 frontier root) is supplied as an unconstrained pass-through hint.
164+
* resets per checkpoint).
165165
*/
166166
public getInboxParityInputs(): InboxParityPrivateInputs {
167167
return InboxParityPrivateInputs.fromMessages(
168168
this.l1ToL2Messages,
169169
this.startInboxRollingHash,
170170
L1ToL2MessageSponge.empty(),
171-
// Legacy in_hash is dead post-flip; the InboxParity pass-through hint carries zero (AZIP-22 Fast Inbox).
172-
Fr.ZERO,
173171
this.constants.vkTreeRoot,
174172
this.constants.proverId,
175173
);

yarn-project/prover-client/src/test/bb_prover_parity.test.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { createLogger } from '@aztec/foundation/log';
55
import type { ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types/server';
66
import { ServerCircuitVks } from '@aztec/noir-protocol-circuits-types/server/vks';
77
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
8-
import { L1ToL2MessageSponge, computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
8+
import { L1ToL2MessageSponge } from '@aztec/stdlib/messaging';
99
import { INBOX_PARITY_SIZES, InboxParityPrivateInputs, type InboxParitySize } from '@aztec/stdlib/parity';
1010

1111
import { TestContext } from '../mocks/test_context.js';
@@ -48,15 +48,11 @@ describe('prover/bb_prover/parity', () => {
4848
// Fill the rung with real messages so `numMessages === size` (the largest circuit for that rung).
4949
const messages = Array.from({ length: size }, () => Fr.random());
5050
const proverId = Fr.random();
51-
// The in_hash is a sha256 frontier root (top byte zeroed to fit the field), which `ParityPublicInputs` enforces;
52-
// compute it from the messages rather than using a raw random field.
53-
const inHash = computeInHashFromL1ToL2Messages(messages);
5451

5552
const inputs = InboxParityPrivateInputs.fromMessages(
5653
messages,
5754
Fr.ZERO,
5855
L1ToL2MessageSponge.empty(),
59-
inHash,
6056
getVKTreeRoot(),
6157
proverId,
6258
);

0 commit comments

Comments
 (0)