@aztec/simulator 0.46.7 → 0.47.1

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 (82) hide show
  1. package/dest/acvm/acvm.d.ts +1 -1
  2. package/dest/acvm/acvm.d.ts.map +1 -1
  3. package/dest/acvm/oracle/oracle.d.ts +4 -4
  4. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  5. package/dest/acvm/oracle/oracle.js +10 -12
  6. package/dest/acvm/oracle/typed_oracle.d.ts +9 -6
  7. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  8. package/dest/acvm/oracle/typed_oracle.js +3 -3
  9. package/dest/acvm/serialize.d.ts +0 -11
  10. package/dest/acvm/serialize.d.ts.map +1 -1
  11. package/dest/acvm/serialize.js +1 -26
  12. package/dest/avm/avm_gas.d.ts.map +1 -1
  13. package/dest/avm/avm_gas.js +5 -1
  14. package/dest/avm/fixtures/index.d.ts +2 -1
  15. package/dest/avm/fixtures/index.d.ts.map +1 -1
  16. package/dest/avm/fixtures/index.js +5 -2
  17. package/dest/avm/opcodes/commitment.d.ts +16 -0
  18. package/dest/avm/opcodes/commitment.d.ts.map +1 -0
  19. package/dest/avm/opcodes/commitment.js +50 -0
  20. package/dest/avm/opcodes/hashing.d.ts +11 -0
  21. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  22. package/dest/avm/opcodes/hashing.js +42 -3
  23. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  24. package/dest/avm/serialization/bytecode_serialization.js +7 -2
  25. package/dest/avm/serialization/instruction_serialization.d.ts +4 -1
  26. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  27. package/dest/avm/serialization/instruction_serialization.js +6 -2
  28. package/dest/client/client_execution_context.d.ts +17 -12
  29. package/dest/client/client_execution_context.d.ts.map +1 -1
  30. package/dest/client/client_execution_context.js +25 -31
  31. package/dest/client/execution_result.d.ts +12 -6
  32. package/dest/client/execution_result.d.ts.map +1 -1
  33. package/dest/client/execution_result.js +21 -8
  34. package/dest/mocks/fixtures.d.ts +5 -5
  35. package/dest/mocks/fixtures.d.ts.map +1 -1
  36. package/dest/mocks/fixtures.js +6 -9
  37. package/dest/providers/factory.d.ts +12 -0
  38. package/dest/providers/factory.d.ts.map +1 -0
  39. package/dest/providers/factory.js +27 -0
  40. package/dest/providers/index.d.ts +1 -0
  41. package/dest/providers/index.d.ts.map +1 -1
  42. package/dest/providers/index.js +2 -1
  43. package/dest/public/abstract_phase_manager.d.ts +4 -5
  44. package/dest/public/abstract_phase_manager.d.ts.map +1 -1
  45. package/dest/public/abstract_phase_manager.js +16 -83
  46. package/dest/public/execution.d.ts +8 -10
  47. package/dest/public/execution.d.ts.map +1 -1
  48. package/dest/public/execution.js +10 -1
  49. package/dest/public/executor.d.ts +2 -1
  50. package/dest/public/executor.d.ts.map +1 -1
  51. package/dest/public/executor.js +3 -3
  52. package/dest/public/index.d.ts +1 -1
  53. package/dest/public/index.d.ts.map +1 -1
  54. package/dest/public/index.js +1 -1
  55. package/dest/public/public_processor.d.ts +1 -1
  56. package/dest/public/public_processor.d.ts.map +1 -1
  57. package/dest/public/public_processor.js +9 -3
  58. package/dest/public/side_effect_trace.d.ts +1 -0
  59. package/dest/public/side_effect_trace.d.ts.map +1 -1
  60. package/dest/public/side_effect_trace.js +9 -9
  61. package/package.json +9 -9
  62. package/src/acvm/acvm.ts +1 -1
  63. package/src/acvm/oracle/oracle.ts +9 -7
  64. package/src/acvm/oracle/typed_oracle.ts +6 -10
  65. package/src/acvm/serialize.ts +0 -29
  66. package/src/avm/avm_gas.ts +4 -0
  67. package/src/avm/fixtures/index.ts +5 -1
  68. package/src/avm/opcodes/commitment.ts +66 -0
  69. package/src/avm/opcodes/hashing.ts +53 -2
  70. package/src/avm/serialization/bytecode_serialization.ts +6 -1
  71. package/src/avm/serialization/instruction_serialization.ts +4 -0
  72. package/src/client/client_execution_context.ts +34 -38
  73. package/src/client/execution_result.ts +25 -10
  74. package/src/mocks/fixtures.ts +13 -11
  75. package/src/providers/factory.ts +38 -0
  76. package/src/providers/index.ts +1 -0
  77. package/src/public/abstract_phase_manager.ts +22 -102
  78. package/src/public/execution.ts +30 -14
  79. package/src/public/executor.ts +4 -3
  80. package/src/public/index.ts +1 -1
  81. package/src/public/public_processor.ts +8 -5
  82. package/src/public/side_effect_trace.ts +13 -7
@@ -1,8 +1,9 @@
1
- import { UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
1
+ import { PublicExecutionRequest, UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
2
2
  import { AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, AztecAddress, CallContext, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, Gas, L2ToL1Message, LogHash, NoteHash, Nullifier, ReadRequest, } from '@aztec/circuits.js';
3
3
  import { Fr } from '@aztec/foundation/fields';
4
4
  import { createDebugLogger } from '@aztec/foundation/log';
5
5
  import { createSimulationError } from '../common/errors.js';
6
+ import { resultToPublicCallRequest } from './execution.js';
6
7
  export class PublicSideEffectTrace {
7
8
  constructor(
8
9
  /** The counter of this trace's first side effect. */
@@ -21,6 +22,7 @@ export class PublicSideEffectTrace {
21
22
  this.unencryptedLogs = [];
22
23
  this.allUnencryptedLogs = [];
23
24
  this.unencryptedLogsHashes = [];
25
+ this.publicCallRequests = [];
24
26
  this.gotContractInstances = [];
25
27
  this.nestedExecutions = [];
26
28
  this.sideEffectCounter = startSideEffectCounter;
@@ -159,6 +161,7 @@ export class PublicSideEffectTrace {
159
161
  // this function will accept all of the nested's side effects into this instance
160
162
  this.nestedExecutions.push(result);
161
163
  const gasUsed = new Gas(result.startGasLeft.daGas - result.endGasLeft.daGas, result.startGasLeft.l2Gas - result.endGasLeft.l2Gas);
164
+ this.publicCallRequests.push(resultToPublicCallRequest(result));
162
165
  this.avmCircuitHints.externalCalls.items.push(new AvmExternalCallHint(
163
166
  /*success=*/ new Fr(result.reverted ? 0 : 1), result.returnValues, gasUsed, result.endSideEffectCounter));
164
167
  }
@@ -205,6 +208,7 @@ export class PublicSideEffectTrace {
205
208
  unencryptedLogsHashes: this.unencryptedLogsHashes,
206
209
  // TODO(dbanks12): process contract instance read requests in public kernel
207
210
  //gotContractInstances: this.gotContractInstances,
211
+ publicCallRequests: this.publicCallRequests,
208
212
  nestedExecutions: this.nestedExecutions,
209
213
  avmCircuitHints: this.avmCircuitHints,
210
214
  functionName,
@@ -222,12 +226,8 @@ function createPublicExecutionRequest(avmEnvironment) {
222
226
  isDelegateCall: avmEnvironment.isDelegateCall,
223
227
  isStaticCall: avmEnvironment.isStaticCall,
224
228
  });
225
- return {
226
- contractAddress: avmEnvironment.address,
227
- functionSelector: avmEnvironment.functionSelector,
228
- callContext,
229
- // execution request does not contain AvmContextInputs prefix
230
- args: avmEnvironment.getCalldataWithoutPrefix(),
231
- };
229
+ return new PublicExecutionRequest(avmEnvironment.address, callContext,
230
+ // execution request does not contain AvmContextInputs prefix
231
+ avmEnvironment.getCalldataWithoutPrefix());
232
232
  }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixHQUFHLEVBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsR0FDWixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUsxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU01RCxNQUFNLE9BQU8scUJBQXFCO0lBNkJoQztJQUNFLHFEQUFxRDtJQUNyQyx5QkFBaUMsQ0FBQztRQUFsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQVk7UUE5QjdDLFdBQU0sR0FBRyxpQkFBaUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBSzVELHlCQUFvQixHQUEwQixFQUFFLENBQUM7UUFDakQsa0NBQTZCLEdBQW1DLEVBQUUsQ0FBQztRQUVuRSx5QkFBb0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3pDLGVBQVUsR0FBZSxFQUFFLENBQUM7UUFFNUIsMEJBQXFCLEdBQWtCLEVBQUUsQ0FBQztRQUMxQyxxQ0FBZ0MsR0FBa0IsRUFBRSxDQUFDO1FBQ3JELGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBRTdCLDBCQUFxQixHQUFrQixFQUFFLENBQUM7UUFDMUMsc0JBQWlCLEdB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
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixHQUFHLEVBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUVULFdBQVcsR0FDWixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUsxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQThCLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLdkYsTUFBTSxPQUFPLHFCQUFxQjtJQStCaEM7SUFDRSxxREFBcUQ7SUFDckMseUJBQWlDLENBQUM7UUFBbEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFZO1FBaEM3QyxXQUFNLEdBQUcsaUJBQWlCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUs1RCx5QkFBb0IsR0FBMEIsRUFBRSxDQUFDO1FBQ2pELGtDQUE2QixHQUFtQyxFQUFFLENBQUM7UUFFbkUseUJBQW9CLEdBQWtCLEVBQUUsQ0FBQztRQUN6QyxlQUFVLEdBQWUsRUFBRSxDQUFDO1FBRTVCLDBCQUFxQixHQUFrQixFQUFFLENBQUM7UUFDMUMscUNBQWdDLEdBQWtCLEVBQUUsQ0FBQztRQUNyRCxlQUFVLEdB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/simulator",
3
- "version": "0.46.7",
3
+ "version": "0.47.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -56,14 +56,14 @@
56
56
  ]
57
57
  },
58
58
  "dependencies": {
59
- "@aztec/circuit-types": "0.46.7",
60
- "@aztec/circuits.js": "0.46.7",
61
- "@aztec/foundation": "0.46.7",
62
- "@aztec/noir-protocol-circuits-types": "0.46.7",
63
- "@aztec/protocol-contracts": "0.46.7",
64
- "@aztec/telemetry-client": "0.46.7",
65
- "@aztec/types": "0.46.7",
66
- "@aztec/world-state": "0.46.7",
59
+ "@aztec/circuit-types": "0.47.1",
60
+ "@aztec/circuits.js": "0.47.1",
61
+ "@aztec/foundation": "0.47.1",
62
+ "@aztec/noir-protocol-circuits-types": "0.47.1",
63
+ "@aztec/protocol-contracts": "0.47.1",
64
+ "@aztec/telemetry-client": "0.47.1",
65
+ "@aztec/types": "0.47.1",
66
+ "@aztec/world-state": "0.47.1",
67
67
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
68
68
  "@noir-lang/types": "portal:../../noir/packages/types",
69
69
  "levelup": "^5.1.1",
package/src/acvm/acvm.ts CHANGED
@@ -18,7 +18,7 @@ import { type ORACLE_NAMES } from './oracle/index.js';
18
18
  */
19
19
  type ACIRCallback = Record<
20
20
  ORACLE_NAMES,
21
- (...args: ForeignCallInput[]) => void | ForeignCallOutput | Promise<ForeignCallOutput>
21
+ (...args: ForeignCallInput[]) => void | Promise<void> | ForeignCallOutput | Promise<ForeignCallOutput>
22
22
  >;
23
23
 
24
24
  /**
@@ -6,7 +6,7 @@ import { Fr, Point } from '@aztec/foundation/fields';
6
6
 
7
7
  import { type ACVMField } from '../acvm_types.js';
8
8
  import { frToBoolean, frToNumber, fromACVMField } from '../deserialize.js';
9
- import { toACVMField, toAcvmEnqueuePublicFunctionResult } from '../serialize.js';
9
+ import { toACVMField } from '../serialize.js';
10
10
  import { type TypedOracle } from './typed_oracle.js';
11
11
 
12
12
  /**
@@ -340,6 +340,7 @@ export class Oracle {
340
340
  [ivpkMX]: ACVMField[],
341
341
  [ivpkMY]: ACVMField[],
342
342
  [ivpkMIsInfinite]: ACVMField[],
343
+ [recipient]: ACVMField[],
343
344
  preimage: ACVMField[],
344
345
  ): ACVMField[] {
345
346
  const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY), !fromACVMField(ovpkMIsInfinite).isZero());
@@ -351,6 +352,7 @@ export class Oracle {
351
352
  Fr.fromString(eventTypeId),
352
353
  ovKeys,
353
354
  ivpkM,
355
+ AztecAddress.fromString(recipient),
354
356
  preimage.map(fromACVMField),
355
357
  );
356
358
  const bytes: ACVMField[] = [];
@@ -371,6 +373,7 @@ export class Oracle {
371
373
  [ivpkMX]: ACVMField[],
372
374
  [ivpkMY]: ACVMField[],
373
375
  [ivpkMIsInfinite]: ACVMField[],
376
+ [recipient]: ACVMField[],
374
377
  preimage: ACVMField[],
375
378
  ): ACVMField[] {
376
379
  const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY), !fromACVMField(ovpkMIsInfinite).isZero());
@@ -382,6 +385,7 @@ export class Oracle {
382
385
  NoteSelector.fromField(Fr.fromString(noteTypeId)),
383
386
  ovKeys,
384
387
  ivpkM,
388
+ AztecAddress.fromString(recipient),
385
389
  preimage.map(fromACVMField),
386
390
  );
387
391
  const bytes: ACVMField[] = [];
@@ -425,7 +429,7 @@ export class Oracle {
425
429
  [isStaticCall]: ACVMField[],
426
430
  [isDelegateCall]: ACVMField[],
427
431
  ): Promise<ACVMField[]> {
428
- const callStackItem = await this.typedOracle.callPrivateFunction(
432
+ const { endSideEffectCounter, returnsHash } = await this.typedOracle.callPrivateFunction(
429
433
  AztecAddress.fromField(fromACVMField(contractAddress)),
430
434
  FunctionSelector.fromField(fromACVMField(functionSelector)),
431
435
  fromACVMField(argsHash),
@@ -433,7 +437,7 @@ export class Oracle {
433
437
  frToBoolean(fromACVMField(isStaticCall)),
434
438
  frToBoolean(fromACVMField(isDelegateCall)),
435
439
  );
436
- return callStackItem.toFields().map(toACVMField);
440
+ return [endSideEffectCounter, returnsHash].map(toACVMField);
437
441
  }
438
442
 
439
443
  async callPublicFunction(
@@ -463,7 +467,7 @@ export class Oracle {
463
467
  [isStaticCall]: ACVMField[],
464
468
  [isDelegateCall]: ACVMField[],
465
469
  ) {
466
- const enqueuedRequest = await this.typedOracle.enqueuePublicFunctionCall(
470
+ await this.typedOracle.enqueuePublicFunctionCall(
467
471
  AztecAddress.fromString(contractAddress),
468
472
  FunctionSelector.fromField(fromACVMField(functionSelector)),
469
473
  fromACVMField(argsHash),
@@ -471,7 +475,6 @@ export class Oracle {
471
475
  frToBoolean(fromACVMField(isStaticCall)),
472
476
  frToBoolean(fromACVMField(isDelegateCall)),
473
477
  );
474
- return toAcvmEnqueuePublicFunctionResult(enqueuedRequest);
475
478
  }
476
479
 
477
480
  async setPublicTeardownFunctionCall(
@@ -482,7 +485,7 @@ export class Oracle {
482
485
  [isStaticCall]: ACVMField[],
483
486
  [isDelegateCall]: ACVMField[],
484
487
  ) {
485
- const teardownRequest = await this.typedOracle.setPublicTeardownFunctionCall(
488
+ await this.typedOracle.setPublicTeardownFunctionCall(
486
489
  AztecAddress.fromString(contractAddress),
487
490
  FunctionSelector.fromField(fromACVMField(functionSelector)),
488
491
  fromACVMField(argsHash),
@@ -490,7 +493,6 @@ export class Oracle {
490
493
  frToBoolean(fromACVMField(isStaticCall)),
491
494
  frToBoolean(fromACVMField(isDelegateCall)),
492
495
  );
493
- return toAcvmEnqueuePublicFunctionResult(teardownRequest);
494
496
  }
495
497
 
496
498
  aes128Encrypt(input: ACVMField[], initializationVector: ACVMField[], key: ACVMField[]): ACVMField[] {
@@ -9,13 +9,7 @@ import {
9
9
  type SiblingPath,
10
10
  type UnencryptedL2Log,
11
11
  } from '@aztec/circuit-types';
12
- import {
13
- type Header,
14
- type KeyValidationRequest,
15
- type L1_TO_L2_MSG_TREE_HEIGHT,
16
- type PrivateCallStackItem,
17
- type PublicCallRequest,
18
- } from '@aztec/circuits.js';
12
+ import { type Header, type KeyValidationRequest, type L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/circuits.js';
19
13
  import { type FunctionSelector, type NoteSelector } from '@aztec/foundation/abi';
20
14
  import { type AztecAddress } from '@aztec/foundation/aztec-address';
21
15
  import { Fr } from '@aztec/foundation/fields';
@@ -222,6 +216,7 @@ export abstract class TypedOracle {
222
216
  _eventTypeId: Fr,
223
217
  _ovKeys: KeyValidationRequest,
224
218
  _ivpkM: PublicKey,
219
+ _recipient: AztecAddress,
225
220
  _preimage: Fr[],
226
221
  ): Buffer {
227
222
  throw new OracleMethodNotAvailableError('computeEncryptedEventLog');
@@ -233,6 +228,7 @@ export abstract class TypedOracle {
233
228
  _noteTypeId: NoteSelector,
234
229
  _ovKeys: KeyValidationRequest,
235
230
  _ivpkM: PublicKey,
231
+ _recipient: AztecAddress,
236
232
  _preimage: Fr[],
237
233
  ): Buffer {
238
234
  throw new OracleMethodNotAvailableError('computeEncryptedNoteLog');
@@ -253,7 +249,7 @@ export abstract class TypedOracle {
253
249
  _sideEffectCounter: number,
254
250
  _isStaticCall: boolean,
255
251
  _isDelegateCall: boolean,
256
- ): Promise<PrivateCallStackItem> {
252
+ ): Promise<{ endSideEffectCounter: Fr; returnsHash: Fr }> {
257
253
  throw new OracleMethodNotAvailableError('callPrivateFunction');
258
254
  }
259
255
 
@@ -275,7 +271,7 @@ export abstract class TypedOracle {
275
271
  _sideEffectCounter: number,
276
272
  _isStaticCall: boolean,
277
273
  _isDelegateCall: boolean,
278
- ): Promise<PublicCallRequest> {
274
+ ): Promise<void> {
279
275
  throw new OracleMethodNotAvailableError('enqueuePublicFunctionCall');
280
276
  }
281
277
 
@@ -286,7 +282,7 @@ export abstract class TypedOracle {
286
282
  _sideEffectCounter: number,
287
283
  _isStaticCall: boolean,
288
284
  _isDelegateCall: boolean,
289
- ): Promise<PublicCallRequest> {
285
+ ): Promise<void> {
290
286
  throw new OracleMethodNotAvailableError('setPublicTeardownFunctionCall');
291
287
  }
292
288
 
@@ -1,4 +1,3 @@
1
- import { ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH, type PublicCallRequest } from '@aztec/circuits.js';
2
1
  import { type AztecAddress } from '@aztec/foundation/aztec-address';
3
2
  import { type EthAddress } from '@aztec/foundation/eth-address';
4
3
  import { Fr } from '@aztec/foundation/fields';
@@ -40,34 +39,6 @@ export function toACVMField(
40
39
  return `0x${adaptBufferSize(buffer).toString('hex')}`;
41
40
  }
42
41
 
43
- // Utilities to write TS classes to ACVM Field arrays
44
- // In the order that the ACVM expects them
45
-
46
- /**
47
- * Converts a public call stack item with the request for executing a public function to
48
- * a set of ACVM fields accepted by the enqueue_public_function_call_oracle Aztec.nr function.
49
- * Note that only the fields related to the request are serialized: those related to the result
50
- * are empty since this is just an execution request, so we don't send them to the circuit.
51
- * @param item - The public call stack item to serialize to be passed onto Noir.
52
- * @returns The fields expected by the enqueue_public_function_call_oracle Aztec.nr function.
53
- * TODO(#4380): Nuke this and replace it with PublicCallRequest.toFields()
54
- */
55
- export function toAcvmEnqueuePublicFunctionResult(item: PublicCallRequest): ACVMField[] {
56
- const fields = [
57
- item.contractAddress.toField(),
58
- item.functionSelector.toField(),
59
- ...item.callContext.toFields(),
60
- item.sideEffectCounter,
61
- item.getArgsHash(),
62
- ];
63
- if (fields.length !== ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH) {
64
- throw new Error(
65
- `Invalid length for EnqueuePublicFunctionResult (got ${fields.length} expected ${ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH})`,
66
- );
67
- }
68
- return fields.map(toACVMField);
69
- }
70
-
71
42
  /**
72
43
  * Inserts a list of ACVM fields to a witness.
73
44
  * @param witnessStartIndex - The index where to start inserting the fields.
@@ -124,8 +124,12 @@ const BaseGasCosts: Record<Opcode, Gas> = {
124
124
  [Opcode.PEDERSEN]: DefaultBaseGasCost,
125
125
  [Opcode.ECADD]: DefaultBaseGasCost,
126
126
  [Opcode.MSM]: DefaultBaseGasCost,
127
+ [Opcode.PEDERSENCOMMITMENT]: DefaultBaseGasCost,
127
128
  // Conversions
128
129
  [Opcode.TORADIXLE]: DefaultBaseGasCost,
130
+ // Other
131
+ [Opcode.SHA256COMPRESSION]: DefaultBaseGasCost,
132
+ [Opcode.KECCAKF1600]: DefaultBaseGasCost,
129
133
  };
130
134
 
131
135
  /** Returns the fixed base gas cost for a given opcode. */
@@ -14,7 +14,7 @@ import { type PublicSideEffectTraceInterface } from '../../public/side_effect_tr
14
14
  import { AvmContext } from '../avm_context.js';
15
15
  import { AvmContextInputs, AvmExecutionEnvironment } from '../avm_execution_environment.js';
16
16
  import { AvmMachineState } from '../avm_machine_state.js';
17
- import { Field, Uint8 } from '../avm_memory_types.js';
17
+ import { Field, Uint8, Uint64 } from '../avm_memory_types.js';
18
18
  import { HostStorage } from '../journal/host_storage.js';
19
19
  import { AvmPersistableStateManager } from '../journal/journal.js';
20
20
  import { NullifierManager } from '../journal/nullifiers.js';
@@ -135,6 +135,10 @@ export function randomMemoryBytes(length: number): Uint8[] {
135
135
  return [...Array(length)].map(_ => new Uint8(Math.floor(Math.random() * 255)));
136
136
  }
137
137
 
138
+ export function randomMemoryUint64s(length: number): Uint64[] {
139
+ return [...Array(length)].map(_ => new Uint64(Math.floor(Math.random() * 255)));
140
+ }
141
+
138
142
  export function randomMemoryFields(length: number): Field[] {
139
143
  return [...Array(length)].map(_ => new Field(Fr.random()));
140
144
  }
@@ -0,0 +1,66 @@
1
+ import { pedersenCommit } from '@aztec/foundation/crypto';
2
+
3
+ import { type AvmContext } from '../avm_context.js';
4
+ import { Field, TypeTag, Uint8 } from '../avm_memory_types.js';
5
+ import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
6
+ import { Addressing } from './addressing_mode.js';
7
+ import { Instruction } from './instruction.js';
8
+
9
+ export class PedersenCommitment extends Instruction {
10
+ static type: string = 'PEDERSENCOMMITMENT';
11
+ static readonly opcode: Opcode = Opcode.PEDERSENCOMMITMENT;
12
+
13
+ // Informs (de)serialization. See Instruction.deserialize.
14
+ static readonly wireFormat: OperandType[] = [
15
+ OperandType.UINT8 /* Opcode */,
16
+ OperandType.UINT8 /* Indirect */,
17
+ OperandType.UINT32 /* Input Offset*/,
18
+ OperandType.UINT32 /* Dst Offset */,
19
+ OperandType.UINT32 /* Input Size Offset */,
20
+ OperandType.UINT32 /* Generator Index Offset */,
21
+ ];
22
+
23
+ constructor(
24
+ private indirect: number,
25
+ private inputOffset: number,
26
+ private outputOffset: number,
27
+ private inputSizeOffset: number,
28
+ private genIndexOffset: number,
29
+ ) {
30
+ super();
31
+ }
32
+
33
+ public async execute(context: AvmContext): Promise<void> {
34
+ const memory = context.machineState.memory.track(this.type);
35
+ const [inputOffset, outputOffset, inputSizeOffset, genIndexOffset] = Addressing.fromWire(this.indirect).resolve(
36
+ [this.inputOffset, this.outputOffset, this.inputSizeOffset, this.genIndexOffset],
37
+ memory,
38
+ );
39
+
40
+ const inputSize = memory.get(inputSizeOffset).toNumber();
41
+ memory.checkTag(TypeTag.UINT32, inputSizeOffset);
42
+
43
+ const inputs = memory.getSlice(inputOffset, inputSize);
44
+ memory.checkTagsRange(TypeTag.FIELD, inputOffset, inputSize);
45
+
46
+ // Generator index not used for now since we dont utilise it in the pedersenCommit function
47
+ memory.checkTag(TypeTag.UINT32, genIndexOffset);
48
+
49
+ const memoryOperations = { reads: inputSize + 1, writes: 3, indirect: this.indirect };
50
+ context.machineState.consumeGas(this.gasCost(memoryOperations));
51
+
52
+ const inputBuffer: Buffer[] = inputs.map(input => input.toBuffer());
53
+ // TODO: Add the generate index to the pedersenCommit function
54
+ const commitment = pedersenCommit(inputBuffer).map(f => new Field(f));
55
+ // The function doesnt include a flag if the output point is infinity, come back to this
56
+ // for now we just check if theyre zero - until we know how bb encodes them
57
+ const isInfinity = commitment[0].equals(new Field(0)) && commitment[1].equals(new Field(0));
58
+
59
+ memory.set(outputOffset, commitment[0]); // Field typed
60
+ memory.set(outputOffset + 1, commitment[1]); // Field typed
61
+ memory.set(outputOffset + 2, new Uint8(isInfinity ? 1 : 0)); // U8 typed
62
+
63
+ memory.assert(memoryOperations);
64
+ context.machineState.incrementPc();
65
+ }
66
+ }
@@ -1,7 +1,9 @@
1
- import { keccak256, pedersenHash, poseidon2Permutation, sha256 } from '@aztec/foundation/crypto';
1
+ import { keccak256, keccakf1600, pedersenHash, poseidon2Permutation, sha256 } from '@aztec/foundation/crypto';
2
+
3
+ import { strict as assert } from 'assert';
2
4
 
3
5
  import { type AvmContext } from '../avm_context.js';
4
- import { Field, TypeTag, Uint8 } from '../avm_memory_types.js';
6
+ import { Field, TypeTag, Uint8, Uint64 } from '../avm_memory_types.js';
5
7
  import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
6
8
  import { Addressing } from './addressing_mode.js';
7
9
  import { Instruction } from './instruction.js';
@@ -94,6 +96,55 @@ export class Keccak extends Instruction {
94
96
  }
95
97
  }
96
98
 
99
+ export class KeccakF1600 extends Instruction {
100
+ static type: string = 'KECCAKF1600';
101
+ static readonly opcode: Opcode = Opcode.KECCAKF1600;
102
+
103
+ // Informs (de)serialization. See Instruction.deserialize.
104
+ static readonly wireFormat: OperandType[] = [
105
+ OperandType.UINT8,
106
+ OperandType.UINT8,
107
+ OperandType.UINT32,
108
+ OperandType.UINT32,
109
+ OperandType.UINT32,
110
+ ];
111
+
112
+ constructor(
113
+ private indirect: number,
114
+ private dstOffset: number,
115
+ private stateOffset: number,
116
+ // This is here for compatibility with the CPP side. Should be removed in both.
117
+ private stateSizeOffset: number,
118
+ ) {
119
+ super();
120
+ }
121
+
122
+ // pub fn keccakf1600(input: [u64; 25]) -> [u64; 25]
123
+ public async execute(context: AvmContext): Promise<void> {
124
+ const memory = context.machineState.memory.track(this.type);
125
+ const [dstOffset, stateOffset, stateSizeOffset] = Addressing.fromWire(this.indirect).resolve(
126
+ [this.dstOffset, this.stateOffset, this.stateSizeOffset],
127
+ memory,
128
+ );
129
+ memory.checkTag(TypeTag.UINT32, stateSizeOffset);
130
+ const stateSize = memory.get(stateSizeOffset).toNumber();
131
+ assert(stateSize === 25, 'Invalid state size for keccakf1600');
132
+ const memoryOperations = { reads: stateSize + 1, writes: 25, indirect: this.indirect };
133
+ context.machineState.consumeGas(this.gasCost(memoryOperations));
134
+
135
+ memory.checkTagsRange(TypeTag.UINT64, stateOffset, stateSize);
136
+
137
+ const stateData = memory.getSlice(stateOffset, stateSize).map(word => word.toBigInt());
138
+ const updatedState = keccakf1600(stateData);
139
+
140
+ const res = updatedState.map(word => new Uint64(word));
141
+ memory.setSlice(dstOffset, res);
142
+
143
+ memory.assert(memoryOperations);
144
+ context.machineState.incrementPc();
145
+ }
146
+ }
147
+
97
148
  export class Sha256 extends Instruction {
98
149
  static type: string = 'SHA256';
99
150
  static readonly opcode: Opcode = Opcode.SHA256;
@@ -1,6 +1,7 @@
1
+ import { PedersenCommitment } from '../opcodes/commitment.js';
1
2
  import { DAGasLeft, L2GasLeft } from '../opcodes/context_getters.js';
2
3
  import { EcAdd } from '../opcodes/ec_add.js';
3
- import { Keccak, Pedersen, Poseidon2, Sha256 } from '../opcodes/hashing.js';
4
+ import { Keccak, KeccakF1600, Pedersen, Poseidon2, Sha256 } from '../opcodes/hashing.js';
4
5
  import type { Instruction } from '../opcodes/index.js';
5
6
  import {
6
7
  Add,
@@ -146,8 +147,12 @@ const INSTRUCTION_SET = () =>
146
147
  [Sha256.opcode, Sha256],
147
148
  [Pedersen.opcode, Pedersen],
148
149
  [MultiScalarMul.opcode, MultiScalarMul],
150
+ [PedersenCommitment.opcode, PedersenCommitment],
149
151
  // Conversions
150
152
  [ToRadixLE.opcode, ToRadixLE],
153
+ // Future Gadgets -- pending changes in noir
154
+ // SHA256COMPRESSION,
155
+ [KeccakF1600.opcode, KeccakF1600],
151
156
  ]);
152
157
 
153
158
  interface Serializable {
@@ -78,8 +78,12 @@ export enum Opcode {
78
78
  PEDERSEN, // temp - may be removed, but alot of contracts rely on it
79
79
  ECADD,
80
80
  MSM,
81
+ PEDERSENCOMMITMENT,
81
82
  // Conversion
82
83
  TORADIXLE,
84
+ // Future Gadgets -- pending changes in noir
85
+ SHA256COMPRESSION,
86
+ KECCAKF1600, // Here for when we eventually support this
83
87
  }
84
88
 
85
89
  // Possible types for an instruction's operand in its wire format. (Keep in sync with CPP code.