@aztec/builder 0.42.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;
|
|
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,
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC1pbnRlcmZhY2UtZ2VuL3R5cGVzY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQjs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUEwQjtJQUNyRCxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLE9BQU87WUFDVixPQUFPLFdBQVcsQ0FBQztRQUNyQixLQUFLLFNBQVM7WUFDWixPQUFPLFNBQVMsQ0FBQztRQUNuQixLQUFLLFNBQVM7WUFDWixPQUFPLG1CQUFtQixDQUFDO1FBQzdCLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLEtBQUssT0FBTztZQUNWLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMvQyxLQUFLLFFBQVE7WUFDWCxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sZ0JBQWdCLENBQUM7WUFDMUIsQ0FBQztZQUNELElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxrQkFBa0IsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxPQUFPLHNCQUFzQixDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sa0JBQWtCLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/builder",
|
|
3
|
-
"version": "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.
|
|
61
|
-
"@aztec/foundation": "0.
|
|
62
|
-
"@aztec/types": "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
|
}
|