@aztec/stdlib 3.0.0-nightly.20251115 → 3.0.0-nightly.20251119

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.
package/src/avm/avm.ts CHANGED
@@ -27,7 +27,6 @@ import {
27
27
  PublicCallRequestWithCalldata,
28
28
  TreeSnapshots,
29
29
  type Tx,
30
- TxExecutionPhase,
31
30
  } from '../tx/index.js';
32
31
  import { WorldStateRevision } from '../world-state/world_state_revision.js';
33
32
  import { AvmCircuitPublicInputs } from './avm_circuit_public_inputs.js';
@@ -667,9 +666,9 @@ export class AvmRevertCheckpointHint {
667
666
  }
668
667
  }
669
668
 
670
- export class AvmContractDBCreateCheckpointHint extends AvmCheckpointActionNoStateChangeHint {}
671
- export class AvmContractDBCommitCheckpointHint extends AvmCheckpointActionNoStateChangeHint {}
672
- export class AvmContractDBRevertCheckpointHint extends AvmCheckpointActionNoStateChangeHint {}
669
+ export class AvmContractDbCreateCheckpointHint extends AvmCheckpointActionNoStateChangeHint {}
670
+ export class AvmContractDbCommitCheckpointHint extends AvmCheckpointActionNoStateChangeHint {}
671
+ export class AvmContractDbRevertCheckpointHint extends AvmCheckpointActionNoStateChangeHint {}
673
672
 
674
673
  ////////////////////////////////////////////////////////////////////////////
675
674
  // Hints (other)
@@ -859,9 +858,9 @@ export class AvmExecutionHints {
859
858
  public readonly contractClasses: AvmContractClassHint[] = [],
860
859
  public readonly bytecodeCommitments: AvmBytecodeCommitmentHint[] = [],
861
860
  public readonly debugFunctionNames: AvmDebugFunctionNameHint[] = [],
862
- public readonly contractDBCreateCheckpointHints: AvmContractDBCreateCheckpointHint[] = [],
863
- public readonly contractDBCommitCheckpointHints: AvmContractDBCommitCheckpointHint[] = [],
864
- public readonly contractDBRevertCheckpointHints: AvmContractDBRevertCheckpointHint[] = [],
861
+ public readonly contractDbCreateCheckpointHints: AvmContractDbCreateCheckpointHint[] = [],
862
+ public readonly contractDbCommitCheckpointHints: AvmContractDbCommitCheckpointHint[] = [],
863
+ public readonly contractDbRevertCheckpointHints: AvmContractDbRevertCheckpointHint[] = [],
865
864
  // Merkle DB hints.
866
865
  public startingTreeRoots: TreeSnapshots = TreeSnapshots.empty(),
867
866
  public readonly getSiblingPathHints: AvmGetSiblingPathHint[] = [],
@@ -896,9 +895,9 @@ export class AvmExecutionHints {
896
895
  obj.contractClasses?.map((c: any) => AvmContractClassHint.fromPlainObject(c)) || [],
897
896
  obj.bytecodeCommitments?.map((b: any) => AvmBytecodeCommitmentHint.fromPlainObject(b)) || [],
898
897
  obj.debugFunctionNames?.map((d: any) => AvmDebugFunctionNameHint.fromPlainObject(d)) || [],
899
- obj.contractDBCreateCheckpointHints?.map((h: any) => AvmContractDBCreateCheckpointHint.fromPlainObject(h)) || [],
900
- obj.contractDBCommitCheckpointHints?.map((h: any) => AvmContractDBCommitCheckpointHint.fromPlainObject(h)) || [],
901
- obj.contractDBRevertCheckpointHints?.map((h: any) => AvmContractDBRevertCheckpointHint.fromPlainObject(h)) || [],
898
+ obj.contractDbCreateCheckpointHints?.map((h: any) => AvmContractDbCreateCheckpointHint.fromPlainObject(h)) || [],
899
+ obj.contractDbCommitCheckpointHints?.map((h: any) => AvmContractDbCommitCheckpointHint.fromPlainObject(h)) || [],
900
+ obj.contractDbRevertCheckpointHints?.map((h: any) => AvmContractDbRevertCheckpointHint.fromPlainObject(h)) || [],
902
901
  obj.startingTreeRoots ? TreeSnapshots.fromPlainObject(obj.startingTreeRoots) : TreeSnapshots.empty(),
903
902
  obj.getSiblingPathHints?.map((h: any) => AvmGetSiblingPathHint.fromPlainObject(h)) || [],
904
903
  obj.getPreviousValueIndexHints?.map((h: any) => AvmGetPreviousValueIndexHint.fromPlainObject(h)) || [],
@@ -935,9 +934,9 @@ export class AvmExecutionHints {
935
934
  contractClasses: AvmContractClassHint.schema.array(),
936
935
  bytecodeCommitments: AvmBytecodeCommitmentHint.schema.array(),
937
936
  debugFunctionNames: AvmDebugFunctionNameHint.schema.array(),
938
- contractDBCreateCheckpointHints: AvmContractDBCreateCheckpointHint.schema.array(),
939
- contractDBCommitCheckpointHints: AvmContractDBCommitCheckpointHint.schema.array(),
940
- contractDBRevertCheckpointHints: AvmContractDBRevertCheckpointHint.schema.array(),
937
+ contractDbCreateCheckpointHints: AvmContractDbCreateCheckpointHint.schema.array(),
938
+ contractDbCommitCheckpointHints: AvmContractDbCommitCheckpointHint.schema.array(),
939
+ contractDbRevertCheckpointHints: AvmContractDbRevertCheckpointHint.schema.array(),
941
940
  startingTreeRoots: TreeSnapshots.schema,
942
941
  getSiblingPathHints: AvmGetSiblingPathHint.schema.array(),
943
942
  getPreviousValueIndexHints: AvmGetPreviousValueIndexHint.schema.array(),
@@ -960,9 +959,9 @@ export class AvmExecutionHints {
960
959
  contractClasses,
961
960
  bytecodeCommitments,
962
961
  debugFunctionNames,
963
- contractDBCreateCheckpointHints,
964
- contractDBCommitCheckpointHints,
965
- contractDBRevertCheckpointHints,
962
+ contractDbCreateCheckpointHints,
963
+ contractDbCommitCheckpointHints,
964
+ contractDbRevertCheckpointHints,
966
965
  startingTreeRoots,
967
966
  getSiblingPathHints,
968
967
  getPreviousValueIndexHints,
@@ -984,9 +983,9 @@ export class AvmExecutionHints {
984
983
  contractClasses,
985
984
  bytecodeCommitments,
986
985
  debugFunctionNames,
987
- contractDBCreateCheckpointHints,
988
- contractDBCommitCheckpointHints,
989
- contractDBRevertCheckpointHints,
986
+ contractDbCreateCheckpointHints,
987
+ contractDbCommitCheckpointHints,
988
+ contractDbRevertCheckpointHints,
990
989
  startingTreeRoots,
991
990
  getSiblingPathHints,
992
991
  getPreviousValueIndexHints,
@@ -1043,14 +1042,6 @@ export class AvmCircuitInputs {
1043
1042
  }
1044
1043
  }
1045
1044
 
1046
- export type ProcessedPhase = {
1047
- phase: TxExecutionPhase;
1048
- durationMs?: number;
1049
- returnValues: NestedProcessReturnValues[];
1050
- reverted: boolean;
1051
- revertReason?: SimulationError;
1052
- };
1053
-
1054
1045
  export class PublicTxResult {
1055
1046
  constructor(
1056
1047
  // Simulation result.
@@ -1058,7 +1049,10 @@ export class PublicTxResult {
1058
1049
  public revertCode: RevertCode,
1059
1050
  public revertReason: SimulationError | undefined, // Revert reason, if any
1060
1051
  // These are only guaranteed to be present if the simulator is configured to collect them.
1061
- public processedPhases: ProcessedPhase[] | undefined,
1052
+ // NOTE: This list will be populated with one NestedProcessReturnValues per app logic enqueued call.
1053
+ // IMPORTANT: The nesting will only be 1 level deep! You will get one result per enqueued call
1054
+ // but no information about nested calls. This can be added later.
1055
+ public appLogicReturnValues: NestedProcessReturnValues[], // One per enqueued call.
1062
1056
  public logs: DebugLog[] | undefined,
1063
1057
  // For the proving request.
1064
1058
  public hints: AvmExecutionHints | undefined,
@@ -1075,7 +1069,7 @@ export class PublicTxResult {
1075
1069
  },
1076
1070
  RevertCode.OK,
1077
1071
  /*revertReason=*/ undefined,
1078
- /*processedPhases=*/ [],
1072
+ /*appLogicReturnValues=*/ [],
1079
1073
  /*logs=*/ [],
1080
1074
  /*hints=*/ AvmExecutionHints.empty(),
1081
1075
  /*publicInputs=*/ AvmCircuitPublicInputs.empty(),
@@ -1088,20 +1082,19 @@ export class PublicTxResult {
1088
1082
  gasUsed: schemas.GasUsed,
1089
1083
  revertCode: RevertCode.schema,
1090
1084
  revertReason: NullishToUndefined(SimulationError.schema),
1091
- // TODO(fcarreiro): Use actual Phases type schema.
1092
- processedPhases: NullishToUndefined(z.any().array()),
1085
+ appLogicReturnValues: NestedProcessReturnValues.schema.array(),
1093
1086
  logs: NullishToUndefined(DebugLog.schema.array()),
1094
1087
  // For the proving request.
1095
1088
  publicInputs: AvmCircuitPublicInputs.schema,
1096
1089
  hints: NullishToUndefined(AvmExecutionHints.schema),
1097
1090
  })
1098
1091
  .transform(
1099
- ({ gasUsed, revertCode, revertReason, processedPhases, logs, hints, publicInputs }) =>
1092
+ ({ gasUsed, revertCode, revertReason, appLogicReturnValues, logs, hints, publicInputs }) =>
1100
1093
  new PublicTxResult(
1101
1094
  gasUsed,
1102
1095
  revertCode as RevertCode,
1103
1096
  revertReason,
1104
- processedPhases,
1097
+ appLogicReturnValues,
1105
1098
  logs,
1106
1099
  hints,
1107
1100
  publicInputs,
@@ -1114,7 +1107,7 @@ export class PublicTxResult {
1114
1107
  GasUsed.fromPlainObject(obj.gasUsed),
1115
1108
  RevertCode.fromPlainObject(obj.revertCode),
1116
1109
  /*revertReason=*/ undefined, // TODO(fcarreiro/mwood): add.
1117
- /*processedPhases=*/ [], // TODO(fcarreiro/mwood): add.
1110
+ /*appLogicReturnValues=*/ obj.appLogicReturnValues.map(NestedProcessReturnValues.fromPlainObject),
1118
1111
  obj.logs?.map(DebugLog.fromPlainObject),
1119
1112
  obj.hints ? AvmExecutionHints.fromPlainObject(obj.hints) : undefined,
1120
1113
  AvmCircuitPublicInputs.fromPlainObject(obj.publicInputs),
@@ -1126,7 +1119,7 @@ export class PublicSimulatorConfig {
1126
1119
  constructor(
1127
1120
  public readonly proverId: Fr,
1128
1121
  public readonly skipFeeEnforcement: boolean,
1129
- public readonly collectCallMetadata: boolean, // processedPhases.
1122
+ public readonly collectCallMetadata: boolean, // appLogicReturnValues.
1130
1123
  public readonly collectHints: boolean, // hints.
1131
1124
  public readonly collectDebugLogs: boolean, // logs.
1132
1125
  public readonly maxDebugLogMemoryReads: number,
@@ -57,9 +57,9 @@ import {
57
57
  AvmCircuitPublicInputs,
58
58
  AvmCommitCheckpointHint,
59
59
  AvmContractClassHint,
60
- AvmContractDBCommitCheckpointHint,
61
- AvmContractDBCreateCheckpointHint,
62
- AvmContractDBRevertCheckpointHint,
60
+ AvmContractDbCommitCheckpointHint,
61
+ AvmContractDbCreateCheckpointHint,
62
+ AvmContractDbRevertCheckpointHint,
63
63
  AvmContractInstanceHint,
64
64
  AvmCreateCheckpointHint,
65
65
  AvmDebugFunctionNameHint,
@@ -1426,24 +1426,24 @@ export function makeAvmCheckpointActionRevertCheckpointHint(seed = 0): AvmRevert
1426
1426
  );
1427
1427
  }
1428
1428
 
1429
- export function makeAvmContractDBCheckpointActionCreateCheckpointHint(seed = 0): AvmContractDBCreateCheckpointHint {
1430
- return new AvmContractDBCreateCheckpointHint(
1429
+ export function makeAvmContractDbCheckpointActionCreateCheckpointHint(seed = 0): AvmContractDbCreateCheckpointHint {
1430
+ return new AvmContractDbCreateCheckpointHint(
1431
1431
  /*actionCounter=*/ seed,
1432
1432
  /*oldCheckpointId=*/ seed + 1,
1433
1433
  /*newCheckpointId=*/ seed + 2,
1434
1434
  );
1435
1435
  }
1436
1436
 
1437
- export function makeAvmContractDBCheckpointActionCommitCheckpointHint(seed = 0): AvmContractDBCommitCheckpointHint {
1438
- return new AvmContractDBCommitCheckpointHint(
1437
+ export function makeAvmContractDbCheckpointActionCommitCheckpointHint(seed = 0): AvmContractDbCommitCheckpointHint {
1438
+ return new AvmContractDbCommitCheckpointHint(
1439
1439
  /*actionCounter=*/ seed,
1440
1440
  /*oldCheckpointId=*/ seed + 1,
1441
1441
  /*newCheckpointId=*/ seed + 2,
1442
1442
  );
1443
1443
  }
1444
1444
 
1445
- export function makeAvmContractDBCheckpointActionRevertCheckpointHint(seed = 0): AvmContractDBRevertCheckpointHint {
1446
- return new AvmContractDBRevertCheckpointHint(
1445
+ export function makeAvmContractDbCheckpointActionRevertCheckpointHint(seed = 0): AvmContractDbRevertCheckpointHint {
1446
+ return new AvmContractDbRevertCheckpointHint(
1447
1447
  /*actionCounter=*/ seed,
1448
1448
  /*oldCheckpointId=*/ seed + 1,
1449
1449
  /*newCheckpointId=*/ seed + 2,
@@ -1565,19 +1565,19 @@ export async function makeAvmExecutionHints(
1565
1565
  contractClasses: makeArray(baseLength + 5, makeAvmContractClassHint, seed + 0x4900),
1566
1566
  bytecodeCommitments: await makeArrayAsync(baseLength + 5, makeAvmBytecodeCommitmentHint, seed + 0x4900),
1567
1567
  debugFunctionNames: makeArray(baseLength + 5, makeAvmDebugFunctionNameHint, seed + 0x4a00),
1568
- contractDBCreateCheckpointHints: makeArray(
1568
+ contractDbCreateCheckpointHints: makeArray(
1569
1569
  baseLength + 5,
1570
- makeAvmContractDBCheckpointActionCreateCheckpointHint,
1570
+ makeAvmContractDbCheckpointActionCreateCheckpointHint,
1571
1571
  seed + 0x5900,
1572
1572
  ),
1573
- contractDBCommitCheckpointHints: makeArray(
1573
+ contractDbCommitCheckpointHints: makeArray(
1574
1574
  baseLength + 5,
1575
- makeAvmContractDBCheckpointActionCommitCheckpointHint,
1575
+ makeAvmContractDbCheckpointActionCommitCheckpointHint,
1576
1576
  seed + 0x5b00,
1577
1577
  ),
1578
- contractDBRevertCheckpointHints: makeArray(
1578
+ contractDbRevertCheckpointHints: makeArray(
1579
1579
  baseLength + 5,
1580
- makeAvmContractDBCheckpointActionRevertCheckpointHint,
1580
+ makeAvmContractDbCheckpointActionRevertCheckpointHint,
1581
1581
  seed + 0x5d00,
1582
1582
  ),
1583
1583
  startingTreeRoots: makeTreeSnapshots(seed + 0x4900),
@@ -1615,9 +1615,9 @@ export async function makeAvmExecutionHints(
1615
1615
  fields.contractClasses,
1616
1616
  fields.bytecodeCommitments,
1617
1617
  fields.debugFunctionNames,
1618
- fields.contractDBCreateCheckpointHints,
1619
- fields.contractDBCommitCheckpointHints,
1620
- fields.contractDBRevertCheckpointHints,
1618
+ fields.contractDbCreateCheckpointHints,
1619
+ fields.contractDbCommitCheckpointHints,
1620
+ fields.contractDbRevertCheckpointHints,
1621
1621
  fields.startingTreeRoots,
1622
1622
  fields.getSiblingPathHints,
1623
1623
  fields.getPreviousValueIndexHints,
@@ -7,6 +7,7 @@ import { z } from 'zod';
7
7
  import { SimulationError } from '../errors/simulation_error.js';
8
8
  import { Gas } from '../gas/gas.js';
9
9
  import type { GasUsed } from '../gas/gas_used.js';
10
+ import { NullishToUndefined } from '../schemas/schemas.js';
10
11
  import { TxEffect } from '../tx/tx_effect.js';
11
12
  import { GlobalVariables } from './global_variables.js';
12
13
 
@@ -23,15 +24,31 @@ export class NestedProcessReturnValues {
23
24
  this.nested = nested ?? [];
24
25
  }
25
26
 
27
+ equals(other: NestedProcessReturnValues): boolean {
28
+ return (
29
+ this.values?.length === other.values?.length &&
30
+ this.nested.length === other.nested.length &&
31
+ (this.values === undefined || this.values.every((v, i) => v.equals(other.values![i]))) &&
32
+ this.nested.every((n, i) => n.equals(other.nested[i]))
33
+ );
34
+ }
35
+
26
36
  static get schema(): ZodFor<NestedProcessReturnValues> {
27
37
  return z
28
38
  .object({
29
- values: z.array(schemas.Fr).optional(),
39
+ values: NullishToUndefined(z.array(schemas.Fr)),
30
40
  nested: z.array(z.lazy(() => NestedProcessReturnValues.schema)),
31
41
  })
32
42
  .transform(({ values, nested }) => new NestedProcessReturnValues(values, nested));
33
43
  }
34
44
 
45
+ static fromPlainObject(obj: any): NestedProcessReturnValues {
46
+ return new NestedProcessReturnValues(
47
+ obj.values?.map(Fr.fromPlainObject),
48
+ obj.nested?.map(NestedProcessReturnValues.fromPlainObject),
49
+ );
50
+ }
51
+
35
52
  static empty() {
36
53
  return new NestedProcessReturnValues([]);
37
54
  }
@@ -134,6 +134,13 @@ export class VerificationKeyAsFields {
134
134
  return new VerificationKeyAsFields(reader.readVector(Fr), reader.readObject(Fr));
135
135
  }
136
136
 
137
+ static fromFrBuffer(vkBytes: Buffer): Promise<VerificationKeyAsFields> {
138
+ const numFields = vkBytes.length / Fr.SIZE_IN_BYTES;
139
+ const reader = BufferReader.asReader(vkBytes);
140
+ const fields = reader.readArray(numFields, Fr);
141
+ return VerificationKeyAsFields.fromKey(fields);
142
+ }
143
+
137
144
  /**
138
145
  * Builds a fake verification key that should be accepted by circuits.
139
146
  * @returns A fake verification key.
@@ -250,6 +257,20 @@ export class VerificationKey {
250
257
  times(16, i => i),
251
258
  );
252
259
  }
260
+
261
+ /**
262
+ * Builds a fake MegaHonk verification key buffer for testing.
263
+ * Uses a real VK from a compiled contract to ensure proper format.
264
+ *
265
+ * @returns A valid MegaHonk VK buffer (4064 bytes)
266
+ */
267
+ static makeFakeMegaHonk(): Buffer {
268
+ // This is a real MegaFlavor VK from token_contract, base64-encoded
269
+ // Size: 4064 bytes (127 fields × 32 bytes)
270
+ const vk =
271
+ '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';
272
+ return Buffer.from(vk, 'base64');
273
+ }
253
274
  }
254
275
 
255
276
  export class VerificationKeyData {
@@ -305,6 +326,10 @@ export class VerificationKeyData {
305
326
  return new VerificationKeyData(verificationKeyAsFields, bytes);
306
327
  }
307
328
 
329
+ static async fromFrBuffer(vkBytes: Buffer): Promise<VerificationKeyData> {
330
+ return new VerificationKeyData(await VerificationKeyAsFields.fromFrBuffer(vkBytes), vkBytes);
331
+ }
332
+
308
333
  static fromString(str: string): VerificationKeyData {
309
334
  return VerificationKeyData.fromBuffer(hexToBuffer(str));
310
335
  }