@aztec/stdlib 0.0.1-commit.1de2a32 → 0.0.1-commit.201d218db

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 (190) hide show
  1. package/dest/abi/abi.d.ts +138 -1
  2. package/dest/abi/abi.d.ts.map +1 -1
  3. package/dest/abi/abi.js +10 -2
  4. package/dest/abi/buffer.d.ts +14 -4
  5. package/dest/abi/buffer.d.ts.map +1 -1
  6. package/dest/abi/buffer.js +25 -4
  7. package/dest/abi/decoder.d.ts +5 -44
  8. package/dest/abi/decoder.d.ts.map +1 -1
  9. package/dest/abi/decoder.js +12 -67
  10. package/dest/abi/function_selector.js +1 -1
  11. package/dest/abi/function_signature_decoder.d.ts +43 -0
  12. package/dest/abi/function_signature_decoder.d.ts.map +1 -0
  13. package/dest/abi/function_signature_decoder.js +66 -0
  14. package/dest/abi/index.d.ts +2 -1
  15. package/dest/abi/index.d.ts.map +1 -1
  16. package/dest/abi/index.js +1 -0
  17. package/dest/avm/avm.d.ts +300 -300
  18. package/dest/block/l2_block_source.d.ts +11 -8
  19. package/dest/block/l2_block_source.d.ts.map +1 -1
  20. package/dest/checkpoint/validate.js +2 -2
  21. package/dest/config/index.d.ts +2 -1
  22. package/dest/config/index.d.ts.map +1 -1
  23. package/dest/config/index.js +1 -0
  24. package/dest/config/pipelining-config.d.ts +19 -0
  25. package/dest/config/pipelining-config.d.ts.map +1 -0
  26. package/dest/config/pipelining-config.js +18 -0
  27. package/dest/contract/contract_address.d.ts +3 -3
  28. package/dest/contract/contract_address.js +3 -3
  29. package/dest/contract/contract_class_id.d.ts +2 -2
  30. package/dest/contract/contract_class_id.js +2 -2
  31. package/dest/contract/index.d.ts +1 -3
  32. package/dest/contract/index.d.ts.map +1 -1
  33. package/dest/contract/index.js +0 -2
  34. package/dest/contract/interfaces/contract_class.d.ts +3 -156
  35. package/dest/contract/interfaces/contract_class.d.ts.map +1 -1
  36. package/dest/contract/interfaces/contract_class.js +1 -28
  37. package/dest/epoch-helpers/index.d.ts +7 -1
  38. package/dest/epoch-helpers/index.d.ts.map +1 -1
  39. package/dest/epoch-helpers/index.js +10 -2
  40. package/dest/hash/hash.d.ts +19 -1
  41. package/dest/hash/hash.d.ts.map +1 -1
  42. package/dest/hash/hash.js +29 -0
  43. package/dest/interfaces/archiver.js +2 -2
  44. package/dest/interfaces/aztec-node-admin.d.ts +7 -1
  45. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  46. package/dest/interfaces/aztec-node.d.ts +3 -2
  47. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  48. package/dest/interfaces/aztec-node.js +2 -0
  49. package/dest/interfaces/block-builder.d.ts +32 -11
  50. package/dest/interfaces/block-builder.d.ts.map +1 -1
  51. package/dest/interfaces/block-builder.js +6 -4
  52. package/dest/interfaces/configs.d.ts +7 -2
  53. package/dest/interfaces/configs.d.ts.map +1 -1
  54. package/dest/interfaces/configs.js +1 -0
  55. package/dest/interfaces/l2_logs_source.d.ts +5 -3
  56. package/dest/interfaces/l2_logs_source.d.ts.map +1 -1
  57. package/dest/interfaces/merkle_tree_operations.d.ts +9 -19
  58. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  59. package/dest/interfaces/prover-client.d.ts +6 -1
  60. package/dest/interfaces/prover-client.d.ts.map +1 -1
  61. package/dest/interfaces/prover-client.js +7 -1
  62. package/dest/interfaces/proving-job.d.ts +200 -200
  63. package/dest/interfaces/world_state.d.ts +5 -4
  64. package/dest/interfaces/world_state.d.ts.map +1 -1
  65. package/dest/logs/index.d.ts +2 -1
  66. package/dest/logs/index.d.ts.map +1 -1
  67. package/dest/logs/index.js +1 -0
  68. package/dest/logs/log_filter.d.ts +4 -1
  69. package/dest/logs/log_filter.d.ts.map +1 -1
  70. package/dest/logs/log_filter.js +2 -1
  71. package/dest/logs/message_context.d.ts +4 -7
  72. package/dest/logs/message_context.d.ts.map +1 -1
  73. package/dest/logs/message_context.js +23 -9
  74. package/dest/logs/pending_tagged_log.d.ts +2 -3
  75. package/dest/logs/pending_tagged_log.d.ts.map +1 -1
  76. package/dest/logs/pending_tagged_log.js +2 -2
  77. package/dest/logs/shared_secret_derivation.d.ts +11 -10
  78. package/dest/logs/shared_secret_derivation.d.ts.map +1 -1
  79. package/dest/logs/shared_secret_derivation.js +15 -9
  80. package/dest/logs/siloed_tag.d.ts +4 -1
  81. package/dest/logs/siloed_tag.d.ts.map +1 -1
  82. package/dest/logs/siloed_tag.js +7 -3
  83. package/dest/logs/tagging_index_range.d.ts +40 -0
  84. package/dest/logs/tagging_index_range.d.ts.map +1 -0
  85. package/dest/logs/tagging_index_range.js +8 -0
  86. package/dest/logs/tx_scoped_l2_log.d.ts +3 -1
  87. package/dest/logs/tx_scoped_l2_log.d.ts.map +1 -1
  88. package/dest/logs/tx_scoped_l2_log.js +7 -0
  89. package/dest/messaging/l1_to_l2_message.d.ts +3 -2
  90. package/dest/messaging/l1_to_l2_message.d.ts.map +1 -1
  91. package/dest/messaging/l1_to_l2_message.js +11 -13
  92. package/dest/messaging/l1_to_l2_message_source.d.ts +4 -2
  93. package/dest/messaging/l1_to_l2_message_source.d.ts.map +1 -1
  94. package/dest/messaging/l2_to_l1_membership.d.ts +32 -6
  95. package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
  96. package/dest/messaging/l2_to_l1_membership.js +69 -26
  97. package/dest/noir/index.d.ts +3 -3
  98. package/dest/noir/index.d.ts.map +1 -1
  99. package/dest/p2p/checkpoint_proposal.d.ts +1 -1
  100. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  101. package/dest/p2p/checkpoint_proposal.js +13 -11
  102. package/dest/proofs/chonk_proof.d.ts +46 -2
  103. package/dest/proofs/chonk_proof.d.ts.map +1 -1
  104. package/dest/proofs/chonk_proof.js +85 -10
  105. package/dest/tests/factories.d.ts +2 -4
  106. package/dest/tests/factories.d.ts.map +1 -1
  107. package/dest/tests/factories.js +0 -27
  108. package/dest/tx/capsule.d.ts +6 -2
  109. package/dest/tx/capsule.d.ts.map +1 -1
  110. package/dest/tx/capsule.js +9 -3
  111. package/dest/tx/private_execution_result.d.ts +6 -6
  112. package/dest/tx/private_execution_result.d.ts.map +1 -1
  113. package/dest/tx/private_execution_result.js +6 -6
  114. package/dest/tx/profiling.d.ts +14 -2
  115. package/dest/tx/profiling.d.ts.map +1 -1
  116. package/dest/tx/profiling.js +13 -3
  117. package/dest/tx/simulated_tx.d.ts +109 -1
  118. package/dest/tx/simulated_tx.d.ts.map +1 -1
  119. package/dest/tx/tx_receipt.d.ts +7 -2
  120. package/dest/tx/tx_receipt.d.ts.map +1 -1
  121. package/dest/tx/tx_receipt.js +6 -3
  122. package/dest/tx/validator/error_texts.d.ts +5 -1
  123. package/dest/tx/validator/error_texts.d.ts.map +1 -1
  124. package/dest/tx/validator/error_texts.js +6 -0
  125. package/dest/update-checker/package_version.d.ts +2 -2
  126. package/dest/update-checker/package_version.d.ts.map +1 -1
  127. package/dest/update-checker/package_version.js +16 -3
  128. package/dest/validators/errors.d.ts +6 -1
  129. package/dest/validators/errors.d.ts.map +1 -1
  130. package/dest/validators/errors.js +7 -0
  131. package/dest/versioning/versioning.d.ts +4 -2
  132. package/dest/versioning/versioning.d.ts.map +1 -1
  133. package/dest/versioning/versioning.js +4 -1
  134. package/package.json +8 -8
  135. package/src/abi/abi.ts +25 -2
  136. package/src/abi/buffer.ts +25 -4
  137. package/src/abi/decoder.ts +23 -78
  138. package/src/abi/function_selector.ts +1 -1
  139. package/src/abi/function_signature_decoder.ts +77 -0
  140. package/src/abi/index.ts +1 -0
  141. package/src/block/l2_block_source.ts +10 -7
  142. package/src/checkpoint/validate.ts +2 -2
  143. package/src/config/index.ts +1 -0
  144. package/src/config/pipelining-config.ts +31 -0
  145. package/src/contract/contract_address.ts +3 -3
  146. package/src/contract/contract_class_id.ts +2 -2
  147. package/src/contract/index.ts +0 -2
  148. package/src/contract/interfaces/contract_class.ts +2 -82
  149. package/src/epoch-helpers/index.ts +14 -0
  150. package/src/gas/README.md +123 -0
  151. package/src/hash/hash.ts +34 -0
  152. package/src/interfaces/archiver.ts +2 -2
  153. package/src/interfaces/aztec-node.ts +10 -1
  154. package/src/interfaces/block-builder.ts +39 -13
  155. package/src/interfaces/configs.ts +4 -1
  156. package/src/interfaces/l2_logs_source.ts +4 -1
  157. package/src/interfaces/merkle_tree_operations.ts +8 -18
  158. package/src/interfaces/prover-client.ts +8 -0
  159. package/src/interfaces/world_state.ts +4 -3
  160. package/src/logs/index.ts +1 -0
  161. package/src/logs/log_filter.ts +5 -0
  162. package/src/logs/message_context.ts +17 -7
  163. package/src/logs/pending_tagged_log.ts +1 -3
  164. package/src/logs/shared_secret_derivation.ts +21 -10
  165. package/src/logs/siloed_tag.ts +7 -2
  166. package/src/logs/tagging_index_range.ts +24 -0
  167. package/src/logs/tx_scoped_l2_log.ts +16 -0
  168. package/src/messaging/l1_to_l2_message.ts +12 -9
  169. package/src/messaging/l1_to_l2_message_source.ts +3 -1
  170. package/src/messaging/l2_to_l1_membership.ts +98 -33
  171. package/src/noir/index.ts +2 -2
  172. package/src/p2p/checkpoint_proposal.ts +23 -20
  173. package/src/proofs/chonk_proof.ts +91 -5
  174. package/src/tests/factories.ts +0 -33
  175. package/src/tx/capsule.ts +10 -2
  176. package/src/tx/private_execution_result.ts +5 -5
  177. package/src/tx/profiling.ts +11 -2
  178. package/src/tx/tx_receipt.ts +7 -2
  179. package/src/tx/validator/error_texts.ts +8 -0
  180. package/src/update-checker/package_version.ts +19 -6
  181. package/src/validators/errors.ts +9 -0
  182. package/src/versioning/versioning.ts +4 -1
  183. package/dest/contract/private_function_membership_proof.d.ts +0 -32
  184. package/dest/contract/private_function_membership_proof.d.ts.map +0 -1
  185. package/dest/contract/private_function_membership_proof.js +0 -124
  186. package/dest/contract/utility_function_membership_proof.d.ts +0 -27
  187. package/dest/contract/utility_function_membership_proof.d.ts.map +0 -1
  188. package/dest/contract/utility_function_membership_proof.js +0 -87
  189. package/src/contract/private_function_membership_proof.ts +0 -167
  190. package/src/contract/utility_function_membership_proof.ts +0 -118
package/src/abi/abi.ts CHANGED
@@ -224,7 +224,13 @@ export const FunctionDebugMetadataSchema = z.object({
224
224
  acir_locations: z.record(z.number()),
225
225
  brillig_locations: z.record(z.record(z.number())),
226
226
  }),
227
- files: z.record(z.object({ source: z.string(), path: z.string() })),
227
+ files: z.record(
228
+ z.object({
229
+ source: z.string(),
230
+ path: z.string(),
231
+ function_locations: z.array(z.object({ start: z.number(), name: z.string() })),
232
+ }),
233
+ ),
228
234
  }) satisfies z.ZodType<FunctionDebugMetadata>;
229
235
 
230
236
  /** The artifact entry of a function. */
@@ -305,6 +311,14 @@ export interface ProgramDebugInfo {
305
311
  debug_infos: Array<DebugInfo>;
306
312
  }
307
313
 
314
+ /** The range a function occupies in a file. */
315
+ export type FunctionLocation = {
316
+ /** The byte where the function starts. */
317
+ start: number;
318
+ /** The name of the function. */
319
+ name: string;
320
+ };
321
+
308
322
  /** Maps a file ID to its metadata for debugging purposes. */
309
323
  export type DebugFileMap = Record<
310
324
  FileId,
@@ -313,6 +327,8 @@ export type DebugFileMap = Record<
313
327
  source: string;
314
328
  /** The path of the file. */
315
329
  path: string;
330
+ /** The range each function occupies in the file. */
331
+ function_locations: FunctionLocation[];
316
332
  }
317
333
  >;
318
334
 
@@ -367,7 +383,14 @@ export const ContractArtifactSchema = zodFor<ContractArtifact>()(
367
383
  globals: z.record(z.array(AbiValueSchema)),
368
384
  }),
369
385
  storageLayout: z.record(z.object({ slot: schemas.Fr })),
370
- fileMap: z.record(z.coerce.number(), z.object({ source: z.string(), path: z.string() })),
386
+ fileMap: z.record(
387
+ z.coerce.number(),
388
+ z.object({
389
+ source: z.string(),
390
+ path: z.string(),
391
+ function_locations: z.array(z.object({ start: z.number(), name: z.string() })),
392
+ }),
393
+ ),
371
394
  }),
372
395
  );
373
396
 
package/src/abi/buffer.ts CHANGED
@@ -26,11 +26,32 @@ export function bufferAsFields(input: Buffer, targetLength: number): Fr[] {
26
26
  }
27
27
 
28
28
  /**
29
- * Recovers a buffer from an array of fields.
30
- * @param fields - An output from bufferAsFields.
31
- * @returns The recovered buffer.
29
+ * Recovers a buffer from an array of fields previously encoded with bufferAsFields.
30
+ *
31
+ * The first field encodes the byte length of the original buffer. The remaining fields
32
+ * each carry 31 bytes of payload (the leading byte of each 32-byte field element is skipped).
33
+ *
34
+ * If the declared byte length exceeds the bytes available from the payload fields, the result
35
+ * is zero-padded to the full declared length. This is important for correctness when the field
36
+ * array has been truncated (e.g. contract class logs reconstructed from blobs using a short
37
+ * emittedLength): without padding, the resulting buffer would be shorter than declared, causing
38
+ * bytecode commitment computations to diverge from what the circuit produced.
39
+ *
40
+ * @param fields - An output from bufferAsFields: [byteLength, ...payloadFields].
41
+ * @returns A buffer of exactly `byteLength` bytes.
32
42
  */
33
43
  export function bufferFromFields(fields: Fr[]): Buffer {
34
44
  const [length, ...payload] = fields;
35
- return Buffer.concat(payload.map(f => f.toBuffer().subarray(1))).subarray(0, length.toNumber());
45
+ const byteLength = length.toNumber();
46
+ const raw = Buffer.concat(payload.map(f => f.toBuffer().subarray(1)));
47
+ if (raw.length >= byteLength) {
48
+ return raw.subarray(0, byteLength);
49
+ }
50
+ // Pad with zeros if the declared length exceeds the available payload bytes.
51
+ // This ensures the returned buffer always matches the declared length, so that
52
+ // downstream bytecode commitment computations are consistent even when the
53
+ // source field array was truncated (e.g. reconstructed from blob with a short emittedLength).
54
+ const result = Buffer.alloc(byteLength);
55
+ raw.copy(result);
56
+ return result;
36
57
  }
@@ -1,8 +1,17 @@
1
1
  import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
3
 
3
4
  import { AztecAddress } from '../aztec-address/index.js';
4
- import type { ABIParameter, ABIVariable, AbiType } from './abi.js';
5
- import { isAztecAddressStruct, isOptionStruct, parseSignedInt } from './utils.js';
5
+ import type { AbiType } from './abi.js';
6
+ import { FunctionSelector } from './function_selector.js';
7
+ import {
8
+ isAztecAddressStruct,
9
+ isEthAddressStruct,
10
+ isFunctionSelectorStruct,
11
+ isOptionStruct,
12
+ isWrappedFieldStruct,
13
+ parseSignedInt,
14
+ } from './utils.js';
6
15
 
7
16
  /**
8
17
  * The type of our decoded ABI.
@@ -12,6 +21,9 @@ export type AbiDecoded =
12
21
  | boolean
13
22
  | string
14
23
  | AztecAddress
24
+ | EthAddress
25
+ | FunctionSelector
26
+ | Fr
15
27
  | AbiDecoded[]
16
28
  | { [key: string]: AbiDecoded }
17
29
  | undefined;
@@ -58,6 +70,15 @@ class AbiDecoder {
58
70
  if (isAztecAddressStruct(abiType)) {
59
71
  return new AztecAddress(this.getNextField().toBuffer());
60
72
  }
73
+ if (isEthAddressStruct(abiType)) {
74
+ return EthAddress.fromField(this.getNextField());
75
+ }
76
+ if (isFunctionSelectorStruct(abiType)) {
77
+ return FunctionSelector.fromField(this.getNextField());
78
+ }
79
+ if (isWrappedFieldStruct(abiType)) {
80
+ return this.getNextField();
81
+ }
61
82
  if (isOptionStruct(abiType)) {
62
83
  const isSome = this.decodeNext(abiType.fields[0].type);
63
84
  const value = this.decodeNext(abiType.fields[1].type);
@@ -123,79 +144,3 @@ class AbiDecoder {
123
144
  export function decodeFromAbi(typ: AbiType[], buffer: Fr[]) {
124
145
  return new AbiDecoder(typ, buffer.slice()).decode();
125
146
  }
126
-
127
- /**
128
- * Decodes the signature of a function from the name and parameters.
129
- */
130
- export class FunctionSignatureDecoder {
131
- private separator: string;
132
- constructor(
133
- private name: string,
134
- private parameters: ABIParameter[],
135
- private includeNames = false,
136
- ) {
137
- this.separator = includeNames ? ', ' : ',';
138
- }
139
-
140
- /**
141
- * Decodes a single function parameter type for the function signature.
142
- * @param param - The parameter type to decode.
143
- * @returns A string representing the parameter type.
144
- */
145
- private getParameterType(param: AbiType): string {
146
- switch (param.kind) {
147
- case 'field':
148
- return 'Field';
149
- case 'integer':
150
- return param.sign === 'signed' ? `i${param.width}` : `u${param.width}`;
151
- case 'boolean':
152
- return 'bool';
153
- case 'array':
154
- return `[${this.getParameterType(param.type)};${param.length}]`;
155
- case 'string':
156
- return `str<${param.length}>`;
157
- case 'struct':
158
- return `(${param.fields.map(field => `${this.decodeParameter(field)}`).join(this.separator)})`;
159
- default:
160
- throw new Error(`Unsupported type: ${param.kind}`);
161
- }
162
- }
163
-
164
- /**
165
- * Decodes a single function parameter for the function signature.
166
- * @param param - The parameter to decode.
167
- * @returns A string representing the parameter type and optionally its name.
168
- */
169
- private decodeParameter(param: ABIVariable): string {
170
- const type = this.getParameterType(param.type);
171
- return this.includeNames ? `${param.name}: ${type}` : type;
172
- }
173
-
174
- /**
175
- * Decodes all the parameters and build the function signature
176
- * @returns The function signature.
177
- */
178
- public decode(): string {
179
- return `${this.name}(${this.parameters.map(param => this.decodeParameter(param)).join(this.separator)})`;
180
- }
181
- }
182
-
183
- /**
184
- * Decodes a function signature from the name and parameters.
185
- * @param name - The name of the function.
186
- * @param parameters - The parameters of the function.
187
- * @returns - The function signature.
188
- */
189
- export function decodeFunctionSignature(name: string, parameters: ABIParameter[]) {
190
- return new FunctionSignatureDecoder(name, parameters).decode();
191
- }
192
-
193
- /**
194
- * Decodes a function signature from the name and parameters including parameter names.
195
- * @param name - The name of the function.
196
- * @param parameters - The parameters of the function.
197
- * @returns - The user-friendly function signature.
198
- */
199
- export function decodeFunctionSignatureWithParameterNames(name: string, parameters: ABIParameter[]) {
200
- return new FunctionSignatureDecoder(name, parameters, true).decode();
201
- }
@@ -6,7 +6,7 @@ import { type ZodFor, hexSchemaFor } from '@aztec/foundation/schemas';
6
6
  import { BufferReader, FieldReader, TypeRegistry } from '@aztec/foundation/serialize';
7
7
 
8
8
  import type { ABIParameter } from './abi.js';
9
- import { decodeFunctionSignature } from './decoder.js';
9
+ import { decodeFunctionSignature } from './function_signature_decoder.js';
10
10
  import { Selector } from './selector.js';
11
11
 
12
12
  /* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */
@@ -0,0 +1,77 @@
1
+ import type { ABIParameter, ABIVariable, AbiType } from './abi.js';
2
+
3
+ /**
4
+ * Decodes the signature of a function from the name and parameters.
5
+ */
6
+ export class FunctionSignatureDecoder {
7
+ private separator: string;
8
+ constructor(
9
+ private name: string,
10
+ private parameters: ABIParameter[],
11
+ private includeNames = false,
12
+ ) {
13
+ this.separator = includeNames ? ', ' : ',';
14
+ }
15
+
16
+ /**
17
+ * Decodes a single function parameter type for the function signature.
18
+ * @param param - The parameter type to decode.
19
+ * @returns A string representing the parameter type.
20
+ */
21
+ private getParameterType(param: AbiType): string {
22
+ switch (param.kind) {
23
+ case 'field':
24
+ return 'Field';
25
+ case 'integer':
26
+ return param.sign === 'signed' ? `i${param.width}` : `u${param.width}`;
27
+ case 'boolean':
28
+ return 'bool';
29
+ case 'array':
30
+ return `[${this.getParameterType(param.type)};${param.length}]`;
31
+ case 'string':
32
+ return `str<${param.length}>`;
33
+ case 'struct':
34
+ return `(${param.fields.map(field => `${this.decodeParameter(field)}`).join(this.separator)})`;
35
+ default:
36
+ throw new Error(`Unsupported type: ${param.kind}`);
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Decodes a single function parameter for the function signature.
42
+ * @param param - The parameter to decode.
43
+ * @returns A string representing the parameter type and optionally its name.
44
+ */
45
+ private decodeParameter(param: ABIVariable): string {
46
+ const type = this.getParameterType(param.type);
47
+ return this.includeNames ? `${param.name}: ${type}` : type;
48
+ }
49
+
50
+ /**
51
+ * Decodes all the parameters and build the function signature
52
+ * @returns The function signature.
53
+ */
54
+ public decode(): string {
55
+ return `${this.name}(${this.parameters.map(param => this.decodeParameter(param)).join(this.separator)})`;
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Decodes a function signature from the name and parameters.
61
+ * @param name - The name of the function.
62
+ * @param parameters - The parameters of the function.
63
+ * @returns - The function signature.
64
+ */
65
+ export function decodeFunctionSignature(name: string, parameters: ABIParameter[]) {
66
+ return new FunctionSignatureDecoder(name, parameters).decode();
67
+ }
68
+
69
+ /**
70
+ * Decodes a function signature from the name and parameters including parameter names.
71
+ * @param name - The name of the function.
72
+ * @param parameters - The parameters of the function.
73
+ * @returns - The user-friendly function signature.
74
+ */
75
+ export function decodeFunctionSignatureWithParameterNames(name: string, parameters: ABIParameter[]) {
76
+ return new FunctionSignatureDecoder(name, parameters, true).decode();
77
+ }
package/src/abi/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './abi.js';
2
2
  export * from './buffer.js';
3
3
  export * from './decoder.js';
4
+ export * from './function_signature_decoder.js';
4
5
  export * from './encoder.js';
5
6
  export * from './authorization_selector.js';
6
7
  export * from './event_metadata_definition.js';
@@ -68,9 +68,8 @@ export interface L2BlockSource {
68
68
  getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
69
69
 
70
70
  /**
71
- * Computes the finalized block number based on the proven block number.
72
- * A block is considered finalized when it's 2 epochs behind the proven block.
73
- * TODO(#13569): Compute proper finalized block number based on L1 finalized block.
71
+ * Returns the finalized L2 block number. A block is finalized when it was proven
72
+ * in an L1 block that has itself been finalized on Ethereum.
74
73
  * @returns The finalized block number.
75
74
  */
76
75
  getFinalizedL2BlockNumber(): Promise<BlockNumber>;
@@ -176,14 +175,18 @@ export interface L2BlockSource {
176
175
  getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
177
176
 
178
177
  /**
179
- * Returns the current L2 slot number based on the currently synced L1 timestamp.
178
+ * Returns the last L2 slot number for which we have all L1 data needed to build the next checkpoint.
179
+ * Determined by the max of two signals: L1 block sync progress and latest synced checkpoint slot.
180
+ * The checkpoint signal handles missed L1 blocks, since a published checkpoint seals the message tree
181
+ * for the next checkpoint via the inbox LAG mechanism.
180
182
  */
181
- getL2SlotNumber(): Promise<SlotNumber | undefined>;
183
+ getSyncedL2SlotNumber(): Promise<SlotNumber | undefined>;
182
184
 
183
185
  /**
184
- * Returns the current L2 epoch number based on the currently synced L1 timestamp.
186
+ * Returns the last L2 epoch number that has been fully synchronized from L1.
187
+ * An epoch is fully synced when all its L2 slots have been fully synced.
185
188
  */
186
- getL2EpochNumber(): Promise<EpochNumber | undefined>;
189
+ getSyncedL2EpochNumber(): Promise<EpochNumber | undefined>;
187
190
 
188
191
  /**
189
192
  * Returns all checkpointed block headers for a given epoch.
@@ -36,7 +36,7 @@ export function validateCheckpoint(
36
36
  ): void {
37
37
  validateCheckpointStructure(checkpoint);
38
38
  validateCheckpointLimits(checkpoint, opts);
39
- validateCheckpointBlocksGasLimits(checkpoint, opts);
39
+ validateCheckpointBlocksLimits(checkpoint, opts);
40
40
  }
41
41
 
42
42
  /**
@@ -125,7 +125,7 @@ export function validateCheckpointStructure(checkpoint: Checkpoint): void {
125
125
  }
126
126
 
127
127
  /** Validates checkpoint blocks gas limits */
128
- function validateCheckpointBlocksGasLimits(
128
+ function validateCheckpointBlocksLimits(
129
129
  checkpoint: Checkpoint,
130
130
  opts: {
131
131
  maxL2BlockGas?: number;
@@ -1,3 +1,4 @@
1
1
  export * from './chain-config.js';
2
2
  export * from './node-rpc-config.js';
3
+ export * from './pipelining-config.js';
3
4
  export * from './sequencer-config.js';
@@ -0,0 +1,31 @@
1
+ import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
2
+
3
+ import { z } from 'zod';
4
+
5
+ import { zodFor } from '../schemas/index.js';
6
+
7
+ export type PipelineConfig = {
8
+ /** Whether to enable build-ahead proposer pipelining. */
9
+ enableProposerPipelining: boolean;
10
+ };
11
+
12
+ /**
13
+ * Pipelining config mappings for fields that need to be shared across packages.
14
+ */
15
+ export const pipelineConfigMappings: ConfigMappingsType<PipelineConfig> = {
16
+ enableProposerPipelining: {
17
+ env: 'SEQ_ENABLE_PROPOSER_PIPELINING',
18
+ description: 'Whether to enable build-ahead proposer pipelining.',
19
+ ...booleanConfigHelper(false),
20
+ },
21
+ };
22
+
23
+ export const PipelineConfigSchema = zodFor<PipelineConfig>()(
24
+ z.object({
25
+ enableProposerPipelining: z.boolean(),
26
+ }),
27
+ );
28
+
29
+ export function getPipelineConfigEnvVars(): PipelineConfig {
30
+ return getConfigFromMappings(pipelineConfigMappings);
31
+ }
@@ -13,9 +13,9 @@ import type { ContractInstance } from './interfaces/contract_instance.js';
13
13
  /**
14
14
  * Returns the deployment address for a given contract instance.
15
15
  * ```
16
- * salted_initialization_hash = pedersen([salt, initialization_hash, deployer], GENERATOR__SALTED_INITIALIZATION_HASH)
17
- * partial_address = pedersen([contract_class_id, salted_initialization_hash], GENERATOR__CONTRACT_PARTIAL_ADDRESS_V1)
18
- * address = ((poseidon2Hash([public_keys_hash, partial_address, GENERATOR__CONTRACT_ADDRESS_V1]) * G) + ivpk_m).x <- the x-coordinate of the address point
16
+ * salted_initialization_hash = poseidon2(DOM_SEP__PARTIAL_ADDRESS, [salt, initialization_hash, deployer])
17
+ * partial_address = poseidon2(DOM_SEP__PARTIAL_ADDRESS, [contract_class_id, salted_initialization_hash])
18
+ * address = ((poseidon2(DOM_SEP__CONTRACT_ADDRESS_V1, [public_keys_hash, partial_address]) * G) + ivpk_m).x <- the x-coordinate of the address point
19
19
  * ```
20
20
  * @param instance - A contract instance for which to calculate the deployment address.
21
21
  */
@@ -13,10 +13,10 @@ import { computePrivateFunctionsRoot } from './private_function.js';
13
13
  *
14
14
  * ```
15
15
  * version = 1
16
- * private_function_leaves = private_functions.map(fn => pedersen([fn.function_selector as Field, fn.vk_hash], GENERATOR__PRIVATE_FUNCTION_LEAF))
16
+ * private_function_leaves = private_functions.map(fn => poseidon2(DOM_SEP__PRIVATE_FUNCTION_LEAF, [fn.function_selector as Field, fn.vk_hash]))
17
17
  * private_functions_root = merkleize(private_function_leaves)
18
18
  * bytecode_commitment = calculate_commitment(packed_bytecode)
19
- * contract_class_id = pedersen([version, artifact_hash, private_functions_root, bytecode_commitment], GENERATOR__CLASS_IDENTIFIER)
19
+ * contract_class_id = poseidon2(DOM_SEP__CONTRACT_CLASS_ID, [version, artifact_hash, private_functions_root, bytecode_commitment])
20
20
  * ```
21
21
  * @param contractClass - Contract class.
22
22
  * @returns The identifier.
@@ -6,8 +6,6 @@ export * from './contract_deployment_data.js';
6
6
  export * from './contract_instance.js';
7
7
  export * from './contract_instance_update.js';
8
8
  export * from './private_function.js';
9
- export * from './private_function_membership_proof.js';
10
- export * from './utility_function_membership_proof.js';
11
9
  export * from './interfaces/index.js';
12
10
  export * from './contract_function_dao.js';
13
11
  export * from './partial_address.js';
@@ -42,79 +42,6 @@ const PrivateFunctionSchema = zodFor<PrivateFunction>()(
42
42
  }),
43
43
  );
44
44
 
45
- /** Private function definition with executable bytecode. */
46
- export interface ExecutablePrivateFunction extends PrivateFunction {
47
- /** ACIR and Brillig bytecode */
48
- bytecode: Buffer;
49
- }
50
-
51
- const ExecutablePrivateFunctionSchema = zodFor<ExecutablePrivateFunction>()(
52
- PrivateFunctionSchema.and(z.object({ bytecode: schemas.Buffer })),
53
- );
54
-
55
- /** Utility function definition. */
56
- export interface UtilityFunction {
57
- /** Selector of the function. Calculated as the hash of the method name and parameters. The specification of this is not enforced by the protocol. */
58
- selector: FunctionSelector;
59
- /** Brillig. */
60
- bytecode: Buffer;
61
- }
62
-
63
- const UtilityFunctionSchema = zodFor<UtilityFunction>()(
64
- z.object({
65
- selector: FunctionSelector.schema,
66
- bytecode: schemas.Buffer,
67
- }),
68
- );
69
-
70
- /** Sibling paths and sibling commitments for proving membership of a private function within a contract class. */
71
- export type PrivateFunctionMembershipProof = {
72
- artifactMetadataHash: Fr;
73
- functionMetadataHash: Fr;
74
- utilityFunctionsTreeRoot: Fr;
75
- privateFunctionTreeSiblingPath: Fr[];
76
- privateFunctionTreeLeafIndex: number;
77
- artifactTreeSiblingPath: Fr[];
78
- artifactTreeLeafIndex: number;
79
- };
80
-
81
- const PrivateFunctionMembershipProofSchema = zodFor<PrivateFunctionMembershipProof>()(
82
- z.object({
83
- artifactMetadataHash: schemas.Fr,
84
- functionMetadataHash: schemas.Fr,
85
- utilityFunctionsTreeRoot: schemas.Fr,
86
- privateFunctionTreeSiblingPath: z.array(schemas.Fr),
87
- privateFunctionTreeLeafIndex: schemas.Integer,
88
- artifactTreeSiblingPath: z.array(schemas.Fr),
89
- artifactTreeLeafIndex: schemas.Integer,
90
- }),
91
- );
92
-
93
- /** A private function with a membership proof. */
94
- export type ExecutablePrivateFunctionWithMembershipProof = ExecutablePrivateFunction & PrivateFunctionMembershipProof;
95
-
96
- /** Sibling paths and commitments for proving membership of a utility function within a contract class. */
97
- export type UtilityFunctionMembershipProof = {
98
- artifactMetadataHash: Fr;
99
- functionMetadataHash: Fr;
100
- privateFunctionsArtifactTreeRoot: Fr;
101
- artifactTreeSiblingPath: Fr[];
102
- artifactTreeLeafIndex: number;
103
- };
104
-
105
- const UtilityFunctionMembershipProofSchema = zodFor<UtilityFunctionMembershipProof>()(
106
- z.object({
107
- artifactMetadataHash: schemas.Fr,
108
- functionMetadataHash: schemas.Fr,
109
- privateFunctionsArtifactTreeRoot: schemas.Fr,
110
- artifactTreeSiblingPath: z.array(schemas.Fr),
111
- artifactTreeLeafIndex: schemas.Integer,
112
- }),
113
- );
114
-
115
- /** A utility function with a membership proof. */
116
- export type UtilityFunctionWithMembershipProof = UtilityFunction & UtilityFunctionMembershipProof;
117
-
118
45
  export const ContractClassSchema = zodFor<ContractClass>()(
119
46
  z.object({
120
47
  version: z.literal(VERSION),
@@ -143,11 +70,8 @@ export const ContractClassWithIdSchema = zodFor<ContractClassWithId>()(
143
70
  }),
144
71
  );
145
72
 
146
- /** A contract class with public bytecode information, and optional private and utility functions. */
147
- export type ContractClassPublic = {
148
- privateFunctions: ExecutablePrivateFunctionWithMembershipProof[];
149
- utilityFunctions: UtilityFunctionWithMembershipProof[];
150
- } & Pick<ContractClassCommitments, 'id' | 'privateFunctionsRoot'> &
73
+ /** A contract class with public bytecode information. */
74
+ export type ContractClassPublic = Pick<ContractClassCommitments, 'id' | 'privateFunctionsRoot'> &
151
75
  Omit<ContractClass, 'privateFunctions'>;
152
76
 
153
77
  export type ContractClassPublicWithCommitment = ContractClassPublic &
@@ -158,8 +82,6 @@ export const ContractClassPublicSchema = zodFor<ContractClassPublic>()(
158
82
  .object({
159
83
  id: schemas.Fr,
160
84
  privateFunctionsRoot: schemas.Fr,
161
- privateFunctions: z.array(ExecutablePrivateFunctionSchema.and(PrivateFunctionMembershipProofSchema)),
162
- utilityFunctions: z.array(UtilityFunctionSchema.and(UtilityFunctionMembershipProofSchema)),
163
85
  })
164
86
  .and(ContractClassSchema.omit({ privateFunctions: true })),
165
87
  );
@@ -179,8 +101,6 @@ export function contractClassPublicFromPlainObject(obj: any): ContractClassPubli
179
101
  version: 1,
180
102
  artifactHash: Fr.fromPlainObject(obj.artifactHash),
181
103
  privateFunctionsRoot: Fr.fromPlainObject(obj.privateFunctionsRoot),
182
- privateFunctions: [],
183
- utilityFunctions: [],
184
104
  packedBytecode: obj.packedBytecode instanceof Buffer ? obj.packedBytecode : Buffer.from(obj.packedBytecode),
185
105
  };
186
106
  }
@@ -12,6 +12,7 @@ export type L1RollupConstants = {
12
12
  ethereumSlotDuration: number;
13
13
  proofSubmissionEpochs: number;
14
14
  targetCommitteeSize: number;
15
+ rollupManaLimit: number;
15
16
  };
16
17
 
17
18
  export const EmptyL1RollupConstants: L1RollupConstants = {
@@ -22,6 +23,7 @@ export const EmptyL1RollupConstants: L1RollupConstants = {
22
23
  ethereumSlotDuration: 1,
23
24
  proofSubmissionEpochs: 1,
24
25
  targetCommitteeSize: 48,
26
+ rollupManaLimit: Number.MAX_SAFE_INTEGER,
25
27
  };
26
28
 
27
29
  export const L1RollupConstantsSchema = zodFor<L1RollupConstants>()(
@@ -33,6 +35,7 @@ export const L1RollupConstantsSchema = zodFor<L1RollupConstants>()(
33
35
  ethereumSlotDuration: z.number(),
34
36
  proofSubmissionEpochs: z.number(),
35
37
  targetCommitteeSize: z.number(),
38
+ rollupManaLimit: z.number(),
36
39
  }),
37
40
  );
38
41
 
@@ -54,6 +57,17 @@ export function getSlotAtTimestamp(
54
57
  : SlotNumber.fromBigInt((ts - constants.l1GenesisTime) / BigInt(constants.slotDuration));
55
58
  }
56
59
 
60
+ /** Returns the timestamp of the next L1 slot boundary after the given wall-clock time. */
61
+ export function getNextL1SlotTimestamp(
62
+ nowInSeconds: number,
63
+ constants: Pick<L1RollupConstants, 'l1GenesisTime' | 'ethereumSlotDuration'>,
64
+ ): bigint {
65
+ const now = BigInt(nowInSeconds);
66
+ const elapsed = now - constants.l1GenesisTime;
67
+ const currentL1Slot = elapsed / BigInt(constants.ethereumSlotDuration);
68
+ return constants.l1GenesisTime + (currentL1Slot + 1n) * BigInt(constants.ethereumSlotDuration);
69
+ }
70
+
57
71
  /** Returns the L2 slot number at the next L1 block based on the current timestamp. */
58
72
  export function getSlotAtNextL1Block(
59
73
  currentL1Timestamp: bigint,