@aztec/aztec-node 4.0.0-nightly.20260118 → 4.0.0-nightly.20260120
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.
- package/dest/aztec-node/server.d.ts +24 -89
- package/dest/aztec-node/server.d.ts.map +1 -1
- package/dest/aztec-node/server.js +86 -132
- package/package.json +25 -25
- package/src/aztec-node/server.ts +106 -161
|
@@ -12,7 +12,7 @@ import { type P2P, type P2PClientDeps } from '@aztec/p2p';
|
|
|
12
12
|
import { SequencerClient, type SequencerPublisher } from '@aztec/sequencer-client';
|
|
13
13
|
import { EpochPruneWatcher, type SlasherClientInterface } from '@aztec/slasher';
|
|
14
14
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
15
|
-
import { type BlockParameter, type
|
|
15
|
+
import { type BlockParameter, type CheckpointedL2Block, type DataInBlock, L2BlockNew, type L2BlockSource } from '@aztec/stdlib/block';
|
|
16
16
|
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
17
17
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress, NodeInfo, ProtocolContractAddresses } from '@aztec/stdlib/contract';
|
|
18
18
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
@@ -98,35 +98,35 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
98
98
|
isReady(): Promise<boolean>;
|
|
99
99
|
getNodeInfo(): Promise<NodeInfo>;
|
|
100
100
|
/**
|
|
101
|
-
* Get a block specified by its number.
|
|
102
|
-
* @param
|
|
101
|
+
* Get a block specified by its block number, block hash, or 'latest'.
|
|
102
|
+
* @param block - The block parameter (block number, block hash, or 'latest').
|
|
103
103
|
* @returns The requested block.
|
|
104
104
|
*/
|
|
105
|
-
getBlock(
|
|
105
|
+
getBlock(block: BlockParameter): Promise<L2BlockNew | undefined>;
|
|
106
106
|
/**
|
|
107
107
|
* Get a block specified by its hash.
|
|
108
108
|
* @param blockHash - The block hash being requested.
|
|
109
109
|
* @returns The requested block.
|
|
110
110
|
*/
|
|
111
|
-
getBlockByHash(blockHash: Fr): Promise<
|
|
111
|
+
getBlockByHash(blockHash: Fr): Promise<L2BlockNew | undefined>;
|
|
112
112
|
private buildInitialBlock;
|
|
113
113
|
/**
|
|
114
114
|
* Get a block specified by its archive root.
|
|
115
115
|
* @param archive - The archive root being requested.
|
|
116
116
|
* @returns The requested block.
|
|
117
117
|
*/
|
|
118
|
-
getBlockByArchive(archive: Fr): Promise<
|
|
118
|
+
getBlockByArchive(archive: Fr): Promise<L2BlockNew | undefined>;
|
|
119
119
|
/**
|
|
120
120
|
* Method to request blocks. Will attempt to return all requested blocks but will return only those available.
|
|
121
121
|
* @param from - The start of the range of blocks to return.
|
|
122
122
|
* @param limit - The maximum number of blocks to obtain.
|
|
123
123
|
* @returns The blocks requested.
|
|
124
124
|
*/
|
|
125
|
-
getBlocks(from: BlockNumber, limit: number): Promise<
|
|
126
|
-
getPublishedBlocks(from: BlockNumber, limit: number): Promise<
|
|
125
|
+
getBlocks(from: BlockNumber, limit: number): Promise<L2BlockNew[]>;
|
|
126
|
+
getPublishedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]>;
|
|
127
127
|
getPublishedCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
|
|
128
128
|
getL2BlocksNew(from: BlockNumber, limit: number): Promise<L2BlockNew[]>;
|
|
129
|
-
getCheckpointedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<
|
|
129
|
+
getCheckpointedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<CheckpointedL2Block[]>;
|
|
130
130
|
/**
|
|
131
131
|
* Method to fetch the current min L2 fees.
|
|
132
132
|
* @returns The current min L2 fees.
|
|
@@ -206,38 +206,12 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
206
206
|
* @returns - The txs if it exists.
|
|
207
207
|
*/
|
|
208
208
|
getTxsByHash(txHashes: TxHash[]): Promise<Tx[]>;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
* @returns The indices of leaves and the block metadata of a block in which the leaves were inserted.
|
|
216
|
-
*/
|
|
217
|
-
findLeavesIndexes(blockNumber: BlockParameter, treeId: MerkleTreeId, leafValues: Fr[]): Promise<(DataInBlock<bigint> | undefined)[]>;
|
|
218
|
-
/**
|
|
219
|
-
* Returns a sibling path for the given index in the nullifier tree.
|
|
220
|
-
* @param blockNumber - The block number at which to get the data.
|
|
221
|
-
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
222
|
-
* @returns The sibling path for the leaf index.
|
|
223
|
-
*/
|
|
224
|
-
getNullifierSiblingPath(blockNumber: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof NULLIFIER_TREE_HEIGHT>>;
|
|
225
|
-
/**
|
|
226
|
-
* Returns a sibling path for the given index in the data tree.
|
|
227
|
-
* @param blockNumber - The block number at which to get the data.
|
|
228
|
-
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
229
|
-
* @returns The sibling path for the leaf index.
|
|
230
|
-
*/
|
|
231
|
-
getNoteHashSiblingPath(blockNumber: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof NOTE_HASH_TREE_HEIGHT>>;
|
|
232
|
-
getArchiveMembershipWitness(blockNumber: BlockParameter, archive: Fr): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined>;
|
|
233
|
-
getNoteHashMembershipWitness(blockNumber: BlockParameter, noteHash: Fr): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined>;
|
|
234
|
-
/**
|
|
235
|
-
* Returns the index and a sibling path for a leaf in the committed l1 to l2 data tree.
|
|
236
|
-
* @param blockNumber - The block number at which to get the data.
|
|
237
|
-
* @param l1ToL2Message - The l1ToL2Message to get the index / sibling path for.
|
|
238
|
-
* @returns A tuple of the index and the sibling path of the L1ToL2Message (undefined if not found).
|
|
239
|
-
*/
|
|
240
|
-
getL1ToL2MessageMembershipWitness(blockNumber: BlockParameter, l1ToL2Message: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined>;
|
|
209
|
+
findLeavesIndexes(block: BlockParameter, treeId: MerkleTreeId, leafValues: Fr[]): Promise<(DataInBlock<bigint> | undefined)[]>;
|
|
210
|
+
getNullifierSiblingPath(block: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof NULLIFIER_TREE_HEIGHT>>;
|
|
211
|
+
getNoteHashSiblingPath(block: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof NOTE_HASH_TREE_HEIGHT>>;
|
|
212
|
+
getArchiveMembershipWitness(block: BlockParameter, archive: Fr): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined>;
|
|
213
|
+
getNoteHashMembershipWitness(block: BlockParameter, noteHash: Fr): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined>;
|
|
214
|
+
getL1ToL2MessageMembershipWitness(block: BlockParameter, l1ToL2Message: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined>;
|
|
241
215
|
getL1ToL2MessageBlock(l1ToL2Message: Fr): Promise<BlockNumber | undefined>;
|
|
242
216
|
/**
|
|
243
217
|
* Returns whether an L1 to L2 message is synced by archiver and if it's ready to be included in a block.
|
|
@@ -251,30 +225,12 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
251
225
|
* @returns The L2 to L1 messages (empty array if the epoch is not found).
|
|
252
226
|
*/
|
|
253
227
|
getL2ToL1Messages(epoch: EpochNumber): Promise<Fr[][][][]>;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
* @param leafIndex - Index of the leaf in the tree.
|
|
258
|
-
* @returns The sibling path.
|
|
259
|
-
*/
|
|
260
|
-
getArchiveSiblingPath(blockNumber: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof ARCHIVE_HEIGHT>>;
|
|
261
|
-
/**
|
|
262
|
-
* Returns a sibling path for a leaf in the committed public data tree.
|
|
263
|
-
* @param blockNumber - The block number at which to get the data.
|
|
264
|
-
* @param leafIndex - Index of the leaf in the tree.
|
|
265
|
-
* @returns The sibling path.
|
|
266
|
-
*/
|
|
267
|
-
getPublicDataSiblingPath(blockNumber: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof PUBLIC_DATA_TREE_HEIGHT>>;
|
|
268
|
-
/**
|
|
269
|
-
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
270
|
-
* @param blockNumber - The block number at which to get the index.
|
|
271
|
-
* @param nullifier - Nullifier we try to find witness for.
|
|
272
|
-
* @returns The nullifier membership witness (if found).
|
|
273
|
-
*/
|
|
274
|
-
getNullifierMembershipWitness(blockNumber: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
228
|
+
getArchiveSiblingPath(block: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof ARCHIVE_HEIGHT>>;
|
|
229
|
+
getPublicDataSiblingPath(block: BlockParameter, leafIndex: bigint): Promise<SiblingPath<typeof PUBLIC_DATA_TREE_HEIGHT>>;
|
|
230
|
+
getNullifierMembershipWitness(block: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
275
231
|
/**
|
|
276
232
|
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
277
|
-
* @param
|
|
233
|
+
* @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
|
|
278
234
|
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
279
235
|
* @returns The low nullifier membership witness (if found).
|
|
280
236
|
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
@@ -286,31 +242,10 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
286
242
|
* index of the nullifier itself when it already exists in the tree.
|
|
287
243
|
* TODO: This is a confusing behavior and we should eventually address that.
|
|
288
244
|
*/
|
|
289
|
-
getLowNullifierMembershipWitness(
|
|
290
|
-
getPublicDataWitness(
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
*
|
|
294
|
-
* @remarks The storage slot here refers to the slot as it is defined in Noir not the index in the merkle tree.
|
|
295
|
-
* Aztec's version of `eth_getStorageAt`.
|
|
296
|
-
*
|
|
297
|
-
* @param contract - Address of the contract to query.
|
|
298
|
-
* @param slot - Slot to query.
|
|
299
|
-
* @param blockNumber - The block number at which to get the data or 'latest'.
|
|
300
|
-
* @returns Storage value at the given contract slot.
|
|
301
|
-
*/
|
|
302
|
-
getPublicStorageAt(blockNumber: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr>;
|
|
303
|
-
/**
|
|
304
|
-
* Returns the currently committed block header, or the initial header if no blocks have been produced.
|
|
305
|
-
* @returns The current committed block header.
|
|
306
|
-
*/
|
|
307
|
-
getBlockHeader(blockNumber?: BlockParameter): Promise<BlockHeader | undefined>;
|
|
308
|
-
/**
|
|
309
|
-
* Get a block header specified by its hash.
|
|
310
|
-
* @param blockHash - The block hash being requested.
|
|
311
|
-
* @returns The requested block header.
|
|
312
|
-
*/
|
|
313
|
-
getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
|
|
245
|
+
getLowNullifierMembershipWitness(block: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
246
|
+
getPublicDataWitness(block: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
|
|
247
|
+
getPublicStorageAt(block: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr>;
|
|
248
|
+
getBlockHeader(block?: BlockParameter): Promise<BlockHeader | undefined>;
|
|
314
249
|
/**
|
|
315
250
|
* Get a block header specified by its archive root.
|
|
316
251
|
* @param archive - The archive root being requested.
|
|
@@ -339,4 +274,4 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
339
274
|
getSlashPayloads(): Promise<SlashPayloadRound[]>;
|
|
340
275
|
getSlashOffenses(round: bigint | 'all' | 'current'): Promise<Offense[]>;
|
|
341
276
|
}
|
|
342
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWtDLE1BQU0sMkJBQTJCLENBQUM7QUFDckcsT0FBTyxFQUNMLGNBQWMsRUFFZCxLQUFLLHdCQUF3QixFQUM3QixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHVCQUF1QixFQUM3QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBYyxLQUFLLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJMUUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3pFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLGFBQWEsRUFBb0QsTUFBTSxZQUFZLENBQUM7QUFFNUcsT0FBTyxFQUF1QyxlQUFlLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhILE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsS0FBSyxzQkFBc0IsRUFHNUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxF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
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWtDLE1BQU0sMkJBQTJCLENBQUM7QUFDckcsT0FBTyxFQUNMLGNBQWMsRUFDZCxLQUFLLHdCQUF3QixFQUM3QixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHVCQUF1QixFQUM3QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBYyxLQUFLLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJMUUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3pFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLGFBQWEsRUFBb0QsTUFBTSxZQUFZLENBQUM7QUFFNUcsT0FBTyxFQUF5QixlQUFlLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTFHLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsS0FBSyxzQkFBc0IsRUFHNUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAkC,MAAM,2BAA2B,CAAC;AACrG,OAAO,EACL,cAAc,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAkC,MAAM,2BAA2B,CAAC;AACrG,OAAO,EACL,cAAc,EACd,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEzG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAOzE,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,aAAa,EAAoD,MAAM,YAAY,CAAC;AAE5G,OAAO,EAAyB,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE1G,OAAO,EAEL,iBAAiB,EACjB,KAAK,sBAAsB,EAG5B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAEhB,UAAU,EACV,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,EAC3B,QAAQ,EACR,yBAAyB,EAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAEzB,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAE5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAa,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAyB,kBAAkB,EAA8B,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,YAAY,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,qBAAqB,IAAI,8BAA8B,EAC5D,KAAK,eAAe,EACpB,sBAAsB,EACtB,EAAE,EACF,KAAK,MAAM,EACX,SAAS,EAET,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAejC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,eAAe,EAA8B,MAAM,aAAa,CAAC;AAG/E;;GAEG;AACH,qBAAa,gBAAiB,YAAW,SAAS,EAAE,cAAc,EAAE,SAAS;;IAUzE,SAAS,CAAC,MAAM,EAAE,eAAe;IACjC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG;IACjC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAChE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY;IAC3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;IACzD,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB;IAC3D,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;IACjE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe,GAAG,SAAS;IACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,sBAAsB,GAAG,SAAS;IACpE,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,GAAG,SAAS;IAC3D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS;IACnE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IACpC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;IAClC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,8BAA8B;IACxE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB;IAClD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM;IACzC,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,UAAU,CAAC;IA5BrB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,wBAAwB,CAA+C;IAG/E,OAAO,CAAC,mBAAmB,CAAS;IAEpC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACY,MAAM,EAAE,eAAe,EACd,SAAS,EAAE,GAAG,EACd,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,EAC7C,UAAU,EAAE,YAAY,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,mBAAmB,EACxC,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,eAAe,GAAG,SAAS,EACtC,aAAa,EAAE,sBAAsB,GAAG,SAAS,EACjD,kBAAkB,EAAE,QAAQ,GAAG,SAAS,EACxC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,EAChD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,qBAAqB,EAAE,8BAA8B,EACrD,UAAU,EAAE,mBAAmB,EAC/B,cAAc,EAAE,MAAM,EACjC,aAAa,EAAE,6BAA6B,EAC5C,SAAS,GAAE,eAAsC,EACjD,GAAG,SAAuB,EAC1B,UAAU,CAAC,iCAAqB,EAOzC;IAEY,uBAAuB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAGpE;IAEM,SAAS,kDAEf;IAED;;;;OAIG;IACH,OAAoB,aAAa,CAC/B,WAAW,EAAE,eAAe,EAC5B,IAAI,GAAE;QACJ,SAAS,CAAC,EAAE,eAAe,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,kBAAkB,CAAC;QAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;QAC5B,aAAa,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC9C,EACN,OAAO,GAAE;QACP,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAC3C,kBAAkB,CAAC,EAAE,OAAO,CAAC;KACzB,GACL,OAAO,CAAC,gBAAgB,CAAC,CA0T3B;IAED;;;OAGG;IACI,YAAY,IAAI,eAAe,GAAG,SAAS,CAEjD;IAEM,cAAc,IAAI,aAAa,CAErC;IAEM,qBAAqB,IAAI,kBAAkB,CAEjD;IAEM,MAAM,IAAI,GAAG,CAEnB;IAED;;;OAGG;IACI,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAE5D;IAEM,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAElD;IAEY,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAE9D;IAED;;;OAGG;IACI,OAAO,qBAEb;IAEY,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,CAoB5C;IAED;;;;OAIG;IACU,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAS5E;IAED;;;;OAIG;IACU,cAAc,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAM1E;IAED,OAAO,CAAC,iBAAiB;IAKzB;;;;OAIG;IACU,iBAAiB,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAE3E;IAED;;;;;OAKG;IACU,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAE9E;IAEY,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAEhG;IAEY,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAE1G;IAEY,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAEnF;IAEY,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,kCAEpF;IAED;;;OAGG;IACU,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAEjD;IAEY,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAMlD;IAED;;;OAGG;IACU,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAElD;IAEY,oBAAoB,IAAI,OAAO,CAAC,WAAW,CAAC,CAExD;IAED;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAEvC;IAED;;;OAGG;IACI,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAEnC;IAED;;;OAGG;IACI,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAEnC;IAEM,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAExE;IAEM,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAE1F;IAEM,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAEzE;IAEM,+BAA+B,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAE7G;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAE/D;IAED;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAE7E;IAED;;;OAGG;IACU,MAAM,CAAC,EAAE,EAAE,EAAE,iBAEzB;IAmBY,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAgB5D;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAEvE;IAED;;OAEG;IACU,IAAI,kBAahB;IAED;;;OAGG;IACI,aAAa,IAAI,mBAAmB,GAAG,SAAS,CAEtD;IAED;;;;;OAKG;IACI,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAElE;IAEM,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE1C;IAED;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAE1D;IAED;;;;OAIG;IACU,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAE3D;IAEY,iBAAiB,CAC5B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,EAAE,EAAE,GACf,OAAO,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAyD9C;IAEY,uBAAuB,CAClC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAGpD;IAEY,sBAAsB,CACjC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAGpD;IAEY,2BAA2B,CACtC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,EAAE,GACV,OAAO,CAAC,iBAAiB,CAAC,OAAO,cAAc,CAAC,GAAG,SAAS,CAAC,CAM/D;IAEY,4BAA4B,CACvC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,EAAE,GACX,OAAO,CAAC,iBAAiB,CAAC,OAAO,qBAAqB,CAAC,GAAG,SAAS,CAAC,CAStE;IAEY,iCAAiC,CAC5C,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,EAAE,GAChB,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAC,GAAG,SAAS,CAAC,CAS7E;IAEY,qBAAqB,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAKtF;IAED;;;;OAIG;IACU,qBAAqB,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtE;IAED;;;;OAIG;IACU,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAkBtE;IAEY,qBAAqB,CAChC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC,CAG7C;IAEY,wBAAwB,CACnC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAGtD;IAEY,6BAA6B,CACxC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAcjD;IAED;;;;;;;;;;;;;OAaG;IACU,gCAAgC,CAC3C,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAcjD;IAEK,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAatG;IAEY,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAapG;IAEY,cAAc,CAAC,KAAK,GAAE,cAAyB,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAiB9F;IAED;;;;OAIG;IACU,uBAAuB,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAElF;IAED;;;QAGI;IAIS,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,kBAAkB,UAAQ,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAwEpG;IAEY,SAAS,CACpB,EAAE,EAAE,EAAE,EACN,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAO,GAClG,OAAO,CAAC,kBAAkB,CAAC,CAmB7B;IAEM,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAIhD;IAEY,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAe3E;IAEM,4BAA4B,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAOxE;IAEM,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E;IAEM,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAEpD;IAEM,iBAAiB,CACtB,gBAAgB,EAAE,UAAU,EAC5B,QAAQ,CAAC,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAE3C;IAEY,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChE;IAEY,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChF;IAEY,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAItC;IAEM,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAKjC;IAEM,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAKtD;IAEM,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAS7E;CAwEF"}
|
|
@@ -374,7 +374,6 @@ var _dec, _initProto;
|
|
|
374
374
|
import { createArchiver } from '@aztec/archiver';
|
|
375
375
|
import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
|
|
376
376
|
import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
377
|
-
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
378
377
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
379
378
|
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
380
379
|
import { getPublicClient } from '@aztec/ethereum/client';
|
|
@@ -393,12 +392,12 @@ import { trySnapshotSync, uploadSnapshot } from '@aztec/node-lib/actions';
|
|
|
393
392
|
import { createForwarderL1TxUtilsFromEthSigner, createL1TxUtilsWithBlobsFromEthSigner } from '@aztec/node-lib/factories';
|
|
394
393
|
import { createP2PClient, getDefaultAllowedSetupFunctions } from '@aztec/p2p';
|
|
395
394
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
396
|
-
import {
|
|
395
|
+
import { GlobalVariableBuilder, SequencerClient } from '@aztec/sequencer-client';
|
|
397
396
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
398
397
|
import { AttestationsBlockWatcher, EpochPruneWatcher, createSlasher } from '@aztec/slasher';
|
|
399
398
|
import { CollectionLimitsConfig, PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
400
399
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
401
|
-
import {
|
|
400
|
+
import { L2BlockHash, L2BlockNew } from '@aztec/stdlib/block';
|
|
402
401
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
403
402
|
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
404
403
|
import { AztecNodeAdminConfigSchema } from '@aztec/stdlib/interfaces/client';
|
|
@@ -578,18 +577,12 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
578
577
|
const p2pClient = await createP2PClient(P2PClientType.Full, config, archiver, proofVerifier, worldStateSynchronizer, epochCache, packageVersion, dateProvider, telemetry, deps.p2pClientDeps);
|
|
579
578
|
// We should really not be modifying the config object
|
|
580
579
|
config.txPublicSetupAllowList = config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
|
|
581
|
-
// Create BlockBuilder for EpochPruneWatcher (slasher functionality)
|
|
582
|
-
const blockBuilder = new BlockBuilder({
|
|
583
|
-
...config,
|
|
584
|
-
l1GenesisTime,
|
|
585
|
-
slotDuration: Number(slotDuration)
|
|
586
|
-
}, worldStateSynchronizer, archiver, dateProvider, telemetry);
|
|
587
580
|
// Create FullNodeCheckpointsBuilder for validator and non-validator block proposal handling
|
|
588
581
|
const validatorCheckpointsBuilder = new FullNodeCheckpointsBuilder({
|
|
589
582
|
...config,
|
|
590
583
|
l1GenesisTime,
|
|
591
584
|
slotDuration: Number(slotDuration)
|
|
592
|
-
}, archiver, dateProvider, telemetry);
|
|
585
|
+
}, worldStateSynchronizer, archiver, dateProvider, telemetry);
|
|
593
586
|
// We'll accumulate sentinel watchers here
|
|
594
587
|
const watchers = [];
|
|
595
588
|
// Create validator client if required
|
|
@@ -639,7 +632,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
639
632
|
}
|
|
640
633
|
let epochPruneWatcher;
|
|
641
634
|
if (config.slashPrunePenalty > 0n || config.slashDataWithholdingPenalty > 0n) {
|
|
642
|
-
epochPruneWatcher = new EpochPruneWatcher(archiver, archiver, epochCache, p2pClient.getTxProvider(),
|
|
635
|
+
epochPruneWatcher = new EpochPruneWatcher(archiver, archiver, epochCache, p2pClient.getTxProvider(), validatorCheckpointsBuilder, config);
|
|
643
636
|
watchers.push(epochPruneWatcher);
|
|
644
637
|
}
|
|
645
638
|
// We assume we want to slash for invalid attestations unless all max penalties are set to 0
|
|
@@ -685,7 +678,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
685
678
|
...config,
|
|
686
679
|
l1GenesisTime,
|
|
687
680
|
slotDuration: Number(slotDuration)
|
|
688
|
-
}, archiver, dateProvider, telemetry);
|
|
681
|
+
}, worldStateSynchronizer, archiver, dateProvider, telemetry);
|
|
689
682
|
sequencer = await SequencerClient.new(config, {
|
|
690
683
|
...deps,
|
|
691
684
|
epochCache,
|
|
@@ -770,15 +763,18 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
770
763
|
return nodeInfo;
|
|
771
764
|
}
|
|
772
765
|
/**
|
|
773
|
-
* Get a block specified by its number.
|
|
774
|
-
* @param
|
|
766
|
+
* Get a block specified by its block number, block hash, or 'latest'.
|
|
767
|
+
* @param block - The block parameter (block number, block hash, or 'latest').
|
|
775
768
|
* @returns The requested block.
|
|
776
|
-
*/ async getBlock(
|
|
777
|
-
|
|
769
|
+
*/ async getBlock(block) {
|
|
770
|
+
if (block instanceof L2BlockHash) {
|
|
771
|
+
return this.getBlockByHash(Fr.fromBuffer(block.toBuffer()));
|
|
772
|
+
}
|
|
773
|
+
const blockNumber = block === 'latest' ? await this.getBlockNumber() : block;
|
|
778
774
|
if (blockNumber === BlockNumber.ZERO) {
|
|
779
775
|
return this.buildInitialBlock();
|
|
780
776
|
}
|
|
781
|
-
return await this.blockSource.
|
|
777
|
+
return await this.blockSource.getL2BlockNew(blockNumber);
|
|
782
778
|
}
|
|
783
779
|
/**
|
|
784
780
|
* Get a block specified by its hash.
|
|
@@ -786,32 +782,21 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
786
782
|
* @returns The requested block.
|
|
787
783
|
*/ async getBlockByHash(blockHash) {
|
|
788
784
|
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
789
|
-
if (blockHash.equals(initialBlockHash)) {
|
|
785
|
+
if (blockHash.equals(Fr.fromBuffer(initialBlockHash.toBuffer()))) {
|
|
790
786
|
return this.buildInitialBlock();
|
|
791
787
|
}
|
|
792
|
-
|
|
793
|
-
return publishedBlock?.block;
|
|
788
|
+
return await this.blockSource.getL2BlockNewByHash(blockHash);
|
|
794
789
|
}
|
|
795
790
|
buildInitialBlock() {
|
|
796
791
|
const initialHeader = this.worldStateSynchronizer.getCommitted().getInitialHeader();
|
|
797
|
-
|
|
798
|
-
// return L2BlockNew.empty(initialHeader);
|
|
799
|
-
const oldBlockHeader = L2BlockHeader.empty();
|
|
800
|
-
oldBlockHeader.state.l1ToL2MessageTree.root = initialHeader.state.l1ToL2MessageTree.root;
|
|
801
|
-
oldBlockHeader.state.partial.noteHashTree.root = initialHeader.state.partial.noteHashTree.root;
|
|
802
|
-
oldBlockHeader.state.partial.nullifierTree.root = initialHeader.state.partial.nullifierTree.root;
|
|
803
|
-
oldBlockHeader.state.partial.nullifierTree.nextAvailableLeafIndex = initialHeader.state.partial.nullifierTree.nextAvailableLeafIndex;
|
|
804
|
-
oldBlockHeader.state.partial.publicDataTree.root = initialHeader.state.partial.publicDataTree.root;
|
|
805
|
-
oldBlockHeader.state.partial.publicDataTree.nextAvailableLeafIndex = initialHeader.state.partial.publicDataTree.nextAvailableLeafIndex;
|
|
806
|
-
return L2Block.empty(oldBlockHeader);
|
|
792
|
+
return L2BlockNew.empty(initialHeader);
|
|
807
793
|
}
|
|
808
794
|
/**
|
|
809
795
|
* Get a block specified by its archive root.
|
|
810
796
|
* @param archive - The archive root being requested.
|
|
811
797
|
* @returns The requested block.
|
|
812
798
|
*/ async getBlockByArchive(archive) {
|
|
813
|
-
|
|
814
|
-
return publishedBlock?.block;
|
|
799
|
+
return await this.blockSource.getL2BlockNewByArchive(archive);
|
|
815
800
|
}
|
|
816
801
|
/**
|
|
817
802
|
* Method to request blocks. Will attempt to return all requested blocks but will return only those available.
|
|
@@ -819,7 +804,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
819
804
|
* @param limit - The maximum number of blocks to obtain.
|
|
820
805
|
* @returns The blocks requested.
|
|
821
806
|
*/ async getBlocks(from, limit) {
|
|
822
|
-
return await this.blockSource.
|
|
807
|
+
return await this.blockSource.getL2BlocksNew(from, limit) ?? [];
|
|
823
808
|
}
|
|
824
809
|
async getPublishedBlocks(from, limit) {
|
|
825
810
|
return await this.blockSource.getPublishedBlocks(from, limit) ?? [];
|
|
@@ -989,15 +974,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
989
974
|
*/ async getTxsByHash(txHashes) {
|
|
990
975
|
return compactArray(await Promise.all(txHashes.map((txHash)=>this.getTxByHash(txHash))));
|
|
991
976
|
}
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
* the leaves were inserted.
|
|
995
|
-
* @param blockNumber - The block number at which to get the data or 'latest' for latest data.
|
|
996
|
-
* @param treeId - The tree to search in.
|
|
997
|
-
* @param leafValues - The values to search for.
|
|
998
|
-
* @returns The indices of leaves and the block metadata of a block in which the leaves were inserted.
|
|
999
|
-
*/ async findLeavesIndexes(blockNumber, treeId, leafValues) {
|
|
1000
|
-
const committedDb = await this.#getWorldState(blockNumber);
|
|
977
|
+
async findLeavesIndexes(block, treeId, leafValues) {
|
|
978
|
+
const committedDb = await this.#getWorldState(block);
|
|
1001
979
|
const maybeIndices = await committedDb.findLeafIndices(treeId, leafValues.map((x)=>x.toBuffer()));
|
|
1002
980
|
// We filter out undefined values
|
|
1003
981
|
const indices = maybeIndices.filter((x)=>x !== undefined);
|
|
@@ -1045,45 +1023,30 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1045
1023
|
};
|
|
1046
1024
|
});
|
|
1047
1025
|
}
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
* @param blockNumber - The block number at which to get the data.
|
|
1051
|
-
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
1052
|
-
* @returns The sibling path for the leaf index.
|
|
1053
|
-
*/ async getNullifierSiblingPath(blockNumber, leafIndex) {
|
|
1054
|
-
const committedDb = await this.#getWorldState(blockNumber);
|
|
1026
|
+
async getNullifierSiblingPath(block, leafIndex) {
|
|
1027
|
+
const committedDb = await this.#getWorldState(block);
|
|
1055
1028
|
return committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, leafIndex);
|
|
1056
1029
|
}
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
* @param blockNumber - The block number at which to get the data.
|
|
1060
|
-
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
1061
|
-
* @returns The sibling path for the leaf index.
|
|
1062
|
-
*/ async getNoteHashSiblingPath(blockNumber, leafIndex) {
|
|
1063
|
-
const committedDb = await this.#getWorldState(blockNumber);
|
|
1030
|
+
async getNoteHashSiblingPath(block, leafIndex) {
|
|
1031
|
+
const committedDb = await this.#getWorldState(block);
|
|
1064
1032
|
return committedDb.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
|
|
1065
1033
|
}
|
|
1066
|
-
async getArchiveMembershipWitness(
|
|
1067
|
-
const committedDb = await this.#getWorldState(
|
|
1034
|
+
async getArchiveMembershipWitness(block, archive) {
|
|
1035
|
+
const committedDb = await this.#getWorldState(block);
|
|
1068
1036
|
const [pathAndIndex] = await committedDb.findSiblingPaths(MerkleTreeId.ARCHIVE, [
|
|
1069
1037
|
archive
|
|
1070
1038
|
]);
|
|
1071
1039
|
return pathAndIndex === undefined ? undefined : MembershipWitness.fromSiblingPath(pathAndIndex.index, pathAndIndex.path);
|
|
1072
1040
|
}
|
|
1073
|
-
async getNoteHashMembershipWitness(
|
|
1074
|
-
const committedDb = await this.#getWorldState(
|
|
1041
|
+
async getNoteHashMembershipWitness(block, noteHash) {
|
|
1042
|
+
const committedDb = await this.#getWorldState(block);
|
|
1075
1043
|
const [pathAndIndex] = await committedDb.findSiblingPaths(MerkleTreeId.NOTE_HASH_TREE, [
|
|
1076
1044
|
noteHash
|
|
1077
1045
|
]);
|
|
1078
1046
|
return pathAndIndex === undefined ? undefined : MembershipWitness.fromSiblingPath(pathAndIndex.index, pathAndIndex.path);
|
|
1079
1047
|
}
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
* @param blockNumber - The block number at which to get the data.
|
|
1083
|
-
* @param l1ToL2Message - The l1ToL2Message to get the index / sibling path for.
|
|
1084
|
-
* @returns A tuple of the index and the sibling path of the L1ToL2Message (undefined if not found).
|
|
1085
|
-
*/ async getL1ToL2MessageMembershipWitness(blockNumber, l1ToL2Message) {
|
|
1086
|
-
const db = await this.#getWorldState(blockNumber);
|
|
1048
|
+
async getL1ToL2MessageMembershipWitness(block, l1ToL2Message) {
|
|
1049
|
+
const db = await this.#getWorldState(block);
|
|
1087
1050
|
const [witness] = await db.findSiblingPaths(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [
|
|
1088
1051
|
l1ToL2Message
|
|
1089
1052
|
]);
|
|
@@ -1129,31 +1092,16 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1129
1092
|
}
|
|
1130
1093
|
return blocksInCheckpoints.map((blocks)=>blocks.map((block)=>block.body.txEffects.map((txEffect)=>txEffect.l2ToL1Msgs)));
|
|
1131
1094
|
}
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
* @param blockNumber - The block number at which to get the data.
|
|
1135
|
-
* @param leafIndex - Index of the leaf in the tree.
|
|
1136
|
-
* @returns The sibling path.
|
|
1137
|
-
*/ async getArchiveSiblingPath(blockNumber, leafIndex) {
|
|
1138
|
-
const committedDb = await this.#getWorldState(blockNumber);
|
|
1095
|
+
async getArchiveSiblingPath(block, leafIndex) {
|
|
1096
|
+
const committedDb = await this.#getWorldState(block);
|
|
1139
1097
|
return committedDb.getSiblingPath(MerkleTreeId.ARCHIVE, leafIndex);
|
|
1140
1098
|
}
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
* @param blockNumber - The block number at which to get the data.
|
|
1144
|
-
* @param leafIndex - Index of the leaf in the tree.
|
|
1145
|
-
* @returns The sibling path.
|
|
1146
|
-
*/ async getPublicDataSiblingPath(blockNumber, leafIndex) {
|
|
1147
|
-
const committedDb = await this.#getWorldState(blockNumber);
|
|
1099
|
+
async getPublicDataSiblingPath(block, leafIndex) {
|
|
1100
|
+
const committedDb = await this.#getWorldState(block);
|
|
1148
1101
|
return committedDb.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, leafIndex);
|
|
1149
1102
|
}
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
* @param blockNumber - The block number at which to get the index.
|
|
1153
|
-
* @param nullifier - Nullifier we try to find witness for.
|
|
1154
|
-
* @returns The nullifier membership witness (if found).
|
|
1155
|
-
*/ async getNullifierMembershipWitness(blockNumber, nullifier) {
|
|
1156
|
-
const db = await this.#getWorldState(blockNumber);
|
|
1103
|
+
async getNullifierMembershipWitness(block, nullifier) {
|
|
1104
|
+
const db = await this.#getWorldState(block);
|
|
1157
1105
|
const [witness] = await db.findSiblingPaths(MerkleTreeId.NULLIFIER_TREE, [
|
|
1158
1106
|
nullifier.toBuffer()
|
|
1159
1107
|
]);
|
|
@@ -1169,7 +1117,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1169
1117
|
}
|
|
1170
1118
|
/**
|
|
1171
1119
|
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
1172
|
-
* @param
|
|
1120
|
+
* @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
|
|
1173
1121
|
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
1174
1122
|
* @returns The low nullifier membership witness (if found).
|
|
1175
1123
|
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
@@ -1180,8 +1128,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1180
1128
|
* the nullifier already exists in the tree. This is because the `getPreviousValueIndex` function returns the
|
|
1181
1129
|
* index of the nullifier itself when it already exists in the tree.
|
|
1182
1130
|
* TODO: This is a confusing behavior and we should eventually address that.
|
|
1183
|
-
*/ async getLowNullifierMembershipWitness(
|
|
1184
|
-
const committedDb = await this.#getWorldState(
|
|
1131
|
+
*/ async getLowNullifierMembershipWitness(block, nullifier) {
|
|
1132
|
+
const committedDb = await this.#getWorldState(block);
|
|
1185
1133
|
const findResult = await committedDb.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
|
|
1186
1134
|
if (!findResult) {
|
|
1187
1135
|
return undefined;
|
|
@@ -1194,8 +1142,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1194
1142
|
const siblingPath = await committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, BigInt(index));
|
|
1195
1143
|
return new NullifierMembershipWitness(BigInt(index), preimageData, siblingPath);
|
|
1196
1144
|
}
|
|
1197
|
-
async getPublicDataWitness(
|
|
1198
|
-
const committedDb = await this.#getWorldState(
|
|
1145
|
+
async getPublicDataWitness(block, leafSlot) {
|
|
1146
|
+
const committedDb = await this.#getWorldState(block);
|
|
1199
1147
|
const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
|
|
1200
1148
|
if (!lowLeafResult) {
|
|
1201
1149
|
return undefined;
|
|
@@ -1205,18 +1153,8 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1205
1153
|
return new PublicDataWitness(lowLeafResult.index, preimage, path);
|
|
1206
1154
|
}
|
|
1207
1155
|
}
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
*
|
|
1211
|
-
* @remarks The storage slot here refers to the slot as it is defined in Noir not the index in the merkle tree.
|
|
1212
|
-
* Aztec's version of `eth_getStorageAt`.
|
|
1213
|
-
*
|
|
1214
|
-
* @param contract - Address of the contract to query.
|
|
1215
|
-
* @param slot - Slot to query.
|
|
1216
|
-
* @param blockNumber - The block number at which to get the data or 'latest'.
|
|
1217
|
-
* @returns Storage value at the given contract slot.
|
|
1218
|
-
*/ async getPublicStorageAt(blockNumber, contract, slot) {
|
|
1219
|
-
const committedDb = await this.#getWorldState(blockNumber);
|
|
1156
|
+
async getPublicStorageAt(block, contract, slot) {
|
|
1157
|
+
const committedDb = await this.#getWorldState(block);
|
|
1220
1158
|
const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
|
|
1221
1159
|
const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
|
|
1222
1160
|
if (!lowLeafResult || !lowLeafResult.alreadyPresent) {
|
|
@@ -1225,22 +1163,23 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1225
1163
|
const preimage = await committedDb.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
|
|
1226
1164
|
return preimage.leaf.value;
|
|
1227
1165
|
}
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1166
|
+
async getBlockHeader(block = 'latest') {
|
|
1167
|
+
if (block instanceof L2BlockHash) {
|
|
1168
|
+
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
1169
|
+
if (block.equals(initialBlockHash)) {
|
|
1170
|
+
// Block source doesn't handle initial header so we need to handle the case separately.
|
|
1171
|
+
return this.worldStateSynchronizer.getCommitted().getInitialHeader();
|
|
1172
|
+
}
|
|
1173
|
+
const blockHashFr = Fr.fromBuffer(block.toBuffer());
|
|
1174
|
+
return this.blockSource.getBlockHeaderByHash(blockHashFr);
|
|
1175
|
+
} else {
|
|
1176
|
+
// Block source doesn't handle initial header so we need to handle the case separately.
|
|
1177
|
+
const blockNumber = block === 'latest' ? await this.getBlockNumber() : block;
|
|
1178
|
+
if (blockNumber === BlockNumber.ZERO) {
|
|
1179
|
+
return this.worldStateSynchronizer.getCommitted().getInitialHeader();
|
|
1180
|
+
}
|
|
1181
|
+
return this.blockSource.getBlockHeader(block);
|
|
1242
1182
|
}
|
|
1243
|
-
return await this.blockSource.getBlockHeaderByHash(blockHash);
|
|
1244
1183
|
}
|
|
1245
1184
|
/**
|
|
1246
1185
|
* Get a block header specified by its archive root.
|
|
@@ -1461,18 +1400,15 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1461
1400
|
}
|
|
1462
1401
|
#getInitialHeaderHash() {
|
|
1463
1402
|
if (!this.initialHeaderHashPromise) {
|
|
1464
|
-
this.initialHeaderHashPromise = this.worldStateSynchronizer.getCommitted().getInitialHeader().hash();
|
|
1403
|
+
this.initialHeaderHashPromise = this.worldStateSynchronizer.getCommitted().getInitialHeader().hash().then((hash)=>L2BlockHash.fromField(hash));
|
|
1465
1404
|
}
|
|
1466
1405
|
return this.initialHeaderHashPromise;
|
|
1467
1406
|
}
|
|
1468
1407
|
/**
|
|
1469
1408
|
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
1470
|
-
* @param
|
|
1409
|
+
* @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
|
|
1471
1410
|
* @returns An instance of a committed MerkleTreeOperations
|
|
1472
|
-
*/ async #getWorldState(
|
|
1473
|
-
if (typeof blockNumber === 'number' && blockNumber < INITIAL_L2_BLOCK_NUM - 1) {
|
|
1474
|
-
throw new Error('Invalid block number to get world state for: ' + blockNumber);
|
|
1475
|
-
}
|
|
1411
|
+
*/ async #getWorldState(block) {
|
|
1476
1412
|
let blockSyncedTo = BlockNumber.ZERO;
|
|
1477
1413
|
try {
|
|
1478
1414
|
// Attempt to sync the world state if necessary
|
|
@@ -1480,15 +1416,33 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1480
1416
|
} catch (err) {
|
|
1481
1417
|
this.log.error(`Error getting world state: ${err}`);
|
|
1482
1418
|
}
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
this.log.debug(`Using committed db for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
|
|
1419
|
+
if (block === 'latest') {
|
|
1420
|
+
this.log.debug(`Using committed db for block 'latest', world state synced upto ${blockSyncedTo}`);
|
|
1486
1421
|
return this.worldStateSynchronizer.getCommitted();
|
|
1487
|
-
}
|
|
1422
|
+
}
|
|
1423
|
+
if (block instanceof L2BlockHash) {
|
|
1424
|
+
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
1425
|
+
if (block.equals(initialBlockHash)) {
|
|
1426
|
+
// Block source doesn't handle initial header so we need to handle the case separately.
|
|
1427
|
+
return this.worldStateSynchronizer.getSnapshot(BlockNumber.ZERO);
|
|
1428
|
+
}
|
|
1429
|
+
const blockHashFr = Fr.fromBuffer(block.toBuffer());
|
|
1430
|
+
const header = await this.blockSource.getBlockHeaderByHash(blockHashFr);
|
|
1431
|
+
if (!header) {
|
|
1432
|
+
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.`);
|
|
1433
|
+
}
|
|
1434
|
+
const blockNumber = header.getBlockNumber();
|
|
1435
|
+
this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
|
|
1436
|
+
return this.worldStateSynchronizer.getSnapshot(blockNumber);
|
|
1437
|
+
}
|
|
1438
|
+
// Block number provided
|
|
1439
|
+
{
|
|
1440
|
+
const blockNumber = block;
|
|
1441
|
+
if (blockNumber > blockSyncedTo) {
|
|
1442
|
+
throw new Error(`Queried block ${block} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
|
|
1443
|
+
}
|
|
1488
1444
|
this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
|
|
1489
1445
|
return this.worldStateSynchronizer.getSnapshot(blockNumber);
|
|
1490
|
-
} else {
|
|
1491
|
-
throw new Error(`Block ${blockNumber} not yet synced`);
|
|
1492
1446
|
}
|
|
1493
1447
|
}
|
|
1494
1448
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/aztec-node",
|
|
3
|
-
"version": "4.0.0-nightly.
|
|
3
|
+
"version": "4.0.0-nightly.20260120",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -65,30 +65,30 @@
|
|
|
65
65
|
]
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@aztec/archiver": "4.0.0-nightly.
|
|
69
|
-
"@aztec/bb-prover": "4.0.0-nightly.
|
|
70
|
-
"@aztec/blob-client": "4.0.0-nightly.
|
|
71
|
-
"@aztec/constants": "4.0.0-nightly.
|
|
72
|
-
"@aztec/epoch-cache": "4.0.0-nightly.
|
|
73
|
-
"@aztec/ethereum": "4.0.0-nightly.
|
|
74
|
-
"@aztec/foundation": "4.0.0-nightly.
|
|
75
|
-
"@aztec/kv-store": "4.0.0-nightly.
|
|
76
|
-
"@aztec/l1-artifacts": "4.0.0-nightly.
|
|
77
|
-
"@aztec/merkle-tree": "4.0.0-nightly.
|
|
78
|
-
"@aztec/node-keystore": "4.0.0-nightly.
|
|
79
|
-
"@aztec/node-lib": "4.0.0-nightly.
|
|
80
|
-
"@aztec/noir-protocol-circuits-types": "4.0.0-nightly.
|
|
81
|
-
"@aztec/p2p": "4.0.0-nightly.
|
|
82
|
-
"@aztec/protocol-contracts": "4.0.0-nightly.
|
|
83
|
-
"@aztec/prover-client": "4.0.0-nightly.
|
|
84
|
-
"@aztec/sequencer-client": "4.0.0-nightly.
|
|
85
|
-
"@aztec/simulator": "4.0.0-nightly.
|
|
86
|
-
"@aztec/slasher": "4.0.0-nightly.
|
|
87
|
-
"@aztec/stdlib": "4.0.0-nightly.
|
|
88
|
-
"@aztec/telemetry-client": "4.0.0-nightly.
|
|
89
|
-
"@aztec/validator-client": "4.0.0-nightly.
|
|
90
|
-
"@aztec/validator-ha-signer": "4.0.0-nightly.
|
|
91
|
-
"@aztec/world-state": "4.0.0-nightly.
|
|
68
|
+
"@aztec/archiver": "4.0.0-nightly.20260120",
|
|
69
|
+
"@aztec/bb-prover": "4.0.0-nightly.20260120",
|
|
70
|
+
"@aztec/blob-client": "4.0.0-nightly.20260120",
|
|
71
|
+
"@aztec/constants": "4.0.0-nightly.20260120",
|
|
72
|
+
"@aztec/epoch-cache": "4.0.0-nightly.20260120",
|
|
73
|
+
"@aztec/ethereum": "4.0.0-nightly.20260120",
|
|
74
|
+
"@aztec/foundation": "4.0.0-nightly.20260120",
|
|
75
|
+
"@aztec/kv-store": "4.0.0-nightly.20260120",
|
|
76
|
+
"@aztec/l1-artifacts": "4.0.0-nightly.20260120",
|
|
77
|
+
"@aztec/merkle-tree": "4.0.0-nightly.20260120",
|
|
78
|
+
"@aztec/node-keystore": "4.0.0-nightly.20260120",
|
|
79
|
+
"@aztec/node-lib": "4.0.0-nightly.20260120",
|
|
80
|
+
"@aztec/noir-protocol-circuits-types": "4.0.0-nightly.20260120",
|
|
81
|
+
"@aztec/p2p": "4.0.0-nightly.20260120",
|
|
82
|
+
"@aztec/protocol-contracts": "4.0.0-nightly.20260120",
|
|
83
|
+
"@aztec/prover-client": "4.0.0-nightly.20260120",
|
|
84
|
+
"@aztec/sequencer-client": "4.0.0-nightly.20260120",
|
|
85
|
+
"@aztec/simulator": "4.0.0-nightly.20260120",
|
|
86
|
+
"@aztec/slasher": "4.0.0-nightly.20260120",
|
|
87
|
+
"@aztec/stdlib": "4.0.0-nightly.20260120",
|
|
88
|
+
"@aztec/telemetry-client": "4.0.0-nightly.20260120",
|
|
89
|
+
"@aztec/validator-client": "4.0.0-nightly.20260120",
|
|
90
|
+
"@aztec/validator-ha-signer": "4.0.0-nightly.20260120",
|
|
91
|
+
"@aztec/world-state": "4.0.0-nightly.20260120",
|
|
92
92
|
"koa": "^2.16.1",
|
|
93
93
|
"koa-router": "^13.1.1",
|
|
94
94
|
"tslib": "^2.4.0",
|
package/src/aztec-node/server.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@azte
|
|
|
3
3
|
import { type BlobClientInterface, createBlobClientWithFileStores } from '@aztec/blob-client/client';
|
|
4
4
|
import {
|
|
5
5
|
ARCHIVE_HEIGHT,
|
|
6
|
-
INITIAL_L2_BLOCK_NUM,
|
|
7
6
|
type L1_TO_L2_MSG_TREE_HEIGHT,
|
|
8
7
|
type NOTE_HASH_TREE_HEIGHT,
|
|
9
8
|
type NULLIFIER_TREE_HEIGHT,
|
|
@@ -31,7 +30,7 @@ import {
|
|
|
31
30
|
} from '@aztec/node-lib/factories';
|
|
32
31
|
import { type P2P, type P2PClientDeps, createP2PClient, getDefaultAllowedSetupFunctions } from '@aztec/p2p';
|
|
33
32
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
34
|
-
import {
|
|
33
|
+
import { GlobalVariableBuilder, SequencerClient, type SequencerPublisher } from '@aztec/sequencer-client';
|
|
35
34
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
36
35
|
import {
|
|
37
36
|
AttestationsBlockWatcher,
|
|
@@ -44,13 +43,11 @@ import { CollectionLimitsConfig, PublicSimulatorConfig } from '@aztec/stdlib/avm
|
|
|
44
43
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
45
44
|
import {
|
|
46
45
|
type BlockParameter,
|
|
46
|
+
type CheckpointedL2Block,
|
|
47
47
|
type DataInBlock,
|
|
48
|
-
L2Block,
|
|
49
48
|
L2BlockHash,
|
|
50
|
-
L2BlockHeader,
|
|
51
49
|
L2BlockNew,
|
|
52
50
|
type L2BlockSource,
|
|
53
|
-
type PublishedL2Block,
|
|
54
51
|
} from '@aztec/stdlib/block';
|
|
55
52
|
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
56
53
|
import type {
|
|
@@ -129,7 +126,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
129
126
|
*/
|
|
130
127
|
export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
131
128
|
private metrics: NodeMetrics;
|
|
132
|
-
private initialHeaderHashPromise: Promise<
|
|
129
|
+
private initialHeaderHashPromise: Promise<L2BlockHash> | undefined = undefined;
|
|
133
130
|
|
|
134
131
|
// Prevent two snapshot operations to happen simultaneously
|
|
135
132
|
private isUploadingSnapshot = false;
|
|
@@ -311,18 +308,10 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
311
308
|
// We should really not be modifying the config object
|
|
312
309
|
config.txPublicSetupAllowList = config.txPublicSetupAllowList ?? (await getDefaultAllowedSetupFunctions());
|
|
313
310
|
|
|
314
|
-
// Create BlockBuilder for EpochPruneWatcher (slasher functionality)
|
|
315
|
-
const blockBuilder = new BlockBuilder(
|
|
316
|
-
{ ...config, l1GenesisTime, slotDuration: Number(slotDuration) },
|
|
317
|
-
worldStateSynchronizer,
|
|
318
|
-
archiver,
|
|
319
|
-
dateProvider,
|
|
320
|
-
telemetry,
|
|
321
|
-
);
|
|
322
|
-
|
|
323
311
|
// Create FullNodeCheckpointsBuilder for validator and non-validator block proposal handling
|
|
324
312
|
const validatorCheckpointsBuilder = new FullNodeCheckpointsBuilder(
|
|
325
313
|
{ ...config, l1GenesisTime, slotDuration: Number(slotDuration) },
|
|
314
|
+
worldStateSynchronizer,
|
|
326
315
|
archiver,
|
|
327
316
|
dateProvider,
|
|
328
317
|
telemetry,
|
|
@@ -389,7 +378,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
389
378
|
archiver,
|
|
390
379
|
epochCache,
|
|
391
380
|
p2pClient.getTxProvider(),
|
|
392
|
-
|
|
381
|
+
validatorCheckpointsBuilder,
|
|
393
382
|
config,
|
|
394
383
|
);
|
|
395
384
|
watchers.push(epochPruneWatcher);
|
|
@@ -454,6 +443,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
454
443
|
// Create and start the sequencer client
|
|
455
444
|
const checkpointsBuilder = new CheckpointsBuilder(
|
|
456
445
|
{ ...config, l1GenesisTime, slotDuration: Number(slotDuration) },
|
|
446
|
+
worldStateSynchronizer,
|
|
457
447
|
archiver,
|
|
458
448
|
dateProvider,
|
|
459
449
|
telemetry,
|
|
@@ -582,16 +572,19 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
582
572
|
}
|
|
583
573
|
|
|
584
574
|
/**
|
|
585
|
-
* Get a block specified by its number.
|
|
586
|
-
* @param
|
|
575
|
+
* Get a block specified by its block number, block hash, or 'latest'.
|
|
576
|
+
* @param block - The block parameter (block number, block hash, or 'latest').
|
|
587
577
|
* @returns The requested block.
|
|
588
578
|
*/
|
|
589
|
-
public async getBlock(
|
|
590
|
-
|
|
579
|
+
public async getBlock(block: BlockParameter): Promise<L2BlockNew | undefined> {
|
|
580
|
+
if (block instanceof L2BlockHash) {
|
|
581
|
+
return this.getBlockByHash(Fr.fromBuffer(block.toBuffer()));
|
|
582
|
+
}
|
|
583
|
+
const blockNumber = block === 'latest' ? await this.getBlockNumber() : (block as BlockNumber);
|
|
591
584
|
if (blockNumber === BlockNumber.ZERO) {
|
|
592
585
|
return this.buildInitialBlock();
|
|
593
586
|
}
|
|
594
|
-
return await this.blockSource.
|
|
587
|
+
return await this.blockSource.getL2BlockNew(blockNumber);
|
|
595
588
|
}
|
|
596
589
|
|
|
597
590
|
/**
|
|
@@ -599,29 +592,17 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
599
592
|
* @param blockHash - The block hash being requested.
|
|
600
593
|
* @returns The requested block.
|
|
601
594
|
*/
|
|
602
|
-
public async getBlockByHash(blockHash: Fr): Promise<
|
|
595
|
+
public async getBlockByHash(blockHash: Fr): Promise<L2BlockNew | undefined> {
|
|
603
596
|
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
604
|
-
if (blockHash.equals(initialBlockHash)) {
|
|
597
|
+
if (blockHash.equals(Fr.fromBuffer(initialBlockHash.toBuffer()))) {
|
|
605
598
|
return this.buildInitialBlock();
|
|
606
599
|
}
|
|
607
|
-
|
|
608
|
-
return publishedBlock?.block;
|
|
600
|
+
return await this.blockSource.getL2BlockNewByHash(blockHash);
|
|
609
601
|
}
|
|
610
602
|
|
|
611
|
-
private buildInitialBlock():
|
|
603
|
+
private buildInitialBlock(): L2BlockNew {
|
|
612
604
|
const initialHeader = this.worldStateSynchronizer.getCommitted().getInitialHeader();
|
|
613
|
-
|
|
614
|
-
// return L2BlockNew.empty(initialHeader);
|
|
615
|
-
const oldBlockHeader = L2BlockHeader.empty();
|
|
616
|
-
oldBlockHeader.state.l1ToL2MessageTree.root = initialHeader.state.l1ToL2MessageTree.root;
|
|
617
|
-
oldBlockHeader.state.partial.noteHashTree.root = initialHeader.state.partial.noteHashTree.root;
|
|
618
|
-
oldBlockHeader.state.partial.nullifierTree.root = initialHeader.state.partial.nullifierTree.root;
|
|
619
|
-
oldBlockHeader.state.partial.nullifierTree.nextAvailableLeafIndex =
|
|
620
|
-
initialHeader.state.partial.nullifierTree.nextAvailableLeafIndex;
|
|
621
|
-
oldBlockHeader.state.partial.publicDataTree.root = initialHeader.state.partial.publicDataTree.root;
|
|
622
|
-
oldBlockHeader.state.partial.publicDataTree.nextAvailableLeafIndex =
|
|
623
|
-
initialHeader.state.partial.publicDataTree.nextAvailableLeafIndex;
|
|
624
|
-
return L2Block.empty(oldBlockHeader);
|
|
605
|
+
return L2BlockNew.empty(initialHeader);
|
|
625
606
|
}
|
|
626
607
|
|
|
627
608
|
/**
|
|
@@ -629,9 +610,8 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
629
610
|
* @param archive - The archive root being requested.
|
|
630
611
|
* @returns The requested block.
|
|
631
612
|
*/
|
|
632
|
-
public async getBlockByArchive(archive: Fr): Promise<
|
|
633
|
-
|
|
634
|
-
return publishedBlock?.block;
|
|
613
|
+
public async getBlockByArchive(archive: Fr): Promise<L2BlockNew | undefined> {
|
|
614
|
+
return await this.blockSource.getL2BlockNewByArchive(archive);
|
|
635
615
|
}
|
|
636
616
|
|
|
637
617
|
/**
|
|
@@ -640,11 +620,11 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
640
620
|
* @param limit - The maximum number of blocks to obtain.
|
|
641
621
|
* @returns The blocks requested.
|
|
642
622
|
*/
|
|
643
|
-
public async getBlocks(from: BlockNumber, limit: number): Promise<
|
|
644
|
-
return (await this.blockSource.
|
|
623
|
+
public async getBlocks(from: BlockNumber, limit: number): Promise<L2BlockNew[]> {
|
|
624
|
+
return (await this.blockSource.getL2BlocksNew(from, limit)) ?? [];
|
|
645
625
|
}
|
|
646
626
|
|
|
647
|
-
public async getPublishedBlocks(from: BlockNumber, limit: number): Promise<
|
|
627
|
+
public async getPublishedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]> {
|
|
648
628
|
return (await this.blockSource.getPublishedBlocks(from, limit)) ?? [];
|
|
649
629
|
}
|
|
650
630
|
|
|
@@ -851,20 +831,12 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
851
831
|
return compactArray(await Promise.all(txHashes.map(txHash => this.getTxByHash(txHash))));
|
|
852
832
|
}
|
|
853
833
|
|
|
854
|
-
/**
|
|
855
|
-
* Find the indexes of the given leaves in the given tree along with a block metadata pointing to the block in which
|
|
856
|
-
* the leaves were inserted.
|
|
857
|
-
* @param blockNumber - The block number at which to get the data or 'latest' for latest data.
|
|
858
|
-
* @param treeId - The tree to search in.
|
|
859
|
-
* @param leafValues - The values to search for.
|
|
860
|
-
* @returns The indices of leaves and the block metadata of a block in which the leaves were inserted.
|
|
861
|
-
*/
|
|
862
834
|
public async findLeavesIndexes(
|
|
863
|
-
|
|
835
|
+
block: BlockParameter,
|
|
864
836
|
treeId: MerkleTreeId,
|
|
865
837
|
leafValues: Fr[],
|
|
866
838
|
): Promise<(DataInBlock<bigint> | undefined)[]> {
|
|
867
|
-
const committedDb = await this.#getWorldState(
|
|
839
|
+
const committedDb = await this.#getWorldState(block);
|
|
868
840
|
const maybeIndices = await committedDb.findLeafIndices(
|
|
869
841
|
treeId,
|
|
870
842
|
leafValues.map(x => x.toBuffer()),
|
|
@@ -922,39 +894,27 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
922
894
|
});
|
|
923
895
|
}
|
|
924
896
|
|
|
925
|
-
/**
|
|
926
|
-
* Returns a sibling path for the given index in the nullifier tree.
|
|
927
|
-
* @param blockNumber - The block number at which to get the data.
|
|
928
|
-
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
929
|
-
* @returns The sibling path for the leaf index.
|
|
930
|
-
*/
|
|
931
897
|
public async getNullifierSiblingPath(
|
|
932
|
-
|
|
898
|
+
block: BlockParameter,
|
|
933
899
|
leafIndex: bigint,
|
|
934
900
|
): Promise<SiblingPath<typeof NULLIFIER_TREE_HEIGHT>> {
|
|
935
|
-
const committedDb = await this.#getWorldState(
|
|
901
|
+
const committedDb = await this.#getWorldState(block);
|
|
936
902
|
return committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, leafIndex);
|
|
937
903
|
}
|
|
938
904
|
|
|
939
|
-
/**
|
|
940
|
-
* Returns a sibling path for the given index in the data tree.
|
|
941
|
-
* @param blockNumber - The block number at which to get the data.
|
|
942
|
-
* @param leafIndex - The index of the leaf for which the sibling path is required.
|
|
943
|
-
* @returns The sibling path for the leaf index.
|
|
944
|
-
*/
|
|
945
905
|
public async getNoteHashSiblingPath(
|
|
946
|
-
|
|
906
|
+
block: BlockParameter,
|
|
947
907
|
leafIndex: bigint,
|
|
948
908
|
): Promise<SiblingPath<typeof NOTE_HASH_TREE_HEIGHT>> {
|
|
949
|
-
const committedDb = await this.#getWorldState(
|
|
909
|
+
const committedDb = await this.#getWorldState(block);
|
|
950
910
|
return committedDb.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
|
|
951
911
|
}
|
|
952
912
|
|
|
953
913
|
public async getArchiveMembershipWitness(
|
|
954
|
-
|
|
914
|
+
block: BlockParameter,
|
|
955
915
|
archive: Fr,
|
|
956
916
|
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
|
|
957
|
-
const committedDb = await this.#getWorldState(
|
|
917
|
+
const committedDb = await this.#getWorldState(block);
|
|
958
918
|
const [pathAndIndex] = await committedDb.findSiblingPaths<MerkleTreeId.ARCHIVE>(MerkleTreeId.ARCHIVE, [archive]);
|
|
959
919
|
return pathAndIndex === undefined
|
|
960
920
|
? undefined
|
|
@@ -962,10 +922,10 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
962
922
|
}
|
|
963
923
|
|
|
964
924
|
public async getNoteHashMembershipWitness(
|
|
965
|
-
|
|
925
|
+
block: BlockParameter,
|
|
966
926
|
noteHash: Fr,
|
|
967
927
|
): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
|
|
968
|
-
const committedDb = await this.#getWorldState(
|
|
928
|
+
const committedDb = await this.#getWorldState(block);
|
|
969
929
|
const [pathAndIndex] = await committedDb.findSiblingPaths<MerkleTreeId.NOTE_HASH_TREE>(
|
|
970
930
|
MerkleTreeId.NOTE_HASH_TREE,
|
|
971
931
|
[noteHash],
|
|
@@ -975,17 +935,11 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
975
935
|
: MembershipWitness.fromSiblingPath(pathAndIndex.index, pathAndIndex.path);
|
|
976
936
|
}
|
|
977
937
|
|
|
978
|
-
/**
|
|
979
|
-
* Returns the index and a sibling path for a leaf in the committed l1 to l2 data tree.
|
|
980
|
-
* @param blockNumber - The block number at which to get the data.
|
|
981
|
-
* @param l1ToL2Message - The l1ToL2Message to get the index / sibling path for.
|
|
982
|
-
* @returns A tuple of the index and the sibling path of the L1ToL2Message (undefined if not found).
|
|
983
|
-
*/
|
|
984
938
|
public async getL1ToL2MessageMembershipWitness(
|
|
985
|
-
|
|
939
|
+
block: BlockParameter,
|
|
986
940
|
l1ToL2Message: Fr,
|
|
987
941
|
): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined> {
|
|
988
|
-
const db = await this.#getWorldState(
|
|
942
|
+
const db = await this.#getWorldState(block);
|
|
989
943
|
const [witness] = await db.findSiblingPaths(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [l1ToL2Message]);
|
|
990
944
|
if (!witness) {
|
|
991
945
|
return undefined;
|
|
@@ -1020,7 +974,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1020
974
|
public async getL2ToL1Messages(epoch: EpochNumber): Promise<Fr[][][][]> {
|
|
1021
975
|
// Assumes `getBlocksForEpoch` returns blocks in ascending order of block number.
|
|
1022
976
|
const blocks = await this.blockSource.getBlocksForEpoch(epoch);
|
|
1023
|
-
const blocksInCheckpoints:
|
|
977
|
+
const blocksInCheckpoints: L2BlockNew[][] = [];
|
|
1024
978
|
let previousSlotNumber = SlotNumber.ZERO;
|
|
1025
979
|
let checkpointIndex = -1;
|
|
1026
980
|
for (const block of blocks) {
|
|
@@ -1037,45 +991,27 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1037
991
|
);
|
|
1038
992
|
}
|
|
1039
993
|
|
|
1040
|
-
/**
|
|
1041
|
-
* Returns a sibling path for a leaf in the committed blocks tree.
|
|
1042
|
-
* @param blockNumber - The block number at which to get the data.
|
|
1043
|
-
* @param leafIndex - Index of the leaf in the tree.
|
|
1044
|
-
* @returns The sibling path.
|
|
1045
|
-
*/
|
|
1046
994
|
public async getArchiveSiblingPath(
|
|
1047
|
-
|
|
995
|
+
block: BlockParameter,
|
|
1048
996
|
leafIndex: bigint,
|
|
1049
997
|
): Promise<SiblingPath<typeof ARCHIVE_HEIGHT>> {
|
|
1050
|
-
const committedDb = await this.#getWorldState(
|
|
998
|
+
const committedDb = await this.#getWorldState(block);
|
|
1051
999
|
return committedDb.getSiblingPath(MerkleTreeId.ARCHIVE, leafIndex);
|
|
1052
1000
|
}
|
|
1053
1001
|
|
|
1054
|
-
/**
|
|
1055
|
-
* Returns a sibling path for a leaf in the committed public data tree.
|
|
1056
|
-
* @param blockNumber - The block number at which to get the data.
|
|
1057
|
-
* @param leafIndex - Index of the leaf in the tree.
|
|
1058
|
-
* @returns The sibling path.
|
|
1059
|
-
*/
|
|
1060
1002
|
public async getPublicDataSiblingPath(
|
|
1061
|
-
|
|
1003
|
+
block: BlockParameter,
|
|
1062
1004
|
leafIndex: bigint,
|
|
1063
1005
|
): Promise<SiblingPath<typeof PUBLIC_DATA_TREE_HEIGHT>> {
|
|
1064
|
-
const committedDb = await this.#getWorldState(
|
|
1006
|
+
const committedDb = await this.#getWorldState(block);
|
|
1065
1007
|
return committedDb.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, leafIndex);
|
|
1066
1008
|
}
|
|
1067
1009
|
|
|
1068
|
-
/**
|
|
1069
|
-
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
1070
|
-
* @param blockNumber - The block number at which to get the index.
|
|
1071
|
-
* @param nullifier - Nullifier we try to find witness for.
|
|
1072
|
-
* @returns The nullifier membership witness (if found).
|
|
1073
|
-
*/
|
|
1074
1010
|
public async getNullifierMembershipWitness(
|
|
1075
|
-
|
|
1011
|
+
block: BlockParameter,
|
|
1076
1012
|
nullifier: Fr,
|
|
1077
1013
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
1078
|
-
const db = await this.#getWorldState(
|
|
1014
|
+
const db = await this.#getWorldState(block);
|
|
1079
1015
|
const [witness] = await db.findSiblingPaths(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()]);
|
|
1080
1016
|
if (!witness) {
|
|
1081
1017
|
return undefined;
|
|
@@ -1092,7 +1028,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1092
1028
|
|
|
1093
1029
|
/**
|
|
1094
1030
|
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
1095
|
-
* @param
|
|
1031
|
+
* @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
|
|
1096
1032
|
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
1097
1033
|
* @returns The low nullifier membership witness (if found).
|
|
1098
1034
|
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
@@ -1105,10 +1041,10 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1105
1041
|
* TODO: This is a confusing behavior and we should eventually address that.
|
|
1106
1042
|
*/
|
|
1107
1043
|
public async getLowNullifierMembershipWitness(
|
|
1108
|
-
|
|
1044
|
+
block: BlockParameter,
|
|
1109
1045
|
nullifier: Fr,
|
|
1110
1046
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
1111
|
-
const committedDb = await this.#getWorldState(
|
|
1047
|
+
const committedDb = await this.#getWorldState(block);
|
|
1112
1048
|
const findResult = await committedDb.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
|
|
1113
1049
|
if (!findResult) {
|
|
1114
1050
|
return undefined;
|
|
@@ -1123,8 +1059,8 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1123
1059
|
return new NullifierMembershipWitness(BigInt(index), preimageData as NullifierLeafPreimage, siblingPath);
|
|
1124
1060
|
}
|
|
1125
1061
|
|
|
1126
|
-
async getPublicDataWitness(
|
|
1127
|
-
const committedDb = await this.#getWorldState(
|
|
1062
|
+
async getPublicDataWitness(block: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
|
|
1063
|
+
const committedDb = await this.#getWorldState(block);
|
|
1128
1064
|
const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
|
|
1129
1065
|
if (!lowLeafResult) {
|
|
1130
1066
|
return undefined;
|
|
@@ -1138,19 +1074,8 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1138
1074
|
}
|
|
1139
1075
|
}
|
|
1140
1076
|
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
*
|
|
1144
|
-
* @remarks The storage slot here refers to the slot as it is defined in Noir not the index in the merkle tree.
|
|
1145
|
-
* Aztec's version of `eth_getStorageAt`.
|
|
1146
|
-
*
|
|
1147
|
-
* @param contract - Address of the contract to query.
|
|
1148
|
-
* @param slot - Slot to query.
|
|
1149
|
-
* @param blockNumber - The block number at which to get the data or 'latest'.
|
|
1150
|
-
* @returns Storage value at the given contract slot.
|
|
1151
|
-
*/
|
|
1152
|
-
public async getPublicStorageAt(blockNumber: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr> {
|
|
1153
|
-
const committedDb = await this.#getWorldState(blockNumber);
|
|
1077
|
+
public async getPublicStorageAt(block: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr> {
|
|
1078
|
+
const committedDb = await this.#getWorldState(block);
|
|
1154
1079
|
const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
|
|
1155
1080
|
|
|
1156
1081
|
const lowLeafResult = await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
|
|
@@ -1164,28 +1089,23 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1164
1089
|
return preimage.leaf.value;
|
|
1165
1090
|
}
|
|
1166
1091
|
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
public async getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
|
|
1184
|
-
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
1185
|
-
if (blockHash.equals(initialBlockHash)) {
|
|
1186
|
-
return this.worldStateSynchronizer.getCommitted().getInitialHeader();
|
|
1092
|
+
public async getBlockHeader(block: BlockParameter = 'latest'): Promise<BlockHeader | undefined> {
|
|
1093
|
+
if (block instanceof L2BlockHash) {
|
|
1094
|
+
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
1095
|
+
if (block.equals(initialBlockHash)) {
|
|
1096
|
+
// Block source doesn't handle initial header so we need to handle the case separately.
|
|
1097
|
+
return this.worldStateSynchronizer.getCommitted().getInitialHeader();
|
|
1098
|
+
}
|
|
1099
|
+
const blockHashFr = Fr.fromBuffer(block.toBuffer());
|
|
1100
|
+
return this.blockSource.getBlockHeaderByHash(blockHashFr);
|
|
1101
|
+
} else {
|
|
1102
|
+
// Block source doesn't handle initial header so we need to handle the case separately.
|
|
1103
|
+
const blockNumber = block === 'latest' ? await this.getBlockNumber() : (block as BlockNumber);
|
|
1104
|
+
if (blockNumber === BlockNumber.ZERO) {
|
|
1105
|
+
return this.worldStateSynchronizer.getCommitted().getInitialHeader();
|
|
1106
|
+
}
|
|
1107
|
+
return this.blockSource.getBlockHeader(block);
|
|
1187
1108
|
}
|
|
1188
|
-
return await this.blockSource.getBlockHeaderByHash(blockHash);
|
|
1189
1109
|
}
|
|
1190
1110
|
|
|
1191
1111
|
/**
|
|
@@ -1461,23 +1381,23 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1461
1381
|
}
|
|
1462
1382
|
}
|
|
1463
1383
|
|
|
1464
|
-
#getInitialHeaderHash(): Promise<
|
|
1384
|
+
#getInitialHeaderHash(): Promise<L2BlockHash> {
|
|
1465
1385
|
if (!this.initialHeaderHashPromise) {
|
|
1466
|
-
this.initialHeaderHashPromise = this.worldStateSynchronizer
|
|
1386
|
+
this.initialHeaderHashPromise = this.worldStateSynchronizer
|
|
1387
|
+
.getCommitted()
|
|
1388
|
+
.getInitialHeader()
|
|
1389
|
+
.hash()
|
|
1390
|
+
.then(hash => L2BlockHash.fromField(hash));
|
|
1467
1391
|
}
|
|
1468
1392
|
return this.initialHeaderHashPromise;
|
|
1469
1393
|
}
|
|
1470
1394
|
|
|
1471
1395
|
/**
|
|
1472
1396
|
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
1473
|
-
* @param
|
|
1397
|
+
* @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
|
|
1474
1398
|
* @returns An instance of a committed MerkleTreeOperations
|
|
1475
1399
|
*/
|
|
1476
|
-
async #getWorldState(
|
|
1477
|
-
if (typeof blockNumber === 'number' && blockNumber < INITIAL_L2_BLOCK_NUM - 1) {
|
|
1478
|
-
throw new Error('Invalid block number to get world state for: ' + blockNumber);
|
|
1479
|
-
}
|
|
1480
|
-
|
|
1400
|
+
async #getWorldState(block: BlockParameter) {
|
|
1481
1401
|
let blockSyncedTo: BlockNumber = BlockNumber.ZERO;
|
|
1482
1402
|
try {
|
|
1483
1403
|
// Attempt to sync the world state if necessary
|
|
@@ -1486,15 +1406,40 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1486
1406
|
this.log.error(`Error getting world state: ${err}`);
|
|
1487
1407
|
}
|
|
1488
1408
|
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
this.log.debug(`Using committed db for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
|
|
1409
|
+
if (block === 'latest') {
|
|
1410
|
+
this.log.debug(`Using committed db for block 'latest', world state synced upto ${blockSyncedTo}`);
|
|
1492
1411
|
return this.worldStateSynchronizer.getCommitted();
|
|
1493
|
-
}
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
if (block instanceof L2BlockHash) {
|
|
1415
|
+
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
1416
|
+
if (block.equals(initialBlockHash)) {
|
|
1417
|
+
// Block source doesn't handle initial header so we need to handle the case separately.
|
|
1418
|
+
return this.worldStateSynchronizer.getSnapshot(BlockNumber.ZERO);
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
const blockHashFr = Fr.fromBuffer(block.toBuffer());
|
|
1422
|
+
const header = await this.blockSource.getBlockHeaderByHash(blockHashFr);
|
|
1423
|
+
if (!header) {
|
|
1424
|
+
throw new Error(
|
|
1425
|
+
`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.`,
|
|
1426
|
+
);
|
|
1427
|
+
}
|
|
1428
|
+
const blockNumber = header.getBlockNumber();
|
|
1494
1429
|
this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
|
|
1495
|
-
return this.worldStateSynchronizer.getSnapshot(blockNumber
|
|
1496
|
-
}
|
|
1497
|
-
|
|
1430
|
+
return this.worldStateSynchronizer.getSnapshot(blockNumber);
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
// Block number provided
|
|
1434
|
+
{
|
|
1435
|
+
const blockNumber = block as BlockNumber;
|
|
1436
|
+
|
|
1437
|
+
if (blockNumber > blockSyncedTo) {
|
|
1438
|
+
throw new Error(`Queried block ${block} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
|
|
1442
|
+
return this.worldStateSynchronizer.getSnapshot(blockNumber);
|
|
1498
1443
|
}
|
|
1499
1444
|
}
|
|
1500
1445
|
|