@aztec/builder 0.42.0 → 0.44.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;AA8S/B;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,MAAM,UAuEvG"}
|
|
@@ -172,9 +172,8 @@ function generateStorageLayoutGetter(input) {
|
|
|
172
172
|
}
|
|
173
173
|
const storageFieldsUnionType = entries.map(([name]) => `'${name}'`).join(' | ');
|
|
174
174
|
const layout = entries
|
|
175
|
-
.map(([name, { slot
|
|
175
|
+
.map(([name, { slot }]) => `${name}: {
|
|
176
176
|
slot: new Fr(${slot.toBigInt()}n),
|
|
177
|
-
typ: "${typ}",
|
|
178
177
|
}`)
|
|
179
178
|
.join(',\n');
|
|
180
179
|
return `public static get storage(): ContractStorageLayout<${storageFieldsUnionType}> {
|
|
@@ -196,7 +195,7 @@ function generateNotesGetter(input) {
|
|
|
196
195
|
const notesUnionType = entries.map(([name]) => `'${name}'`).join(' | ');
|
|
197
196
|
const noteMetadata = entries
|
|
198
197
|
.map(([name, { id }]) => `${name}: {
|
|
199
|
-
id: new
|
|
198
|
+
id: new NoteSelector(${id.value}),
|
|
200
199
|
}`)
|
|
201
200
|
.join(',\n');
|
|
202
201
|
return `public static get notes(): ContractNotes<${notesUnionType}> {
|
|
@@ -206,6 +205,70 @@ function generateNotesGetter(input) {
|
|
|
206
205
|
}
|
|
207
206
|
`;
|
|
208
207
|
}
|
|
208
|
+
// events is of type AbiType
|
|
209
|
+
function generateEvents(events) {
|
|
210
|
+
if (events === undefined) {
|
|
211
|
+
return { events: '', eventDefs: '' };
|
|
212
|
+
}
|
|
213
|
+
const eventsMetadata = events.map(event => {
|
|
214
|
+
const eventName = event.path.split('::').at(-1);
|
|
215
|
+
const eventDefProps = event.fields.map((field) => `${field.name}: Fr`);
|
|
216
|
+
const eventDef = `
|
|
217
|
+
export type ${eventName} = {
|
|
218
|
+
${eventDefProps.join('\n')}
|
|
219
|
+
}
|
|
220
|
+
`;
|
|
221
|
+
const fieldNames = event.fields.map((field) => `"${field.name}"`);
|
|
222
|
+
const eventType = `${eventName}: {decode: (payload: L1EventPayload | undefined) => ${eventName} | undefined, eventSelector: EventSelector, fieldNames: string[] }`;
|
|
223
|
+
const eventImpl = `${eventName}: {
|
|
224
|
+
decode: this.decodeEvent(${event.fields.length}, EventSelector.fromSignature('${eventName}(${event.fields
|
|
225
|
+
.map(() => 'Field')
|
|
226
|
+
.join(',')})'), [${fieldNames}]),
|
|
227
|
+
eventSelector: EventSelector.fromSignature('${eventName}(${event.fields.map(() => 'Field').join(',')})'),
|
|
228
|
+
fieldNames: [${fieldNames}],
|
|
229
|
+
}`;
|
|
230
|
+
return {
|
|
231
|
+
eventDef,
|
|
232
|
+
eventType,
|
|
233
|
+
eventImpl,
|
|
234
|
+
};
|
|
235
|
+
});
|
|
236
|
+
return {
|
|
237
|
+
eventDefs: eventsMetadata.map(({ eventDef }) => eventDef).join('\n'),
|
|
238
|
+
events: `
|
|
239
|
+
// Partial application is chosen is to avoid the duplication of so much codegen.
|
|
240
|
+
private static decodeEvent<T>(fieldsLength: number, eventSelector: EventSelector, fields: string[]): (payload: L1EventPayload | undefined) => T | undefined {
|
|
241
|
+
return (payload: L1EventPayload | undefined): T | undefined => {
|
|
242
|
+
if (payload === undefined) {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
if (!eventSelector.equals(payload.eventTypeId)) {
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
if (payload.event.items.length !== fieldsLength) {
|
|
249
|
+
throw new Error(
|
|
250
|
+
'Something is weird here, we have matching EventSelectors, but the actual payload has mismatched length',
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
return fields.reduce(
|
|
255
|
+
(acc, curr, i) => ({
|
|
256
|
+
...acc,
|
|
257
|
+
[curr]: payload.event.items[i],
|
|
258
|
+
}),
|
|
259
|
+
{} as T,
|
|
260
|
+
);
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
public static get events(): { ${eventsMetadata.map(({ eventType }) => eventType).join(', ')} } {
|
|
265
|
+
return {
|
|
266
|
+
${eventsMetadata.map(({ eventImpl }) => eventImpl).join(',\n')}
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
`,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
209
272
|
/**
|
|
210
273
|
* Generates the typescript code to represent a contract.
|
|
211
274
|
* @param input - The compiled Noir artifact.
|
|
@@ -221,6 +284,7 @@ export function generateTypescriptContractInterface(input, artifactImportPath) {
|
|
|
221
284
|
const artifactGetter = artifactImportPath && generateArtifactGetter(input.name);
|
|
222
285
|
const storageLayoutGetter = artifactImportPath && generateStorageLayoutGetter(input);
|
|
223
286
|
const notesGetter = artifactImportPath && generateNotesGetter(input);
|
|
287
|
+
const { eventDefs, events } = generateEvents(input.outputs.structs?.events);
|
|
224
288
|
return `
|
|
225
289
|
/* Autogenerated file, do not edit! */
|
|
226
290
|
|
|
@@ -240,11 +304,14 @@ import {
|
|
|
240
304
|
DeployMethod,
|
|
241
305
|
EthAddress,
|
|
242
306
|
EthAddressLike,
|
|
307
|
+
EventSelector,
|
|
243
308
|
FieldLike,
|
|
244
309
|
Fr,
|
|
245
310
|
FunctionSelectorLike,
|
|
311
|
+
L1EventPayload,
|
|
246
312
|
loadContractArtifact,
|
|
247
313
|
NoirCompiledContract,
|
|
314
|
+
NoteSelector,
|
|
248
315
|
Point,
|
|
249
316
|
PublicKey,
|
|
250
317
|
Wallet,
|
|
@@ -252,6 +319,8 @@ import {
|
|
|
252
319
|
} from '@aztec/aztec.js';
|
|
253
320
|
${artifactStatement}
|
|
254
321
|
|
|
322
|
+
${eventDefs}
|
|
323
|
+
|
|
255
324
|
/**
|
|
256
325
|
* Type-safe interface for contract ${input.name};
|
|
257
326
|
*/
|
|
@@ -272,7 +341,9 @@ export class ${input.name}Contract extends ContractBase {
|
|
|
272
341
|
public override methods!: {
|
|
273
342
|
${methods.join('\n')}
|
|
274
343
|
};
|
|
344
|
+
|
|
345
|
+
${events}
|
|
275
346
|
}
|
|
276
347
|
`;
|
|
277
348
|
}
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
349
|
+
//# 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.44.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -41,7 +41,15 @@
|
|
|
41
41
|
"rootDir": "./src",
|
|
42
42
|
"transform": {
|
|
43
43
|
"^.+\\.tsx?$": [
|
|
44
|
-
"@swc/jest"
|
|
44
|
+
"@swc/jest",
|
|
45
|
+
{
|
|
46
|
+
"jsc": {
|
|
47
|
+
"parser": {
|
|
48
|
+
"syntax": "typescript",
|
|
49
|
+
"decorators": true
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
45
53
|
]
|
|
46
54
|
},
|
|
47
55
|
"extensionsToTreatAsEsm": [
|
|
@@ -57,9 +65,9 @@
|
|
|
57
65
|
]
|
|
58
66
|
},
|
|
59
67
|
"dependencies": {
|
|
60
|
-
"@aztec/circuits.js": "0.
|
|
61
|
-
"@aztec/foundation": "0.
|
|
62
|
-
"@aztec/types": "0.
|
|
68
|
+
"@aztec/circuits.js": "0.44.0",
|
|
69
|
+
"@aztec/foundation": "0.44.0",
|
|
70
|
+
"@aztec/types": "0.44.0",
|
|
63
71
|
"@iarna/toml": "^2.2.5",
|
|
64
72
|
"base64-js": "^1.5.1",
|
|
65
73
|
"commander": "^9.0.0",
|
|
@@ -194,10 +194,9 @@ function generateStorageLayoutGetter(input: ContractArtifact) {
|
|
|
194
194
|
const storageFieldsUnionType = entries.map(([name]) => `'${name}'`).join(' | ');
|
|
195
195
|
const layout = entries
|
|
196
196
|
.map(
|
|
197
|
-
([name, { slot
|
|
197
|
+
([name, { slot }]) =>
|
|
198
198
|
`${name}: {
|
|
199
199
|
slot: new Fr(${slot.toBigInt()}n),
|
|
200
|
-
typ: "${typ}",
|
|
201
200
|
}`,
|
|
202
201
|
)
|
|
203
202
|
.join(',\n');
|
|
@@ -226,7 +225,7 @@ function generateNotesGetter(input: ContractArtifact) {
|
|
|
226
225
|
.map(
|
|
227
226
|
([name, { id }]) =>
|
|
228
227
|
`${name}: {
|
|
229
|
-
id: new
|
|
228
|
+
id: new NoteSelector(${id.value}),
|
|
230
229
|
}`,
|
|
231
230
|
)
|
|
232
231
|
.join(',\n');
|
|
@@ -239,6 +238,77 @@ function generateNotesGetter(input: ContractArtifact) {
|
|
|
239
238
|
`;
|
|
240
239
|
}
|
|
241
240
|
|
|
241
|
+
// events is of type AbiType
|
|
242
|
+
function generateEvents(events: any[] | undefined) {
|
|
243
|
+
if (events === undefined) {
|
|
244
|
+
return { events: '', eventDefs: '' };
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const eventsMetadata = events.map(event => {
|
|
248
|
+
const eventName = event.path.split('::').at(-1);
|
|
249
|
+
|
|
250
|
+
const eventDefProps = event.fields.map((field: any) => `${field.name}: Fr`);
|
|
251
|
+
const eventDef = `
|
|
252
|
+
export type ${eventName} = {
|
|
253
|
+
${eventDefProps.join('\n')}
|
|
254
|
+
}
|
|
255
|
+
`;
|
|
256
|
+
|
|
257
|
+
const fieldNames = event.fields.map((field: any) => `"${field.name}"`);
|
|
258
|
+
const eventType = `${eventName}: {decode: (payload: L1EventPayload | undefined) => ${eventName} | undefined, eventSelector: EventSelector, fieldNames: string[] }`;
|
|
259
|
+
|
|
260
|
+
const eventImpl = `${eventName}: {
|
|
261
|
+
decode: this.decodeEvent(${event.fields.length}, EventSelector.fromSignature('${eventName}(${event.fields
|
|
262
|
+
.map(() => 'Field')
|
|
263
|
+
.join(',')})'), [${fieldNames}]),
|
|
264
|
+
eventSelector: EventSelector.fromSignature('${eventName}(${event.fields.map(() => 'Field').join(',')})'),
|
|
265
|
+
fieldNames: [${fieldNames}],
|
|
266
|
+
}`;
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
eventDef,
|
|
270
|
+
eventType,
|
|
271
|
+
eventImpl,
|
|
272
|
+
};
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
return {
|
|
276
|
+
eventDefs: eventsMetadata.map(({ eventDef }) => eventDef).join('\n'),
|
|
277
|
+
events: `
|
|
278
|
+
// Partial application is chosen is to avoid the duplication of so much codegen.
|
|
279
|
+
private static decodeEvent<T>(fieldsLength: number, eventSelector: EventSelector, fields: string[]): (payload: L1EventPayload | undefined) => T | undefined {
|
|
280
|
+
return (payload: L1EventPayload | undefined): T | undefined => {
|
|
281
|
+
if (payload === undefined) {
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
if (!eventSelector.equals(payload.eventTypeId)) {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
if (payload.event.items.length !== fieldsLength) {
|
|
288
|
+
throw new Error(
|
|
289
|
+
'Something is weird here, we have matching EventSelectors, but the actual payload has mismatched length',
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return fields.reduce(
|
|
294
|
+
(acc, curr, i) => ({
|
|
295
|
+
...acc,
|
|
296
|
+
[curr]: payload.event.items[i],
|
|
297
|
+
}),
|
|
298
|
+
{} as T,
|
|
299
|
+
);
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
public static get events(): { ${eventsMetadata.map(({ eventType }) => eventType).join(', ')} } {
|
|
304
|
+
return {
|
|
305
|
+
${eventsMetadata.map(({ eventImpl }) => eventImpl).join(',\n')}
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
`,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
|
|
242
312
|
/**
|
|
243
313
|
* Generates the typescript code to represent a contract.
|
|
244
314
|
* @param input - The compiled Noir artifact.
|
|
@@ -254,6 +324,7 @@ export function generateTypescriptContractInterface(input: ContractArtifact, art
|
|
|
254
324
|
const artifactGetter = artifactImportPath && generateArtifactGetter(input.name);
|
|
255
325
|
const storageLayoutGetter = artifactImportPath && generateStorageLayoutGetter(input);
|
|
256
326
|
const notesGetter = artifactImportPath && generateNotesGetter(input);
|
|
327
|
+
const { eventDefs, events } = generateEvents(input.outputs.structs?.events);
|
|
257
328
|
|
|
258
329
|
return `
|
|
259
330
|
/* Autogenerated file, do not edit! */
|
|
@@ -274,11 +345,14 @@ import {
|
|
|
274
345
|
DeployMethod,
|
|
275
346
|
EthAddress,
|
|
276
347
|
EthAddressLike,
|
|
348
|
+
EventSelector,
|
|
277
349
|
FieldLike,
|
|
278
350
|
Fr,
|
|
279
351
|
FunctionSelectorLike,
|
|
352
|
+
L1EventPayload,
|
|
280
353
|
loadContractArtifact,
|
|
281
354
|
NoirCompiledContract,
|
|
355
|
+
NoteSelector,
|
|
282
356
|
Point,
|
|
283
357
|
PublicKey,
|
|
284
358
|
Wallet,
|
|
@@ -286,6 +360,8 @@ import {
|
|
|
286
360
|
} from '@aztec/aztec.js';
|
|
287
361
|
${artifactStatement}
|
|
288
362
|
|
|
363
|
+
${eventDefs}
|
|
364
|
+
|
|
289
365
|
/**
|
|
290
366
|
* Type-safe interface for contract ${input.name};
|
|
291
367
|
*/
|
|
@@ -306,6 +382,8 @@ export class ${input.name}Contract extends ContractBase {
|
|
|
306
382
|
public override methods!: {
|
|
307
383
|
${methods.join('\n')}
|
|
308
384
|
};
|
|
385
|
+
|
|
386
|
+
${events}
|
|
309
387
|
}
|
|
310
388
|
`;
|
|
311
389
|
}
|