@aztec/prover-client 1.0.0-nightly.20250611 → 1.0.0-nightly.20250613

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -73,5 +73,5 @@ export const updateExpectedTreesFromTxs = async (db, txs)=>{
73
73
  }
74
74
  };
75
75
  export const makeGlobals = (blockNumber)=>{
76
- return new GlobalVariables(Fr.ZERO, Fr.ZERO, new Fr(blockNumber), new Fr(blockNumber), new Fr(blockNumber), EthAddress.ZERO, AztecAddress.ZERO, GasFees.empty());
76
+ return new GlobalVariables(Fr.ZERO, Fr.ZERO, blockNumber /** block number */ , new Fr(blockNumber), BigInt(blockNumber), EthAddress.ZERO, AztecAddress.ZERO, GasFees.empty());
77
77
  };
@@ -127,7 +127,7 @@ export class TestContext {
127
127
  const opts = typeof seedOrOpts === 'number' ? {
128
128
  seed: seedOrOpts
129
129
  } : seedOrOpts;
130
- const blockNum = (opts?.globalVariables ?? this.globalVariables).blockNumber.toNumber();
130
+ const blockNum = (opts?.globalVariables ?? this.globalVariables).blockNumber;
131
131
  const header = this.getBlockHeader(blockNum - 1);
132
132
  const tx = await makeBloatedProcessedTx({
133
133
  header,
@@ -146,7 +146,7 @@ export class TestContext {
146
146
  }
147
147
  /** Creates a block with the given number of txs and adds it to world-state */ async makePendingBlock(numTxs, numMsgs = 0, blockNumOrGlobals = this.globalVariables, makeProcessedTxOpts = ()=>({})) {
148
148
  const globalVariables = typeof blockNumOrGlobals === 'number' ? makeGlobals(blockNumOrGlobals) : blockNumOrGlobals;
149
- const blockNum = globalVariables.blockNumber.toNumber();
149
+ const blockNum = globalVariables.blockNumber;
150
150
  const db = await this.worldState.fork();
151
151
  const msgs = times(numMsgs, (i)=>new Fr(blockNum * 100 + i));
152
152
  const txs = await timesParallel(numTxs, (i)=>this.makeProcessedTx({
@@ -27,12 +27,13 @@ export declare const buildBlobHints: (txEffects: TxEffect[]) => Promise<{
27
27
  blobsHash: Fr;
28
28
  }>;
29
29
  export declare const accumulateBlobs: (txs: ProcessedTx[], startBlobAccumulator: BatchedBlobAccumulator) => Promise<BatchedBlobAccumulator>;
30
- export declare const buildHeaderFromCircuitOutputs: (previousRollupData: BaseOrMergeRollupPublicInputs[], parityPublicInputs: ParityPublicInputs, rootRollupOutputs: BlockRootOrBlockMergePublicInputs, blobsHash: Buffer<ArrayBufferLike>, endState: StateReference) => BlockHeader;
30
+ export declare const buildHeaderFromCircuitOutputs: (previousRollupData: BaseOrMergeRollupPublicInputs[], parityPublicInputs: ParityPublicInputs, rootRollupOutputs: BlockRootOrBlockMergePublicInputs, blobsHash: Fr, endState: StateReference) => BlockHeader;
31
31
  export declare const buildHeaderAndBodyFromTxs: (txs: ProcessedTx[], globalVariables: GlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeReadOperations) => Promise<{
32
32
  header: BlockHeader;
33
33
  body: Body;
34
34
  }>;
35
- export declare function getBlobsHashFromBlobs(inputs: Blob[]): Buffer;
35
+ export declare function getBlobsHashFromBlobs(inputs: Blob[]): Fr;
36
+ export declare function getEmptyBlockBlobsHash(): Promise<Fr>;
36
37
  export declare function validateBlockRootOutput(blockRootOutput: BlockRootOrBlockMergePublicInputs, blockHeader: BlockHeader, db: MerkleTreeReadOperations): Promise<void>;
37
38
  export declare const validateState: (state: StateReference, db: MerkleTreeReadOperations) => Promise<void>;
38
39
  export declare function getLastSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<Tuple<Fr, {
@@ -1 +1 @@
1
- {"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,9 @@ import { Blob } from '@aztec/blob-lib';
2
2
  import { ARCHIVE_HEIGHT, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NOTE_HASH_SUBTREE_HEIGHT, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
3
3
  import { makeTuple } from '@aztec/foundation/array';
4
4
  import { padArrayEnd } from '@aztec/foundation/collection';
5
- import { sha256Trunc } from '@aztec/foundation/crypto';
5
+ import { sha256ToField, sha256Trunc } from '@aztec/foundation/crypto';
6
6
  import { BLS12Point, Fr } from '@aztec/foundation/fields';
7
- import { assertLength, serializeToBuffer, toFriendlyJSON } from '@aztec/foundation/serialize';
7
+ import { assertLength, toFriendlyJSON } from '@aztec/foundation/serialize';
8
8
  import { MembershipWitness, MerkleTreeCalculator, computeUnbalancedMerkleRoot } from '@aztec/foundation/trees';
9
9
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
10
10
  import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
@@ -114,7 +114,7 @@ export async function getPublicDataHint(db, leafSlot) {
114
114
  }
115
115
  export const buildBlobHints = runInSpan('BlockBuilderHelpers', 'buildBlobHints', async (_span, txEffects)=>{
116
116
  const blobFields = txEffects.flatMap((tx)=>tx.toBlobFields());
117
- const blobs = await Blob.getBlobs(blobFields);
117
+ const blobs = await Blob.getBlobsPerBlock(blobFields);
118
118
  // TODO(#13430): The blobsHash is confusingly similar to blobCommitmentsHash, calculated from below blobCommitments:
119
119
  // - blobsHash := sha256([blobhash_0, ..., blobhash_m]) = a hash of all blob hashes in a block with m+1 blobs inserted into the header, exists so a user can cross check blobs.
120
120
  // - blobCommitmentsHash := sha256( ...sha256(sha256(C_0), C_1) ... C_n) = iteratively calculated hash of all blob commitments in an epoch with n+1 blobs (see calculateBlobCommitmentsHash()),
@@ -131,7 +131,7 @@ export const buildBlobHints = runInSpan('BlockBuilderHelpers', 'buildBlobHints',
131
131
  });
132
132
  export const accumulateBlobs = runInSpan('BlockBuilderHelpers', 'accumulateBlobs', async (_span, txs, startBlobAccumulator)=>{
133
133
  const blobFields = txs.flatMap((tx)=>tx.txEffect.toBlobFields());
134
- const blobs = await Blob.getBlobs(blobFields);
134
+ const blobs = await Blob.getBlobsPerBlock(blobFields);
135
135
  const endBlobAccumulator = startBlobAccumulator.accumulateBlobs(blobs);
136
136
  return endBlobAccumulator;
137
137
  });
@@ -139,24 +139,23 @@ export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'b
139
139
  if (previousRollupData.length > 2) {
140
140
  throw new Error(`There can't be more than 2 previous rollups. Received ${previousRollupData.length}.`);
141
141
  }
142
- const numTxs = previousRollupData.reduce((sum, d)=>sum + d.numTxs, 0);
143
- const outHash = previousRollupData.length === 0 ? Fr.ZERO.toBuffer() : previousRollupData.length === 1 ? previousRollupData[0].outHash.toBuffer() : sha256Trunc(Buffer.concat([
144
- previousRollupData[0].outHash.toBuffer(),
145
- previousRollupData[1].outHash.toBuffer()
146
- ]));
147
- const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityPublicInputs.shaRoot.toBuffer(), outHash);
142
+ const outHash = previousRollupData.length === 0 ? Fr.ZERO : previousRollupData.length === 1 ? previousRollupData[0].outHash : sha256ToField([
143
+ previousRollupData[0].outHash,
144
+ previousRollupData[1].outHash
145
+ ]);
146
+ const contentCommitment = new ContentCommitment(blobsHash, parityPublicInputs.shaRoot, outHash);
148
147
  const accumulatedFees = previousRollupData.reduce((sum, d)=>sum.add(d.accumulatedFees), Fr.ZERO);
149
148
  const accumulatedManaUsed = previousRollupData.reduce((sum, d)=>sum.add(d.accumulatedManaUsed), Fr.ZERO);
150
149
  return new BlockHeader(rootRollupOutputs.previousArchive, contentCommitment, endState, rootRollupOutputs.endGlobalVariables, accumulatedFees, accumulatedManaUsed);
151
150
  });
152
151
  export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs, globalVariables, l1ToL2Messages, db)=>{
153
- span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber.toNumber());
152
+ span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber);
154
153
  const stateReference = new StateReference(await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db), new PartialStateReference(await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db), await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db), await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE, db)));
155
154
  const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
156
155
  const txEffects = txs.map((tx)=>tx.txEffect);
157
156
  const body = new Body(txEffects);
158
157
  const numTxs = body.txEffects.length;
159
- const outHash = numTxs === 0 ? Fr.ZERO.toBuffer() : numTxs === 1 ? body.txEffects[0].txOutHash() : computeUnbalancedMerkleRoot(body.txEffects.map((tx)=>tx.txOutHash()), TxEffect.empty().txOutHash());
158
+ const outHash = numTxs === 0 ? Fr.ZERO : numTxs === 1 ? new Fr(body.txEffects[0].txOutHash()) : new Fr(computeUnbalancedMerkleRoot(body.txEffects.map((tx)=>tx.txOutHash()), TxEffect.empty().txOutHash()));
160
159
  l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
161
160
  const hasher = (left, right)=>Promise.resolve(sha256Trunc(Buffer.concat([
162
161
  left,
@@ -164,9 +163,9 @@ export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'build
164
163
  ])));
165
164
  const parityHeight = Math.ceil(Math.log2(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
166
165
  const parityCalculator = await MerkleTreeCalculator.create(parityHeight, Fr.ZERO.toBuffer(), hasher);
167
- const parityShaRoot = await parityCalculator.computeTreeRoot(l1ToL2Messages.map((msg)=>msg.toBuffer()));
168
- const blobsHash = getBlobsHashFromBlobs(await Blob.getBlobs(body.toBlobFields()));
169
- const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityShaRoot, outHash);
166
+ const parityShaRoot = new Fr(await parityCalculator.computeTreeRoot(l1ToL2Messages.map((msg)=>msg.toBuffer())));
167
+ const blobsHash = getBlobsHashFromBlobs(await Blob.getBlobsPerBlock(body.toBlobFields()));
168
+ const contentCommitment = new ContentCommitment(blobsHash, parityShaRoot, outHash);
170
169
  const fees = body.txEffects.reduce((acc, tx)=>acc.add(tx.transactionFee), Fr.ZERO);
171
170
  const manaUsed = txs.reduce((acc, tx)=>acc.add(new Fr(tx.gasUsed.billedGas.l2Gas)), Fr.ZERO);
172
171
  const header = new BlockHeader(previousArchive, contentCommitment, stateReference, globalVariables, fees, manaUsed);
@@ -176,8 +175,14 @@ export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'build
176
175
  };
177
176
  });
178
177
  export function getBlobsHashFromBlobs(inputs) {
179
- const blobHashes = serializeToBuffer(inputs.map((b)=>b.getEthVersionedBlobHash()));
180
- return sha256Trunc(serializeToBuffer(blobHashes));
178
+ return sha256ToField(inputs.map((b)=>b.getEthVersionedBlobHash()));
179
+ }
180
+ // Note: tested against the constant values in block_root/empty_block_root_rollup_inputs.nr, set by block_building_helpers.test.ts.
181
+ // Having this separate fn hopefully makes it clear how we treat empty blocks and their blobs, and won't break if we decide to change how
182
+ // getBlobsPerBlock() works on empty input.
183
+ export async function getEmptyBlockBlobsHash() {
184
+ const blobHash = (await Blob.getBlobsPerBlock([])).map((b)=>b.getEthVersionedBlobHash());
185
+ return sha256ToField(blobHash);
181
186
  }
182
187
  // Validate that the roots of all local trees match the output of the root circuit simulation
183
188
  // TODO: does this get called?
@@ -38,7 +38,7 @@ export declare class BlockProvingState {
38
38
  spongeBlobState: SpongeBlob | undefined;
39
39
  startBlobAccumulator: BatchedBlobAccumulator | undefined;
40
40
  endBlobAccumulator: BatchedBlobAccumulator | undefined;
41
- blobsHash: Buffer | undefined;
41
+ blobsHash: Fr | undefined;
42
42
  totalNumTxs: number;
43
43
  private txs;
44
44
  error: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,wCAAwC,EAC7C,KAAK,yCAAyC,EAG/C,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAc,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,yBAAyB,CAAC;AAGrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,KAAK,kBAAkB,EAAmB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EACL,KAAK,6BAA6B,EAElC,KAAK,iCAAiC,EAGtC,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EAEjB,6BAA6B,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAkB,MAAM,kBAAkB,CAAC;AAI1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;AAEtE;;;GAGG;AACH,qBAAa,iBAAiB;;aAoBV,KAAK,EAAE,MAAM;aACb,eAAe,EAAE,eAAe;aAChC,iBAAiB,EAAE,EAAE,EAAE;aACvB,yBAAyB,EAAE,sBAAsB;IACjE,OAAO,CAAC,QAAQ,CAAC,+BAA+B;IAChD,OAAO,CAAC,QAAQ,CAAC,uCAAuC;IACxD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IA7B9B,OAAO,CAAC,yBAAyB,CAEF;IAC/B,OAAO,CAAC,wBAAwB,CAAoE;IACpG,OAAO,CAAC,uBAAuB,CAAgE;IAC/F,OAAO,CAAC,sBAAsB,CAEhB;IACP,sBAAsB,EAAE,OAAO,CAAS;IACxC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,eAAe,EAAE,UAAU,GAAG,SAAS,CAAC;IACxC,oBAAoB,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACzD,kBAAkB,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACvD,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAwB;IAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGf,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,EAAE,EAAE,EACvB,yBAAyB,EAAE,sBAAsB,EAChD,+BAA+B,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,wCAAwC,CAAC,EAC3F,uCAAuC,EAAE,sBAAsB,EAC/D,mBAAmB,EAAE,sBAAsB,EAC3C,sBAAsB,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,EACxD,qBAAqB,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,EACvD,mBAAmB,EAAE,WAAW,EAChC,WAAW,EAAE,iBAAiB;IASjD,IAAW,WAAW,WAErB;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAanD,QAAQ,CAAC,EAAE,EAAE,cAAc;IAS3B,kBAAkB,CACvB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,6BAA6B,CAC1C,6BAA6B,EAC7B,OAAO,yCAAyC,CACjD,GACA,gBAAgB;IAIZ,mBAAmB,CACxB,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,6BAA6B,CAC1C,6BAA6B,EAC7B,OAAO,yCAAyC,CACjD;IAMI,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,6BAA6B,CAAC,kBAAkB,CAAC;IASlG,kBAAkB,CAAC,aAAa,EAAE,6BAA6B,CAAC,kBAAkB,CAAC;IAInF,uBAAuB,CAC5B,aAAa,EAAE,6BAA6B,CAC1C,iCAAiC,EACjC,OAAO,yCAAyC,CACjD;IAKI,QAAQ,CAAC,KAAK,EAAE,OAAO;IAIvB,uBAAuB,CAAC,WAAW,EAAE,sBAAsB;IAI3D,qBAAqB,CAAC,WAAW,EAAE,sBAAsB;IAInD,eAAe;IAa5B,IAAW,MAAM,qBAEhB;IAED,yFAAyF;IACzF,IAAW,WAAW,IAAI,MAAM,CAE/B;IAEM,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB;IAI5C,oBAAoB,CAAC,aAAa,EAAE,gBAAgB;IAS9C,+BAA+B,CAAC,QAAQ,EAAE,EAAE;;;;;;;;;;IAqD5C,yBAAyB,CAAC,QAAQ,EAAE,EAAE;IAwC5C,mBAAmB;IAYnB,iBAAiB,CAAC,OAAO,EAAE,MAAM;IAI3B,6BAA6B;IAiCnC,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB;IAKhD,yBAAyB;IAWzB,oBAAoB;IAIpB,UAAU;IAKV,WAAW;IAIX,MAAM,CAAC,MAAM,EAAE,MAAM;CA0D7B"}
1
+ {"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { BatchedBlobAccumulator, SpongeBlob } from '@aztec/blob-lib';
1
+ import { BatchedBlobAccumulator, BlobAccumulatorPublicInputs, SpongeBlob } from '@aztec/blob-lib';
2
2
  import { BLOBS_PER_BLOCK, FIELDS_PER_BLOB, NUM_BASE_PARITY_PER_ROOT_PARITY } from '@aztec/constants';
3
3
  import { padArrayEnd } from '@aztec/foundation/collection';
4
4
  import { BLS12Point, Fr } from '@aztec/foundation/fields';
@@ -9,7 +9,7 @@ import { RootParityInput, RootParityInputs } from '@aztec/stdlib/parity';
9
9
  import { BlockConstantData, BlockRootRollupBlobData, BlockRootRollupData, BlockRootRollupInputs, EmptyBlockRootRollupInputs, MergeRollupInputs, PreviousRollupData, SingleTxBlockRootRollupInputs } from '@aztec/stdlib/rollup';
10
10
  import { StateReference } from '@aztec/stdlib/tx';
11
11
  import { VkData } from '@aztec/stdlib/vks';
12
- import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-helpers.js';
12
+ import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs, getEmptyBlockBlobsHash } from './block-building-helpers.js';
13
13
  /**
14
14
  * The current state of the proving schedule for a given block. Managed by ProvingState.
15
15
  * Contains the raw inputs and intermediate state to generate every constituent proof in the tree.
@@ -62,7 +62,7 @@ import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs } from '
62
62
  }
63
63
  }
64
64
  get blockNumber() {
65
- return this.globalVariables.blockNumber.toNumber();
65
+ return this.globalVariables.blockNumber;
66
66
  }
67
67
  startNewBlock(numTxs, numBlobFields) {
68
68
  if (this.spongeBlobState) {
@@ -157,6 +157,7 @@ import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs } from '
157
157
  vkTreeRoot: getVKTreeRoot(),
158
158
  protocolContractTreeRoot
159
159
  });
160
+ this.blobsHash = await getEmptyBlockBlobsHash();
160
161
  return {
161
162
  rollupType: 'empty-block-root-rollup',
162
163
  inputs: EmptyBlockRootRollupInputs.from({
@@ -168,7 +169,7 @@ import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs } from '
168
169
  }
169
170
  const previousRollupData = await Promise.all(nonEmptyProofs.map((p)=>this.#getPreviousRollupData(p)));
170
171
  const blobData = await this.#getBlockRootRollupBlobData();
171
- this.blobsHash = blobData.blobsHash.toBuffer();
172
+ this.blobsHash = blobData.blobsHash;
172
173
  if (previousRollupData.length === 1) {
173
174
  return {
174
175
  rollupType: 'single-tx-block-root-rollup',
@@ -198,7 +199,7 @@ import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs } from '
198
199
  previousArchiveSiblingPath: this.lastArchiveSiblingPath,
199
200
  newArchiveSiblingPath: this.newArchiveSiblingPath,
200
201
  previousBlockHeader,
201
- startBlobAccumulator: this.endBlobAccumulator.toBlobAccumulatorPublicInputs(),
202
+ startBlobAccumulator: BlobAccumulatorPublicInputs.fromBatchedBlobAccumulator(this.endBlobAccumulator),
202
203
  finalBlobChallenges: this.endBlobAccumulator.finalBlobChallenges,
203
204
  proverId
204
205
  });
@@ -238,10 +239,6 @@ import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs } from '
238
239
  endPartialState = lastRollup.inputs.end;
239
240
  }
240
241
  const endState = new StateReference(this.l1ToL2MessageTreeSnapshotAfterInsertion, endPartialState);
241
- // TODO(MW): cleanup
242
- if (!this.blobsHash) {
243
- this.blobsHash = (await buildBlobHints(this.txs.map((txProvingState)=>txProvingState.processedTx.txEffect))).blobsHash.toBuffer();
244
- }
245
242
  return buildHeaderFromCircuitOutputs(previousRollupData.map((d)=>d.baseOrMergeRollupPublicInputs), this.rootParityProvingOutput.inputs, this.blockRootProvingOutput.inputs, this.blobsHash, endState);
246
243
  }
247
244
  isReadyForMergeRollup(location) {
@@ -274,7 +271,7 @@ import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs } from '
274
271
  previousArchiveSiblingPath: this.lastArchiveSiblingPath,
275
272
  newArchiveSiblingPath: this.newArchiveSiblingPath,
276
273
  previousBlockHeader: this.previousBlockHeader,
277
- startBlobAccumulator: this.startBlobAccumulator.toBlobAccumulatorPublicInputs(),
274
+ startBlobAccumulator: BlobAccumulatorPublicInputs.fromBatchedBlobAccumulator(this.startBlobAccumulator),
278
275
  finalBlobChallenges: this.startBlobAccumulator.finalBlobChallenges,
279
276
  proverId
280
277
  });
@@ -45,7 +45,7 @@ var PROVING_STATE_LIFECYCLE = /*#__PURE__*/ function(PROVING_STATE_LIFECYCLE) {
45
45
  // Adds a block to the proving state, returns its index
46
46
  // Will update the proving life cycle if this is the last block
47
47
  startNewBlock(globalVariables, l1ToL2Messages, l1ToL2MessageTreeSnapshot, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, lastArchiveSiblingPath, newArchiveSiblingPath, previousBlockHeader) {
48
- const index = globalVariables.blockNumber.toNumber() - this.firstBlockNumber;
48
+ const index = globalVariables.blockNumber - this.firstBlockNumber;
49
49
  const block = new BlockProvingState(index, globalVariables, l1ToL2Messages, l1ToL2MessageTreeSnapshot, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, lastArchiveSnapshot, lastArchiveSiblingPath, newArchiveSiblingPath, previousBlockHeader, this);
50
50
  this.blocks[index] = block;
51
51
  if (this.blocks.filter((b)=>!!b).length === this.totalNumBlocks) {
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAU9D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAS9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EAGxB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAAE,KAAK,sBAAsB,EAAgB,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAmB,MAAM,kBAAkB,CAAC;AACtH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAqBjC;;;;;;;;;GASG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IASnD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAV3B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,kBAAkB,CAAyB;IAEnD,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,GAAG,CAAqD;gBAGtD,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,mBAAmB,EAClB,QAAQ,EAAE,EAAE,EAC7B,eAAe,GAAE,eAAsC;IAKzD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEM,WAAW,IAAI,EAAE;IAIjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,aAAa,CAClB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,2BAA2B,EAAE,2BAA2B;IAmB1D;;;;;OAKG;IAIU,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW;IAgDnH;;;OAGG;IAIU,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDtD;;;OAGG;IAEU,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE;IAcxC;;;OAGG;IAIU,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BnG,oDAAoD;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;YAQzB,UAAU;cAqCR,kCAAkC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,sBAAsB;IAWvG;;OAEG;IACI,MAAM;IAQb;;OAEG;IACU,aAAa;;;;;IA6B1B;;;;OAIG;YACW,kBAAkB;IAShC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;YAwDT,uBAAuB;YAkCvB,uBAAuB;IAyCrC,OAAO,CAAC,iBAAiB;IA8CzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,kBAAkB;YA0BZ,sBAAsB;IA8EpC,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,gCAAgC;IAUxC,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,uBAAuB;YAwBjB,mBAAmB;IA6BjC,OAAO,CAAC,iBAAiB;YA4BX,8BAA8B;YAa9B,8BAA8B;IA2B5C,OAAO,CAAC,mCAAmC;IAa3C,OAAO,CAAC,yBAAyB;IASjC;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAmDjB,OAAO,CAAC,4BAA4B;CAWrC"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAU3F,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAS9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EAGxB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAAE,KAAK,sBAAsB,EAAgB,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAmB,MAAM,kBAAkB,CAAC;AACtH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAqBjC;;;;;;;;;GASG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IASnD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAV3B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,kBAAkB,CAAyB;IAEnD,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,GAAG,CAAqD;gBAGtD,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,mBAAmB,EAClB,QAAQ,EAAE,EAAE,EAC7B,eAAe,GAAE,eAAsC;IAKzD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEM,WAAW,IAAI,EAAE;IAIjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,aAAa,CAClB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,2BAA2B,EAAE,2BAA2B;IAmB1D;;;;;OAKG;IAIU,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW;IA8CnH;;;OAGG;IAIU,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDtD;;;OAGG;IAEU,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE;IAcxC;;;OAGG;IAIU,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BnG,oDAAoD;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;YAQzB,UAAU;cAqCR,kCAAkC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,sBAAsB;IAWvG;;OAEG;IACI,MAAM;IAQb;;OAEG;IACU,aAAa;;;;;IA6B1B;;;;OAIG;YACW,kBAAkB;IAShC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;YAwDT,uBAAuB;YAkCvB,uBAAuB;IAyCrC,OAAO,CAAC,iBAAiB;IA8CzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,kBAAkB;YA0BZ,sBAAsB;IAgFpC,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,gCAAgC;IAUxC,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,uBAAuB;YAwBjB,mBAAmB;IA6BjC,OAAO,CAAC,iBAAiB;YA4BX,8BAA8B;YAa9B,8BAA8B;IA2B5C,OAAO,CAAC,mCAAmC;IAa3C,OAAO,CAAC,yBAAyB;IASjC;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAmDjB,OAAO,CAAC,4BAA4B;CAWrC"}
@@ -4,6 +4,7 @@ function _ts_decorate(decorators, target, key, desc) {
4
4
  else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  }
7
+ import { BlobAccumulatorPublicInputs } from '@aztec/blob-lib';
7
8
  import { L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_BASE_PARITY_PER_ROOT_PARITY } from '@aztec/constants';
8
9
  import { padArrayEnd, times } from '@aztec/foundation/collection';
9
10
  import { AbortError } from '@aztec/foundation/error';
@@ -92,10 +93,10 @@ const logger = createLogger('prover-client:orchestrator');
92
93
  if (!this.provingState?.isAcceptingBlocks()) {
93
94
  throw new Error(`Epoch not accepting further blocks`);
94
95
  }
95
- logger.info(`Starting block ${globalVariables.blockNumber.toNumber()} for slot ${globalVariables.slotNumber.toNumber()}`);
96
+ logger.info(`Starting block ${globalVariables.blockNumber} for slot ${globalVariables.slotNumber.toNumber()}`);
96
97
  // Fork world state at the end of the immediately previous block
97
- const db = await this.dbProvider.fork(globalVariables.blockNumber.toNumber() - 1);
98
- this.dbs.set(globalVariables.blockNumber.toNumber(), db);
98
+ const db = await this.dbProvider.fork(globalVariables.blockNumber - 1);
99
+ this.dbs.set(globalVariables.blockNumber, db);
99
100
  // we start the block by enqueueing all of the base parity circuits
100
101
  const { l1ToL2MessageTreeSnapshot, l1ToL2MessageSubtreeSiblingPath, l1ToL2MessageTreeSnapshotAfterInsertion, baseParityInputs } = await this.prepareBaseParityInputs(l1ToL2Messages, db);
101
102
  // Get archive snapshot before this block lands
@@ -118,7 +119,7 @@ const logger = createLogger('prover-client:orchestrator');
118
119
  logger.warn(`Provided no txs to orchestrator addTxs.`);
119
120
  return;
120
121
  }
121
- const blockNumber = txs[0].globalVariables.blockNumber.toNumber();
122
+ const blockNumber = txs[0].globalVariables.blockNumber;
122
123
  const provingState = this.provingState?.getBlockProvingStateByBlockNumber(blockNumber);
123
124
  if (!provingState) {
124
125
  throw new Error(`Block proving state for ${blockNumber} not found`);
@@ -485,10 +486,10 @@ const logger = createLogger('prover-client:orchestrator');
485
486
  logger.error(`New archive root mismatch.\nCircuit: ${result.inputs.newArchive.root}\nComputed: ${dbArchiveRoot}`);
486
487
  provingState.reject(`New archive root mismatch.`);
487
488
  }
488
- const endBlobAccumulator = provingState.endBlobAccumulator;
489
+ const endBlobAccumulatorPublicInputs = BlobAccumulatorPublicInputs.fromBatchedBlobAccumulator(provingState.endBlobAccumulator);
489
490
  const circuitEndBlobAccumulatorState = result.inputs.blobPublicInputs.endBlobAccumulator;
490
- if (!circuitEndBlobAccumulatorState.equals(endBlobAccumulator.toBlobAccumulatorPublicInputs())) {
491
- logger.error(`Blob accumulator state mismatch.\nCircuit: ${inspect(circuitEndBlobAccumulatorState)}\nComputed: ${inspect(endBlobAccumulator.toBlobAccumulatorPublicInputs())}`);
491
+ if (!circuitEndBlobAccumulatorState.equals(endBlobAccumulatorPublicInputs)) {
492
+ logger.error(`Blob accumulator state mismatch.\nCircuit: ${inspect(circuitEndBlobAccumulatorState)}\nComputed: ${inspect(endBlobAccumulatorPublicInputs)}`);
492
493
  provingState.reject(`Blob accumulator state mismatch.`);
493
494
  }
494
495
  logger.debug(`Completed ${rollupType} proof for block ${provingState.block.number}`);
@@ -690,7 +691,7 @@ const logger = createLogger('prover-client:orchestrator');
690
691
  }
691
692
  _ts_decorate([
692
693
  trackSpan('ProvingOrchestrator.startNewBlock', (globalVariables)=>({
693
- [Attributes.BLOCK_NUMBER]: globalVariables.blockNumber.toNumber()
694
+ [Attributes.BLOCK_NUMBER]: globalVariables.blockNumber
694
695
  }))
695
696
  ], ProvingOrchestrator.prototype, "startNewBlock", null);
696
697
  _ts_decorate([
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/prover-client",
3
- "version": "1.0.0-nightly.20250611",
3
+ "version": "1.0.0-nightly.20250613",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -65,19 +65,19 @@
65
65
  "testEnvironment": "../../foundation/src/jest/env.mjs"
66
66
  },
67
67
  "dependencies": {
68
- "@aztec/bb-prover": "1.0.0-nightly.20250611",
69
- "@aztec/blob-lib": "1.0.0-nightly.20250611",
70
- "@aztec/constants": "1.0.0-nightly.20250611",
71
- "@aztec/ethereum": "1.0.0-nightly.20250611",
72
- "@aztec/foundation": "1.0.0-nightly.20250611",
73
- "@aztec/kv-store": "1.0.0-nightly.20250611",
74
- "@aztec/noir-protocol-circuits-types": "1.0.0-nightly.20250611",
75
- "@aztec/noir-types": "1.0.0-nightly.20250611",
76
- "@aztec/protocol-contracts": "1.0.0-nightly.20250611",
77
- "@aztec/simulator": "1.0.0-nightly.20250611",
78
- "@aztec/stdlib": "1.0.0-nightly.20250611",
79
- "@aztec/telemetry-client": "1.0.0-nightly.20250611",
80
- "@aztec/world-state": "1.0.0-nightly.20250611",
68
+ "@aztec/bb-prover": "1.0.0-nightly.20250613",
69
+ "@aztec/blob-lib": "1.0.0-nightly.20250613",
70
+ "@aztec/constants": "1.0.0-nightly.20250613",
71
+ "@aztec/ethereum": "1.0.0-nightly.20250613",
72
+ "@aztec/foundation": "1.0.0-nightly.20250613",
73
+ "@aztec/kv-store": "1.0.0-nightly.20250613",
74
+ "@aztec/noir-protocol-circuits-types": "1.0.0-nightly.20250613",
75
+ "@aztec/noir-types": "1.0.0-nightly.20250613",
76
+ "@aztec/protocol-contracts": "1.0.0-nightly.20250613",
77
+ "@aztec/simulator": "1.0.0-nightly.20250613",
78
+ "@aztec/stdlib": "1.0.0-nightly.20250613",
79
+ "@aztec/telemetry-client": "1.0.0-nightly.20250613",
80
+ "@aztec/world-state": "1.0.0-nightly.20250613",
81
81
  "@google-cloud/storage": "^7.15.0",
82
82
  "@iarna/toml": "^2.2.5",
83
83
  "commander": "^12.1.0",
@@ -87,7 +87,7 @@
87
87
  "zod": "^3.23.8"
88
88
  },
89
89
  "devDependencies": {
90
- "@aztec/noir-contracts.js": "1.0.0-nightly.20250611",
90
+ "@aztec/noir-contracts.js": "1.0.0-nightly.20250613",
91
91
  "@jest/globals": "^29.5.0",
92
92
  "@types/jest": "^29.5.0",
93
93
  "@types/node": "^22.15.17",
@@ -107,9 +107,9 @@ export const makeGlobals = (blockNumber: number) => {
107
107
  return new GlobalVariables(
108
108
  Fr.ZERO,
109
109
  Fr.ZERO,
110
- new Fr(blockNumber) /** block number */,
110
+ blockNumber /** block number */,
111
111
  new Fr(blockNumber) /** slot number */,
112
- new Fr(blockNumber) /** timestamp */,
112
+ BigInt(blockNumber) /** block number as pseudo-timestamp for testing */,
113
113
  EthAddress.ZERO,
114
114
  AztecAddress.ZERO,
115
115
  GasFees.empty(),
@@ -164,7 +164,7 @@ export class TestContext {
164
164
  seedOrOpts?: Parameters<typeof makeBloatedProcessedTx>[0] | number,
165
165
  ): Promise<ProcessedTx> {
166
166
  const opts = typeof seedOrOpts === 'number' ? { seed: seedOrOpts } : seedOrOpts;
167
- const blockNum = (opts?.globalVariables ?? this.globalVariables).blockNumber.toNumber();
167
+ const blockNum = (opts?.globalVariables ?? this.globalVariables).blockNumber;
168
168
  const header = this.getBlockHeader(blockNum - 1);
169
169
  const tx = await makeBloatedProcessedTx({
170
170
  header,
@@ -190,7 +190,7 @@ export class TestContext {
190
190
  makeProcessedTxOpts: (index: number) => Partial<Parameters<typeof makeBloatedProcessedTx>[0]> = () => ({}),
191
191
  ) {
192
192
  const globalVariables = typeof blockNumOrGlobals === 'number' ? makeGlobals(blockNumOrGlobals) : blockNumOrGlobals;
193
- const blockNum = globalVariables.blockNumber.toNumber();
193
+ const blockNum = globalVariables.blockNumber;
194
194
  const db = await this.worldState.fork();
195
195
  const msgs = times(numMsgs, i => new Fr(blockNum * 100 + i));
196
196
  const txs = await timesParallel(numTxs, i =>
@@ -14,9 +14,9 @@ import {
14
14
  } from '@aztec/constants';
15
15
  import { makeTuple } from '@aztec/foundation/array';
16
16
  import { padArrayEnd } from '@aztec/foundation/collection';
17
- import { sha256Trunc } from '@aztec/foundation/crypto';
17
+ import { sha256ToField, sha256Trunc } from '@aztec/foundation/crypto';
18
18
  import { BLS12Point, Fr } from '@aztec/foundation/fields';
19
- import { type Tuple, assertLength, serializeToBuffer, toFriendlyJSON } from '@aztec/foundation/serialize';
19
+ import { type Tuple, assertLength, toFriendlyJSON } from '@aztec/foundation/serialize';
20
20
  import { MembershipWitness, MerkleTreeCalculator, computeUnbalancedMerkleRoot } from '@aztec/foundation/trees';
21
21
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
22
22
  import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
@@ -253,7 +253,7 @@ export const buildBlobHints = runInSpan(
253
253
  'buildBlobHints',
254
254
  async (_span: Span, txEffects: TxEffect[]) => {
255
255
  const blobFields = txEffects.flatMap(tx => tx.toBlobFields());
256
- const blobs = await Blob.getBlobs(blobFields);
256
+ const blobs = await Blob.getBlobsPerBlock(blobFields);
257
257
  // TODO(#13430): The blobsHash is confusingly similar to blobCommitmentsHash, calculated from below blobCommitments:
258
258
  // - blobsHash := sha256([blobhash_0, ..., blobhash_m]) = a hash of all blob hashes in a block with m+1 blobs inserted into the header, exists so a user can cross check blobs.
259
259
  // - blobCommitmentsHash := sha256( ...sha256(sha256(C_0), C_1) ... C_n) = iteratively calculated hash of all blob commitments in an epoch with n+1 blobs (see calculateBlobCommitmentsHash()),
@@ -270,7 +270,7 @@ export const accumulateBlobs = runInSpan(
270
270
  'accumulateBlobs',
271
271
  async (_span: Span, txs: ProcessedTx[], startBlobAccumulator: BatchedBlobAccumulator) => {
272
272
  const blobFields = txs.flatMap(tx => tx.txEffect.toBlobFields());
273
- const blobs = await Blob.getBlobs(blobFields);
273
+ const blobs = await Blob.getBlobsPerBlock(blobFields);
274
274
  const endBlobAccumulator = startBlobAccumulator.accumulateBlobs(blobs);
275
275
  return endBlobAccumulator;
276
276
  },
@@ -284,28 +284,20 @@ export const buildHeaderFromCircuitOutputs = runInSpan(
284
284
  previousRollupData: BaseOrMergeRollupPublicInputs[],
285
285
  parityPublicInputs: ParityPublicInputs,
286
286
  rootRollupOutputs: BlockRootOrBlockMergePublicInputs,
287
- blobsHash: Buffer,
287
+ blobsHash: Fr,
288
288
  endState: StateReference,
289
289
  ) => {
290
290
  if (previousRollupData.length > 2) {
291
291
  throw new Error(`There can't be more than 2 previous rollups. Received ${previousRollupData.length}.`);
292
292
  }
293
293
 
294
- const numTxs = previousRollupData.reduce((sum, d) => sum + d.numTxs, 0);
295
294
  const outHash =
296
295
  previousRollupData.length === 0
297
- ? Fr.ZERO.toBuffer()
296
+ ? Fr.ZERO
298
297
  : previousRollupData.length === 1
299
- ? previousRollupData[0].outHash.toBuffer()
300
- : sha256Trunc(
301
- Buffer.concat([previousRollupData[0].outHash.toBuffer(), previousRollupData[1].outHash.toBuffer()]),
302
- );
303
- const contentCommitment = new ContentCommitment(
304
- new Fr(numTxs),
305
- blobsHash,
306
- parityPublicInputs.shaRoot.toBuffer(),
307
- outHash,
308
- );
298
+ ? previousRollupData[0].outHash
299
+ : sha256ToField([previousRollupData[0].outHash, previousRollupData[1].outHash]);
300
+ const contentCommitment = new ContentCommitment(blobsHash, parityPublicInputs.shaRoot, outHash);
309
301
 
310
302
  const accumulatedFees = previousRollupData.reduce((sum, d) => sum.add(d.accumulatedFees), Fr.ZERO);
311
303
  const accumulatedManaUsed = previousRollupData.reduce((sum, d) => sum.add(d.accumulatedManaUsed), Fr.ZERO);
@@ -331,7 +323,7 @@ export const buildHeaderAndBodyFromTxs = runInSpan(
331
323
  l1ToL2Messages: Fr[],
332
324
  db: MerkleTreeReadOperations,
333
325
  ) => {
334
- span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber.toNumber());
326
+ span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber);
335
327
  const stateReference = new StateReference(
336
328
  await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db),
337
329
  new PartialStateReference(
@@ -349,12 +341,14 @@ export const buildHeaderAndBodyFromTxs = runInSpan(
349
341
  const numTxs = body.txEffects.length;
350
342
  const outHash =
351
343
  numTxs === 0
352
- ? Fr.ZERO.toBuffer()
344
+ ? Fr.ZERO
353
345
  : numTxs === 1
354
- ? body.txEffects[0].txOutHash()
355
- : computeUnbalancedMerkleRoot(
356
- body.txEffects.map(tx => tx.txOutHash()),
357
- TxEffect.empty().txOutHash(),
346
+ ? new Fr(body.txEffects[0].txOutHash())
347
+ : new Fr(
348
+ computeUnbalancedMerkleRoot(
349
+ body.txEffects.map(tx => tx.txOutHash()),
350
+ TxEffect.empty().txOutHash(),
351
+ ),
358
352
  );
359
353
 
360
354
  l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
@@ -366,10 +360,10 @@ export const buildHeaderAndBodyFromTxs = runInSpan(
366
360
  Fr.ZERO.toBuffer() as Buffer<ArrayBuffer>,
367
361
  hasher,
368
362
  );
369
- const parityShaRoot = await parityCalculator.computeTreeRoot(l1ToL2Messages.map(msg => msg.toBuffer()));
370
- const blobsHash = getBlobsHashFromBlobs(await Blob.getBlobs(body.toBlobFields()));
363
+ const parityShaRoot = new Fr(await parityCalculator.computeTreeRoot(l1ToL2Messages.map(msg => msg.toBuffer())));
364
+ const blobsHash = getBlobsHashFromBlobs(await Blob.getBlobsPerBlock(body.toBlobFields()));
371
365
 
372
- const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityShaRoot, outHash);
366
+ const contentCommitment = new ContentCommitment(blobsHash, parityShaRoot, outHash);
373
367
 
374
368
  const fees = body.txEffects.reduce((acc, tx) => acc.add(tx.transactionFee), Fr.ZERO);
375
369
  const manaUsed = txs.reduce((acc, tx) => acc.add(new Fr(tx.gasUsed.billedGas.l2Gas)), Fr.ZERO);
@@ -380,9 +374,16 @@ export const buildHeaderAndBodyFromTxs = runInSpan(
380
374
  },
381
375
  );
382
376
 
383
- export function getBlobsHashFromBlobs(inputs: Blob[]): Buffer {
384
- const blobHashes = serializeToBuffer(inputs.map(b => b.getEthVersionedBlobHash()));
385
- return sha256Trunc(serializeToBuffer(blobHashes));
377
+ export function getBlobsHashFromBlobs(inputs: Blob[]): Fr {
378
+ return sha256ToField(inputs.map(b => b.getEthVersionedBlobHash()));
379
+ }
380
+
381
+ // Note: tested against the constant values in block_root/empty_block_root_rollup_inputs.nr, set by block_building_helpers.test.ts.
382
+ // Having this separate fn hopefully makes it clear how we treat empty blocks and their blobs, and won't break if we decide to change how
383
+ // getBlobsPerBlock() works on empty input.
384
+ export async function getEmptyBlockBlobsHash(): Promise<Fr> {
385
+ const blobHash = (await Blob.getBlobsPerBlock([])).map(b => b.getEthVersionedBlobHash());
386
+ return sha256ToField(blobHash);
386
387
  }
387
388
 
388
389
  // Validate that the roots of all local trees match the output of the root circuit simulation
@@ -1,4 +1,4 @@
1
- import { BatchedBlobAccumulator, SpongeBlob } from '@aztec/blob-lib';
1
+ import { BatchedBlobAccumulator, BlobAccumulatorPublicInputs, SpongeBlob } from '@aztec/blob-lib';
2
2
  import {
3
3
  type ARCHIVE_HEIGHT,
4
4
  BLOBS_PER_BLOCK,
@@ -34,7 +34,12 @@ import type { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
34
34
  import { type BlockHeader, type GlobalVariables, StateReference } from '@aztec/stdlib/tx';
35
35
  import { VkData } from '@aztec/stdlib/vks';
36
36
 
37
- import { accumulateBlobs, buildBlobHints, buildHeaderFromCircuitOutputs } from './block-building-helpers.js';
37
+ import {
38
+ accumulateBlobs,
39
+ buildBlobHints,
40
+ buildHeaderFromCircuitOutputs,
41
+ getEmptyBlockBlobsHash,
42
+ } from './block-building-helpers.js';
38
43
  import type { EpochProvingState } from './epoch-proving-state.js';
39
44
  import type { TxProvingState } from './tx-proving-state.js';
40
45
 
@@ -58,7 +63,7 @@ export class BlockProvingState {
58
63
  public spongeBlobState: SpongeBlob | undefined;
59
64
  public startBlobAccumulator: BatchedBlobAccumulator | undefined;
60
65
  public endBlobAccumulator: BatchedBlobAccumulator | undefined;
61
- public blobsHash: Buffer | undefined;
66
+ public blobsHash: Fr | undefined;
62
67
  public totalNumTxs: number;
63
68
  private txs: TxProvingState[] = [];
64
69
  public error: string | undefined;
@@ -84,7 +89,7 @@ export class BlockProvingState {
84
89
  }
85
90
 
86
91
  public get blockNumber() {
87
- return this.globalVariables.blockNumber.toNumber();
92
+ return this.globalVariables.blockNumber;
88
93
  }
89
94
 
90
95
  public startNewBlock(numTxs: number, numBlobFields: number) {
@@ -221,6 +226,8 @@ export class BlockProvingState {
221
226
  protocolContractTreeRoot,
222
227
  });
223
228
 
229
+ this.blobsHash = await getEmptyBlockBlobsHash();
230
+
224
231
  return {
225
232
  rollupType: 'empty-block-root-rollup' satisfies CircuitName,
226
233
  inputs: EmptyBlockRootRollupInputs.from({
@@ -233,7 +240,7 @@ export class BlockProvingState {
233
240
 
234
241
  const previousRollupData = await Promise.all(nonEmptyProofs.map(p => this.#getPreviousRollupData(p!)));
235
242
  const blobData = await this.#getBlockRootRollupBlobData();
236
- this.blobsHash = blobData.blobsHash.toBuffer();
243
+ this.blobsHash = blobData.blobsHash;
237
244
 
238
245
  if (previousRollupData.length === 1) {
239
246
  return {
@@ -272,7 +279,7 @@ export class BlockProvingState {
272
279
  previousArchiveSiblingPath: this.lastArchiveSiblingPath,
273
280
  newArchiveSiblingPath: this.newArchiveSiblingPath,
274
281
  previousBlockHeader,
275
- startBlobAccumulator: this.endBlobAccumulator.toBlobAccumulatorPublicInputs(),
282
+ startBlobAccumulator: BlobAccumulatorPublicInputs.fromBatchedBlobAccumulator(this.endBlobAccumulator),
276
283
  finalBlobChallenges: this.endBlobAccumulator.finalBlobChallenges,
277
284
  proverId,
278
285
  });
@@ -325,18 +332,11 @@ export class BlockProvingState {
325
332
  }
326
333
  const endState = new StateReference(this.l1ToL2MessageTreeSnapshotAfterInsertion, endPartialState);
327
334
 
328
- // TODO(MW): cleanup
329
- if (!this.blobsHash) {
330
- this.blobsHash = (
331
- await buildBlobHints(this.txs.map(txProvingState => txProvingState.processedTx.txEffect))
332
- ).blobsHash.toBuffer();
333
- }
334
-
335
335
  return buildHeaderFromCircuitOutputs(
336
336
  previousRollupData.map(d => d.baseOrMergeRollupPublicInputs),
337
337
  this.rootParityProvingOutput!.inputs,
338
338
  this.blockRootProvingOutput!.inputs,
339
- this.blobsHash,
339
+ this.blobsHash!,
340
340
  endState,
341
341
  );
342
342
  }
@@ -382,7 +382,7 @@ export class BlockProvingState {
382
382
  previousArchiveSiblingPath: this.lastArchiveSiblingPath,
383
383
  newArchiveSiblingPath: this.newArchiveSiblingPath,
384
384
  previousBlockHeader: this.previousBlockHeader,
385
- startBlobAccumulator: this.startBlobAccumulator!.toBlobAccumulatorPublicInputs(),
385
+ startBlobAccumulator: BlobAccumulatorPublicInputs.fromBatchedBlobAccumulator(this.startBlobAccumulator!),
386
386
  finalBlobChallenges: this.startBlobAccumulator!.finalBlobChallenges,
387
387
  proverId,
388
388
  });
@@ -81,7 +81,7 @@ export class EpochProvingState {
81
81
  newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>,
82
82
  previousBlockHeader: BlockHeader,
83
83
  ): BlockProvingState {
84
- const index = globalVariables.blockNumber.toNumber() - this.firstBlockNumber;
84
+ const index = globalVariables.blockNumber - this.firstBlockNumber;
85
85
  const block = new BlockProvingState(
86
86
  index,
87
87
  globalVariables,
@@ -1,4 +1,4 @@
1
- import { FinalBlobBatchingChallenges } from '@aztec/blob-lib';
1
+ import { BlobAccumulatorPublicInputs, FinalBlobBatchingChallenges } from '@aztec/blob-lib';
2
2
  import {
3
3
  L1_TO_L2_MSG_SUBTREE_HEIGHT,
4
4
  L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH,
@@ -138,7 +138,7 @@ export class ProvingOrchestrator implements EpochProver {
138
138
  * @returns A proving ticket, containing a promise notifying of proving completion
139
139
  */
140
140
  @trackSpan('ProvingOrchestrator.startNewBlock', globalVariables => ({
141
- [Attributes.BLOCK_NUMBER]: globalVariables.blockNumber.toNumber(),
141
+ [Attributes.BLOCK_NUMBER]: globalVariables.blockNumber,
142
142
  }))
143
143
  public async startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[], previousBlockHeader: BlockHeader) {
144
144
  if (!this.provingState) {
@@ -149,13 +149,11 @@ export class ProvingOrchestrator implements EpochProver {
149
149
  throw new Error(`Epoch not accepting further blocks`);
150
150
  }
151
151
 
152
- logger.info(
153
- `Starting block ${globalVariables.blockNumber.toNumber()} for slot ${globalVariables.slotNumber.toNumber()}`,
154
- );
152
+ logger.info(`Starting block ${globalVariables.blockNumber} for slot ${globalVariables.slotNumber.toNumber()}`);
155
153
 
156
154
  // Fork world state at the end of the immediately previous block
157
- const db = await this.dbProvider.fork(globalVariables.blockNumber.toNumber() - 1);
158
- this.dbs.set(globalVariables.blockNumber.toNumber(), db);
155
+ const db = await this.dbProvider.fork(globalVariables.blockNumber - 1);
156
+ this.dbs.set(globalVariables.blockNumber, db);
159
157
 
160
158
  // we start the block by enqueueing all of the base parity circuits
161
159
  const {
@@ -202,7 +200,7 @@ export class ProvingOrchestrator implements EpochProver {
202
200
  logger.warn(`Provided no txs to orchestrator addTxs.`);
203
201
  return;
204
202
  }
205
- const blockNumber = txs[0].globalVariables.blockNumber.toNumber();
203
+ const blockNumber = txs[0].globalVariables.blockNumber;
206
204
  const provingState = this.provingState?.getBlockProvingStateByBlockNumber(blockNumber!);
207
205
  if (!provingState) {
208
206
  throw new Error(`Block proving state for ${blockNumber} not found`);
@@ -726,12 +724,14 @@ export class ProvingOrchestrator implements EpochProver {
726
724
  provingState.reject(`New archive root mismatch.`);
727
725
  }
728
726
 
729
- const endBlobAccumulator = provingState.endBlobAccumulator!;
727
+ const endBlobAccumulatorPublicInputs = BlobAccumulatorPublicInputs.fromBatchedBlobAccumulator(
728
+ provingState.endBlobAccumulator!,
729
+ );
730
730
  const circuitEndBlobAccumulatorState = result.inputs.blobPublicInputs.endBlobAccumulator;
731
- if (!circuitEndBlobAccumulatorState.equals(endBlobAccumulator.toBlobAccumulatorPublicInputs())) {
731
+ if (!circuitEndBlobAccumulatorState.equals(endBlobAccumulatorPublicInputs)) {
732
732
  logger.error(
733
733
  `Blob accumulator state mismatch.\nCircuit: ${inspect(circuitEndBlobAccumulatorState)}\nComputed: ${inspect(
734
- endBlobAccumulator.toBlobAccumulatorPublicInputs(),
734
+ endBlobAccumulatorPublicInputs,
735
735
  )}`,
736
736
  );
737
737
  provingState.reject(`Blob accumulator state mismatch.`);