@aztec/simulator 0.58.0 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dest/acvm/acvm.d.ts +1 -0
  2. package/dest/acvm/acvm.d.ts.map +1 -1
  3. package/dest/acvm/oracle/oracle.d.ts +3 -3
  4. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  5. package/dest/acvm/oracle/oracle.js +7 -7
  6. package/dest/acvm/oracle/typed_oracle.d.ts +4 -3
  7. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  8. package/dest/acvm/oracle/typed_oracle.js +4 -4
  9. package/dest/acvm/serialize.d.ts +1 -0
  10. package/dest/acvm/serialize.d.ts.map +1 -1
  11. package/dest/avm/avm_context.d.ts +1 -1
  12. package/dest/avm/avm_context.js +1 -1
  13. package/dest/avm/avm_execution_environment.d.ts +2 -5
  14. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  15. package/dest/avm/avm_execution_environment.js +7 -15
  16. package/dest/avm/avm_gas.d.ts.map +1 -1
  17. package/dest/avm/avm_gas.js +1 -8
  18. package/dest/avm/avm_memory_types.d.ts +1 -0
  19. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  20. package/dest/avm/avm_simulator.d.ts +1 -0
  21. package/dest/avm/avm_simulator.d.ts.map +1 -1
  22. package/dest/avm/bytecode_utils.d.ts +1 -0
  23. package/dest/avm/bytecode_utils.d.ts.map +1 -1
  24. package/dest/avm/fixtures/index.d.ts +3 -0
  25. package/dest/avm/fixtures/index.d.ts.map +1 -1
  26. package/dest/avm/fixtures/index.js +8 -2
  27. package/dest/avm/journal/journal.d.ts +14 -13
  28. package/dest/avm/journal/journal.d.ts.map +1 -1
  29. package/dest/avm/journal/journal.js +33 -33
  30. package/dest/avm/journal/nullifiers.d.ts +9 -9
  31. package/dest/avm/journal/nullifiers.d.ts.map +1 -1
  32. package/dest/avm/journal/nullifiers.js +24 -24
  33. package/dest/avm/journal/public_storage.d.ts +10 -10
  34. package/dest/avm/journal/public_storage.d.ts.map +1 -1
  35. package/dest/avm/journal/public_storage.js +21 -21
  36. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  37. package/dest/avm/opcodes/accrued_substate.js +5 -5
  38. package/dest/avm/opcodes/environment_getters.d.ts +12 -13
  39. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  40. package/dest/avm/opcodes/environment_getters.js +13 -16
  41. package/dest/avm/opcodes/hashing.d.ts +2 -26
  42. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  43. package/dest/avm/opcodes/hashing.js +11 -95
  44. package/dest/avm/opcodes/index.d.ts +0 -1
  45. package/dest/avm/opcodes/index.d.ts.map +1 -1
  46. package/dest/avm/opcodes/index.js +1 -2
  47. package/dest/avm/opcodes/instruction.d.ts +1 -0
  48. package/dest/avm/opcodes/instruction.d.ts.map +1 -1
  49. package/dest/avm/opcodes/storage.js +3 -3
  50. package/dest/avm/serialization/buffer_cursor.d.ts +1 -0
  51. package/dest/avm/serialization/buffer_cursor.d.ts.map +1 -1
  52. package/dest/avm/serialization/bytecode_serialization.d.ts +1 -0
  53. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  54. package/dest/avm/serialization/bytecode_serialization.js +2 -6
  55. package/dest/avm/serialization/instruction_serialization.d.ts +11 -14
  56. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  57. package/dest/avm/serialization/instruction_serialization.js +11 -15
  58. package/dest/avm/test_utils.d.ts +1 -0
  59. package/dest/avm/test_utils.d.ts.map +1 -1
  60. package/dest/client/client_execution_context.d.ts +9 -10
  61. package/dest/client/client_execution_context.d.ts.map +1 -1
  62. package/dest/client/client_execution_context.js +30 -33
  63. package/dest/client/private_execution.d.ts.map +1 -1
  64. package/dest/client/private_execution.js +3 -4
  65. package/dest/client/simulator.d.ts.map +1 -1
  66. package/dest/client/simulator.js +3 -3
  67. package/dest/mocks/fixtures.js +2 -2
  68. package/dest/providers/acvm_native.d.ts +1 -0
  69. package/dest/providers/acvm_native.d.ts.map +1 -1
  70. package/dest/public/db_interfaces.d.ts +1 -0
  71. package/dest/public/db_interfaces.d.ts.map +1 -1
  72. package/dest/public/dual_side_effect_trace.d.ts +7 -6
  73. package/dest/public/dual_side_effect_trace.d.ts.map +1 -1
  74. package/dest/public/dual_side_effect_trace.js +19 -19
  75. package/dest/public/enqueued_call_side_effect_trace.d.ts +7 -6
  76. package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
  77. package/dest/public/enqueued_call_side_effect_trace.js +15 -17
  78. package/dest/public/enqueued_call_simulator.d.ts +1 -1
  79. package/dest/public/enqueued_call_simulator.d.ts.map +1 -1
  80. package/dest/public/enqueued_call_simulator.js +11 -12
  81. package/dest/public/enqueued_calls_processor.d.ts.map +1 -1
  82. package/dest/public/enqueued_calls_processor.js +2 -2
  83. package/dest/public/execution.d.ts +1 -0
  84. package/dest/public/execution.d.ts.map +1 -1
  85. package/dest/public/execution.js +2 -2
  86. package/dest/public/executor.d.ts.map +1 -1
  87. package/dest/public/executor.js +6 -5
  88. package/dest/public/public_db_sources.d.ts +1 -0
  89. package/dest/public/public_db_sources.d.ts.map +1 -1
  90. package/dest/public/side_effect_trace.d.ts +7 -6
  91. package/dest/public/side_effect_trace.d.ts.map +1 -1
  92. package/dest/public/side_effect_trace.js +14 -15
  93. package/dest/public/side_effect_trace_interface.d.ts +7 -6
  94. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  95. package/package.json +9 -9
  96. package/src/acvm/oracle/oracle.ts +0 -6
  97. package/src/acvm/oracle/typed_oracle.ts +0 -3
  98. package/src/avm/avm_context.ts +1 -1
  99. package/src/avm/avm_execution_environment.ts +0 -15
  100. package/src/avm/avm_gas.ts +0 -7
  101. package/src/avm/fixtures/index.ts +7 -2
  102. package/src/avm/journal/journal.ts +32 -32
  103. package/src/avm/journal/nullifiers.ts +23 -23
  104. package/src/avm/journal/public_storage.ts +20 -20
  105. package/src/avm/opcodes/accrued_substate.ts +4 -8
  106. package/src/avm/opcodes/environment_getters.ts +0 -3
  107. package/src/avm/opcodes/hashing.ts +9 -122
  108. package/src/avm/opcodes/index.ts +0 -1
  109. package/src/avm/opcodes/storage.ts +2 -2
  110. package/src/avm/serialization/bytecode_serialization.ts +0 -7
  111. package/src/avm/serialization/instruction_serialization.ts +0 -4
  112. package/src/client/client_execution_context.ts +21 -44
  113. package/src/client/private_execution.ts +1 -9
  114. package/src/client/simulator.ts +0 -2
  115. package/src/mocks/fixtures.ts +1 -1
  116. package/src/public/dual_side_effect_trace.ts +18 -18
  117. package/src/public/enqueued_call_side_effect_trace.ts +14 -20
  118. package/src/public/enqueued_call_simulator.ts +10 -23
  119. package/src/public/enqueued_calls_processor.ts +1 -3
  120. package/src/public/execution.ts +1 -1
  121. package/src/public/executor.ts +11 -5
  122. package/src/public/side_effect_trace.ts +19 -14
  123. package/src/public/side_effect_trace_interface.ts +6 -6
  124. package/dest/avm/opcodes/commitment.d.ts +0 -16
  125. package/dest/avm/opcodes/commitment.d.ts.map +0 -1
  126. package/dest/avm/opcodes/commitment.js +0 -51
  127. package/src/avm/opcodes/commitment.ts +0 -65
@@ -92,13 +92,13 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
92
92
 
93
93
  // TODO(dbanks12): checks against tx-wide limit need access to parent trace's length
94
94
 
95
- public tracePublicStorageRead(storageAddress: Fr, slot: Fr, value: Fr, _exists: boolean, _cached: boolean) {
95
+ public tracePublicStorageRead(contractAddress: Fr, slot: Fr, value: Fr, _exists: boolean, _cached: boolean) {
96
96
  // NOTE: exists and cached are unused for now but may be used for optimizations or kernel hints later
97
97
  if (this.contractStorageReads.length >= MAX_PUBLIC_DATA_READS_PER_TX) {
98
98
  throw new SideEffectLimitReachedError('contract storage read', MAX_PUBLIC_DATA_READS_PER_TX);
99
99
  }
100
100
  this.contractStorageReads.push(
101
- new ContractStorageRead(slot, value, this.sideEffectCounter, AztecAddress.fromField(storageAddress)),
101
+ new ContractStorageRead(slot, value, this.sideEffectCounter, AztecAddress.fromField(contractAddress)),
102
102
  );
103
103
  this.avmCircuitHints.storageValues.items.push(
104
104
  new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ value),
@@ -107,20 +107,20 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
107
107
  this.incrementSideEffectCounter();
108
108
  }
109
109
 
110
- public tracePublicStorageWrite(storageAddress: Fr, slot: Fr, value: Fr) {
110
+ public tracePublicStorageWrite(contractAddress: Fr, slot: Fr, value: Fr) {
111
111
  if (this.contractStorageUpdateRequests.length >= MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
112
112
  throw new SideEffectLimitReachedError('contract storage write', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
113
113
  }
114
114
  this.contractStorageUpdateRequests.push(
115
- new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, storageAddress),
115
+ new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, contractAddress),
116
116
  );
117
117
  this.logger.debug(`SSTORE cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
118
118
  this.incrementSideEffectCounter();
119
119
  }
120
120
 
121
121
  // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
122
- public traceNoteHashCheck(_storageAddress: Fr, noteHash: Fr, leafIndex: Fr, exists: boolean) {
123
- // NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
122
+ public traceNoteHashCheck(_contractAddress: Fr, noteHash: Fr, leafIndex: Fr, exists: boolean) {
123
+ // NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
124
124
  if (this.noteHashReadRequests.length >= MAX_NOTE_HASH_READ_REQUESTS_PER_TX) {
125
125
  throw new SideEffectLimitReachedError('note hash read request', MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
126
126
  }
@@ -131,7 +131,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
131
131
  // NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
132
132
  }
133
133
 
134
- public traceNewNoteHash(_storageAddress: Fr, noteHash: Fr) {
134
+ public traceNewNoteHash(_contractAddress: Fr, noteHash: Fr) {
135
135
  if (this.noteHashes.length >= MAX_NOTE_HASHES_PER_TX) {
136
136
  throw new SideEffectLimitReachedError('note hash', MAX_NOTE_HASHES_PER_TX);
137
137
  }
@@ -140,8 +140,14 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
140
140
  this.incrementSideEffectCounter();
141
141
  }
142
142
 
143
- public traceNullifierCheck(_storageAddress: Fr, nullifier: Fr, _leafIndex: Fr, exists: boolean, _isPending: boolean) {
144
- // NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
143
+ public traceNullifierCheck(
144
+ _contractAddress: Fr,
145
+ nullifier: Fr,
146
+ _leafIndex: Fr,
147
+ exists: boolean,
148
+ _isPending: boolean,
149
+ ) {
150
+ // NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
145
151
  // NOTE: isPending and leafIndex are unused for now but may be used for optimizations or kernel hints later
146
152
 
147
153
  this.enforceLimitOnNullifierChecks();
@@ -159,8 +165,8 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
159
165
  this.incrementSideEffectCounter();
160
166
  }
161
167
 
162
- public traceNewNullifier(_storageAddress: Fr, nullifier: Fr) {
163
- // NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
168
+ public traceNewNullifier(_contractAddress: Fr, nullifier: Fr) {
169
+ // NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
164
170
  if (this.nullifiers.length >= MAX_NULLIFIERS_PER_TX) {
165
171
  throw new SideEffectLimitReachedError('nullifier', MAX_NULLIFIERS_PER_TX);
166
172
  }
@@ -369,10 +375,9 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
369
375
  function createPublicExecutionRequest(avmEnvironment: AvmExecutionEnvironment): PublicExecutionRequest {
370
376
  const callContext = CallContext.from({
371
377
  msgSender: avmEnvironment.sender,
372
- storageContractAddress: avmEnvironment.storageAddress,
378
+ contractAddress: avmEnvironment.address,
373
379
  functionSelector: avmEnvironment.functionSelector,
374
- isDelegateCall: avmEnvironment.isDelegateCall,
375
380
  isStaticCall: avmEnvironment.isStaticCall,
376
381
  });
377
- return new PublicExecutionRequest(avmEnvironment.address, callContext, avmEnvironment.calldata);
382
+ return new PublicExecutionRequest(callContext, avmEnvironment.calldata);
378
383
  }
@@ -9,12 +9,12 @@ export interface PublicSideEffectTraceInterface {
9
9
  fork(): PublicSideEffectTraceInterface;
10
10
  getCounter(): number;
11
11
  // all "trace*" functions can throw SideEffectLimitReachedError
12
- tracePublicStorageRead(storageAddress: Fr, slot: Fr, value: Fr, exists: boolean, cached: boolean): void;
13
- tracePublicStorageWrite(storageAddress: Fr, slot: Fr, value: Fr): void;
14
- traceNoteHashCheck(storageAddress: Fr, noteHash: Fr, leafIndex: Fr, exists: boolean): void;
15
- traceNewNoteHash(storageAddress: Fr, noteHash: Fr): void;
16
- traceNullifierCheck(storageAddress: Fr, nullifier: Fr, leafIndex: Fr, exists: boolean, isPending: boolean): void;
17
- traceNewNullifier(storageAddress: Fr, nullifier: Fr): void;
12
+ tracePublicStorageRead(contractAddress: Fr, slot: Fr, value: Fr, exists: boolean, cached: boolean): void;
13
+ tracePublicStorageWrite(contractAddress: Fr, slot: Fr, value: Fr): void;
14
+ traceNoteHashCheck(contractAddress: Fr, noteHash: Fr, leafIndex: Fr, exists: boolean): void;
15
+ traceNewNoteHash(contractAddress: Fr, noteHash: Fr): void;
16
+ traceNullifierCheck(contractAddress: Fr, nullifier: Fr, leafIndex: Fr, exists: boolean, isPending: boolean): void;
17
+ traceNewNullifier(contractAddress: Fr, nullifier: Fr): void;
18
18
  traceL1ToL2MessageCheck(contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr, exists: boolean): void;
19
19
  traceNewL2ToL1Message(contractAddress: Fr, recipient: Fr, content: Fr): void;
20
20
  traceUnencryptedLog(contractAddress: Fr, log: Fr[]): void;
@@ -1,16 +0,0 @@
1
- import { type AvmContext } from '../avm_context.js';
2
- import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
3
- import { Instruction } from './instruction.js';
4
- export declare class PedersenCommitment extends Instruction {
5
- private indirect;
6
- private inputOffset;
7
- private outputOffset;
8
- private inputSizeOffset;
9
- private genIndexOffset;
10
- static type: string;
11
- static readonly opcode: Opcode;
12
- static readonly wireFormat: OperandType[];
13
- constructor(indirect: number, inputOffset: number, outputOffset: number, inputSizeOffset: number, genIndexOffset: number);
14
- execute(context: AvmContext): Promise<void>;
15
- }
16
- //# sourceMappingURL=commitment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commitment.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/commitment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,kBAAmB,SAAQ,WAAW;IAe/C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IAlBxB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAwB;IAC3C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA6B;IAG3D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAOvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM;IAKnB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAgCzD"}
@@ -1,51 +0,0 @@
1
- import { pedersenCommit } from '@aztec/foundation/crypto';
2
- import { Field, TypeTag, Uint8 } from '../avm_memory_types.js';
3
- import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
4
- import { Addressing } from './addressing_mode.js';
5
- import { Instruction } from './instruction.js';
6
- export class PedersenCommitment extends Instruction {
7
- constructor(indirect, inputOffset, outputOffset, inputSizeOffset, genIndexOffset) {
8
- super();
9
- this.indirect = indirect;
10
- this.inputOffset = inputOffset;
11
- this.outputOffset = outputOffset;
12
- this.inputSizeOffset = inputSizeOffset;
13
- this.genIndexOffset = genIndexOffset;
14
- }
15
- async execute(context) {
16
- const memory = context.machineState.memory.track(this.type);
17
- const operands = [this.inputOffset, this.outputOffset, this.inputSizeOffset, this.genIndexOffset];
18
- const addressing = Addressing.fromWire(this.indirect, operands.length);
19
- const [inputOffset, outputOffset, inputSizeOffset, genIndexOffset] = addressing.resolve(operands, memory);
20
- const inputSize = memory.get(inputSizeOffset).toNumber();
21
- memory.checkTag(TypeTag.UINT32, inputSizeOffset);
22
- const inputs = memory.getSlice(inputOffset, inputSize);
23
- memory.checkTagsRange(TypeTag.FIELD, inputOffset, inputSize);
24
- const generatorIndex = memory.get(genIndexOffset).toNumber();
25
- memory.checkTag(TypeTag.UINT32, genIndexOffset);
26
- context.machineState.consumeGas(this.gasCost(inputSize));
27
- const inputBuffer = inputs.map(input => input.toBuffer());
28
- // TODO: Add the generate index to the pedersenCommit function
29
- const commitment = pedersenCommit(inputBuffer, generatorIndex).map(f => new Field(f));
30
- // The function doesnt include a flag if the output point is infinity, come back to this
31
- // for now we just check if theyre zero - until we know how bb encodes them
32
- const isInfinity = commitment[0].equals(new Field(0)) && commitment[1].equals(new Field(0));
33
- memory.set(outputOffset, commitment[0]); // Field typed
34
- memory.set(outputOffset + 1, commitment[1]); // Field typed
35
- memory.set(outputOffset + 2, new Uint8(isInfinity ? 1 : 0)); // U8 typed
36
- memory.assert({ reads: inputSize + 2, writes: 3, addressing });
37
- context.machineState.incrementPc();
38
- }
39
- }
40
- PedersenCommitment.type = 'PEDERSENCOMMITMENT';
41
- PedersenCommitment.opcode = Opcode.PEDERSENCOMMITMENT;
42
- // Informs (de)serialization. See Instruction.deserialize.
43
- PedersenCommitment.wireFormat = [
44
- OperandType.UINT8 /* Opcode */,
45
- OperandType.UINT8 /* Indirect */,
46
- OperandType.UINT32 /* Input Offset*/,
47
- OperandType.UINT32 /* Dst Offset */,
48
- OperandType.UINT32 /* Input Size Offset */,
49
- OperandType.UINT32 /* Generator Index Offset */,
50
- ];
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9jb21taXRtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFjakQsWUFDVSxRQUFnQixFQUNoQixXQUFtQixFQUNuQixZQUFvQixFQUNwQixlQUF1QixFQUN2QixjQUFzQjtRQUU5QixLQUFLLEVBQUUsQ0FBQztRQU5BLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDdkIsbUJBQWMsR0FBZCxjQUFjLENBQVE7SUFHaEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1RCxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxD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
@@ -1,65 +0,0 @@
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
-
36
- const operands = [this.inputOffset, this.outputOffset, this.inputSizeOffset, this.genIndexOffset];
37
- const addressing = Addressing.fromWire(this.indirect, operands.length);
38
- const [inputOffset, outputOffset, inputSizeOffset, genIndexOffset] = addressing.resolve(operands, memory);
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
- const generatorIndex = memory.get(genIndexOffset).toNumber();
47
- memory.checkTag(TypeTag.UINT32, genIndexOffset);
48
-
49
- context.machineState.consumeGas(this.gasCost(inputSize));
50
-
51
- const inputBuffer: Buffer[] = inputs.map(input => input.toBuffer());
52
- // TODO: Add the generate index to the pedersenCommit function
53
- const commitment = pedersenCommit(inputBuffer, generatorIndex).map(f => new Field(f));
54
- // The function doesnt include a flag if the output point is infinity, come back to this
55
- // for now we just check if theyre zero - until we know how bb encodes them
56
- const isInfinity = commitment[0].equals(new Field(0)) && commitment[1].equals(new Field(0));
57
-
58
- memory.set(outputOffset, commitment[0]); // Field typed
59
- memory.set(outputOffset + 1, commitment[1]); // Field typed
60
- memory.set(outputOffset + 2, new Uint8(isInfinity ? 1 : 0)); // U8 typed
61
-
62
- memory.assert({ reads: inputSize + 2, writes: 3, addressing });
63
- context.machineState.incrementPc();
64
- }
65
- }