@aztec/simulator 0.75.0 → 0.76.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 (64) hide show
  1. package/dest/avm/avm_machine_state.d.ts.map +1 -1
  2. package/dest/avm/avm_machine_state.js +18 -13
  3. package/dest/avm/avm_memory_types.d.ts +1 -47
  4. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  5. package/dest/avm/avm_memory_types.js +42 -144
  6. package/dest/avm/avm_simulator.d.ts +2 -1
  7. package/dest/avm/avm_simulator.d.ts.map +1 -1
  8. package/dest/avm/avm_simulator.js +23 -7
  9. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  10. package/dest/avm/opcodes/accrued_substate.js +8 -15
  11. package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
  12. package/dest/avm/opcodes/addressing_mode.js +8 -3
  13. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
  14. package/dest/avm/opcodes/arithmetic.js +2 -3
  15. package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
  16. package/dest/avm/opcodes/bitwise.js +3 -5
  17. package/dest/avm/opcodes/comparators.d.ts.map +1 -1
  18. package/dest/avm/opcodes/comparators.js +2 -3
  19. package/dest/avm/opcodes/contract.d.ts.map +1 -1
  20. package/dest/avm/opcodes/contract.js +2 -3
  21. package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
  22. package/dest/avm/opcodes/control_flow.js +2 -6
  23. package/dest/avm/opcodes/conversion.d.ts.map +1 -1
  24. package/dest/avm/opcodes/conversion.js +2 -3
  25. package/dest/avm/opcodes/ec_add.d.ts.map +1 -1
  26. package/dest/avm/opcodes/ec_add.js +2 -3
  27. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  28. package/dest/avm/opcodes/environment_getters.js +2 -3
  29. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  30. package/dest/avm/opcodes/external_calls.js +4 -7
  31. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  32. package/dest/avm/opcodes/hashing.js +4 -7
  33. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  34. package/dest/avm/opcodes/memory.js +7 -13
  35. package/dest/avm/opcodes/misc.d.ts.map +1 -1
  36. package/dest/avm/opcodes/misc.js +2 -3
  37. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
  38. package/dest/avm/opcodes/multi_scalar_mul.js +2 -7
  39. package/dest/avm/opcodes/storage.d.ts.map +1 -1
  40. package/dest/avm/opcodes/storage.js +3 -5
  41. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +5 -0
  42. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  43. package/dest/public/fixtures/public_tx_simulation_tester.js +10 -6
  44. package/package.json +9 -9
  45. package/src/avm/avm_machine_state.ts +18 -14
  46. package/src/avm/avm_memory_types.ts +43 -183
  47. package/src/avm/avm_simulator.ts +37 -11
  48. package/src/avm/opcodes/accrued_substate.ts +7 -21
  49. package/src/avm/opcodes/addressing_mode.ts +9 -2
  50. package/src/avm/opcodes/arithmetic.ts +1 -3
  51. package/src/avm/opcodes/bitwise.ts +2 -6
  52. package/src/avm/opcodes/comparators.ts +1 -3
  53. package/src/avm/opcodes/contract.ts +1 -3
  54. package/src/avm/opcodes/control_flow.ts +1 -9
  55. package/src/avm/opcodes/conversion.ts +1 -3
  56. package/src/avm/opcodes/ec_add.ts +1 -3
  57. package/src/avm/opcodes/environment_getters.ts +1 -3
  58. package/src/avm/opcodes/external_calls.ts +3 -6
  59. package/src/avm/opcodes/hashing.ts +3 -9
  60. package/src/avm/opcodes/memory.ts +6 -20
  61. package/src/avm/opcodes/misc.ts +1 -3
  62. package/src/avm/opcodes/multi_scalar_mul.ts +1 -7
  63. package/src/avm/opcodes/storage.ts +2 -6
  64. package/src/public/fixtures/public_tx_simulation_tester.ts +16 -4
@@ -13,7 +13,7 @@ export class DebugLog extends Instruction {
13
13
  this.messageSize = messageSize;
14
14
  }
15
15
  async execute(context) {
16
- const memory = context.machineState.memory.track(this.type);
16
+ const memory = context.machineState.memory;
17
17
  const operands = [this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
18
18
  const addressing = Addressing.fromWire(this.indirect, operands.length);
19
19
  const [messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
@@ -28,7 +28,6 @@ export class DebugLog extends Instruction {
28
28
  const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
29
29
  const formattedStr = applyStringFormatting(messageAsStr, fields.map(field => field.toFr()));
30
30
  DebugLog.logger.verbose(formattedStr);
31
- memory.assert({ reads: 1 + fieldsSize + this.messageSize, addressing });
32
31
  }
33
32
  }
34
33
  DebugLog.type = 'DEBUGLOG';
@@ -43,4 +42,4 @@ DebugLog.wireFormat = [
43
42
  OperandType.UINT16, // fields size address
44
43
  OperandType.UINT16, // message size
45
44
  ];
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE1BQU0sT0FBTyxRQUFTLFNBQVEsV0FBVztJQWV2QyxZQUNVLFFBQWdCLEVBQ2hCLGFBQXFCLEVBQ3JCLFlBQW9CLEVBQ3BCLGdCQUF3QixFQUN4QixXQUFtQjtRQUUzQixLQUFLLEVBQUUsQ0FBQztRQU5BLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO0lBRzdCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQW1CO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEYsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTdGLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUzRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUUvRCxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUU3RSx3Q0FBd0M7UUFDeEMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0YsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQ3hDLFlBQVksRUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQ2xDLENBQUM7UUFFRixRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV0QyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7O0FBbkRNLGFBQUksR0FBVyxVQUFVLENBQUM7QUFDakIsZUFBTSxHQUFXLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDakMsZUFBTSxHQUFHLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBRWpFLDBEQUEwRDtBQUMxQyxtQkFBVSxHQUFrQjtJQUMxQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVM7SUFDNUIsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXO0lBQzlCLFdBQVcsQ0FBQyxNQUFNLEVBQUUseUJBQXlCO0lBQzdDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCO0lBQzVDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCO0lBQzFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZUFBZTtDQUNwQyxDQUFDIn0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE1BQU0sT0FBTyxRQUFTLFNBQVEsV0FBVztJQWV2QyxZQUNVLFFBQWdCLEVBQ2hCLGFBQXFCLEVBQ3JCLFlBQW9CLEVBQ3BCLGdCQUF3QixFQUN4QixXQUFtQjtRQUUzQixLQUFLLEVBQUUsQ0FBQztRQU5BLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO0lBRzdCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQW1CO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkUsTUFBTSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3RixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXpELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFL0QsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFN0Usd0NBQXdDO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUN4QyxZQUFZLEVBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUNsQyxDQUFDO1FBRUYsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7QUFqRE0sYUFBSSxHQUFXLFVBQVUsQ0FBQztBQUNqQixlQUFNLEdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNqQyxlQUFNLEdBQUcsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFFakUsMERBQTBEO0FBQzFDLG1CQUFVLEdBQWtCO0lBQzFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUztJQUM1QixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVc7SUFDOUIsV0FBVyxDQUFDLE1BQU0sRUFBRSx5QkFBeUI7SUFDN0MsV0FBVyxDQUFDLE1BQU0sRUFBRSx3QkFBd0I7SUFDNUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxzQkFBc0I7SUFDMUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlO0NBQ3BDLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"multi_scalar_mul.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/multi_scalar_mul.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,cAAe,SAAQ,WAAW;IAe3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,kBAAkB;IAlB5B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAoB;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAc;IAG5C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAOvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM;IAKvB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA4FzD"}
1
+ {"version":3,"file":"multi_scalar_mul.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/multi_scalar_mul.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,cAAe,SAAQ,WAAW;IAe3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,kBAAkB;IAlB5B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAoB;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAc;IAG5C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAOvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM;IAKvB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAsFzD"}
@@ -15,7 +15,7 @@ export class MultiScalarMul extends Instruction {
15
15
  this.pointsLengthOffset = pointsLengthOffset;
16
16
  }
17
17
  async execute(context) {
18
- const memory = context.machineState.memory.track(this.type);
18
+ const memory = context.machineState.memory;
19
19
  // Resolve indirects
20
20
  const operands = [this.pointsOffset, this.scalarsOffset, this.outputOffset, this.pointsLengthOffset];
21
21
  const addressing = Addressing.fromWire(this.indirect, operands.length);
@@ -96,11 +96,6 @@ export class MultiScalarMul extends Instruction {
96
96
  memory.setSlice(outputOffset, [new Field(outputPoint.x), new Field(outputPoint.y)]);
97
97
  // Check representation of infinity for grumpkin
98
98
  memory.setSlice(outputOffset + 2, [new Uint1(outputPoint.equals(Point.ZERO) ? 1 : 0)]);
99
- memory.assert({
100
- reads: 1 + pointsReadLength + scalarReadLength /* points and scalars */,
101
- writes: 3 /* output triplet */,
102
- addressing,
103
- });
104
99
  }
105
100
  }
106
101
  MultiScalarMul.type = 'MultiScalarMul';
@@ -114,4 +109,4 @@ MultiScalarMul.wireFormat = [
114
109
  OperandType.UINT16 /* output offset (fixed triplet) */,
115
110
  OperandType.UINT16 /* points length offset */,
116
111
  ];
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfc2NhbGFyX211bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9tdWx0aV9zY2FsYXJfbXVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxXQUFXO0lBYzdDLFlBQ1UsUUFBZ0IsRUFDaEIsWUFBb0IsRUFDcEIsYUFBcUIsRUFDckIsWUFBb0IsRUFDcEIsa0JBQTBCO1FBRWxDLEtBQUssRUFBRSxDQUFDO1FBTkEsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHcEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxvQkFBb0I7UUFDcEIsTUFBTSxR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
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfc2NhbGFyX211bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9tdWx0aV9zY2FsYXJfbXVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxXQUFXO0lBYzdDLFlBQ1UsUUFBZ0IsRUFDaEIsWUFBb0IsRUFDcEIsYUFBcUIsRUFDckIsWUFBb0IsRUFDcEIsa0JBQTBCO1FBRWxDLEtBQUssRUFBRSxDQUFDO1FBTkEsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHcEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDM0Msb0JBQW9CO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJ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
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,sBAAuB,SAAQ,WAAW;IAS3C,SAAS,CAAC,QAAQ,EAAE,MAAM;IAAE,SAAS,CAAC,OAAO,EAAE,MAAM;IAAE,SAAS,CAAC,OAAO,EAAE,MAAM;IAP5F,gBAAuB,UAAU,EAAE,WAAW,EAAE,CAK9C;gBAEoB,QAAQ,EAAE,MAAM,EAAY,OAAO,EAAE,MAAM,EAAY,OAAO,EAAE,MAAM;CAG7F;AAED,qBAAa,MAAO,SAAQ,sBAAsB;IAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IACxC,MAAM,CAAC,QAAQ,CAAC,MAAM,iBAAiB;gBAE3B,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAItD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBzD;AAED,qBAAa,KAAM,SAAQ,sBAAsB;IAC/C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAW;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;gBAE1B,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAItD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAezD"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,sBAAuB,SAAQ,WAAW;IAS3C,SAAS,CAAC,QAAQ,EAAE,MAAM;IAAE,SAAS,CAAC,OAAO,EAAE,MAAM;IAAE,SAAS,CAAC,OAAO,EAAE,MAAM;IAP5F,gBAAuB,UAAU,EAAE,WAAW,EAAE,CAK9C;gBAEoB,QAAQ,EAAE,MAAM,EAAY,OAAO,EAAE,MAAM,EAAY,OAAO,EAAE,MAAM;CAG7F;AAED,qBAAa,MAAO,SAAQ,sBAAsB;IAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IACxC,MAAM,CAAC,QAAQ,CAAC,MAAM,iBAAiB;gBAE3B,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAItD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBzD;AAED,qBAAa,KAAM,SAAQ,sBAAsB;IAC/C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAW;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;gBAE1B,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAItD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAazD"}
@@ -26,7 +26,7 @@ export class SStore extends BaseStorageInstruction {
26
26
  if (context.environment.isStaticCall) {
27
27
  throw new StaticCallAlterationError();
28
28
  }
29
- const memory = context.machineState.memory.track(this.type);
29
+ const memory = context.machineState.memory;
30
30
  context.machineState.consumeGas(this.gasCost());
31
31
  const operands = [this.aOffset, this.bOffset];
32
32
  const addressing = Addressing.fromWire(this.indirect, operands.length);
@@ -36,7 +36,6 @@ export class SStore extends BaseStorageInstruction {
36
36
  const slot = memory.get(slotOffset).toFr();
37
37
  const value = memory.get(srcOffset).toFr();
38
38
  await context.persistableState.writeStorage(context.environment.address, slot, value);
39
- memory.assert({ reads: 2, addressing });
40
39
  }
41
40
  }
42
41
  SStore.type = 'SSTORE';
@@ -46,7 +45,7 @@ export class SLoad extends BaseStorageInstruction {
46
45
  super(indirect, slotOffset, dstOffset);
47
46
  }
48
47
  async execute(context) {
49
- const memory = context.machineState.memory.track(this.type);
48
+ const memory = context.machineState.memory;
50
49
  context.machineState.consumeGas(this.gasCost());
51
50
  const operands = [this.aOffset, this.bOffset];
52
51
  const addressing = Addressing.fromWire(this.indirect, operands.length);
@@ -55,9 +54,8 @@ export class SLoad extends BaseStorageInstruction {
55
54
  const slot = memory.get(slotOffset).toFr();
56
55
  const value = await context.persistableState.readStorage(context.environment.address, slot);
57
56
  memory.set(dstOffset, new Field(value));
58
- memory.assert({ writes: 1, reads: 1, addressing });
59
57
  }
60
58
  }
61
59
  SLoad.type = 'SLOAD';
62
60
  SLoad.opcode = Opcode.SLOAD;
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFlLHNCQUF1QixTQUFRLFdBQVc7SUFTdkQsWUFBc0IsUUFBZ0IsRUFBWSxPQUFlLEVBQVksT0FBZTtRQUMxRixLQUFLLEVBQUUsQ0FBQztRQURZLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVksWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUU1RixDQUFDOztBQVZELDBEQUEwRDtBQUNuQyxpQ0FBVSxHQUFrQjtJQUNqRCxXQUFXLENBQUMsS0FBSztJQUNqQixXQUFXLENBQUMsS0FBSztJQUNqQixXQUFXLENBQUMsTUFBTTtJQUNsQixXQUFXLENBQUMsTUFBTTtDQUNuQixDQUFDO0FBT0osTUFBTSxPQUFPLE1BQU8sU0FBUSxzQkFBc0I7SUFJaEQsWUFBWSxRQUFnQixFQUFFLFNBQWlCLEVBQUUsVUFBa0I7UUFDakUsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFMUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNDLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOztBQTFCZSxXQUFJLEdBQVcsUUFBUSxDQUFDO0FBQ3hCLGFBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBNEJ6QyxNQUFNLE9BQU8sS0FBTSxTQUFRLHNCQUFzQjtJQUkvQyxZQUFZLFFBQWdCLEVBQUUsVUFBa0IsRUFBRSxTQUFpQjtRQUNqRSxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFtQjtRQUN0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUUzQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDOztBQXJCZSxVQUFJLEdBQVcsT0FBTyxDQUFDO0FBQ3ZCLFlBQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDIn0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFlLHNCQUF1QixTQUFRLFdBQVc7SUFTdkQsWUFBc0IsUUFBZ0IsRUFBWSxPQUFlLEVBQVksT0FBZTtRQUMxRixLQUFLLEVBQUUsQ0FBQztRQURZLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVksWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUU1RixDQUFDOztBQVZELDBEQUEwRDtBQUNuQyxpQ0FBVSxHQUFrQjtJQUNqRCxXQUFXLENBQUMsS0FBSztJQUNqQixXQUFXLENBQUMsS0FBSztJQUNqQixXQUFXLENBQUMsTUFBTTtJQUNsQixXQUFXLENBQUMsTUFBTTtDQUNuQixDQUFDO0FBT0osTUFBTSxPQUFPLE1BQU8sU0FBUSxzQkFBc0I7SUFJaEQsWUFBWSxRQUFnQixFQUFFLFNBQWlCLEVBQUUsVUFBa0I7UUFDakUsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1FB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
@@ -1,5 +1,8 @@
1
+ import { type MerkleTreeWriteOperations } from '@aztec/circuit-types';
1
2
  import { AztecAddress } from '@aztec/foundation/aztec-address';
2
3
  import { BaseAvmSimulationTester } from '../../avm/fixtures/base_avm_simulation_tester.js';
4
+ import { SimpleContractDataSource } from '../../avm/fixtures/simple_contract_data_source.js';
5
+ import { WorldStateDB } from '../public_db_sources.js';
3
6
  import { type PublicTxResult } from '../public_tx_simulator.js';
4
7
  export type TestEnqueuedCall = {
5
8
  address: AztecAddress;
@@ -13,7 +16,9 @@ export type TestEnqueuedCall = {
13
16
  * transactions.
14
17
  */
15
18
  export declare class PublicTxSimulationTester extends BaseAvmSimulationTester {
19
+ private worldStateDB;
16
20
  private txCount;
21
+ constructor(worldStateDB: WorldStateDB, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations, skipContractDeployments: boolean);
17
22
  static create(skipContractDeployments?: boolean): Promise<PublicTxSimulationTester>;
18
23
  simulateTx(sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress): Promise<PublicTxResult>;
19
24
  private commitTxStateUpdates;
@@ -1 +1 @@
1
- {"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAM/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAI3F,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,2BAA2B,CAAC;AAMnF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,uBAAuB;IACnE,OAAO,CAAC,OAAO,CAAK;WAEA,MAAM,CAAC,uBAAuB,UAAQ,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAMjF,UAAU,CACrB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,gBAAgB,EAAO,EACnC,QAAQ,GAAE,gBAAgB,EAAO,EACjC,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,GAAE,YAAkC,GAC3C,OAAO,CAAC,cAAc,CAAC;YAwEZ,oBAAoB;CAqBnC"}
1
+ {"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,yBAAyB,EAAmC,MAAM,sBAAsB,CAAC;AAcrH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAM/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAE3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,2BAA2B,CAAC;AAMnF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,uBAAuB;IAIjE,OAAO,CAAC,YAAY;IAHtB,OAAO,CAAC,OAAO,CAAK;gBAGV,YAAY,EAAE,YAAY,EAClC,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB,EACtC,uBAAuB,EAAE,OAAO;WAKd,MAAM,CAAC,uBAAuB,UAAQ,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAOjF,UAAU,CACrB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,gBAAgB,EAAO,EACnC,QAAQ,GAAE,gBAAgB,EAAO,EACjC,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,GAAE,YAAkC,GAC3C,OAAO,CAAC,cAAc,CAAC;YA0EZ,oBAAoB;CAqBnC"}
@@ -20,21 +20,22 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
20
20
  * transactions.
21
21
  */
22
22
  export class PublicTxSimulationTester extends BaseAvmSimulationTester {
23
- constructor() {
24
- super(...arguments);
23
+ constructor(worldStateDB, contractDataSource, merkleTrees, skipContractDeployments) {
24
+ super(contractDataSource, merkleTrees, skipContractDeployments);
25
+ this.worldStateDB = worldStateDB;
25
26
  this.txCount = 0;
26
27
  }
27
28
  static async create(skipContractDeployments = false) {
28
29
  const contractDataSource = new SimpleContractDataSource();
29
30
  const merkleTrees = await (await NativeWorldStateService.tmp()).fork();
30
- return new PublicTxSimulationTester(contractDataSource, merkleTrees, skipContractDeployments);
31
+ const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
32
+ return new PublicTxSimulationTester(worldStateDB, contractDataSource, merkleTrees, skipContractDeployments);
31
33
  }
32
34
  async simulateTx(sender, setupCalls = [], appCalls = [], teardownCall, feePayer = AztecAddress.zero()) {
33
35
  const globals = GlobalVariables.empty();
34
36
  globals.timestamp = TIMESTAMP;
35
37
  globals.gasFees = DEFAULT_GAS_FEES;
36
- const worldStateDB = new WorldStateDB(this.merkleTrees, this.contractDataSource);
37
- const simulator = new PublicTxSimulator(this.merkleTrees, worldStateDB, globals, /*doMerkleOperations=*/ true);
38
+ const simulator = new PublicTxSimulator(this.merkleTrees, this.worldStateDB, globals, /*doMerkleOperations=*/ true);
38
39
  const setupExecutionRequests = [];
39
40
  for (let i = 0; i < setupCalls.length; i++) {
40
41
  const address = setupCalls[i].address;
@@ -59,7 +60,10 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
59
60
  // but make sure each tx has a unique first nullifier.
60
61
  const firstNullifier = new Fr(420000 + this.txCount++);
61
62
  const tx = await createTxForPublicCalls(firstNullifier, setupExecutionRequests, appExecutionRequests, teardownExecutionRequest, feePayer);
63
+ const startTime = performance.now();
62
64
  const avmResult = await simulator.simulate(tx);
65
+ const endTime = performance.now();
66
+ this.logger.debug(`Public transaction simulation took ${endTime - startTime}ms`);
63
67
  if (avmResult.revertCode.isOK()) {
64
68
  await this.commitTxStateUpdates(avmResult.avmProvingRequest.inputs.publicInputs);
65
69
  }
@@ -85,4 +89,4 @@ async function executionRequestForCall(sender, address, fnName, args = [], isSta
85
89
  /*selector=*/ new FunctionSelector(PUBLIC_DISPATCH_SELECTOR), isStaticCall);
86
90
  return new PublicExecutionRequest(callContext, calldata);
87
91
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRpb25fdGVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1YmxpYy9maXh0dXJlcy9wdWJsaWNfdHhfc2ltdWxhdGlvbl90ZXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JGLE9BQU8sRUFFTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxlQUFlLEVBQ2Ysc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixHQUN6QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBeUIsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0YsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDN0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBdUIsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENB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
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRpb25fdGVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1YmxpYy9maXh0dXJlcy9wdWJsaWNfdHhfc2ltdWxhdGlvbl90ZXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBa0Msc0JBQXNCLEVBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNySCxPQUFPLEVBRUwsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsZUFBZSxFQUNmLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQXlCLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9GLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQXVCLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sWUFBWSxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/simulator",
3
- "version": "0.75.0",
3
+ "version": "0.76.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./common": "./dest/common.js",
@@ -60,14 +60,14 @@
60
60
  ]
61
61
  },
62
62
  "dependencies": {
63
- "@aztec/circuit-types": "0.75.0",
64
- "@aztec/circuits.js": "0.75.0",
65
- "@aztec/foundation": "0.75.0",
66
- "@aztec/noir-protocol-circuits-types": "0.75.0",
67
- "@aztec/protocol-contracts": "0.75.0",
68
- "@aztec/telemetry-client": "0.75.0",
69
- "@aztec/types": "0.75.0",
70
- "@aztec/world-state": "0.75.0",
63
+ "@aztec/circuit-types": "0.76.1",
64
+ "@aztec/circuits.js": "0.76.1",
65
+ "@aztec/foundation": "0.76.1",
66
+ "@aztec/noir-protocol-circuits-types": "0.76.1",
67
+ "@aztec/protocol-contracts": "0.76.1",
68
+ "@aztec/telemetry-client": "0.76.1",
69
+ "@aztec/types": "0.76.1",
70
+ "@aztec/world-state": "0.76.1",
71
71
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
72
72
  "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
73
73
  "@noir-lang/types": "portal:../../noir/packages/types",
@@ -1,6 +1,6 @@
1
1
  import { type Fr } from '@aztec/circuits.js';
2
2
 
3
- import { GAS_DIMENSIONS, type Gas } from './avm_gas.js';
3
+ import { type Gas } from './avm_gas.js';
4
4
  import { TaggedMemory } from './avm_memory_types.js';
5
5
  import { type AvmRevertReason, OutOfGasError } from './errors.js';
6
6
 
@@ -92,26 +92,29 @@ export class AvmMachineState {
92
92
  */
93
93
  public consumeGas(gasCost: Partial<Gas>) {
94
94
  // Assert there is enough gas on every dimension.
95
- const outOfGasDimensions = GAS_DIMENSIONS.filter(
96
- dimension => this[`${dimension}Left`] - (gasCost[dimension] ?? 0) < 0,
97
- );
95
+ const outOfL2Gas = this.l2GasLeft - (gasCost.l2Gas ?? 0) < 0;
96
+ const outOfDaGas = this.daGasLeft - (gasCost.daGas ?? 0) < 0;
98
97
  // If not, trigger an exceptional halt.
99
- // See https://yp-aztec.netlify.app/docs/public-vm/execution#gas-checks-and-tracking
100
- if (outOfGasDimensions.length > 0) {
98
+ if (outOfL2Gas || outOfDaGas) {
101
99
  this.exceptionalHalt();
102
- throw new OutOfGasError(outOfGasDimensions);
100
+ const dimensions = [];
101
+ if (outOfL2Gas) {
102
+ dimensions.push('l2Gas');
103
+ }
104
+ if (outOfDaGas) {
105
+ dimensions.push('daGas');
106
+ }
107
+ throw new OutOfGasError(dimensions);
103
108
  }
104
109
  // Otherwise, charge the corresponding gas
105
- for (const dimension of GAS_DIMENSIONS) {
106
- this[`${dimension}Left`] -= gasCost[dimension] ?? 0;
107
- }
110
+ this.l2GasLeft -= gasCost.l2Gas ?? 0;
111
+ this.daGasLeft -= gasCost.daGas ?? 0;
108
112
  }
109
113
 
110
114
  /** Increases the gas left by the amounts specified. */
111
115
  public refundGas(gasRefund: Partial<Gas>) {
112
- for (const dimension of GAS_DIMENSIONS) {
113
- this[`${dimension}Left`] += gasRefund[dimension] ?? 0;
114
- }
116
+ this.l2GasLeft += gasRefund.l2Gas ?? 0;
117
+ this.daGasLeft += gasRefund.daGas ?? 0;
115
118
  }
116
119
 
117
120
  /**
@@ -151,7 +154,8 @@ export class AvmMachineState {
151
154
  * Flag an exceptional halt. Clears gas left and sets the reverted flag. No output data.
152
155
  */
153
156
  private exceptionalHalt() {
154
- GAS_DIMENSIONS.forEach(dimension => (this[`${dimension}Left`] = 0));
157
+ this.l2GasLeft = 0;
158
+ this.daGasLeft = 0;
155
159
  this.reverted = true;
156
160
  this.halted = true;
157
161
  }
@@ -15,13 +15,7 @@ import { type FunctionsOf } from '@aztec/foundation/types';
15
15
 
16
16
  import { strict as assert } from 'assert';
17
17
 
18
- import {
19
- InstructionExecutionError,
20
- InvalidTagValueError,
21
- MemorySliceOutOfRangeError,
22
- TagCheckError,
23
- } from './errors.js';
24
- import { Addressing, AddressingMode } from './opcodes/addressing_mode.js';
18
+ import { InvalidTagValueError, MemorySliceOutOfRangeError, TagCheckError } from './errors.js';
25
19
 
26
20
  /** MemoryValue gathers the common operations for all memory types. */
27
21
  export abstract class MemoryValue {
@@ -251,22 +245,14 @@ export class TaggedMemory implements TaggedMemoryInterface {
251
245
  return TaggedMemory.MAX_MEMORY_SIZE;
252
246
  }
253
247
 
254
- /** Returns a MeteredTaggedMemory instance to track the number of reads and writes if TRACK_MEMORY_ACCESSES is set. */
255
- public track(type: string = 'instruction'): TaggedMemoryInterface {
256
- return TaggedMemory.TRACK_MEMORY_ACCESSES ? new MeteredTaggedMemory(this, type) : this;
257
- }
258
-
259
248
  public get(offset: number): MemoryValue {
260
- assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
261
- const value = this.getAs<MemoryValue>(offset);
262
- return value;
249
+ return this.getAs<MemoryValue>(offset);
263
250
  }
264
251
 
265
252
  public getAs<T>(offset: number): T {
266
- assert(Number.isInteger(offset));
267
- assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
253
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
268
254
  const word = this._mem.get(offset);
269
- TaggedMemory.log.trace(`get(${offset}) = ${word}`);
255
+ //TaggedMemory.log.trace(`get(${offset}) = ${word}`);
270
256
  if (word === undefined) {
271
257
  TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
272
258
  return new Field(0) as T;
@@ -300,10 +286,9 @@ export class TaggedMemory implements TaggedMemoryInterface {
300
286
  }
301
287
 
302
288
  public set(offset: number, v: MemoryValue) {
303
- assert(Number.isInteger(offset));
304
- assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
289
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
305
290
  this._mem.set(offset, v);
306
- TaggedMemory.log.trace(`set(${offset}, ${v})`);
291
+ //TaggedMemory.log.trace(`set(${offset}, ${v})`);
307
292
  }
308
293
 
309
294
  public setSlice(offset: number, slice: MemoryValue[]) {
@@ -320,8 +305,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
320
305
  }
321
306
 
322
307
  public getTag(offset: number): TypeTag {
323
- assert(Number.isInteger(offset));
324
- assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
308
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
325
309
  return TaggedMemory.getTag(this._mem.get(offset));
326
310
  }
327
311
 
@@ -340,25 +324,13 @@ export class TaggedMemory implements TaggedMemoryInterface {
340
324
  }
341
325
 
342
326
  public static checkIsIntegralTag(tag: TypeTag) {
343
- if (
344
- ![TypeTag.UINT1, TypeTag.UINT8, TypeTag.UINT16, TypeTag.UINT32, TypeTag.UINT64, TypeTag.UINT128].includes(tag)
345
- ) {
327
+ if (!INTEGRAL_TAGS.has(tag)) {
346
328
  throw TagCheckError.forTag(TypeTag[tag], 'integral');
347
329
  }
348
330
  }
349
331
 
350
332
  public static checkIsValidTag(tagNumber: number) {
351
- if (
352
- ![
353
- TypeTag.FIELD,
354
- TypeTag.UINT1,
355
- TypeTag.UINT8,
356
- TypeTag.UINT16,
357
- TypeTag.UINT32,
358
- TypeTag.UINT64,
359
- TypeTag.UINT128,
360
- ].includes(tagNumber)
361
- ) {
333
+ if (!VALID_TAGS.has(tagNumber)) {
362
334
  throw new InvalidTagValueError(tagNumber);
363
335
  }
364
336
  }
@@ -375,11 +347,9 @@ export class TaggedMemory implements TaggedMemoryInterface {
375
347
  /**
376
348
  * Check that all tags at the given offsets are the same.
377
349
  */
378
- public checkTagsAreSame(...offsets: number[]) {
379
- const tag = this.getTag(offsets[0]);
380
- for (let i = 1; i < offsets.length; i++) {
381
- this.checkTag(tag, offsets[i]);
382
- }
350
+ public checkTagsAreSame(offset0: number, offset1: number) {
351
+ const tag0 = this.getTag(offset0);
352
+ this.checkTag(tag0, offset1);
383
353
  }
384
354
 
385
355
  /**
@@ -391,32 +361,12 @@ export class TaggedMemory implements TaggedMemoryInterface {
391
361
  }
392
362
  }
393
363
 
394
- // TODO: this might be slow, but I don't want to have the types know of their tags.
395
- // It might be possible to have a map<Prototype, TypeTag>.
396
364
  public static getTag(v: MemoryValue | undefined): TypeTag {
397
- let tag = TypeTag.INVALID;
398
-
399
- // Not sure why, but using instanceof here doesn't work and leads odd behavior,
400
- // but using constructor.name does the job...
401
365
  if (v === undefined) {
402
- tag = TypeTag.FIELD; // uninitialized memory is Field(0)
403
- } else if (v.constructor.name == 'Field') {
404
- tag = TypeTag.FIELD;
405
- } else if (v.constructor.name == 'Uint1') {
406
- tag = TypeTag.UINT1;
407
- } else if (v.constructor.name == 'Uint8') {
408
- tag = TypeTag.UINT8;
409
- } else if (v.constructor.name == 'Uint16') {
410
- tag = TypeTag.UINT16;
411
- } else if (v.constructor.name == 'Uint32') {
412
- tag = TypeTag.UINT32;
413
- } else if (v.constructor.name == 'Uint64') {
414
- tag = TypeTag.UINT64;
415
- } else if (v.constructor.name == 'Uint128') {
416
- tag = TypeTag.UINT128;
366
+ return TypeTag.FIELD; // uninitialized memory is Field(0)
367
+ } else {
368
+ return TAG_FOR_MEM_VAL.get(v.constructor.name) ?? TypeTag.INVALID;
417
369
  }
418
-
419
- return tag;
420
370
  }
421
371
 
422
372
  // Truncates the value to fit the type.
@@ -441,123 +391,33 @@ export class TaggedMemory implements TaggedMemoryInterface {
441
391
  throw new InvalidTagValueError(tag);
442
392
  }
443
393
  }
444
-
445
- /** No-op. Implemented here for compatibility with the MeteredTaggedMemory. */
446
- public assert(_operations: Partial<MemoryOperations & { addressing: Addressing }>) {}
447
- }
448
-
449
- /** Tagged memory wrapper with metering for each memory read and write operation. */
450
- export class MeteredTaggedMemory implements TaggedMemoryInterface {
451
- private reads: number = 0;
452
- private writes: number = 0;
453
-
454
- constructor(private wrapped: TaggedMemory, private type: string = 'instruction') {}
455
-
456
- /** Returns the number of reads and writes tracked so far and resets them to zero. */
457
- public reset(): MemoryOperations {
458
- const stats = { reads: this.reads, writes: this.writes };
459
- this.reads = 0;
460
- this.writes = 0;
461
- return stats;
462
- }
463
-
464
- /**
465
- * Asserts that the exact number of memory operations have been performed.
466
- * Indirect represents the flags for indirect accesses: each bit set to one counts as an extra read.
467
- */
468
- public assert(operations: Partial<MemoryOperations & { addressing: Addressing }>) {
469
- const {
470
- reads: expectedReads,
471
- writes: expectedWrites,
472
- addressing,
473
- } = { reads: 0, writes: 0, addressing: new Addressing([]), ...operations };
474
-
475
- const totalExpectedReads =
476
- expectedReads + addressing.count(AddressingMode.INDIRECT) + addressing.count(AddressingMode.RELATIVE);
477
- const { reads: actualReads, writes: actualWrites } = this.reset();
478
- if (actualReads !== totalExpectedReads) {
479
- throw new InstructionExecutionError(
480
- `Incorrect number of memory reads for ${this.type}: expected ${totalExpectedReads} but executed ${actualReads}`,
481
- );
482
- }
483
- if (actualWrites !== expectedWrites) {
484
- throw new InstructionExecutionError(
485
- `Incorrect number of memory writes for ${this.type}: expected ${expectedWrites} but executed ${actualWrites}`,
486
- );
487
- }
488
- }
489
-
490
- public getMaxMemorySize(): number {
491
- return this.wrapped.getMaxMemorySize();
492
- }
493
-
494
- public track(type: string = 'instruction'): MeteredTaggedMemory {
495
- return new MeteredTaggedMemory(this.wrapped, type);
496
- }
497
-
498
- public get(offset: number): MemoryValue {
499
- this.reads++;
500
- return this.wrapped.get(offset);
501
- }
502
-
503
- public getSliceAs<T>(offset: number, size: number): T[] {
504
- this.reads += size;
505
- return this.wrapped.getSliceAs<T>(offset, size);
506
- }
507
-
508
- public getAs<T>(offset: number): T {
509
- this.reads++;
510
- return this.wrapped.getAs(offset);
511
- }
512
-
513
- public getSlice(offset: number, size: number): MemoryValue[] {
514
- this.reads += size;
515
- return this.wrapped.getSlice(offset, size);
516
- }
517
-
518
- public set(offset: number, v: MemoryValue): void {
519
- this.writes++;
520
- this.wrapped.set(offset, v);
521
- }
522
-
523
- public setSlice(offset: number, vs: MemoryValue[]): void {
524
- this.writes += vs.length;
525
- this.wrapped.setSlice(offset, vs);
526
- }
527
-
528
- public getSliceTags(offset: number, size: number): TypeTag[] {
529
- return this.wrapped.getSliceTags(offset, size);
530
- }
531
-
532
- public getTag(offset: number): TypeTag {
533
- return this.wrapped.getTag(offset);
534
- }
535
-
536
- public checkTag(tag: TypeTag, offset: number): void {
537
- this.wrapped.checkTag(tag, offset);
538
- }
539
-
540
- public checkIsValidMemoryOffsetTag(offset: number): void {
541
- this.wrapped.checkIsValidMemoryOffsetTag(offset);
542
- }
543
-
544
- public checkTags(tag: TypeTag, ...offsets: number[]): void {
545
- this.wrapped.checkTags(tag, ...offsets);
546
- }
547
-
548
- public checkTagsAreSame(...offsets: number[]): void {
549
- this.wrapped.checkTagsAreSame(...offsets);
550
- }
551
-
552
- public checkTagsRange(tag: TypeTag, startOffset: number, size: number): void {
553
- this.wrapped.checkTagsRange(tag, startOffset, size);
554
- }
555
394
  }
556
395
 
557
- /** Tracks number of memory reads and writes. */
558
- export type MemoryOperations = {
559
- /** How many total reads are performed. Slice reads are count as one per element. */
560
- reads: number;
561
- /** How many total writes are performed. Slice writes are count as one per element. */
562
- writes: number;
563
- };
396
+ const TAG_FOR_MEM_VAL = new Map<string, TypeTag>([
397
+ ['Field', TypeTag.FIELD],
398
+ ['Uint1', TypeTag.UINT1],
399
+ ['Uint8', TypeTag.UINT8],
400
+ ['Uint16', TypeTag.UINT16],
401
+ ['Uint32', TypeTag.UINT32],
402
+ ['Uint64', TypeTag.UINT64],
403
+ ['Uint128', TypeTag.UINT128],
404
+ ]);
405
+
406
+ const VALID_TAGS = new Set([
407
+ TypeTag.FIELD,
408
+ TypeTag.UINT1,
409
+ TypeTag.UINT8,
410
+ TypeTag.UINT16,
411
+ TypeTag.UINT32,
412
+ TypeTag.UINT64,
413
+ TypeTag.UINT128,
414
+ ]);
415
+
416
+ const INTEGRAL_TAGS = new Set([
417
+ TypeTag.UINT1,
418
+ TypeTag.UINT8,
419
+ TypeTag.UINT16,
420
+ TypeTag.UINT32,
421
+ TypeTag.UINT64,
422
+ TypeTag.UINT128,
423
+ ]);