@aztec/aztec-node 0.0.1-commit.684755437 → 0.0.1-commit.6b113946b

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.
@@ -29,6 +29,7 @@ import { type BlockHeader, type GlobalVariableBuilder as GlobalVariableBuilderIn
29
29
  import type { SingleValidatorStats, ValidatorsStats } from '@aztec/stdlib/validators';
30
30
  import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
31
31
  import { ValidatorClient } from '@aztec/validator-client';
32
+ import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
32
33
  import { Sentinel } from '../sentinel/sentinel.js';
33
34
  import { type AztecNodeConfig } from './config.js';
34
35
  /**
@@ -79,6 +80,7 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
79
80
  dateProvider?: DateProvider;
80
81
  p2pClientDeps?: P2PClientDeps;
81
82
  proverNodeDeps?: Partial<ProverNodeDeps>;
83
+ slashingProtectionDb?: SlashingProtectionDatabase;
82
84
  }, options?: {
83
85
  prefilledPublicData?: PublicDataTreeLeaf[];
84
86
  dontStartSequencer?: boolean;
@@ -135,6 +137,7 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
135
137
  getBlocks(from: BlockNumber, limit: number): Promise<L2Block[]>;
136
138
  getCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
137
139
  getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<import("@aztec/stdlib/block").CheckpointedL2Block[]>;
140
+ getCheckpointsDataForEpoch(epochNumber: EpochNumber): Promise<import("@aztec/stdlib/checkpoint").CheckpointData[]>;
138
141
  /**
139
142
  * Method to fetch the current min L2 fees.
140
143
  * @returns The current min L2 fees.
@@ -234,21 +237,6 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
234
237
  */
235
238
  getL2ToL1Messages(epoch: EpochNumber): Promise<Fr[][][][]>;
236
239
  getNullifierMembershipWitness(referenceBlock: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
237
- /**
238
- * Returns a low nullifier membership witness for a given nullifier at a given block.
239
- * @param referenceBlock - The block parameter (block number, block hash, or 'latest') at which to get the data
240
- * (which contains the root of the nullifier tree in which we are searching for the nullifier).
241
- * @param nullifier - Nullifier we try to find the low nullifier witness for.
242
- * @returns The low nullifier membership witness (if found).
243
- * @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
244
- * list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
245
- * we are trying to prove non-inclusion for.
246
- *
247
- * Note: This function returns the membership witness of the nullifier itself and not the low nullifier when
248
- * the nullifier already exists in the tree. This is because the `getPreviousValueIndex` function returns the
249
- * index of the nullifier itself when it already exists in the tree.
250
- * TODO: This is a confusing behavior and we should eventually address that.
251
- */
252
240
  getLowNullifierMembershipWitness(referenceBlock: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
253
241
  getPublicDataWitness(referenceBlock: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
254
242
  getPublicStorageAt(referenceBlock: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr>;
@@ -283,5 +271,13 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
283
271
  getSlashPayloads(): Promise<SlashPayloadRound[]>;
284
272
  getSlashOffenses(round: bigint | 'all' | 'current'): Promise<Offense[]>;
285
273
  reloadKeystore(): Promise<void>;
274
+ /**
275
+ * Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
276
+ * @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
277
+ * @returns An instance of a committed MerkleTreeOperations
278
+ */
279
+ protected getWorldState(block: BlockParameter): Promise<import("@aztec/world-state").MerkleTreeReadOperations>;
280
+ /** Resolves a block parameter to a block number. */
281
+ protected resolveBlockNumber(block: BlockParameter): Promise<BlockNumber>;
286
282
  }
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWtDLE1BQU0sMkJBQTJCLENBQUM7QUFFckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLHdCQUF3QixFQUFFLEtBQUsscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RyxPQUFPLEVBQWMsS0FBSyxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFPLEVBQWlCLGVBQWUsRUFBaUMsTUFBTSxzQkFBc0IsQ0FBQztBQUdyRyxPQUFPLEVBQ0wsS0FBSyxHQUFHLEVBQ1IsS0FBSyxhQUFhLEVBSW5CLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxLQUFLLGNBQWMsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RixPQUFPLEVBQXlCLGVBQWUsRUFBRSxLQUFLLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUcsT0FBTyxFQUVM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
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWtDLE1BQU0sMkJBQTJCLENBQUM7QUFFckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLHdCQUF3QixFQUFFLEtBQUsscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RyxPQUFPLEVBQWMsS0FBSyxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFPLEVBQWlCLGVBQWUsRUFBaUMsTUFBTSxzQkFBc0IsQ0FBQztBQUdyRyxPQUFPLEVBQ0wsS0FBSyxHQUFHLEVBQ1IsS0FBSyxhQUFhLEVBSW5CLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxLQUFLLGNBQWMsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RixPQUFPLEVBQXlCLGVBQWUsRUFBRSxLQUFLLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUcsT0FBTyxFQUVM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
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
@@ -377,10 +377,10 @@ import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
377
377
  import { Blob } from '@aztec/blob-lib';
378
378
  import { EpochCache } from '@aztec/epoch-cache';
379
379
  import { createEthereumChain } from '@aztec/ethereum/chain';
380
- import { getPublicClient } from '@aztec/ethereum/client';
380
+ import { getPublicClient, makeL1HttpTransport } from '@aztec/ethereum/client';
381
381
  import { RegistryContract, RollupContract } from '@aztec/ethereum/contracts';
382
- import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
383
- import { compactArray, pick, unique } from '@aztec/foundation/collection';
382
+ import { BlockNumber } from '@aztec/foundation/branded-types';
383
+ import { chunkBy, compactArray, pick, unique } from '@aztec/foundation/collection';
384
384
  import { Fr } from '@aztec/foundation/curves/bn254';
385
385
  import { EthAddress } from '@aztec/foundation/eth-address';
386
386
  import { BadRequestError } from '@aztec/foundation/json-rpc';
@@ -413,7 +413,7 @@ import { getPackageVersion } from '@aztec/stdlib/update-checker';
413
413
  import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
414
414
  import { FullNodeCheckpointsBuilder as CheckpointsBuilder, FullNodeCheckpointsBuilder, NodeKeystoreAdapter, ValidatorClient, createBlockProposalHandler, createValidatorClient } from '@aztec/validator-client';
415
415
  import { createWorldStateSynchronizer } from '@aztec/world-state';
416
- import { createPublicClient, fallback, http } from 'viem';
416
+ import { createPublicClient } from 'viem';
417
417
  import { createSentinel } from '../sentinel/factory.js';
418
418
  import { createKeyStoreForValidator } from './config.js';
419
419
  import { NodeMetrics } from './node_metrics.js';
@@ -559,9 +559,9 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
559
559
  }
560
560
  const publicClient = createPublicClient({
561
561
  chain: ethereumChain.chainInfo,
562
- transport: fallback(config.l1RpcUrls.map((url)=>http(url, {
563
- batch: false
564
- }))),
562
+ transport: makeL1HttpTransport(config.l1RpcUrls, {
563
+ timeout: config.l1HttpTimeoutMS
564
+ }),
565
565
  pollingInterval: config.viemPollingIntervalMS
566
566
  });
567
567
  const l1ContractsAddresses = await RegistryContract.collectAddresses(publicClient, config.l1Contracts.registryAddress, config.rollupVersion ?? 'canonical');
@@ -637,7 +637,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
637
637
  blockSource: archiver,
638
638
  l1ToL2MessageSource: archiver,
639
639
  keyStoreManager,
640
- blobClient
640
+ blobClient,
641
+ slashingProtectionDb: deps.slashingProtectionDb
641
642
  });
642
643
  // If we have a validator client, register it as a source of offenses for the slasher,
643
644
  // and have it register callbacks on the p2p client *before* we start it, otherwise messages
@@ -891,6 +892,9 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
891
892
  async getCheckpointedBlocks(from, limit) {
892
893
  return await this.blockSource.getCheckpointedBlocks(from, limit) ?? [];
893
894
  }
895
+ getCheckpointsDataForEpoch(epochNumber) {
896
+ return this.blockSource.getCheckpointsDataForEpoch(epochNumber);
897
+ }
894
898
  /**
895
899
  * Method to fetch the current min L2 fees.
896
900
  * @returns The current min L2 fees.
@@ -946,28 +950,36 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
946
950
  return this.contractDataSource.getContract(address);
947
951
  }
948
952
  async getPrivateLogsByTags(tags, page, referenceBlock) {
953
+ let upToBlockNumber;
949
954
  if (referenceBlock) {
950
955
  const initialBlockHash = await this.#getInitialHeaderHash();
951
- if (!referenceBlock.equals(initialBlockHash)) {
956
+ if (referenceBlock.equals(initialBlockHash)) {
957
+ upToBlockNumber = BlockNumber(0);
958
+ } else {
952
959
  const header = await this.blockSource.getBlockHeaderByHash(referenceBlock);
953
960
  if (!header) {
954
961
  throw new Error(`Block ${referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`);
955
962
  }
963
+ upToBlockNumber = header.globalVariables.blockNumber;
956
964
  }
957
965
  }
958
- return this.logsSource.getPrivateLogsByTags(tags, page);
966
+ return this.logsSource.getPrivateLogsByTags(tags, page, upToBlockNumber);
959
967
  }
960
968
  async getPublicLogsByTagsFromContract(contractAddress, tags, page, referenceBlock) {
969
+ let upToBlockNumber;
961
970
  if (referenceBlock) {
962
971
  const initialBlockHash = await this.#getInitialHeaderHash();
963
- if (!referenceBlock.equals(initialBlockHash)) {
972
+ if (referenceBlock.equals(initialBlockHash)) {
973
+ upToBlockNumber = BlockNumber(0);
974
+ } else {
964
975
  const header = await this.blockSource.getBlockHeaderByHash(referenceBlock);
965
976
  if (!header) {
966
977
  throw new Error(`Block ${referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`);
967
978
  }
979
+ upToBlockNumber = header.globalVariables.blockNumber;
968
980
  }
969
981
  }
970
- return this.logsSource.getPublicLogsByTagsFromContract(contractAddress, tags, page);
982
+ return this.logsSource.getPublicLogsByTagsFromContract(contractAddress, tags, page, upToBlockNumber);
971
983
  }
972
984
  /**
973
985
  * Gets public logs based on the provided filter.
@@ -1082,70 +1094,78 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1082
1094
  return compactArray(await Promise.all(txHashes.map((txHash)=>this.getTxByHash(txHash))));
1083
1095
  }
1084
1096
  async findLeavesIndexes(referenceBlock, treeId, leafValues) {
1085
- const committedDb = await this.#getWorldState(referenceBlock);
1097
+ const committedDb = await this.getWorldState(referenceBlock);
1086
1098
  const maybeIndices = await committedDb.findLeafIndices(treeId, leafValues.map((x)=>x.toBuffer()));
1087
- // We filter out undefined values
1088
- const indices = maybeIndices.filter((x)=>x !== undefined);
1089
- // Now we find the block numbers for the indices
1090
- const blockNumbers = await committedDb.getBlockNumbersForLeafIndices(treeId, indices);
1091
- // If any of the block numbers are undefined, we throw an error.
1092
- for(let i = 0; i < indices.length; i++){
1093
- if (blockNumbers[i] === undefined) {
1094
- throw new Error(`Block number is undefined for leaf index ${indices[i]} in tree ${MerkleTreeId[treeId]}`);
1099
+ // Filter out undefined values to query block numbers only for found leaves
1100
+ const definedIndices = maybeIndices.filter((x)=>x !== undefined);
1101
+ // Now we find the block numbers for the defined indices
1102
+ const blockNumbers = await committedDb.getBlockNumbersForLeafIndices(treeId, definedIndices);
1103
+ // Build a map from leaf index to block number
1104
+ const indexToBlockNumber = new Map();
1105
+ for(let i = 0; i < definedIndices.length; i++){
1106
+ const blockNumber = blockNumbers[i];
1107
+ if (blockNumber === undefined) {
1108
+ throw new Error(`Block number is undefined for leaf index ${definedIndices[i]} in tree ${MerkleTreeId[treeId]}`);
1095
1109
  }
1110
+ indexToBlockNumber.set(definedIndices[i], blockNumber);
1096
1111
  }
1097
1112
  // Get unique block numbers in order to optimize num calls to getLeafValue function.
1098
1113
  const uniqueBlockNumbers = [
1099
- ...new Set(blockNumbers.filter((x)=>x !== undefined))
1114
+ ...new Set(indexToBlockNumber.values())
1100
1115
  ];
1101
- // Now we obtain the block hashes from the archive tree by calling await `committedDb.getLeafValue(treeId, index)`
1102
- // (note that block number corresponds to the leaf index in the archive tree).
1116
+ // Now we obtain the block hashes from the archive tree (block number = leaf index in archive tree).
1103
1117
  const blockHashes = await Promise.all(uniqueBlockNumbers.map((blockNumber)=>{
1104
1118
  return committedDb.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(blockNumber));
1105
1119
  }));
1106
- // If any of the block hashes are undefined, we throw an error.
1120
+ // Build a map from block number to block hash
1121
+ const blockNumberToHash = new Map();
1107
1122
  for(let i = 0; i < uniqueBlockNumbers.length; i++){
1108
- if (blockHashes[i] === undefined) {
1123
+ const blockHash = blockHashes[i];
1124
+ if (blockHash === undefined) {
1109
1125
  throw new Error(`Block hash is undefined for block number ${uniqueBlockNumbers[i]}`);
1110
1126
  }
1127
+ blockNumberToHash.set(uniqueBlockNumbers[i], blockHash);
1111
1128
  }
1112
1129
  // Create DataInBlock objects by combining indices, blockNumbers and blockHashes and return them.
1113
- return maybeIndices.map((index, i)=>{
1130
+ return maybeIndices.map((index)=>{
1114
1131
  if (index === undefined) {
1115
1132
  return undefined;
1116
1133
  }
1117
- const blockNumber = blockNumbers[i];
1134
+ const blockNumber = indexToBlockNumber.get(index);
1118
1135
  if (blockNumber === undefined) {
1119
- return undefined;
1136
+ throw new Error(`Block number not found for leaf index ${index} in tree ${MerkleTreeId[treeId]}`);
1120
1137
  }
1121
- const blockHashIndex = uniqueBlockNumbers.indexOf(blockNumber);
1122
- const blockHash = blockHashes[blockHashIndex];
1123
- if (!blockHash) {
1124
- return undefined;
1138
+ const blockHash = blockNumberToHash.get(blockNumber);
1139
+ if (blockHash === undefined) {
1140
+ throw new Error(`Block hash not found for block number ${blockNumber}`);
1125
1141
  }
1126
1142
  return {
1127
- l2BlockNumber: BlockNumber(Number(blockNumber)),
1143
+ l2BlockNumber: blockNumber,
1128
1144
  l2BlockHash: new BlockHash(blockHash),
1129
1145
  data: index
1130
1146
  };
1131
1147
  });
1132
1148
  }
1133
1149
  async getBlockHashMembershipWitness(referenceBlock, blockHash) {
1134
- const committedDb = await this.#getWorldState(referenceBlock);
1150
+ // The Noir circuit checks the archive membership proof against `anchor_block_header.last_archive.root`,
1151
+ // which is the archive tree root BEFORE the anchor block was added (i.e. the state after block N-1).
1152
+ // So we need the world state at block N-1, not block N, to produce a sibling path matching that root.
1153
+ const referenceBlockNumber = await this.resolveBlockNumber(referenceBlock);
1154
+ const committedDb = await this.getWorldState(BlockNumber(referenceBlockNumber - 1));
1135
1155
  const [pathAndIndex] = await committedDb.findSiblingPaths(MerkleTreeId.ARCHIVE, [
1136
1156
  blockHash
1137
1157
  ]);
1138
1158
  return pathAndIndex === undefined ? undefined : MembershipWitness.fromSiblingPath(pathAndIndex.index, pathAndIndex.path);
1139
1159
  }
1140
1160
  async getNoteHashMembershipWitness(referenceBlock, noteHash) {
1141
- const committedDb = await this.#getWorldState(referenceBlock);
1161
+ const committedDb = await this.getWorldState(referenceBlock);
1142
1162
  const [pathAndIndex] = await committedDb.findSiblingPaths(MerkleTreeId.NOTE_HASH_TREE, [
1143
1163
  noteHash
1144
1164
  ]);
1145
1165
  return pathAndIndex === undefined ? undefined : MembershipWitness.fromSiblingPath(pathAndIndex.index, pathAndIndex.path);
1146
1166
  }
1147
1167
  async getL1ToL2MessageMembershipWitness(referenceBlock, l1ToL2Message) {
1148
- const db = await this.#getWorldState(referenceBlock);
1168
+ const db = await this.getWorldState(referenceBlock);
1149
1169
  const [witness] = await db.findSiblingPaths(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [
1150
1170
  l1ToL2Message
1151
1171
  ]);
@@ -1177,23 +1197,11 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1177
1197
  */ async getL2ToL1Messages(epoch) {
1178
1198
  // Assumes `getCheckpointedBlocksForEpoch` returns blocks in ascending order of block number.
1179
1199
  const checkpointedBlocks = await this.blockSource.getCheckpointedBlocksForEpoch(epoch);
1180
- const blocksInCheckpoints = [];
1181
- let previousSlotNumber = SlotNumber.ZERO;
1182
- let checkpointIndex = -1;
1183
- for (const checkpointedBlock of checkpointedBlocks){
1184
- const block = checkpointedBlock.block;
1185
- const slotNumber = block.header.globalVariables.slotNumber;
1186
- if (slotNumber !== previousSlotNumber) {
1187
- checkpointIndex++;
1188
- blocksInCheckpoints.push([]);
1189
- previousSlotNumber = slotNumber;
1190
- }
1191
- blocksInCheckpoints[checkpointIndex].push(block);
1192
- }
1200
+ const blocksInCheckpoints = chunkBy(checkpointedBlocks, (cb)=>cb.block.header.globalVariables.slotNumber).map((group)=>group.map((cb)=>cb.block));
1193
1201
  return blocksInCheckpoints.map((blocks)=>blocks.map((block)=>block.body.txEffects.map((txEffect)=>txEffect.l2ToL1Msgs)));
1194
1202
  }
1195
1203
  async getNullifierMembershipWitness(referenceBlock, nullifier) {
1196
- const db = await this.#getWorldState(referenceBlock);
1204
+ const db = await this.getWorldState(referenceBlock);
1197
1205
  const [witness] = await db.findSiblingPaths(MerkleTreeId.NULLIFIER_TREE, [
1198
1206
  nullifier.toBuffer()
1199
1207
  ]);
@@ -1207,36 +1215,22 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1207
1215
  }
1208
1216
  return new NullifierMembershipWitness(index, leafPreimage, path);
1209
1217
  }
1210
- /**
1211
- * Returns a low nullifier membership witness for a given nullifier at a given block.
1212
- * @param referenceBlock - The block parameter (block number, block hash, or 'latest') at which to get the data
1213
- * (which contains the root of the nullifier tree in which we are searching for the nullifier).
1214
- * @param nullifier - Nullifier we try to find the low nullifier witness for.
1215
- * @returns The low nullifier membership witness (if found).
1216
- * @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
1217
- * list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
1218
- * we are trying to prove non-inclusion for.
1219
- *
1220
- * Note: This function returns the membership witness of the nullifier itself and not the low nullifier when
1221
- * the nullifier already exists in the tree. This is because the `getPreviousValueIndex` function returns the
1222
- * index of the nullifier itself when it already exists in the tree.
1223
- * TODO: This is a confusing behavior and we should eventually address that.
1224
- */ async getLowNullifierMembershipWitness(referenceBlock, nullifier) {
1225
- const committedDb = await this.#getWorldState(referenceBlock);
1218
+ async getLowNullifierMembershipWitness(referenceBlock, nullifier) {
1219
+ const committedDb = await this.getWorldState(referenceBlock);
1226
1220
  const findResult = await committedDb.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
1227
1221
  if (!findResult) {
1228
1222
  return undefined;
1229
1223
  }
1230
1224
  const { index, alreadyPresent } = findResult;
1231
1225
  if (alreadyPresent) {
1232
- this.log.warn(`Nullifier ${nullifier.toBigInt()} already exists in the tree`);
1226
+ throw new Error(`Cannot prove nullifier non-inclusion: nullifier ${nullifier.toBigInt()} already exists in the tree`);
1233
1227
  }
1234
1228
  const preimageData = await committedDb.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, index);
1235
1229
  const siblingPath = await committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, BigInt(index));
1236
1230
  return new NullifierMembershipWitness(BigInt(index), preimageData, siblingPath);
1237
1231
  }
1238
1232
  async getPublicDataWitness(referenceBlock, leafSlot) {
1239
- const committedDb = await this.#getWorldState(referenceBlock);
1233
+ const committedDb = await this.getWorldState(referenceBlock);
1240
1234
  const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
1241
1235
  if (!lowLeafResult) {
1242
1236
  return undefined;
@@ -1247,7 +1241,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1247
1241
  }
1248
1242
  }
1249
1243
  async getPublicStorageAt(referenceBlock, contract, slot) {
1250
- const committedDb = await this.#getWorldState(referenceBlock);
1244
+ const committedDb = await this.getWorldState(referenceBlock);
1251
1245
  const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
1252
1246
  const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
1253
1247
  if (!lowLeafResult || !lowLeafResult.alreadyPresent) {
@@ -1348,6 +1342,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1348
1342
  // We accept transactions if they are not expired by the next slot (checked based on the ExpirationTimestamp field)
1349
1343
  const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
1350
1344
  const blockNumber = BlockNumber(await this.blockSource.getBlockNumber() + 1);
1345
+ const l1Constants = await this.blockSource.getL1Constants();
1351
1346
  const validator = createTxValidatorForAcceptingTxsOverRPC(db, this.contractDataSource, verifier, {
1352
1347
  timestamp: nextSlotTimestamp,
1353
1348
  blockNumber,
@@ -1359,7 +1354,10 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1359
1354
  ],
1360
1355
  gasFees: await this.getCurrentMinFees(),
1361
1356
  skipFeeEnforcement,
1362
- txsPermitted: !this.config.disableTransactions
1357
+ txsPermitted: !this.config.disableTransactions,
1358
+ rollupManaLimit: l1Constants.rollupManaLimit,
1359
+ maxBlockL2Gas: this.config.validateMaxL2BlockGas,
1360
+ maxBlockDAGas: this.config.validateMaxDABlockGas
1363
1361
  }, this.log.getBindings());
1364
1362
  return await validator.validateTx(tx);
1365
1363
  }
@@ -1579,7 +1577,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1579
1577
  * Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
1580
1578
  * @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
1581
1579
  * @returns An instance of a committed MerkleTreeOperations
1582
- */ async #getWorldState(block) {
1580
+ */ async getWorldState(block) {
1583
1581
  let blockSyncedTo = BlockNumber.ZERO;
1584
1582
  try {
1585
1583
  // Attempt to sync the world state if necessary
@@ -1591,6 +1589,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1591
1589
  this.log.debug(`Using committed db for block 'latest', world state synced upto ${blockSyncedTo}`);
1592
1590
  return this.worldStateSynchronizer.getCommitted();
1593
1591
  }
1592
+ // Get the block number, either directly from the parameter or by quering the archiver with the block hash
1593
+ let blockNumber;
1594
1594
  if (BlockHash.isBlockHash(block)) {
1595
1595
  const initialBlockHash = await this.#getInitialHeaderHash();
1596
1596
  if (block.equals(initialBlockHash)) {
@@ -1601,19 +1601,41 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
1601
1601
  if (!header) {
1602
1602
  throw new Error(`Block hash ${block.toString()} not found when querying world state. If the node API has been queried with anchor block hash possibly a reorg has occurred.`);
1603
1603
  }
1604
- const blockNumber = header.getBlockNumber();
1605
- this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1606
- return this.worldStateSynchronizer.getSnapshot(blockNumber);
1607
- }
1608
- // Block number provided
1609
- {
1610
- const blockNumber = block;
1611
- if (blockNumber > blockSyncedTo) {
1612
- throw new Error(`Queried block ${block} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
1604
+ blockNumber = header.getBlockNumber();
1605
+ } else {
1606
+ blockNumber = block;
1607
+ }
1608
+ // Check it's within world state sync range
1609
+ if (blockNumber > blockSyncedTo) {
1610
+ throw new Error(`Queried block ${block} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
1611
+ }
1612
+ this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1613
+ const snapshot = this.worldStateSynchronizer.getSnapshot(blockNumber);
1614
+ // Double-check world-state synced to the same block hash as was requested
1615
+ if (BlockHash.isBlockHash(block)) {
1616
+ const blockHash = await snapshot.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(blockNumber));
1617
+ if (!blockHash || !new BlockHash(blockHash).equals(block)) {
1618
+ throw new Error(`Block hash ${block.toString()} not found in world state at block number ${blockNumber}. If the node API has been queried with anchor block hash possibly a reorg has occurred.`);
1619
+ }
1620
+ }
1621
+ return snapshot;
1622
+ }
1623
+ /** Resolves a block parameter to a block number. */ async resolveBlockNumber(block) {
1624
+ if (block === 'latest') {
1625
+ return BlockNumber(await this.blockSource.getBlockNumber());
1626
+ }
1627
+ if (BlockHash.isBlockHash(block)) {
1628
+ const initialBlockHash = await this.#getInitialHeaderHash();
1629
+ if (block.equals(initialBlockHash)) {
1630
+ return BlockNumber.ZERO;
1631
+ }
1632
+ const header = await this.blockSource.getBlockHeaderByHash(block);
1633
+ if (!header) {
1634
+ throw new Error(`Block hash ${block.toString()} not found.`);
1613
1635
  }
1614
- this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1615
- return this.worldStateSynchronizer.getSnapshot(blockNumber);
1636
+ return header.getBlockNumber();
1616
1637
  }
1638
+ return block;
1617
1639
  }
1618
1640
  /**
1619
1641
  * Ensure we fully sync the world state
@@ -48,7 +48,7 @@ export class Sentinel extends EventEmitter {
48
48
  this.runningPromise.start();
49
49
  }
50
50
  /** Loads initial slot and initializes blockstream. We will not process anything at or before the initial slot. */ async init() {
51
- this.initialSlot = this.epochCache.getEpochAndSlotNow().slot;
51
+ this.initialSlot = this.epochCache.getSlotNow();
52
52
  const startingBlock = BlockNumber(await this.archiver.getBlockNumber());
53
53
  this.logger.info(`Starting validator sentinel with initial slot ${this.initialSlot} and block ${startingBlock}`);
54
54
  this.blockStream = new L2BlockStream(this.archiver, this.l2TipsStore, this, this.logger, {
@@ -190,7 +190,7 @@ export class Sentinel extends EventEmitter {
190
190
  * Note that we do not process historical data, since we rely on p2p data for processing,
191
191
  * and we don't have that data if we were offline during the period.
192
192
  */ async work() {
193
- const { slot: currentSlot } = this.epochCache.getEpochAndSlotNow();
193
+ const currentSlot = this.epochCache.getSlotNow();
194
194
  try {
195
195
  // Manually sync the block stream to ensure we have the latest data.
196
196
  // Note we never `start` the blockstream, so it loops at the same pace as we do.
@@ -229,10 +229,10 @@ export class Sentinel extends EventEmitter {
229
229
  this.logger.trace(`Refusing to process slot ${targetSlot} given initial slot ${this.initialSlot}`);
230
230
  return false;
231
231
  }
232
- const archiverSlot = await this.archiver.getL2SlotNumber();
233
- if (archiverSlot === undefined || archiverSlot < targetSlot) {
232
+ const syncedSlot = await this.archiver.getSyncedL2SlotNumber();
233
+ if (syncedSlot === undefined || syncedSlot < targetSlot) {
234
234
  this.logger.debug(`Waiting for archiver to sync with L2 slot ${targetSlot}`, {
235
- archiverSlot,
235
+ syncedSlot,
236
236
  targetSlot
237
237
  });
238
238
  return false;
@@ -351,7 +351,7 @@ export class Sentinel extends EventEmitter {
351
351
  v.toString(),
352
352
  await this.store.getHistory(v)
353
353
  ]))) : await this.store.getHistories();
354
- const slotNow = this.epochCache.getEpochAndSlotNow().slot;
354
+ const slotNow = this.epochCache.getSlotNow();
355
355
  fromSlot ??= SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
356
356
  toSlot ??= this.lastProcessedSlot ?? slotNow;
357
357
  const stats = mapValues(histories, (history, address)=>this.computeStatsForValidator(address, history ?? [], fromSlot, toSlot));
@@ -367,7 +367,7 @@ export class Sentinel extends EventEmitter {
367
367
  if (!history || history.length === 0) {
368
368
  return undefined;
369
369
  }
370
- const slotNow = this.epochCache.getEpochAndSlotNow().slot;
370
+ const slotNow = this.epochCache.getSlotNow();
371
371
  const effectiveFromSlot = fromSlot ?? SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
372
372
  const effectiveToSlot = toSlot ?? this.lastProcessedSlot ?? slotNow;
373
373
  const historyLength = BigInt(this.store.getHistoryLength());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/aztec-node",
3
- "version": "0.0.1-commit.684755437",
3
+ "version": "0.0.1-commit.6b113946b",
4
4
  "main": "dest/index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -65,32 +65,31 @@
65
65
  ]
66
66
  },
67
67
  "dependencies": {
68
- "@aztec/archiver": "0.0.1-commit.684755437",
69
- "@aztec/bb-prover": "0.0.1-commit.684755437",
70
- "@aztec/blob-client": "0.0.1-commit.684755437",
71
- "@aztec/blob-lib": "0.0.1-commit.684755437",
72
- "@aztec/constants": "0.0.1-commit.684755437",
73
- "@aztec/epoch-cache": "0.0.1-commit.684755437",
74
- "@aztec/ethereum": "0.0.1-commit.684755437",
75
- "@aztec/foundation": "0.0.1-commit.684755437",
76
- "@aztec/kv-store": "0.0.1-commit.684755437",
77
- "@aztec/l1-artifacts": "0.0.1-commit.684755437",
78
- "@aztec/merkle-tree": "0.0.1-commit.684755437",
79
- "@aztec/node-keystore": "0.0.1-commit.684755437",
80
- "@aztec/node-lib": "0.0.1-commit.684755437",
81
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.684755437",
82
- "@aztec/p2p": "0.0.1-commit.684755437",
83
- "@aztec/protocol-contracts": "0.0.1-commit.684755437",
84
- "@aztec/prover-client": "0.0.1-commit.684755437",
85
- "@aztec/prover-node": "0.0.1-commit.684755437",
86
- "@aztec/sequencer-client": "0.0.1-commit.684755437",
87
- "@aztec/simulator": "0.0.1-commit.684755437",
88
- "@aztec/slasher": "0.0.1-commit.684755437",
89
- "@aztec/stdlib": "0.0.1-commit.684755437",
90
- "@aztec/telemetry-client": "0.0.1-commit.684755437",
91
- "@aztec/validator-client": "0.0.1-commit.684755437",
92
- "@aztec/validator-ha-signer": "0.0.1-commit.684755437",
93
- "@aztec/world-state": "0.0.1-commit.684755437",
68
+ "@aztec/archiver": "0.0.1-commit.6b113946b",
69
+ "@aztec/bb-prover": "0.0.1-commit.6b113946b",
70
+ "@aztec/blob-client": "0.0.1-commit.6b113946b",
71
+ "@aztec/blob-lib": "0.0.1-commit.6b113946b",
72
+ "@aztec/constants": "0.0.1-commit.6b113946b",
73
+ "@aztec/epoch-cache": "0.0.1-commit.6b113946b",
74
+ "@aztec/ethereum": "0.0.1-commit.6b113946b",
75
+ "@aztec/foundation": "0.0.1-commit.6b113946b",
76
+ "@aztec/kv-store": "0.0.1-commit.6b113946b",
77
+ "@aztec/l1-artifacts": "0.0.1-commit.6b113946b",
78
+ "@aztec/node-keystore": "0.0.1-commit.6b113946b",
79
+ "@aztec/node-lib": "0.0.1-commit.6b113946b",
80
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.6b113946b",
81
+ "@aztec/p2p": "0.0.1-commit.6b113946b",
82
+ "@aztec/protocol-contracts": "0.0.1-commit.6b113946b",
83
+ "@aztec/prover-client": "0.0.1-commit.6b113946b",
84
+ "@aztec/prover-node": "0.0.1-commit.6b113946b",
85
+ "@aztec/sequencer-client": "0.0.1-commit.6b113946b",
86
+ "@aztec/simulator": "0.0.1-commit.6b113946b",
87
+ "@aztec/slasher": "0.0.1-commit.6b113946b",
88
+ "@aztec/stdlib": "0.0.1-commit.6b113946b",
89
+ "@aztec/telemetry-client": "0.0.1-commit.6b113946b",
90
+ "@aztec/validator-client": "0.0.1-commit.6b113946b",
91
+ "@aztec/validator-ha-signer": "0.0.1-commit.6b113946b",
92
+ "@aztec/world-state": "0.0.1-commit.6b113946b",
94
93
  "koa": "^2.16.1",
95
94
  "koa-router": "^13.1.1",
96
95
  "tslib": "^2.4.0",
@@ -5,11 +5,11 @@ import { Blob } from '@aztec/blob-lib';
5
5
  import { ARCHIVE_HEIGHT, type L1_TO_L2_MSG_TREE_HEIGHT, type NOTE_HASH_TREE_HEIGHT } from '@aztec/constants';
6
6
  import { EpochCache, type EpochCacheInterface } from '@aztec/epoch-cache';
7
7
  import { createEthereumChain } from '@aztec/ethereum/chain';
8
- import { getPublicClient } from '@aztec/ethereum/client';
8
+ import { getPublicClient, makeL1HttpTransport } from '@aztec/ethereum/client';
9
9
  import { RegistryContract, RollupContract } from '@aztec/ethereum/contracts';
10
10
  import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
11
11
  import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
12
- import { compactArray, pick, unique } from '@aztec/foundation/collection';
12
+ import { chunkBy, compactArray, pick, unique } from '@aztec/foundation/collection';
13
13
  import { Fr } from '@aztec/foundation/curves/bn254';
14
14
  import { EthAddress } from '@aztec/foundation/eth-address';
15
15
  import { BadRequestError } from '@aztec/foundation/json-rpc';
@@ -111,9 +111,10 @@ import {
111
111
  createBlockProposalHandler,
112
112
  createValidatorClient,
113
113
  } from '@aztec/validator-client';
114
+ import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
114
115
  import { createWorldStateSynchronizer } from '@aztec/world-state';
115
116
 
116
- import { createPublicClient, fallback, http } from 'viem';
117
+ import { createPublicClient } from 'viem';
117
118
 
118
119
  import { createSentinel } from '../sentinel/factory.js';
119
120
  import { Sentinel } from '../sentinel/sentinel.js';
@@ -195,6 +196,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
195
196
  dateProvider?: DateProvider;
196
197
  p2pClientDeps?: P2PClientDeps;
197
198
  proverNodeDeps?: Partial<ProverNodeDeps>;
199
+ slashingProtectionDb?: SlashingProtectionDatabase;
198
200
  } = {},
199
201
  options: {
200
202
  prefilledPublicData?: PublicDataTreeLeaf[];
@@ -257,7 +259,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
257
259
 
258
260
  const publicClient = createPublicClient({
259
261
  chain: ethereumChain.chainInfo,
260
- transport: fallback(config.l1RpcUrls.map((url: string) => http(url, { batch: false }))),
262
+ transport: makeL1HttpTransport(config.l1RpcUrls, { timeout: config.l1HttpTimeoutMS }),
261
263
  pollingInterval: config.viemPollingIntervalMS,
262
264
  });
263
265
 
@@ -377,6 +379,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
377
379
  l1ToL2MessageSource: archiver,
378
380
  keyStoreManager,
379
381
  blobClient,
382
+ slashingProtectionDb: deps.slashingProtectionDb,
380
383
  });
381
384
 
382
385
  // If we have a validator client, register it as a source of offenses for the slasher,
@@ -720,6 +723,10 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
720
723
  return (await this.blockSource.getCheckpointedBlocks(from, limit)) ?? [];
721
724
  }
722
725
 
726
+ public getCheckpointsDataForEpoch(epochNumber: EpochNumber) {
727
+ return this.blockSource.getCheckpointsDataForEpoch(epochNumber);
728
+ }
729
+
723
730
  /**
724
731
  * Method to fetch the current min L2 fees.
725
732
  * @returns The current min L2 fees.
@@ -793,18 +800,22 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
793
800
  page?: number,
794
801
  referenceBlock?: BlockHash,
795
802
  ): Promise<TxScopedL2Log[][]> {
803
+ let upToBlockNumber: BlockNumber | undefined;
796
804
  if (referenceBlock) {
797
805
  const initialBlockHash = await this.#getInitialHeaderHash();
798
- if (!referenceBlock.equals(initialBlockHash)) {
806
+ if (referenceBlock.equals(initialBlockHash)) {
807
+ upToBlockNumber = BlockNumber(0);
808
+ } else {
799
809
  const header = await this.blockSource.getBlockHeaderByHash(referenceBlock);
800
810
  if (!header) {
801
811
  throw new Error(
802
812
  `Block ${referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`,
803
813
  );
804
814
  }
815
+ upToBlockNumber = header.globalVariables.blockNumber;
805
816
  }
806
817
  }
807
- return this.logsSource.getPrivateLogsByTags(tags, page);
818
+ return this.logsSource.getPrivateLogsByTags(tags, page, upToBlockNumber);
808
819
  }
809
820
 
810
821
  public async getPublicLogsByTagsFromContract(
@@ -813,18 +824,22 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
813
824
  page?: number,
814
825
  referenceBlock?: BlockHash,
815
826
  ): Promise<TxScopedL2Log[][]> {
827
+ let upToBlockNumber: BlockNumber | undefined;
816
828
  if (referenceBlock) {
817
829
  const initialBlockHash = await this.#getInitialHeaderHash();
818
- if (!referenceBlock.equals(initialBlockHash)) {
830
+ if (referenceBlock.equals(initialBlockHash)) {
831
+ upToBlockNumber = BlockNumber(0);
832
+ } else {
819
833
  const header = await this.blockSource.getBlockHeaderByHash(referenceBlock);
820
834
  if (!header) {
821
835
  throw new Error(
822
836
  `Block ${referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`,
823
837
  );
824
838
  }
839
+ upToBlockNumber = header.globalVariables.blockNumber;
825
840
  }
826
841
  }
827
- return this.logsSource.getPublicLogsByTagsFromContract(contractAddress, tags, page);
842
+ return this.logsSource.getPublicLogsByTagsFromContract(contractAddress, tags, page, upToBlockNumber);
828
843
  }
829
844
 
830
845
  /**
@@ -966,58 +981,64 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
966
981
  treeId: MerkleTreeId,
967
982
  leafValues: Fr[],
968
983
  ): Promise<(DataInBlock<bigint> | undefined)[]> {
969
- const committedDb = await this.#getWorldState(referenceBlock);
984
+ const committedDb = await this.getWorldState(referenceBlock);
970
985
  const maybeIndices = await committedDb.findLeafIndices(
971
986
  treeId,
972
987
  leafValues.map(x => x.toBuffer()),
973
988
  );
974
- // We filter out undefined values
975
- const indices = maybeIndices.filter(x => x !== undefined) as bigint[];
989
+ // Filter out undefined values to query block numbers only for found leaves
990
+ const definedIndices = maybeIndices.filter(x => x !== undefined);
976
991
 
977
- // Now we find the block numbers for the indices
978
- const blockNumbers = await committedDb.getBlockNumbersForLeafIndices(treeId, indices);
992
+ // Now we find the block numbers for the defined indices
993
+ const blockNumbers = await committedDb.getBlockNumbersForLeafIndices(treeId, definedIndices);
979
994
 
980
- // If any of the block numbers are undefined, we throw an error.
981
- for (let i = 0; i < indices.length; i++) {
982
- if (blockNumbers[i] === undefined) {
983
- throw new Error(`Block number is undefined for leaf index ${indices[i]} in tree ${MerkleTreeId[treeId]}`);
995
+ // Build a map from leaf index to block number
996
+ const indexToBlockNumber = new Map<bigint, BlockNumber>();
997
+ for (let i = 0; i < definedIndices.length; i++) {
998
+ const blockNumber = blockNumbers[i];
999
+ if (blockNumber === undefined) {
1000
+ throw new Error(
1001
+ `Block number is undefined for leaf index ${definedIndices[i]} in tree ${MerkleTreeId[treeId]}`,
1002
+ );
984
1003
  }
1004
+ indexToBlockNumber.set(definedIndices[i], blockNumber);
985
1005
  }
986
1006
 
987
1007
  // Get unique block numbers in order to optimize num calls to getLeafValue function.
988
- const uniqueBlockNumbers = [...new Set(blockNumbers.filter(x => x !== undefined))];
1008
+ const uniqueBlockNumbers = [...new Set(indexToBlockNumber.values())];
989
1009
 
990
- // Now we obtain the block hashes from the archive tree by calling await `committedDb.getLeafValue(treeId, index)`
991
- // (note that block number corresponds to the leaf index in the archive tree).
1010
+ // Now we obtain the block hashes from the archive tree (block number = leaf index in archive tree).
992
1011
  const blockHashes = await Promise.all(
993
1012
  uniqueBlockNumbers.map(blockNumber => {
994
1013
  return committedDb.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(blockNumber));
995
1014
  }),
996
1015
  );
997
1016
 
998
- // If any of the block hashes are undefined, we throw an error.
1017
+ // Build a map from block number to block hash
1018
+ const blockNumberToHash = new Map<BlockNumber, Fr>();
999
1019
  for (let i = 0; i < uniqueBlockNumbers.length; i++) {
1000
- if (blockHashes[i] === undefined) {
1020
+ const blockHash = blockHashes[i];
1021
+ if (blockHash === undefined) {
1001
1022
  throw new Error(`Block hash is undefined for block number ${uniqueBlockNumbers[i]}`);
1002
1023
  }
1024
+ blockNumberToHash.set(uniqueBlockNumbers[i], blockHash);
1003
1025
  }
1004
1026
 
1005
1027
  // Create DataInBlock objects by combining indices, blockNumbers and blockHashes and return them.
1006
- return maybeIndices.map((index, i) => {
1028
+ return maybeIndices.map(index => {
1007
1029
  if (index === undefined) {
1008
1030
  return undefined;
1009
1031
  }
1010
- const blockNumber = blockNumbers[i];
1032
+ const blockNumber = indexToBlockNumber.get(index);
1011
1033
  if (blockNumber === undefined) {
1012
- return undefined;
1034
+ throw new Error(`Block number not found for leaf index ${index} in tree ${MerkleTreeId[treeId]}`);
1013
1035
  }
1014
- const blockHashIndex = uniqueBlockNumbers.indexOf(blockNumber);
1015
- const blockHash = blockHashes[blockHashIndex];
1016
- if (!blockHash) {
1017
- return undefined;
1036
+ const blockHash = blockNumberToHash.get(blockNumber);
1037
+ if (blockHash === undefined) {
1038
+ throw new Error(`Block hash not found for block number ${blockNumber}`);
1018
1039
  }
1019
1040
  return {
1020
- l2BlockNumber: BlockNumber(Number(blockNumber)),
1041
+ l2BlockNumber: blockNumber,
1021
1042
  l2BlockHash: new BlockHash(blockHash),
1022
1043
  data: index,
1023
1044
  };
@@ -1028,7 +1049,11 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1028
1049
  referenceBlock: BlockParameter,
1029
1050
  blockHash: BlockHash,
1030
1051
  ): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
1031
- const committedDb = await this.#getWorldState(referenceBlock);
1052
+ // The Noir circuit checks the archive membership proof against `anchor_block_header.last_archive.root`,
1053
+ // which is the archive tree root BEFORE the anchor block was added (i.e. the state after block N-1).
1054
+ // So we need the world state at block N-1, not block N, to produce a sibling path matching that root.
1055
+ const referenceBlockNumber = await this.resolveBlockNumber(referenceBlock);
1056
+ const committedDb = await this.getWorldState(BlockNumber(referenceBlockNumber - 1));
1032
1057
  const [pathAndIndex] = await committedDb.findSiblingPaths<MerkleTreeId.ARCHIVE>(MerkleTreeId.ARCHIVE, [blockHash]);
1033
1058
  return pathAndIndex === undefined
1034
1059
  ? undefined
@@ -1039,7 +1064,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1039
1064
  referenceBlock: BlockParameter,
1040
1065
  noteHash: Fr,
1041
1066
  ): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
1042
- const committedDb = await this.#getWorldState(referenceBlock);
1067
+ const committedDb = await this.getWorldState(referenceBlock);
1043
1068
  const [pathAndIndex] = await committedDb.findSiblingPaths<MerkleTreeId.NOTE_HASH_TREE>(
1044
1069
  MerkleTreeId.NOTE_HASH_TREE,
1045
1070
  [noteHash],
@@ -1053,7 +1078,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1053
1078
  referenceBlock: BlockParameter,
1054
1079
  l1ToL2Message: Fr,
1055
1080
  ): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined> {
1056
- const db = await this.#getWorldState(referenceBlock);
1081
+ const db = await this.getWorldState(referenceBlock);
1057
1082
  const [witness] = await db.findSiblingPaths(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [l1ToL2Message]);
1058
1083
  if (!witness) {
1059
1084
  return undefined;
@@ -1086,19 +1111,9 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1086
1111
  public async getL2ToL1Messages(epoch: EpochNumber): Promise<Fr[][][][]> {
1087
1112
  // Assumes `getCheckpointedBlocksForEpoch` returns blocks in ascending order of block number.
1088
1113
  const checkpointedBlocks = await this.blockSource.getCheckpointedBlocksForEpoch(epoch);
1089
- const blocksInCheckpoints: L2Block[][] = [];
1090
- let previousSlotNumber = SlotNumber.ZERO;
1091
- let checkpointIndex = -1;
1092
- for (const checkpointedBlock of checkpointedBlocks) {
1093
- const block = checkpointedBlock.block;
1094
- const slotNumber = block.header.globalVariables.slotNumber;
1095
- if (slotNumber !== previousSlotNumber) {
1096
- checkpointIndex++;
1097
- blocksInCheckpoints.push([]);
1098
- previousSlotNumber = slotNumber;
1099
- }
1100
- blocksInCheckpoints[checkpointIndex].push(block);
1101
- }
1114
+ const blocksInCheckpoints = chunkBy(checkpointedBlocks, cb => cb.block.header.globalVariables.slotNumber).map(
1115
+ group => group.map(cb => cb.block),
1116
+ );
1102
1117
  return blocksInCheckpoints.map(blocks =>
1103
1118
  blocks.map(block => block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs)),
1104
1119
  );
@@ -1108,7 +1123,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1108
1123
  referenceBlock: BlockParameter,
1109
1124
  nullifier: Fr,
1110
1125
  ): Promise<NullifierMembershipWitness | undefined> {
1111
- const db = await this.#getWorldState(referenceBlock);
1126
+ const db = await this.getWorldState(referenceBlock);
1112
1127
  const [witness] = await db.findSiblingPaths(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()]);
1113
1128
  if (!witness) {
1114
1129
  return undefined;
@@ -1123,33 +1138,20 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1123
1138
  return new NullifierMembershipWitness(index, leafPreimage as NullifierLeafPreimage, path);
1124
1139
  }
1125
1140
 
1126
- /**
1127
- * Returns a low nullifier membership witness for a given nullifier at a given block.
1128
- * @param referenceBlock - The block parameter (block number, block hash, or 'latest') at which to get the data
1129
- * (which contains the root of the nullifier tree in which we are searching for the nullifier).
1130
- * @param nullifier - Nullifier we try to find the low nullifier witness for.
1131
- * @returns The low nullifier membership witness (if found).
1132
- * @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
1133
- * list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
1134
- * we are trying to prove non-inclusion for.
1135
- *
1136
- * Note: This function returns the membership witness of the nullifier itself and not the low nullifier when
1137
- * the nullifier already exists in the tree. This is because the `getPreviousValueIndex` function returns the
1138
- * index of the nullifier itself when it already exists in the tree.
1139
- * TODO: This is a confusing behavior and we should eventually address that.
1140
- */
1141
1141
  public async getLowNullifierMembershipWitness(
1142
1142
  referenceBlock: BlockParameter,
1143
1143
  nullifier: Fr,
1144
1144
  ): Promise<NullifierMembershipWitness | undefined> {
1145
- const committedDb = await this.#getWorldState(referenceBlock);
1145
+ const committedDb = await this.getWorldState(referenceBlock);
1146
1146
  const findResult = await committedDb.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
1147
1147
  if (!findResult) {
1148
1148
  return undefined;
1149
1149
  }
1150
1150
  const { index, alreadyPresent } = findResult;
1151
1151
  if (alreadyPresent) {
1152
- this.log.warn(`Nullifier ${nullifier.toBigInt()} already exists in the tree`);
1152
+ throw new Error(
1153
+ `Cannot prove nullifier non-inclusion: nullifier ${nullifier.toBigInt()} already exists in the tree`,
1154
+ );
1153
1155
  }
1154
1156
  const preimageData = (await committedDb.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, index))!;
1155
1157
 
@@ -1158,7 +1160,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1158
1160
  }
1159
1161
 
1160
1162
  async getPublicDataWitness(referenceBlock: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
1161
- const committedDb = await this.#getWorldState(referenceBlock);
1163
+ const committedDb = await this.getWorldState(referenceBlock);
1162
1164
  const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
1163
1165
  if (!lowLeafResult) {
1164
1166
  return undefined;
@@ -1173,7 +1175,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1173
1175
  }
1174
1176
 
1175
1177
  public async getPublicStorageAt(referenceBlock: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr> {
1176
- const committedDb = await this.#getWorldState(referenceBlock);
1178
+ const committedDb = await this.getWorldState(referenceBlock);
1177
1179
  const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
1178
1180
 
1179
1181
  const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
@@ -1318,6 +1320,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1318
1320
  // We accept transactions if they are not expired by the next slot (checked based on the ExpirationTimestamp field)
1319
1321
  const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
1320
1322
  const blockNumber = BlockNumber((await this.blockSource.getBlockNumber()) + 1);
1323
+ const l1Constants = await this.blockSource.getL1Constants();
1321
1324
  const validator = createTxValidatorForAcceptingTxsOverRPC(
1322
1325
  db,
1323
1326
  this.contractDataSource,
@@ -1334,6 +1337,9 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1334
1337
  gasFees: await this.getCurrentMinFees(),
1335
1338
  skipFeeEnforcement,
1336
1339
  txsPermitted: !this.config.disableTransactions,
1340
+ rollupManaLimit: l1Constants.rollupManaLimit,
1341
+ maxBlockL2Gas: this.config.validateMaxL2BlockGas,
1342
+ maxBlockDAGas: this.config.validateMaxDABlockGas,
1337
1343
  },
1338
1344
  this.log.getBindings(),
1339
1345
  );
@@ -1600,7 +1606,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1600
1606
  * @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
1601
1607
  * @returns An instance of a committed MerkleTreeOperations
1602
1608
  */
1603
- async #getWorldState(block: BlockParameter) {
1609
+ protected async getWorldState(block: BlockParameter) {
1604
1610
  let blockSyncedTo: BlockNumber = BlockNumber.ZERO;
1605
1611
  try {
1606
1612
  // Attempt to sync the world state if necessary
@@ -1614,6 +1620,8 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1614
1620
  return this.worldStateSynchronizer.getCommitted();
1615
1621
  }
1616
1622
 
1623
+ // Get the block number, either directly from the parameter or by quering the archiver with the block hash
1624
+ let blockNumber: BlockNumber;
1617
1625
  if (BlockHash.isBlockHash(block)) {
1618
1626
  const initialBlockHash = await this.#getInitialHeaderHash();
1619
1627
  if (block.equals(initialBlockHash)) {
@@ -1627,22 +1635,50 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
1627
1635
  `Block hash ${block.toString()} not found when querying world state. If the node API has been queried with anchor block hash possibly a reorg has occurred.`,
1628
1636
  );
1629
1637
  }
1630
- const blockNumber = header.getBlockNumber();
1631
- this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1632
- return this.worldStateSynchronizer.getSnapshot(blockNumber);
1638
+
1639
+ blockNumber = header.getBlockNumber();
1640
+ } else {
1641
+ blockNumber = block as BlockNumber;
1642
+ }
1643
+
1644
+ // Check it's within world state sync range
1645
+ if (blockNumber > blockSyncedTo) {
1646
+ throw new Error(`Queried block ${block} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
1633
1647
  }
1648
+ this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1634
1649
 
1635
- // Block number provided
1636
- {
1637
- const blockNumber = block as BlockNumber;
1650
+ const snapshot = this.worldStateSynchronizer.getSnapshot(blockNumber);
1638
1651
 
1639
- if (blockNumber > blockSyncedTo) {
1640
- throw new Error(`Queried block ${block} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
1652
+ // Double-check world-state synced to the same block hash as was requested
1653
+ if (BlockHash.isBlockHash(block)) {
1654
+ const blockHash = await snapshot.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(blockNumber));
1655
+ if (!blockHash || !new BlockHash(blockHash).equals(block)) {
1656
+ throw new Error(
1657
+ `Block hash ${block.toString()} not found in world state at block number ${blockNumber}. If the node API has been queried with anchor block hash possibly a reorg has occurred.`,
1658
+ );
1641
1659
  }
1660
+ }
1661
+
1662
+ return snapshot;
1663
+ }
1642
1664
 
1643
- this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
1644
- return this.worldStateSynchronizer.getSnapshot(blockNumber);
1665
+ /** Resolves a block parameter to a block number. */
1666
+ protected async resolveBlockNumber(block: BlockParameter): Promise<BlockNumber> {
1667
+ if (block === 'latest') {
1668
+ return BlockNumber(await this.blockSource.getBlockNumber());
1669
+ }
1670
+ if (BlockHash.isBlockHash(block)) {
1671
+ const initialBlockHash = await this.#getInitialHeaderHash();
1672
+ if (block.equals(initialBlockHash)) {
1673
+ return BlockNumber.ZERO;
1674
+ }
1675
+ const header = await this.blockSource.getBlockHeaderByHash(block);
1676
+ if (!header) {
1677
+ throw new Error(`Block hash ${block.toString()} not found.`);
1678
+ }
1679
+ return header.getBlockNumber();
1645
1680
  }
1681
+ return block as BlockNumber;
1646
1682
  }
1647
1683
 
1648
1684
  /**
@@ -88,7 +88,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
88
88
 
89
89
  /** Loads initial slot and initializes blockstream. We will not process anything at or before the initial slot. */
90
90
  protected async init() {
91
- this.initialSlot = this.epochCache.getEpochAndSlotNow().slot;
91
+ this.initialSlot = this.epochCache.getSlotNow();
92
92
  const startingBlock = BlockNumber(await this.archiver.getBlockNumber());
93
93
  this.logger.info(`Starting validator sentinel with initial slot ${this.initialSlot} and block ${startingBlock}`);
94
94
  this.blockStream = new L2BlockStream(this.archiver, this.l2TipsStore, this, this.logger, { startingBlock });
@@ -264,7 +264,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
264
264
  * and we don't have that data if we were offline during the period.
265
265
  */
266
266
  public async work() {
267
- const { slot: currentSlot } = this.epochCache.getEpochAndSlotNow();
267
+ const currentSlot = this.epochCache.getSlotNow();
268
268
  try {
269
269
  // Manually sync the block stream to ensure we have the latest data.
270
270
  // Note we never `start` the blockstream, so it loops at the same pace as we do.
@@ -309,9 +309,9 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
309
309
  return false;
310
310
  }
311
311
 
312
- const archiverSlot = await this.archiver.getL2SlotNumber();
313
- if (archiverSlot === undefined || archiverSlot < targetSlot) {
314
- this.logger.debug(`Waiting for archiver to sync with L2 slot ${targetSlot}`, { archiverSlot, targetSlot });
312
+ const syncedSlot = await this.archiver.getSyncedL2SlotNumber();
313
+ if (syncedSlot === undefined || syncedSlot < targetSlot) {
314
+ this.logger.debug(`Waiting for archiver to sync with L2 slot ${targetSlot}`, { syncedSlot, targetSlot });
315
315
  return false;
316
316
  }
317
317
 
@@ -436,7 +436,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
436
436
  ? fromEntries(await Promise.all(validators.map(async v => [v.toString(), await this.store.getHistory(v)])))
437
437
  : await this.store.getHistories();
438
438
 
439
- const slotNow = this.epochCache.getEpochAndSlotNow().slot;
439
+ const slotNow = this.epochCache.getSlotNow();
440
440
  fromSlot ??= SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
441
441
  toSlot ??= this.lastProcessedSlot ?? slotNow;
442
442
 
@@ -464,7 +464,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
464
464
  return undefined;
465
465
  }
466
466
 
467
- const slotNow = this.epochCache.getEpochAndSlotNow().slot;
467
+ const slotNow = this.epochCache.getSlotNow();
468
468
  const effectiveFromSlot =
469
469
  fromSlot ?? SlotNumber(Math.max((this.lastProcessedSlot ?? slotNow) - this.store.getHistoryLength(), 0));
470
470
  const effectiveToSlot = toSlot ?? this.lastProcessedSlot ?? slotNow;