@aztec/txe 0.86.0 → 0.87.0

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.
Files changed (37) hide show
  1. package/dest/oracle/txe_oracle.d.ts +11 -6
  2. package/dest/oracle/txe_oracle.d.ts.map +1 -1
  3. package/dest/oracle/txe_oracle.js +209 -38
  4. package/dest/state_machine/archiver.d.ts +53 -0
  5. package/dest/state_machine/archiver.d.ts.map +1 -0
  6. package/dest/state_machine/archiver.js +100 -0
  7. package/dest/state_machine/dummy_p2p_client.d.ts +48 -0
  8. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -0
  9. package/dest/state_machine/dummy_p2p_client.js +122 -0
  10. package/dest/state_machine/global_variable_builder.d.ts +23 -0
  11. package/dest/state_machine/global_variable_builder.d.ts.map +1 -0
  12. package/dest/state_machine/global_variable_builder.js +29 -0
  13. package/dest/state_machine/index.d.ts +16 -0
  14. package/dest/state_machine/index.d.ts.map +1 -0
  15. package/dest/state_machine/index.js +48 -0
  16. package/dest/state_machine/synchronizer.d.ts +32 -0
  17. package/dest/state_machine/synchronizer.d.ts.map +1 -0
  18. package/dest/state_machine/synchronizer.js +58 -0
  19. package/dest/txe_service/txe_service.d.ts +12 -3
  20. package/dest/txe_service/txe_service.d.ts.map +1 -1
  21. package/dest/txe_service/txe_service.js +221 -37
  22. package/dest/util/encoding.d.ts +11 -4
  23. package/dest/util/encoding.d.ts.map +1 -1
  24. package/dest/util/encoding.js +38 -2
  25. package/package.json +18 -15
  26. package/src/oracle/txe_oracle.ts +387 -40
  27. package/src/state_machine/archiver.ts +132 -0
  28. package/src/state_machine/dummy_p2p_client.ts +167 -0
  29. package/src/state_machine/global_variable_builder.ts +55 -0
  30. package/src/state_machine/index.ts +71 -0
  31. package/src/state_machine/synchronizer.ts +87 -0
  32. package/src/txe_service/txe_service.ts +427 -31
  33. package/src/util/encoding.ts +51 -2
  34. package/dest/node/txe_node.d.ts +0 -320
  35. package/dest/node/txe_node.d.ts.map +0 -1
  36. package/dest/node/txe_node.js +0 -481
  37. package/src/node/txe_node.ts +0 -703
@@ -1,3 +1,4 @@
1
+ import type { EthAddress } from '@aztec/foundation/eth-address';
1
2
  import { Fr } from '@aztec/foundation/fields';
2
3
  import { hexToBuffer } from '@aztec/foundation/string';
3
4
  import { type ContractArtifact, ContractArtifactSchema } from '@aztec/stdlib/abi';
@@ -59,8 +60,22 @@ export function fromUintBoundedVec(storage: ForeignCallArray, length: ForeignCal
59
60
  return Buffer.concat(boundedStorage.map(str => hexToBuffer(str).slice(-uintByteSize)));
60
61
  }
61
62
 
62
- export function toSingle(obj: Fr | AztecAddress): ForeignCallSingle {
63
- return obj.toString().slice(2);
63
+ // Just like toACVMField in yarn-project/simulator/src/private/acvm/serialize.ts but returns a ForeignCallSingle
64
+ // instead of an ACVMField.
65
+ export function toSingle(
66
+ value: AztecAddress | EthAddress | Fr | Buffer | boolean | number | bigint,
67
+ ): ForeignCallSingle {
68
+ let valueAsField;
69
+ if (Buffer.isBuffer(value)) {
70
+ valueAsField = Fr.fromBuffer(value);
71
+ } else if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'bigint') {
72
+ valueAsField = new Fr(value);
73
+ } else if (typeof value === 'string') {
74
+ valueAsField = Fr.fromHexString(value);
75
+ } else {
76
+ valueAsField = value;
77
+ }
78
+ return valueAsField.toString().slice(2);
64
79
  }
65
80
 
66
81
  export function toArray(objs: Fr[]): ForeignCallArray {
@@ -100,6 +115,40 @@ export function arrayToBoundedVec(
100
115
  return [storage, len];
101
116
  }
102
117
 
118
+ /**
119
+ * Converts an array of arrays representing Noir BoundedVec of nested arrays into its Noir serialized form.
120
+ * @param bVecStorage - The array underlying the BoundedVec.
121
+ * @param maxLen - The max length of the BoundedVec (max num of the nested arrays in the BoundedVec).
122
+ * @param nestedArrayLength - The length of the nested arrays (each nested array has to have the same length).
123
+ * @returns Serialized BoundedVec following Noir intrinsic serialization.
124
+ */
125
+ export function arrayOfArraysToBoundedVecOfArrays(
126
+ bVecStorage: ForeignCallArray[],
127
+ maxLen: number,
128
+ nestedArrayLength: number,
129
+ ): [ForeignCallArray, ForeignCallSingle] {
130
+ if (bVecStorage.length > maxLen) {
131
+ throw new Error(`Array of length ${bVecStorage.length} larger than maxLen ${maxLen}`);
132
+ }
133
+
134
+ // Check that all nested arrays have length nestedArrayLength
135
+ if (!bVecStorage.every(nestedArray => nestedArray.length === nestedArrayLength)) {
136
+ throw new Error(
137
+ `Nested array length passed in from Noir does not correspond to the length obtained in TS: ${nestedArrayLength} !== ${bVecStorage[0].length}`,
138
+ );
139
+ }
140
+
141
+ const flattenedStorage = bVecStorage.flat();
142
+
143
+ const numFieldsToPad = maxLen * nestedArrayLength - flattenedStorage.length;
144
+
145
+ const flattenedStorageWithPadding = flattenedStorage.concat(Array(numFieldsToPad).fill(new Fr(0)));
146
+
147
+ // At last we get the actual length of the BoundedVec and return the values.
148
+ const len = toSingle(new Fr(bVecStorage.length));
149
+ return [flattenedStorageWithPadding, len];
150
+ }
151
+
103
152
  export function toForeignCallResult(obj: (ForeignCallSingle | ForeignCallArray)[]) {
104
153
  return { values: obj };
105
154
  }
@@ -1,320 +0,0 @@
1
- import type { ARCHIVE_HEIGHT, L1_TO_L2_MSG_TREE_HEIGHT, NOTE_HASH_TREE_HEIGHT, NULLIFIER_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
2
- import type { L1ContractAddresses } from '@aztec/ethereum';
3
- import { Fr } from '@aztec/foundation/fields';
4
- import type { SiblingPath } from '@aztec/foundation/trees';
5
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
6
- import { type InBlock, L2Block, type L2BlockNumber, type L2Tips, type PublishedL2Block } from '@aztec/stdlib/block';
7
- import type { ContractClassPublic, ContractInstanceWithAddress, NodeInfo, ProtocolContractAddresses } from '@aztec/stdlib/contract';
8
- import type { GasFees } from '@aztec/stdlib/gas';
9
- import type { AztecNode, GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client';
10
- import type { MerkleTreeWriteOperations, ProverConfig, SequencerConfig, WorldStateSyncStatus } from '@aztec/stdlib/interfaces/server';
11
- import { type LogFilter, type PrivateLog, TxScopedL2Log } from '@aztec/stdlib/logs';
12
- import { MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
13
- import { BlockHeader, type IndexedTxEffect, type PublicSimulationOutput, type Tx, type TxEffect, TxHash, TxReceipt, type TxValidationResult } from '@aztec/stdlib/tx';
14
- import type { ValidatorsStats } from '@aztec/stdlib/validators';
15
- import type { NativeWorldStateService } from '@aztec/world-state';
16
- export declare class TXENode implements AztecNode {
17
- #private;
18
- private blockNumber;
19
- private version;
20
- private chainId;
21
- private nativeWorldStateService;
22
- private baseFork;
23
- constructor(blockNumber: number, version: number, chainId: number, nativeWorldStateService: NativeWorldStateService, baseFork: MerkleTreeWriteOperations);
24
- /**
25
- * Fetches the current block number.
26
- * @returns The block number.
27
- */
28
- getBlockNumber(): Promise<number>;
29
- /**
30
- * Sets the current block number of the node.
31
- * @param - The block number to set.
32
- */
33
- setBlockNumber(blockNumber: number): void;
34
- /**
35
- * Gets a tx effect.
36
- * @param txHash - The hash of the tx corresponding to the tx effect.
37
- * @returns The requested tx effect with block info (or undefined if not found).
38
- */
39
- getTxEffect(txHash: TxHash): Promise<IndexedTxEffect | undefined>;
40
- /**
41
- * Processes a tx effect and receipt for a given block number.
42
- * @param blockNumber - The block number that this tx effect resides.
43
- * @param txIndexInBlock - The index of the tx in the block.
44
- * @param txHash - The transaction hash of the transaction.
45
- * @param effect - The tx effect to set.
46
- */
47
- processTxEffect(blockNumber: number, txIndexInBlock: number, txHash: TxHash, effect: TxEffect): Promise<void>;
48
- /**
49
- * Gets all logs that match any of the received tags (i.e. logs with their first field equal to a tag).
50
- * @param tags - The tags to filter the logs by.
51
- * @returns For each received tag, an array of matching logs and metadata (e.g. tx hash) is returned. An empty
52
- array implies no logs match that tag.
53
- */
54
- getLogsByTags(tags: Fr[]): Promise<TxScopedL2Log[][]>;
55
- /**
56
- * Returns the tips of the L2 chain.
57
- */
58
- getL2Tips(): Promise<L2Tips>;
59
- /**
60
- * Find the indexes of the given leaves in the given tree.
61
- * @param blockNumber - The block number at which to get the data or 'latest' for latest data
62
- * @param treeId - The tree to search in.
63
- * @param leafValue - The values to search for
64
- * @returns The indices of leaves and the block metadata of a block in which the leaf was inserted.
65
- */
66
- findLeavesIndexes(blockNumber: L2BlockNumber, treeId: MerkleTreeId, leafValues: Fr[]): Promise<(InBlock<bigint> | undefined)[]>;
67
- /**
68
- * Returns a sibling path for the given index in the nullifier tree.
69
- * @param blockNumber - The block number at which to get the data.
70
- * @param leafIndex - The index of the leaf for which the sibling path is required.
71
- * @returns The sibling path for the leaf index.
72
- */
73
- getNullifierSiblingPath(_blockNumber: L2BlockNumber, _leafIndex: bigint): Promise<SiblingPath<typeof NULLIFIER_TREE_HEIGHT>>;
74
- /**
75
- * Returns a sibling path for the given index in the note hash tree.
76
- * @param blockNumber - The block number at which to get the data.
77
- * @param leafIndex - The index of the leaf for which the sibling path is required.
78
- * @returns The sibling path for the leaf index.
79
- */
80
- getNoteHashSiblingPath(_blockNumber: L2BlockNumber, _leafIndex: bigint): Promise<SiblingPath<typeof NOTE_HASH_TREE_HEIGHT>>;
81
- /**
82
- * Returns the index and a sibling path for a leaf in the committed l1 to l2 data tree.
83
- * @param blockNumber - The block number at which to get the data.
84
- * @param l1ToL2Message - The l1ToL2Message to get the index / sibling path for.
85
- * @returns A tuple of the index and the sibling path of the L1ToL2Message (undefined if not found).
86
- */
87
- getL1ToL2MessageMembershipWitness(_blockNumber: L2BlockNumber, _l1ToL2Message: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined>;
88
- /**
89
- * Returns whether an L1 to L2 message is synced by archiver and if it's ready to be included in a block.
90
- * @param l1ToL2Message - The L1 to L2 message to check.
91
- * @returns Whether the message is synced and ready to be included in a block.
92
- */
93
- isL1ToL2MessageSynced(_l1ToL2Message: Fr): Promise<boolean>;
94
- /**
95
- * Returns a membership witness of an l2ToL1Message in an ephemeral l2 to l1 message tree.
96
- * @dev Membership witness is a consists of the index and the sibling path of the l2ToL1Message.
97
- * @remarks This tree is considered ephemeral because it is created on-demand by: taking all the l2ToL1 messages
98
- * in a single block, and then using them to make a variable depth append-only tree with these messages as leaves.
99
- * The tree is discarded immediately after calculating what we need from it.
100
- * @param blockNumber - The block number at which to get the data.
101
- * @param l2ToL1Message - The l2ToL1Message to get the membership witness for.
102
- * @returns A tuple of the index and the sibling path of the L2ToL1Message.
103
- */
104
- getL2ToL1MessageMembershipWitness(_blockNumber: L2BlockNumber, _l2ToL1Message: Fr): Promise<[bigint, SiblingPath<number>]>;
105
- /**
106
- * Returns a sibling path for a leaf in the committed historic blocks tree.
107
- * @param blockNumber - The block number at which to get the data.
108
- * @param leafIndex - Index of the leaf in the tree.
109
- * @returns The sibling path.
110
- */
111
- getArchiveSiblingPath(_blockNumber: L2BlockNumber, _leafIndex: bigint): Promise<SiblingPath<typeof ARCHIVE_HEIGHT>>;
112
- /**
113
- * Returns a sibling path for a leaf in the committed public data tree.
114
- * @param blockNumber - The block number at which to get the data.
115
- * @param leafIndex - Index of the leaf in the tree.
116
- * @returns The sibling path.
117
- */
118
- getPublicDataSiblingPath(_blockNumber: L2BlockNumber, _leafIndex: bigint): Promise<SiblingPath<typeof PUBLIC_DATA_TREE_HEIGHT>>;
119
- /**
120
- * Returns a nullifier membership witness for a given nullifier at a given block.
121
- * @param blockNumber - The block number at which to get the data.
122
- * @param nullifier - Nullifier we try to find witness for.
123
- * @returns The nullifier membership witness (if found).
124
- */
125
- getNullifierMembershipWitness(_blockNumber: L2BlockNumber, _nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
126
- /**
127
- * Returns a low nullifier membership witness for a given nullifier at a given block.
128
- * @param blockNumber - The block number at which to get the data.
129
- * @param nullifier - Nullifier we try to find the low nullifier witness for.
130
- * @returns The low nullifier membership witness (if found).
131
- * @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
132
- * list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
133
- * we are trying to prove non-inclusion for.
134
- */
135
- getLowNullifierMembershipWitness(_blockNumber: L2BlockNumber, _nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
136
- /**
137
- * Returns a public data tree witness for a given leaf slot at a given block.
138
- * @param blockNumber - The block number at which to get the data.
139
- * @param leafSlot - The leaf slot we try to find the witness for.
140
- * @returns The public data witness (if found).
141
- * @remarks The witness can be used to compute the current value of the public data tree leaf. If the low leaf preimage corresponds to an
142
- * "in range" slot, means that the slot doesn't exist and the value is 0. If the low leaf preimage corresponds to the exact slot, the current value
143
- * is contained in the leaf preimage.
144
- */
145
- getPublicDataWitness(_blockNumber: L2BlockNumber, _leafSlot: Fr): Promise<PublicDataWitness | undefined>;
146
- /**
147
- * Get a block specified by its number.
148
- * @param number - The block number being requested.
149
- * @returns The requested block.
150
- */
151
- getBlock(_number: number): Promise<L2Block | undefined>;
152
- /**
153
- * Fetches the latest proven block number.
154
- * @returns The block number.
155
- */
156
- getProvenBlockNumber(): Promise<number>;
157
- /**
158
- * Method to determine if the node is ready to accept transactions.
159
- * @returns - Flag indicating the readiness for tx submission.
160
- */
161
- isReady(): Promise<boolean>;
162
- /**
163
- * Method to request blocks. Will attempt to return all requested blocks but will return only those available.
164
- * @param from - The start of the range of blocks to return.
165
- * @param limit - The maximum number of blocks to return.
166
- * @returns The blocks requested.
167
- */
168
- getBlocks(_from: number, _limit: number): Promise<L2Block[]>;
169
- getPublishedBlocks(_from: number, _limit: number): Promise<PublishedL2Block[]>;
170
- /**
171
- * Method to fetch the version of the package.
172
- * @returns The node package version
173
- */
174
- getNodeVersion(): Promise<string>;
175
- /**
176
- * Method to fetch the version of the rollup the node is connected to.
177
- * @returns The rollup version.
178
- */
179
- getVersion(): Promise<number>;
180
- /**
181
- * Method to fetch the chain id of the base-layer for the rollup.
182
- * @returns The chain id.
183
- */
184
- getChainId(): Promise<number>;
185
- /**
186
- * Method to fetch the currently deployed l1 contract addresses.
187
- * @returns The deployed contract addresses.
188
- */
189
- getL1ContractAddresses(): Promise<L1ContractAddresses>;
190
- /**
191
- * Method to fetch the protocol contract addresses.
192
- */
193
- getProtocolContractAddresses(): Promise<ProtocolContractAddresses>;
194
- /**
195
- * Method to add a contract artifact to the database.
196
- * @param aztecAddress
197
- * @param artifact
198
- */
199
- registerContractFunctionSignatures(_address: AztecAddress, _signatures: string[]): Promise<void>;
200
- /**
201
- * Gets public logs based on the provided filter.
202
- * @param filter - The filter to apply to the logs.
203
- * @returns The requested logs.
204
- */
205
- getPublicLogs(_filter: LogFilter): Promise<GetPublicLogsResponse>;
206
- /**
207
- * Gets contract class logs based on the provided filter.
208
- * @param filter - The filter to apply to the logs.
209
- * @returns The requested logs.
210
- */
211
- getContractClassLogs(_filter: LogFilter): Promise<GetContractClassLogsResponse>;
212
- /**
213
- * Method to submit a transaction to the p2p pool.
214
- * @param tx - The transaction to be submitted.
215
- * @returns Nothing.
216
- */
217
- sendTx(_tx: Tx): Promise<void>;
218
- /**
219
- * Fetches a transaction receipt for a given transaction hash. Returns a mined receipt if it was added
220
- * to the chain, a pending receipt if it's still in the mempool of the connected Aztec node, or a dropped
221
- * receipt if not found in the connected Aztec node.
222
- *
223
- * @param txHash - The transaction hash.
224
- * @returns A receipt of the transaction.
225
- */
226
- getTxReceipt(txHash: TxHash): Promise<TxReceipt>;
227
- /**
228
- * Method to retrieve pending txs.
229
- * @returns The pending txs.
230
- */
231
- getPendingTxs(): Promise<Tx[]>;
232
- /**
233
- * Retrieves the number of pending txs
234
- * @returns The number of pending txs.
235
- */
236
- getPendingTxCount(): Promise<number>;
237
- /**
238
- * Method to retrieve a single pending tx.
239
- * @param txHash - The transaction hash to return.
240
- * @returns The pending tx if it exists.
241
- */
242
- getTxByHash(_txHash: TxHash): Promise<Tx | undefined>;
243
- getTxsByHash(_txHashes: TxHash[]): Promise<Tx[]>;
244
- /**
245
- * Gets the storage value at the given contract storage slot.
246
- *
247
- * @remarks The storage slot here refers to the slot as it is defined in Noir not the index in the merkle tree.
248
- * Aztec's version of `eth_getStorageAt`.
249
- *
250
- * @param contract - Address of the contract to query.
251
- * @param slot - Slot to query.
252
- * @param blockNumber - The block number at which to get the data or 'latest'.
253
- * @returns Storage value at the given contract slot.
254
- */
255
- getPublicStorageAt(blockNumber: L2BlockNumber, contract: AztecAddress, slot: Fr): Promise<Fr>;
256
- /**
257
- * Returns the currently committed block header.
258
- * @returns The current committed block header.
259
- */
260
- getBlockHeader(_blockNumber?: L2BlockNumber): Promise<BlockHeader>;
261
- /**
262
- * Simulates the public part of a transaction with the current state.
263
- * This currently just checks that the transaction execution succeeds.
264
- * @param tx - The transaction to simulate.
265
- **/
266
- simulatePublicCalls(_tx: Tx, _enforceFeePayment?: boolean): Promise<PublicSimulationOutput>;
267
- /**
268
- * Returns true if the transaction is valid for inclusion at the current state. Valid transactions can be
269
- * made invalid by *other* transactions if e.g. they emit the same nullifiers, or come become invalid
270
- * due to e.g. the max_block_number property.
271
- * @param tx - The transaction to validate for correctness.
272
- * @param isSimulation - True if the transaction is a simulated one without generated proofs. (Optional)
273
- */
274
- isValidTx(_tx: Tx): Promise<TxValidationResult>;
275
- /**
276
- * Updates the configuration of this node.
277
- * @param config - Updated configuration to be merged with the current one.
278
- */
279
- setConfig(_config: Partial<SequencerConfig & ProverConfig>): Promise<void>;
280
- /**
281
- * Returns a registered contract class given its id.
282
- * @param id - Id of the contract class.
283
- */
284
- getContractClass(_id: Fr): Promise<ContractClassPublic | undefined>;
285
- /**
286
- * Returns a publicly deployed contract instance given its address.
287
- * @param address - Address of the deployed contract.
288
- */
289
- getContract(_address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
290
- /** Forces the next block to be built bypassing all time and pending checks. Useful for testing. */
291
- flushTxs(): Promise<void>;
292
- /**
293
- * Returns the ENR of this node for peer discovery, if available.
294
- */
295
- getEncodedEnr(): Promise<string | undefined>;
296
- /**
297
- * Method to fetch the current base fees.
298
- * @returns The current base fees.
299
- */
300
- getCurrentBaseFees(): Promise<GasFees>;
301
- /**
302
- * Retrieves all private logs from up to `limit` blocks, starting from the block number `from`.
303
- * @param from - The block number from which to begin retrieving logs.
304
- * @param limit - The maximum number of blocks to retrieve logs from.
305
- * @returns An array of private logs from the specified range of blocks.
306
- */
307
- getPrivateLogs(_from: number, _limit: number): Promise<PrivateLog[]>;
308
- /**
309
- * Returns the information about the server's node. Includes current Node version, compatible Noir version,
310
- * L1 chain identifier, protocol version, and L1 address of the rollup contract.
311
- * @returns - The node information.
312
- */
313
- getNodeInfo(): Promise<NodeInfo>;
314
- /**
315
- * Returns the sync status of the node's world state
316
- */
317
- getWorldStateSyncStatus(): Promise<WorldStateSyncStatus>;
318
- getValidatorsStats(): Promise<ValidatorsStats>;
319
- }
320
- //# sourceMappingURL=txe_node.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"txe_node.d.ts","sourceRoot":"","sources":["../../src/node/txe_node.ts"],"names":[],"mappings":"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"}