@aztec/builder 0.41.0 → 0.43.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.
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/contract-interface-gen/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAOtB,MAAM,uBAAuB,CAAC;AAwO/B;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,MAAM,UA+DvG"}
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/contract-interface-gen/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAOtB,MAAM,uBAAuB,CAAC;AAmT/B;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,MAAM,UAsEvG"}
@@ -206,6 +206,74 @@ function generateNotesGetter(input) {
206
206
  }
207
207
  `;
208
208
  }
209
+ // events is of type AbiType
210
+ function generateEvents(events) {
211
+ if (events === undefined) {
212
+ return { events: '', eventDefs: '' };
213
+ }
214
+ const eventsMetadata = events.map(event => {
215
+ const eventName = event.path.split('::').at(-1);
216
+ const eventDefProps = event.fields.map((field) => `${field.name}: Fr`);
217
+ const eventDef = `
218
+ export type ${eventName} = {
219
+ ${eventDefProps.join('\n')}
220
+ }
221
+ `;
222
+ const fieldNames = event.fields.map((field) => `"${field.name}"`);
223
+ const eventType = `${eventName}: {decode: (payload: L1EventPayload | undefined) => ${eventName} | undefined, functionSelector: FunctionSelector, fieldNames: string[] }`;
224
+ const eventImpl = `${eventName}: {
225
+ decode: this.decodeEvent(${event.fields.length}, FunctionSelector.fromSignature('${eventName}(${event.fields
226
+ .map(() => 'Field')
227
+ .join(',')})'), [${fieldNames}]),
228
+ functionSelector: FunctionSelector.fromSignature('${eventName}(${event.fields.map(() => 'Field').join(',')})'),
229
+ fieldNames: [${fieldNames}],
230
+ }`;
231
+ return {
232
+ eventDef,
233
+ eventType,
234
+ eventImpl,
235
+ };
236
+ });
237
+ return {
238
+ eventDefs: eventsMetadata.map(({ eventDef }) => eventDef).join('\n'),
239
+ events: `
240
+ // Partial application is chosen is to avoid the duplication of so much codegen.
241
+ private static decodeEvent<T>(fieldsLength: number, functionSelector: FunctionSelector, fields: string[]): (payload: L1EventPayload | undefined) => T | undefined {
242
+ return (payload: L1EventPayload | undefined): T | undefined => {
243
+ if (payload === undefined) {
244
+ return undefined;
245
+ }
246
+ if (
247
+ !functionSelector.equals(
248
+ FunctionSelector.fromField(payload.eventTypeId),
249
+ )
250
+ ) {
251
+ return undefined;
252
+ }
253
+ if (payload.event.items.length !== fieldsLength) {
254
+ throw new Error(
255
+ 'Something is weird here, we have matching FunctionSelectors, but the actual payload has mismatched length',
256
+ );
257
+ }
258
+
259
+ return fields.reduce(
260
+ (acc, curr, i) => ({
261
+ ...acc,
262
+ [curr]: payload.event.items[i],
263
+ }),
264
+ {} as T,
265
+ );
266
+ };
267
+ }
268
+
269
+ public static get events(): { ${eventsMetadata.map(({ eventType }) => eventType).join(', ')} } {
270
+ return {
271
+ ${eventsMetadata.map(({ eventImpl }) => eventImpl).join(',\n')}
272
+ };
273
+ }
274
+ `,
275
+ };
276
+ }
209
277
  /**
210
278
  * Generates the typescript code to represent a contract.
211
279
  * @param input - The compiled Noir artifact.
@@ -221,6 +289,7 @@ export function generateTypescriptContractInterface(input, artifactImportPath) {
221
289
  const artifactGetter = artifactImportPath && generateArtifactGetter(input.name);
222
290
  const storageLayoutGetter = artifactImportPath && generateStorageLayoutGetter(input);
223
291
  const notesGetter = artifactImportPath && generateNotesGetter(input);
292
+ const { eventDefs, events } = generateEvents(input.outputs.structs?.events);
224
293
  return `
225
294
  /* Autogenerated file, do not edit! */
226
295
 
@@ -242,7 +311,9 @@ import {
242
311
  EthAddressLike,
243
312
  FieldLike,
244
313
  Fr,
314
+ FunctionSelector,
245
315
  FunctionSelectorLike,
316
+ L1EventPayload,
246
317
  loadContractArtifact,
247
318
  NoirCompiledContract,
248
319
  Point,
@@ -252,6 +323,8 @@ import {
252
323
  } from '@aztec/aztec.js';
253
324
  ${artifactStatement}
254
325
 
326
+ ${eventDefs}
327
+
255
328
  /**
256
329
  * Type-safe interface for contract ${input.name};
257
330
  */
@@ -272,7 +345,9 @@ export class ${input.name}Contract extends ContractBase {
272
345
  public override methods!: {
273
346
  ${methods.join('\n')}
274
347
  };
348
+
349
+ ${events}
275
350
  }
276
351
  `;
277
352
  }
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC1pbnRlcmZhY2UtZ2VuL3R5cGVzY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQjs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUEwQjtJQUNyRCxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLE9BQU87WUFDVixPQUFPLFdBQVcsQ0FBQztRQUNyQixLQUFLLFNBQVM7WUFDWixPQUFPLFNBQVMsQ0FBQztRQUNuQixLQUFLLFNBQVM7WUFDWixPQUFPLG1CQUFtQixDQUFDO1FBQzdCLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLEtBQUssT0FBTztZQUNWLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMvQyxLQUFLLFFBQVE7WUFDWCxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sZ0JBQWdCLENBQUM7WUFDMUIsQ0FBQztZQUNELElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxrQkFBa0IsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxPQUFPLHNCQUFzQixDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sa0JBQWtCLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxD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
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC1pbnRlcmZhY2UtZ2VuL3R5cGVzY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQjs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUEwQjtJQUNyRCxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLE9BQU87WUFDVixPQUFPLFdBQVcsQ0FBQztRQUNyQixLQUFLLFNBQVM7WUFDWixPQUFPLFNBQVMsQ0FBQztRQUNuQixLQUFLLFNBQVM7WUFDWixPQUFPLG1CQUFtQixDQUFDO1FBQzdCLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLEtBQUssT0FBTztZQUNWLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMvQyxLQUFLLFFBQVE7WUFDWCxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sZ0JBQWdCLENBQUM7WUFDMUIsQ0FBQztZQUNELElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxrQkFBa0IsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxPQUFPLHNCQUFzQixDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sa0JBQWtCLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9GO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQW1CO0lBQzVDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBdUI7SUFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEUsT0FBTztVQUNDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDbkYsS0FBSyxDQUFDLElBQUksT0FBTyxJQUFJLHVFQUF1RSxDQUFDO0FBQ25HLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBdUI7SUFDN0MsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQztJQUM3QyxNQUFNLFlBQVksR0FBRyxHQUFHLFlBQVksVUFBVSxDQUFDO0lBRS9DLE9BQU87Ozs7eUNBSWdDLElBQUk7OEJBQ2YsWUFBWSxzQkFBc0IsWUFBWSxLQUFLLFlBQVk7Ozs7OzsrRUFNZCxJQUFJOzhCQUNyRCxZQUFZLDZCQUE2QixZQUFZLEtBQUssWUFBWTs7Ozs7O2lEQU1uRCxZQUFZOzswQkFFbkMsWUFBWTs7OEJBRVIsWUFBWTs7O1FBR2xDLFlBQVk7UUFDWixZQUFZOzs7OztHQUtqQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUFZO0lBQ3ZDLE9BQU87Ozs7O3NCQUthLElBQUk7O0dBRXZCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFVBQVUsQ0FBQyxJQUFZO0lBQzlCLE9BQU87Ozs7Ozs7Ozs7O2tDQVd5QixJQUFJLHlDQUF5QyxJQUFJO0lBQy9FLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxJQUFZO0lBQzFDLE1BQU0sWUFBWSxHQUFHLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztJQUMvQyxPQUFPOzs7OzthQUtJLFlBQVk7O0dBRXRCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG9CQUFvQixDQUFDLElBQVksRUFBRSxrQkFBMEI7SUFDcEUsTUFBTSxLQUFLLEdBQUc7UUFDWixVQUFVLElBQUksOEJBQThCLGtCQUFrQiw0QkFBNEI7UUFDMUYsZ0JBQWdCLElBQUksMkNBQTJDLElBQUksZ0RBQWdEO0tBQ3BILENBQUM7SUFDRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsMkJBQTJCLENBQUMsS0FBdUI7SUFDMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFcEQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEYsTUFBTSxNQUFNLEdBQUcsT0FBTztTQUNuQixHQUFHLENBQ0YsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDeEIsR0FBRyxJQUFJO3FCQUNNLElBQUksQ0FBQyxRQUFRLEVBQUU7Y0FDdEIsR0FBRztNQUNYLENBQ0Q7U0FDQSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFZixPQUFPLHNEQUFzRCxzQkFBc0I7O1VBRTNFLE1BQU07bUNBQ21CLHNCQUFzQjs7S0FFcEQsQ0FBQztBQUNOLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLEtBQXVCO0lBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxNQUFNLFlBQVksR0FBRyxPQUFPO1NBQ3pCLEdBQUcsQ0FDRixDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ2pCLEdBQUcsSUFBSTt1QkFDUSxFQUFFLENBQUMsUUFBUSxFQUFFO1VBQzFCLENBQ0w7U0FDQSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFZixPQUFPLDRDQUE0QyxjQUFjOztRQUUzRCxZQUFZO3lCQUNLLGNBQWM7O0dBRXBDLENBQUM7QUFDSixDQUFDO0FBRUQsNEJBQTRCO0FBQzVCLFNBQVMsY0FBYyxDQUFDLE1BQXlCO0lBQy9DLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN4QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUM1RSxNQUFNLFFBQVEsR0FBRztvQkFDRCxTQUFTO1VBQ25CLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOztLQUU3QixDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsR0FBRyxTQUFTLHVEQUF1RCxTQUFTLDBFQUEwRSxDQUFDO1FBRXpLLE1BQU0sU0FBUyxHQUFHLEdBQUcsU0FBUzttQ0FDQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0scUNBQXFDLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTTthQUM3RyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxVQUFVOzBEQUN1QixTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztxQkFDM0YsVUFBVTtRQUN2QixDQUFDO1FBRUwsT0FBTztZQUNMLFFBQVE7WUFDUixTQUFTO1lBQ1QsU0FBUztTQUNWLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxTQUFTLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDcEUsTUFBTSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBOEJzQixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7UUFFckYsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7OztHQUdqRTtLQUNBLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUNBQW1DLENBQUMsS0FBdUIsRUFBRSxrQkFBMkI7SUFDdEcsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0UsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRSxNQUFNLEVBQUUsR0FBRyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JHLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixJQUFJLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRixNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixJQUFJLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTVFLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUErQlAsaUJBQWlCOztFQUVqQixTQUFTOzs7c0NBRzJCLEtBQUssQ0FBQyxJQUFJOztlQUVqQyxLQUFLLENBQUMsSUFBSTtJQUNyQixJQUFJOztJQUVKLEVBQUU7O0lBRUYsTUFBTTs7SUFFTixjQUFjOztJQUVkLG1CQUFtQjs7SUFFbkIsV0FBVzs7OztNQUlULE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOzs7SUFHcEIsTUFBTTs7Q0FFVCxDQUFDO0FBQ0YsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/builder",
3
- "version": "0.41.0",
3
+ "version": "0.43.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -57,9 +57,9 @@
57
57
  ]
58
58
  },
59
59
  "dependencies": {
60
- "@aztec/circuits.js": "0.41.0",
61
- "@aztec/foundation": "0.41.0",
62
- "@aztec/types": "0.41.0",
60
+ "@aztec/circuits.js": "0.43.0",
61
+ "@aztec/foundation": "0.43.0",
62
+ "@aztec/types": "0.43.0",
63
63
  "@iarna/toml": "^2.2.5",
64
64
  "base64-js": "^1.5.1",
65
65
  "commander": "^9.0.0",
@@ -239,6 +239,81 @@ function generateNotesGetter(input: ContractArtifact) {
239
239
  `;
240
240
  }
241
241
 
242
+ // events is of type AbiType
243
+ function generateEvents(events: any[] | undefined) {
244
+ if (events === undefined) {
245
+ return { events: '', eventDefs: '' };
246
+ }
247
+
248
+ const eventsMetadata = events.map(event => {
249
+ const eventName = event.path.split('::').at(-1);
250
+
251
+ const eventDefProps = event.fields.map((field: any) => `${field.name}: Fr`);
252
+ const eventDef = `
253
+ export type ${eventName} = {
254
+ ${eventDefProps.join('\n')}
255
+ }
256
+ `;
257
+
258
+ const fieldNames = event.fields.map((field: any) => `"${field.name}"`);
259
+ const eventType = `${eventName}: {decode: (payload: L1EventPayload | undefined) => ${eventName} | undefined, functionSelector: FunctionSelector, fieldNames: string[] }`;
260
+
261
+ const eventImpl = `${eventName}: {
262
+ decode: this.decodeEvent(${event.fields.length}, FunctionSelector.fromSignature('${eventName}(${event.fields
263
+ .map(() => 'Field')
264
+ .join(',')})'), [${fieldNames}]),
265
+ functionSelector: FunctionSelector.fromSignature('${eventName}(${event.fields.map(() => 'Field').join(',')})'),
266
+ fieldNames: [${fieldNames}],
267
+ }`;
268
+
269
+ return {
270
+ eventDef,
271
+ eventType,
272
+ eventImpl,
273
+ };
274
+ });
275
+
276
+ return {
277
+ eventDefs: eventsMetadata.map(({ eventDef }) => eventDef).join('\n'),
278
+ events: `
279
+ // Partial application is chosen is to avoid the duplication of so much codegen.
280
+ private static decodeEvent<T>(fieldsLength: number, functionSelector: FunctionSelector, fields: string[]): (payload: L1EventPayload | undefined) => T | undefined {
281
+ return (payload: L1EventPayload | undefined): T | undefined => {
282
+ if (payload === undefined) {
283
+ return undefined;
284
+ }
285
+ if (
286
+ !functionSelector.equals(
287
+ FunctionSelector.fromField(payload.eventTypeId),
288
+ )
289
+ ) {
290
+ return undefined;
291
+ }
292
+ if (payload.event.items.length !== fieldsLength) {
293
+ throw new Error(
294
+ 'Something is weird here, we have matching FunctionSelectors, but the actual payload has mismatched length',
295
+ );
296
+ }
297
+
298
+ return fields.reduce(
299
+ (acc, curr, i) => ({
300
+ ...acc,
301
+ [curr]: payload.event.items[i],
302
+ }),
303
+ {} as T,
304
+ );
305
+ };
306
+ }
307
+
308
+ public static get events(): { ${eventsMetadata.map(({ eventType }) => eventType).join(', ')} } {
309
+ return {
310
+ ${eventsMetadata.map(({ eventImpl }) => eventImpl).join(',\n')}
311
+ };
312
+ }
313
+ `,
314
+ };
315
+ }
316
+
242
317
  /**
243
318
  * Generates the typescript code to represent a contract.
244
319
  * @param input - The compiled Noir artifact.
@@ -254,6 +329,7 @@ export function generateTypescriptContractInterface(input: ContractArtifact, art
254
329
  const artifactGetter = artifactImportPath && generateArtifactGetter(input.name);
255
330
  const storageLayoutGetter = artifactImportPath && generateStorageLayoutGetter(input);
256
331
  const notesGetter = artifactImportPath && generateNotesGetter(input);
332
+ const { eventDefs, events } = generateEvents(input.outputs.structs?.events);
257
333
 
258
334
  return `
259
335
  /* Autogenerated file, do not edit! */
@@ -276,7 +352,9 @@ import {
276
352
  EthAddressLike,
277
353
  FieldLike,
278
354
  Fr,
355
+ FunctionSelector,
279
356
  FunctionSelectorLike,
357
+ L1EventPayload,
280
358
  loadContractArtifact,
281
359
  NoirCompiledContract,
282
360
  Point,
@@ -286,6 +364,8 @@ import {
286
364
  } from '@aztec/aztec.js';
287
365
  ${artifactStatement}
288
366
 
367
+ ${eventDefs}
368
+
289
369
  /**
290
370
  * Type-safe interface for contract ${input.name};
291
371
  */
@@ -306,6 +386,8 @@ export class ${input.name}Contract extends ContractBase {
306
386
  public override methods!: {
307
387
  ${methods.join('\n')}
308
388
  };
389
+
390
+ ${events}
309
391
  }
310
392
  `;
311
393
  }