@aztec/simulator 0.42.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dest/acvm/oracle/oracle.d.ts +5 -2
  2. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  3. package/dest/acvm/oracle/oracle.js +25 -8
  4. package/dest/acvm/oracle/typed_oracle.d.ts +7 -4
  5. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  6. package/dest/acvm/oracle/typed_oracle.js +14 -5
  7. package/dest/avm/avm_execution_environment.d.ts +2 -0
  8. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  9. package/dest/avm/avm_execution_environment.js +9 -4
  10. package/dest/avm/avm_gas.d.ts.map +1 -1
  11. package/dest/avm/avm_gas.js +3 -1
  12. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  13. package/dest/avm/avm_memory_types.js +2 -4
  14. package/dest/avm/avm_simulator.d.ts.map +1 -1
  15. package/dest/avm/avm_simulator.js +2 -3
  16. package/dest/avm/fixtures/index.d.ts +10 -3
  17. package/dest/avm/fixtures/index.d.ts.map +1 -1
  18. package/dest/avm/fixtures/index.js +9 -11
  19. package/dest/avm/journal/journal.d.ts +57 -66
  20. package/dest/avm/journal/journal.d.ts.map +1 -1
  21. package/dest/avm/journal/journal.js +97 -131
  22. package/dest/avm/journal/nullifiers.d.ts +21 -8
  23. package/dest/avm/journal/nullifiers.d.ts.map +1 -1
  24. package/dest/avm/journal/nullifiers.js +26 -8
  25. package/dest/avm/journal/public_storage.d.ts +4 -0
  26. package/dest/avm/journal/public_storage.d.ts.map +1 -1
  27. package/dest/avm/journal/public_storage.js +10 -1
  28. package/dest/avm/opcodes/accrued_substate.d.ts +2 -2
  29. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  30. package/dest/avm/opcodes/accrued_substate.js +39 -24
  31. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
  32. package/dest/avm/opcodes/arithmetic.js +12 -9
  33. package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
  34. package/dest/avm/opcodes/bitwise.js +11 -8
  35. package/dest/avm/opcodes/comparators.d.ts.map +1 -1
  36. package/dest/avm/opcodes/comparators.js +7 -5
  37. package/dest/avm/opcodes/contract.d.ts.map +1 -1
  38. package/dest/avm/opcodes/contract.js +20 -24
  39. package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
  40. package/dest/avm/opcodes/control_flow.js +4 -2
  41. package/dest/avm/opcodes/ec_add.d.ts +19 -0
  42. package/dest/avm/opcodes/ec_add.d.ts.map +1 -0
  43. package/dest/avm/opcodes/ec_add.js +78 -0
  44. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  45. package/dest/avm/opcodes/external_calls.js +19 -29
  46. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  47. package/dest/avm/opcodes/hashing.js +10 -2
  48. package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -1
  49. package/dest/avm/opcodes/instruction_impl.js +4 -2
  50. package/dest/avm/opcodes/memory.d.ts +1 -1
  51. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  52. package/dest/avm/opcodes/memory.js +14 -12
  53. package/dest/avm/opcodes/multi_scalar_mul.d.ts +16 -0
  54. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -0
  55. package/dest/avm/opcodes/multi_scalar_mul.js +95 -0
  56. package/dest/avm/opcodes/storage.d.ts +1 -1
  57. package/dest/avm/opcodes/storage.d.ts.map +1 -1
  58. package/dest/avm/opcodes/storage.js +11 -8
  59. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  60. package/dest/avm/serialization/bytecode_serialization.js +5 -1
  61. package/dest/avm/serialization/instruction_serialization.d.ts +3 -1
  62. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  63. package/dest/avm/serialization/instruction_serialization.js +4 -2
  64. package/dest/avm/test_utils.d.ts +14 -0
  65. package/dest/avm/test_utils.d.ts.map +1 -0
  66. package/dest/avm/test_utils.js +36 -0
  67. package/dest/client/client_execution_context.d.ts +17 -5
  68. package/dest/client/client_execution_context.d.ts.map +1 -1
  69. package/dest/client/client_execution_context.js +32 -18
  70. package/dest/client/execution_note_cache.d.ts.map +1 -1
  71. package/dest/client/execution_note_cache.js +1 -1
  72. package/dest/client/execution_result.d.ts +2 -1
  73. package/dest/client/execution_result.d.ts.map +1 -1
  74. package/dest/client/execution_result.js +1 -1
  75. package/dest/client/index.d.ts +2 -0
  76. package/dest/client/index.d.ts.map +1 -1
  77. package/dest/client/index.js +3 -1
  78. package/dest/client/simulator.d.ts +4 -3
  79. package/dest/client/simulator.d.ts.map +1 -1
  80. package/dest/client/simulator.js +17 -9
  81. package/dest/client/view_data_oracle.d.ts +2 -0
  82. package/dest/client/view_data_oracle.d.ts.map +1 -1
  83. package/dest/client/view_data_oracle.js +7 -1
  84. package/dest/mocks/fixtures.d.ts.map +1 -1
  85. package/dest/mocks/fixtures.js +3 -2
  86. package/dest/public/abstract_phase_manager.d.ts +11 -11
  87. package/dest/public/abstract_phase_manager.d.ts.map +1 -1
  88. package/dest/public/abstract_phase_manager.js +84 -59
  89. package/dest/public/app_logic_phase_manager.d.ts +3 -3
  90. package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
  91. package/dest/public/app_logic_phase_manager.js +4 -3
  92. package/dest/public/db_interfaces.d.ts +1 -0
  93. package/dest/public/db_interfaces.d.ts.map +1 -1
  94. package/dest/public/execution.d.ts +28 -40
  95. package/dest/public/execution.d.ts.map +1 -1
  96. package/dest/public/execution.js +1 -51
  97. package/dest/public/executor.d.ts +9 -4
  98. package/dest/public/executor.d.ts.map +1 -1
  99. package/dest/public/executor.js +38 -27
  100. package/dest/public/hints_builder.d.ts +1 -1
  101. package/dest/public/index.d.ts +6 -6
  102. package/dest/public/index.d.ts.map +1 -1
  103. package/dest/public/index.js +7 -7
  104. package/dest/public/phase_manager_factory.d.ts +3 -3
  105. package/dest/public/phase_manager_factory.d.ts.map +1 -1
  106. package/dest/public/phase_manager_factory.js +5 -5
  107. package/dest/public/public_db_sources.d.ts +3 -1
  108. package/dest/public/public_db_sources.d.ts.map +1 -1
  109. package/dest/public/public_db_sources.js +54 -8
  110. package/dest/public/public_processor.d.ts +5 -2
  111. package/dest/public/public_processor.d.ts.map +1 -1
  112. package/dest/public/public_processor.js +143 -125
  113. package/dest/public/setup_phase_manager.d.ts +3 -3
  114. package/dest/public/setup_phase_manager.d.ts.map +1 -1
  115. package/dest/public/setup_phase_manager.js +3 -3
  116. package/dest/public/side_effect_trace.d.ts +86 -0
  117. package/dest/public/side_effect_trace.d.ts.map +1 -0
  118. package/dest/public/side_effect_trace.js +222 -0
  119. package/dest/public/side_effect_trace_interface.d.ts +36 -0
  120. package/dest/public/side_effect_trace_interface.d.ts.map +1 -0
  121. package/dest/public/side_effect_trace_interface.js +2 -0
  122. package/dest/public/tail_phase_manager.d.ts +3 -3
  123. package/dest/public/tail_phase_manager.d.ts.map +1 -1
  124. package/dest/public/tail_phase_manager.js +3 -3
  125. package/dest/public/teardown_phase_manager.d.ts +3 -3
  126. package/dest/public/teardown_phase_manager.d.ts.map +1 -1
  127. package/dest/public/teardown_phase_manager.js +4 -3
  128. package/dest/public/transitional_adaptors.d.ts +2 -6
  129. package/dest/public/transitional_adaptors.d.ts.map +1 -1
  130. package/dest/public/transitional_adaptors.js +1 -43
  131. package/package.json +18 -9
  132. package/src/acvm/oracle/oracle.ts +46 -9
  133. package/src/acvm/oracle/typed_oracle.ts +37 -7
  134. package/src/avm/avm_execution_environment.ts +10 -3
  135. package/src/avm/avm_gas.ts +2 -0
  136. package/src/avm/avm_memory_types.ts +1 -3
  137. package/src/avm/avm_simulator.ts +2 -3
  138. package/src/avm/fixtures/index.ts +19 -14
  139. package/src/avm/journal/journal.ts +127 -231
  140. package/src/avm/journal/nullifiers.ts +30 -13
  141. package/src/avm/journal/public_storage.ts +10 -0
  142. package/src/avm/opcodes/accrued_substate.ts +60 -23
  143. package/src/avm/opcodes/arithmetic.ts +17 -8
  144. package/src/avm/opcodes/bitwise.ts +13 -8
  145. package/src/avm/opcodes/comparators.ts +9 -4
  146. package/src/avm/opcodes/contract.ts +22 -26
  147. package/src/avm/opcodes/control_flow.ts +3 -1
  148. package/src/avm/opcodes/ec_add.ts +92 -0
  149. package/src/avm/opcodes/external_calls.ts +20 -36
  150. package/src/avm/opcodes/hashing.ts +11 -1
  151. package/src/avm/opcodes/instruction_impl.ts +4 -1
  152. package/src/avm/opcodes/memory.ts +18 -11
  153. package/src/avm/opcodes/multi_scalar_mul.ts +114 -0
  154. package/src/avm/opcodes/storage.ts +10 -10
  155. package/src/avm/serialization/bytecode_serialization.ts +4 -0
  156. package/src/avm/serialization/instruction_serialization.ts +2 -0
  157. package/src/avm/test_utils.ts +53 -0
  158. package/src/client/client_execution_context.ts +55 -21
  159. package/src/client/execution_note_cache.ts +0 -1
  160. package/src/client/execution_result.ts +2 -1
  161. package/src/client/index.ts +2 -0
  162. package/src/client/simulator.ts +26 -10
  163. package/src/client/view_data_oracle.ts +8 -0
  164. package/src/mocks/fixtures.ts +2 -1
  165. package/src/public/abstract_phase_manager.ts +99 -70
  166. package/src/public/app_logic_phase_manager.ts +3 -2
  167. package/src/public/db_interfaces.ts +2 -0
  168. package/src/public/execution.ts +35 -94
  169. package/src/public/executor.ts +56 -40
  170. package/src/public/index.ts +6 -12
  171. package/src/public/phase_manager_factory.ts +6 -6
  172. package/src/public/public_db_sources.ts +62 -7
  173. package/src/public/public_processor.ts +15 -9
  174. package/src/public/setup_phase_manager.ts +2 -2
  175. package/src/public/side_effect_trace.ts +323 -0
  176. package/src/public/side_effect_trace_interface.ts +41 -0
  177. package/src/public/tail_phase_manager.ts +2 -2
  178. package/src/public/teardown_phase_manager.ts +3 -2
  179. package/src/public/transitional_adaptors.ts +2 -60
  180. package/dest/avm/journal/trace.d.ts +0 -33
  181. package/dest/avm/journal/trace.d.ts.map +0 -1
  182. package/dest/avm/journal/trace.js +0 -151
  183. package/dest/avm/journal/trace_types.d.ts +0 -51
  184. package/dest/avm/journal/trace_types.d.ts.map +0 -1
  185. package/dest/avm/journal/trace_types.js +0 -6
  186. package/dest/public/utils.d.ts +0 -8
  187. package/dest/public/utils.d.ts.map +0 -1
  188. package/dest/public/utils.js +0 -38
  189. package/src/avm/journal/trace.ts +0 -184
  190. package/src/avm/journal/trace_types.ts +0 -88
  191. package/src/public/utils.ts +0 -39
@@ -1,184 +0,0 @@
1
- import { AvmExecutionHints, AvmHint, Vector } from '@aztec/circuits.js';
2
- import { Fr } from '@aztec/foundation/fields';
3
-
4
- import {
5
- type TracedL1toL2MessageCheck,
6
- type TracedNoteHash,
7
- type TracedNoteHashCheck,
8
- type TracedNullifier,
9
- type TracedNullifierCheck,
10
- type TracedPublicStorageRead,
11
- type TracedPublicStorageWrite,
12
- type TracedUnencryptedL2Log,
13
- } from './trace_types.js';
14
-
15
- export class WorldStateAccessTrace {
16
- public accessCounter: number;
17
-
18
- public publicStorageReads: TracedPublicStorageRead[] = [];
19
- public publicStorageWrites: TracedPublicStorageWrite[] = [];
20
-
21
- public noteHashChecks: TracedNoteHashCheck[] = [];
22
- public newNoteHashes: TracedNoteHash[] = [];
23
- public nullifierChecks: TracedNullifierCheck[] = [];
24
- public newNullifiers: TracedNullifier[] = [];
25
- public l1ToL2MessageChecks: TracedL1toL2MessageCheck[] = [];
26
- public newLogsHashes: TracedUnencryptedL2Log[] = [];
27
-
28
- //public contractCalls: TracedContractCall[] = [];
29
- //public archiveChecks: TracedArchiveLeafCheck[] = [];
30
-
31
- constructor(parentTrace?: WorldStateAccessTrace) {
32
- this.accessCounter = parentTrace ? parentTrace.accessCounter : 0;
33
- // TODO(4805): consider tracking the parent's trace vector lengths so we can enforce limits
34
- }
35
-
36
- public getAccessCounter() {
37
- return this.accessCounter;
38
- }
39
-
40
- public tracePublicStorageRead(storageAddress: Fr, slot: Fr, value: Fr, exists: boolean, cached: boolean) {
41
- // TODO(4805): check if some threshold is reached for max storage reads
42
- // (need access to parent length, or trace needs to be initialized with parent's contents)
43
- const traced: TracedPublicStorageRead = {
44
- // callPointer: Fr.ZERO,
45
- storageAddress,
46
- slot,
47
- value,
48
- exists,
49
- cached,
50
- counter: new Fr(this.accessCounter),
51
- // endLifetime: Fr.ZERO,
52
- };
53
- this.publicStorageReads.push(traced);
54
- this.incrementAccessCounter();
55
- }
56
-
57
- public tracePublicStorageWrite(storageAddress: Fr, slot: Fr, value: Fr) {
58
- // TODO(4805): check if some threshold is reached for max storage writes
59
- // (need access to parent length, or trace needs to be initialized with parent's contents)
60
- const traced: TracedPublicStorageWrite = {
61
- // callPointer: Fr.ZERO,
62
- storageAddress,
63
- slot,
64
- value,
65
- counter: new Fr(this.accessCounter),
66
- // endLifetime: Fr.ZERO,
67
- };
68
- this.publicStorageWrites.push(traced);
69
- this.incrementAccessCounter();
70
- }
71
-
72
- public traceNoteHashCheck(storageAddress: Fr, noteHash: Fr, exists: boolean, leafIndex: Fr) {
73
- const traced: TracedNoteHashCheck = {
74
- // callPointer: Fr.ZERO,
75
- storageAddress,
76
- noteHash,
77
- exists,
78
- counter: new Fr(this.accessCounter),
79
- // endLifetime: Fr.ZERO,
80
- leafIndex,
81
- };
82
- this.noteHashChecks.push(traced);
83
- this.incrementAccessCounter();
84
- }
85
-
86
- public traceNewNoteHash(storageAddress: Fr, noteHash: Fr) {
87
- // TODO(4805): check if some threshold is reached for max new note hash
88
- const traced: TracedNoteHash = {
89
- // callPointer: Fr.ZERO,
90
- storageAddress,
91
- noteHash,
92
- counter: new Fr(this.accessCounter),
93
- // endLifetime: Fr.ZERO,
94
- };
95
- this.newNoteHashes.push(traced);
96
- this.incrementAccessCounter();
97
- }
98
-
99
- public traceNullifierCheck(storageAddress: Fr, nullifier: Fr, exists: boolean, isPending: boolean, leafIndex: Fr) {
100
- // TODO(4805): check if some threshold is reached for max new nullifier
101
- const traced: TracedNullifierCheck = {
102
- // callPointer: Fr.ZERO,
103
- storageAddress,
104
- nullifier,
105
- exists,
106
- counter: new Fr(this.accessCounter),
107
- // endLifetime: Fr.ZERO,
108
- isPending,
109
- leafIndex,
110
- };
111
- this.nullifierChecks.push(traced);
112
- this.incrementAccessCounter();
113
- }
114
-
115
- public traceNewNullifier(storageAddress: Fr, nullifier: Fr) {
116
- // TODO(4805): check if some threshold is reached for max new nullifier
117
- const tracedNullifier: TracedNullifier = {
118
- // callPointer: Fr.ZERO,
119
- storageAddress,
120
- nullifier,
121
- counter: new Fr(this.accessCounter),
122
- // endLifetime: Fr.ZERO,
123
- };
124
- this.newNullifiers.push(tracedNullifier);
125
- this.incrementAccessCounter();
126
- }
127
-
128
- public traceL1ToL2MessageCheck(msgHash: Fr, msgLeafIndex: Fr, exists: boolean) {
129
- // TODO(4805): check if some threshold is reached for max message reads
130
- const traced: TracedL1toL2MessageCheck = {
131
- //callPointer: Fr.ZERO, // FIXME
132
- leafIndex: msgLeafIndex,
133
- msgHash: msgHash,
134
- exists: exists,
135
- counter: new Fr(this.accessCounter),
136
- //endLifetime: Fr.ZERO, // FIXME
137
- };
138
- this.l1ToL2MessageChecks.push(traced);
139
- this.incrementAccessCounter();
140
- }
141
-
142
- public traceNewLog(logHash: Fr) {
143
- const traced: TracedUnencryptedL2Log = {
144
- logHash,
145
- counter: new Fr(this.accessCounter),
146
- };
147
- this.newLogsHashes.push(traced);
148
- this.incrementAccessCounter();
149
- }
150
-
151
- private incrementAccessCounter() {
152
- this.accessCounter++;
153
- }
154
-
155
- /**
156
- * Merges another trace into this one
157
- *
158
- * @param incomingTrace - the incoming trace to merge into this instance
159
- */
160
- public acceptAndMerge(incomingTrace: WorldStateAccessTrace) {
161
- // Merge storage read and write journals
162
- this.publicStorageReads.push(...incomingTrace.publicStorageReads);
163
- this.publicStorageWrites.push(...incomingTrace.publicStorageWrites);
164
- // Merge new note hashes and nullifiers
165
- this.noteHashChecks.push(...incomingTrace.noteHashChecks);
166
- this.newNoteHashes.push(...incomingTrace.newNoteHashes);
167
- this.nullifierChecks.push(...incomingTrace.nullifierChecks);
168
- this.newNullifiers.push(...incomingTrace.newNullifiers);
169
- this.l1ToL2MessageChecks.push(...incomingTrace.l1ToL2MessageChecks);
170
- this.newLogsHashes.push(...incomingTrace.newLogsHashes);
171
- // it is assumed that the incoming trace was initialized with this as parent, so accept counter
172
- this.accessCounter = incomingTrace.accessCounter;
173
- }
174
-
175
- // TODO(dbanks12): should only return hints for one call.... shouldn't include nested calls (merged in traces)
176
- public toHints(): AvmExecutionHints {
177
- return new AvmExecutionHints(
178
- new Vector(this.publicStorageReads.map(read => new AvmHint(read.counter, read.value))),
179
- new Vector(this.noteHashChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
180
- new Vector(this.nullifierChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
181
- new Vector(this.l1ToL2MessageChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
182
- );
183
- }
184
- }
@@ -1,88 +0,0 @@
1
- import { type Fr } from '@aztec/foundation/fields';
2
-
3
- //export type TracedContractCall = {
4
- // callPointer: Fr;
5
- // address: Fr;
6
- // storageAddress: Fr;
7
- // endLifetime: Fr;
8
- //};
9
-
10
- export type TracedPublicStorageRead = {
11
- // callPointer: Fr;
12
- storageAddress: Fr;
13
- exists: boolean;
14
- cached: boolean;
15
- slot: Fr;
16
- value: Fr;
17
- counter: Fr;
18
- // endLifetime: Fr;
19
- };
20
-
21
- export type TracedPublicStorageWrite = {
22
- // callPointer: Fr;
23
- storageAddress: Fr;
24
- slot: Fr;
25
- value: Fr;
26
- counter: Fr;
27
- // endLifetime: Fr;
28
- };
29
-
30
- export type TracedNoteHashCheck = {
31
- // callPointer: Fr;
32
- storageAddress: Fr;
33
- leafIndex: Fr;
34
- noteHash: Fr;
35
- exists: boolean;
36
- counter: Fr;
37
- // endLifetime: Fr;
38
- };
39
-
40
- export type TracedNoteHash = {
41
- // callPointer: Fr;
42
- storageAddress: Fr;
43
- noteHash: Fr;
44
- counter: Fr;
45
- // endLifetime: Fr;
46
- };
47
-
48
- export type TracedNullifierCheck = {
49
- // callPointer: Fr;
50
- storageAddress: Fr;
51
- nullifier: Fr;
52
- exists: boolean;
53
- counter: Fr;
54
- // endLifetime: Fr;
55
- // the fields below are relevant only to the public kernel
56
- // and are therefore omitted from VM inputs
57
- isPending: boolean;
58
- leafIndex: Fr;
59
- };
60
-
61
- export type TracedNullifier = {
62
- // callPointer: Fr;
63
- storageAddress: Fr;
64
- nullifier: Fr;
65
- counter: Fr;
66
- // endLifetime: Fr;
67
- };
68
-
69
- export type TracedL1toL2MessageCheck = {
70
- //callPointer: Fr;
71
- leafIndex: Fr;
72
- msgHash: Fr;
73
- exists: boolean;
74
- counter: Fr;
75
- //endLifetime: Fr;
76
- };
77
-
78
- export type TracedUnencryptedL2Log = {
79
- //callPointer: Fr;
80
- logHash: Fr;
81
- counter: Fr;
82
- //endLifetime: Fr;
83
- };
84
-
85
- //export type TracedArchiveLeafCheck = {
86
- // leafIndex: Fr;
87
- // leaf: Fr;
88
- //};
@@ -1,39 +0,0 @@
1
- import { type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
2
-
3
- /**
4
- * Looks at the side effects of a transaction and returns the highest counter
5
- * @param tx - A transaction
6
- * @returns The highest side effect counter in the transaction so far
7
- */
8
- export function lastSideEffectCounter(inputs: PublicKernelCircuitPublicInputs): number {
9
- const sideEffectCounters = [
10
- ...inputs.endNonRevertibleData.newNoteHashes,
11
- ...inputs.endNonRevertibleData.newNullifiers,
12
- ...inputs.endNonRevertibleData.noteEncryptedLogsHashes,
13
- ...inputs.endNonRevertibleData.encryptedLogsHashes,
14
- ...inputs.endNonRevertibleData.unencryptedLogsHashes,
15
- ...inputs.endNonRevertibleData.publicCallStack,
16
- ...inputs.endNonRevertibleData.publicDataUpdateRequests,
17
- ...inputs.end.newNoteHashes,
18
- ...inputs.end.newNullifiers,
19
- ...inputs.end.noteEncryptedLogsHashes,
20
- ...inputs.end.encryptedLogsHashes,
21
- ...inputs.end.unencryptedLogsHashes,
22
- ...inputs.end.publicCallStack,
23
- ...inputs.end.publicDataUpdateRequests,
24
- ];
25
-
26
- let max = 0;
27
- for (const sideEffect of sideEffectCounters) {
28
- if ('startSideEffectCounter' in sideEffect) {
29
- // look at both start and end counters because for enqueued public calls start > 0 while end === 0
30
- max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber());
31
- } else if ('counter' in sideEffect) {
32
- max = Math.max(max, sideEffect.counter);
33
- } else {
34
- throw new Error('Unknown side effect type');
35
- }
36
- }
37
-
38
- return max;
39
- }