@aztec/simulator 0.66.0 → 0.67.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 (125) hide show
  1. package/dest/acvm/acvm.js +3 -3
  2. package/dest/acvm/oracle/oracle.d.ts +1 -1
  3. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  4. package/dest/acvm/oracle/oracle.js +3 -3
  5. package/dest/acvm/oracle/typed_oracle.d.ts +2 -2
  6. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  7. package/dest/acvm/oracle/typed_oracle.js +3 -3
  8. package/dest/acvm/serialize.js +2 -2
  9. package/dest/avm/avm_context.d.ts +2 -2
  10. package/dest/avm/avm_context.d.ts.map +1 -1
  11. package/dest/avm/avm_context.js +3 -4
  12. package/dest/avm/avm_execution_environment.d.ts +4 -6
  13. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  14. package/dest/avm/avm_execution_environment.js +8 -13
  15. package/dest/avm/avm_memory_types.d.ts +2 -2
  16. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  17. package/dest/avm/avm_memory_types.js +3 -3
  18. package/dest/avm/avm_simulator.d.ts +3 -3
  19. package/dest/avm/avm_simulator.d.ts.map +1 -1
  20. package/dest/avm/avm_simulator.js +22 -13
  21. package/dest/avm/errors.d.ts +3 -3
  22. package/dest/avm/errors.d.ts.map +1 -1
  23. package/dest/avm/errors.js +8 -15
  24. package/dest/avm/fixtures/index.d.ts.map +1 -1
  25. package/dest/avm/fixtures/index.js +4 -4
  26. package/dest/avm/journal/journal.d.ts +15 -4
  27. package/dest/avm/journal/journal.d.ts.map +1 -1
  28. package/dest/avm/journal/journal.js +108 -29
  29. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  30. package/dest/avm/opcodes/external_calls.js +4 -11
  31. package/dest/avm/opcodes/misc.d.ts.map +1 -1
  32. package/dest/avm/opcodes/misc.js +3 -3
  33. package/dest/client/client_execution_context.d.ts +3 -3
  34. package/dest/client/client_execution_context.d.ts.map +1 -1
  35. package/dest/client/client_execution_context.js +14 -8
  36. package/dest/client/db_oracle.d.ts +2 -2
  37. package/dest/client/db_oracle.d.ts.map +1 -1
  38. package/dest/client/execution_note_cache.d.ts +9 -1
  39. package/dest/client/execution_note_cache.d.ts.map +1 -1
  40. package/dest/client/execution_note_cache.js +10 -3
  41. package/dest/client/private_execution.d.ts.map +1 -1
  42. package/dest/client/private_execution.js +4 -4
  43. package/dest/client/simulator.d.ts.map +1 -1
  44. package/dest/client/simulator.js +4 -4
  45. package/dest/client/unconstrained_execution.d.ts.map +1 -1
  46. package/dest/client/unconstrained_execution.js +3 -3
  47. package/dest/client/view_data_oracle.d.ts +2 -2
  48. package/dest/client/view_data_oracle.d.ts.map +1 -1
  49. package/dest/client/view_data_oracle.js +5 -6
  50. package/dest/common/debug_fn_name.d.ts +2 -2
  51. package/dest/common/debug_fn_name.d.ts.map +1 -1
  52. package/dest/common/debug_fn_name.js +8 -14
  53. package/dest/providers/acvm_native.js +4 -4
  54. package/dest/providers/factory.d.ts +2 -2
  55. package/dest/providers/factory.d.ts.map +1 -1
  56. package/dest/providers/factory.js +4 -4
  57. package/dest/public/enqueued_call_side_effect_trace.d.ts +11 -23
  58. package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
  59. package/dest/public/enqueued_call_side_effect_trace.js +37 -58
  60. package/dest/public/executor_metrics.d.ts.map +1 -1
  61. package/dest/public/executor_metrics.js +2 -5
  62. package/dest/public/fixtures/index.d.ts +24 -1
  63. package/dest/public/fixtures/index.d.ts.map +1 -1
  64. package/dest/public/fixtures/index.js +15 -9
  65. package/dest/public/index.d.ts +0 -1
  66. package/dest/public/index.d.ts.map +1 -1
  67. package/dest/public/index.js +1 -2
  68. package/dest/public/public_db_sources.d.ts.map +1 -1
  69. package/dest/public/public_db_sources.js +4 -4
  70. package/dest/public/public_processor.d.ts +7 -8
  71. package/dest/public/public_processor.d.ts.map +1 -1
  72. package/dest/public/public_processor.js +30 -22
  73. package/dest/public/public_tx_context.d.ts +13 -10
  74. package/dest/public/public_tx_context.d.ts.map +1 -1
  75. package/dest/public/public_tx_context.js +46 -31
  76. package/dest/public/public_tx_simulator.d.ts +2 -2
  77. package/dest/public/public_tx_simulator.d.ts.map +1 -1
  78. package/dest/public/public_tx_simulator.js +43 -23
  79. package/dest/public/side_effect_trace_interface.d.ts +4 -17
  80. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  81. package/dest/public/transitional_adapters.d.ts +2 -2
  82. package/dest/public/transitional_adapters.d.ts.map +1 -1
  83. package/dest/public/transitional_adapters.js +28 -24
  84. package/package.json +16 -9
  85. package/src/acvm/acvm.ts +2 -2
  86. package/src/acvm/oracle/oracle.ts +2 -2
  87. package/src/acvm/oracle/typed_oracle.ts +3 -3
  88. package/src/acvm/serialize.ts +1 -1
  89. package/src/avm/avm_context.ts +2 -3
  90. package/src/avm/avm_execution_environment.ts +6 -31
  91. package/src/avm/avm_memory_types.ts +2 -2
  92. package/src/avm/avm_simulator.ts +24 -20
  93. package/src/avm/errors.ts +12 -14
  94. package/src/avm/fixtures/index.ts +2 -3
  95. package/src/avm/journal/journal.ts +189 -63
  96. package/src/avm/opcodes/external_calls.ts +3 -19
  97. package/src/avm/opcodes/misc.ts +2 -2
  98. package/src/client/client_execution_context.ts +17 -9
  99. package/src/client/db_oracle.ts +2 -2
  100. package/src/client/execution_note_cache.ts +13 -3
  101. package/src/client/private_execution.ts +3 -3
  102. package/src/client/simulator.ts +4 -4
  103. package/src/client/unconstrained_execution.ts +2 -2
  104. package/src/client/view_data_oracle.ts +5 -6
  105. package/src/common/debug_fn_name.ts +7 -13
  106. package/src/providers/acvm_native.ts +3 -3
  107. package/src/providers/factory.ts +3 -3
  108. package/src/public/enqueued_call_side_effect_trace.ts +54 -74
  109. package/src/public/executor_metrics.ts +0 -4
  110. package/src/public/fixtures/index.ts +23 -10
  111. package/src/public/index.ts +0 -1
  112. package/src/public/public_db_sources.ts +3 -3
  113. package/src/public/public_processor.ts +46 -47
  114. package/src/public/public_tx_context.ts +52 -32
  115. package/src/public/public_tx_simulator.ts +58 -38
  116. package/src/public/side_effect_trace_interface.ts +8 -15
  117. package/src/public/transitional_adapters.ts +39 -24
  118. package/dest/public/dual_side_effect_trace.d.ts +0 -77
  119. package/dest/public/dual_side_effect_trace.d.ts.map +0 -1
  120. package/dest/public/dual_side_effect_trace.js +0 -119
  121. package/dest/public/side_effect_trace.d.ts +0 -96
  122. package/dest/public/side_effect_trace.d.ts.map +0 -1
  123. package/dest/public/side_effect_trace.js +0 -309
  124. package/src/public/dual_side_effect_trace.ts +0 -242
  125. package/src/public/side_effect_trace.ts +0 -536
@@ -1,309 +0,0 @@
1
- import { PublicExecutionRequest, UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
2
- import { AvmAppendTreeHint, AvmContractBytecodeHints, AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, AvmNullifierReadTreeHint, AvmNullifierWriteTreeHint, AvmPublicDataReadTreeHint, AvmPublicDataWriteTreeHint, CallContext, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, Gas, L1_TO_L2_MSG_TREE_HEIGHT, L2ToL1Message, LogHash, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_TX, NOTE_HASH_TREE_HEIGHT, NULLIFIER_TREE_HEIGHT, NoteHash, Nullifier, NullifierLeafPreimage, PUBLIC_DATA_TREE_HEIGHT, PublicDataTreeLeafPreimage, ReadRequest, SerializableContractInstance, TreeLeafReadRequest, } from '@aztec/circuits.js';
3
- import { Fr } from '@aztec/foundation/fields';
4
- import { jsonStringify } from '@aztec/foundation/json-rpc';
5
- import { createDebugLogger } from '@aztec/foundation/log';
6
- import { assert } from 'console';
7
- import { resultToPublicCallRequest, } from './execution.js';
8
- import { SideEffectLimitReachedError } from './side_effect_errors.js';
9
- const emptyPublicDataPath = () => new Array(PUBLIC_DATA_TREE_HEIGHT).fill(Fr.zero());
10
- const emptyNoteHashPath = () => new Array(NOTE_HASH_TREE_HEIGHT).fill(Fr.zero());
11
- const emptyNullifierPath = () => new Array(NULLIFIER_TREE_HEIGHT).fill(Fr.zero());
12
- const emptyL1ToL2MessagePath = () => new Array(L1_TO_L2_MSG_TREE_HEIGHT).fill(Fr.zero());
13
- export class PublicSideEffectTrace {
14
- constructor(
15
- /** The counter of this trace's first side effect. */
16
- startSideEffectCounter = 0) {
17
- this.startSideEffectCounter = startSideEffectCounter;
18
- this.log = createDebugLogger('aztec:public_side_effect_trace');
19
- this.contractStorageReads = [];
20
- this.contractStorageUpdateRequests = [];
21
- this.noteHashReadRequests = [];
22
- this.noteHashes = [];
23
- this.nullifierReadRequests = [];
24
- this.nullifierNonExistentReadRequests = [];
25
- this.nullifiers = [];
26
- this.l1ToL2MsgReadRequests = [];
27
- this.newL2ToL1Messages = [];
28
- this.unencryptedLogs = [];
29
- this.allUnencryptedLogs = [];
30
- this.unencryptedLogsHashes = [];
31
- this.publicCallRequests = [];
32
- this.nestedExecutions = [];
33
- this.sideEffectCounter = startSideEffectCounter;
34
- this.avmCircuitHints = AvmExecutionHints.empty();
35
- }
36
- fork() {
37
- return new PublicSideEffectTrace(this.sideEffectCounter);
38
- }
39
- getCounter() {
40
- return this.sideEffectCounter;
41
- }
42
- incrementSideEffectCounter() {
43
- this.sideEffectCounter++;
44
- }
45
- tracePublicStorageRead(contractAddress, slot, value, leafPreimage = PublicDataTreeLeafPreimage.empty(), leafIndex = Fr.zero(), path = emptyPublicDataPath()) {
46
- if (!leafIndex.equals(Fr.zero())) {
47
- // if we have real merkle hint content, make sure the value matches the the provided preimage
48
- assert(leafPreimage.value.equals(value), 'Value mismatch when tracing in public data write');
49
- }
50
- if (this.contractStorageReads.length >= MAX_PUBLIC_DATA_READS_PER_TX) {
51
- throw new SideEffectLimitReachedError('contract storage read', MAX_PUBLIC_DATA_READS_PER_TX);
52
- }
53
- this.contractStorageReads.push(new ContractStorageRead(slot, value, this.sideEffectCounter, contractAddress));
54
- this.avmCircuitHints.storageValues.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ value));
55
- // New hinting
56
- this.avmCircuitHints.publicDataReads.items.push(new AvmPublicDataReadTreeHint(leafPreimage, leafIndex, path));
57
- this.log.debug(`SLOAD cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
58
- this.incrementSideEffectCounter();
59
- }
60
- tracePublicStorageWrite(contractAddress, slot, value, lowLeafPreimage = PublicDataTreeLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyPublicDataPath(), newLeafPreimage = PublicDataTreeLeafPreimage.empty(), insertionPath = emptyPublicDataPath()) {
61
- if (!lowLeafIndex.equals(Fr.zero())) {
62
- // if we have real merkle hint content, make sure the value matches the the provided preimage
63
- assert(newLeafPreimage.value.equals(value), 'Value mismatch when tracing in public data read');
64
- }
65
- if (this.contractStorageUpdateRequests.length >= MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
66
- throw new SideEffectLimitReachedError('contract storage write', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
67
- }
68
- this.contractStorageUpdateRequests.push(new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, contractAddress));
69
- // New hinting
70
- const readHint = new AvmPublicDataReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
71
- this.avmCircuitHints.publicDataWrites.items.push(new AvmPublicDataWriteTreeHint(readHint, newLeafPreimage, insertionPath));
72
- this.log.debug(`SSTORE cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
73
- this.incrementSideEffectCounter();
74
- }
75
- // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
76
- traceNoteHashCheck(_contractAddress, noteHash, leafIndex, exists, path = emptyNoteHashPath()) {
77
- // NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
78
- if (this.noteHashReadRequests.length >= MAX_NOTE_HASH_READ_REQUESTS_PER_TX) {
79
- throw new SideEffectLimitReachedError('note hash read request', MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
80
- }
81
- // Temp for backward compatibility
82
- this.noteHashReadRequests.push(new TreeLeafReadRequest(noteHash, leafIndex));
83
- this.avmCircuitHints.noteHashExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(leafIndex), /*value=*/ exists ? Fr.ONE : Fr.ZERO));
84
- // New Hinting
85
- this.avmCircuitHints.noteHashReads.items.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
86
- // NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
87
- }
88
- traceNewNoteHash(_contractAddress, noteHash, leafIndex = Fr.zero(), path = emptyNoteHashPath()) {
89
- if (this.noteHashes.length >= MAX_NOTE_HASHES_PER_TX) {
90
- throw new SideEffectLimitReachedError('note hash', MAX_NOTE_HASHES_PER_TX);
91
- }
92
- this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
93
- this.log.debug(`NEW_NOTE_HASH cnt: ${this.sideEffectCounter}`);
94
- // New Hinting
95
- this.avmCircuitHints.noteHashWrites.items.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
96
- this.incrementSideEffectCounter();
97
- }
98
- traceNullifierCheck(siloedNullifier, exists, lowLeafPreimage = NullifierLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyNullifierPath()) {
99
- // NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
100
- // NOTE: isPending and leafIndex are unused for now but may be used for optimizations or kernel hints later
101
- this.enforceLimitOnNullifierChecks();
102
- const readRequest = new ReadRequest(siloedNullifier, this.sideEffectCounter);
103
- if (exists) {
104
- this.nullifierReadRequests.push(readRequest);
105
- }
106
- else {
107
- this.nullifierNonExistentReadRequests.push(readRequest);
108
- }
109
- this.avmCircuitHints.nullifierExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ new Fr(exists ? 1 : 0)));
110
- // New Hints
111
- this.avmCircuitHints.nullifierReads.items.push(new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath));
112
- this.log.debug(`NULLIFIER_EXISTS cnt: ${this.sideEffectCounter}`);
113
- this.incrementSideEffectCounter();
114
- }
115
- traceNewNullifier(siloedNullifier, lowLeafPreimage = NullifierLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyNullifierPath(), insertionPath = emptyNullifierPath()) {
116
- // NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
117
- if (this.nullifiers.length >= MAX_NULLIFIERS_PER_TX) {
118
- throw new SideEffectLimitReachedError('nullifier', MAX_NULLIFIERS_PER_TX);
119
- }
120
- // this will be wrong for siloedNullifier
121
- this.nullifiers.push(new Nullifier(siloedNullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
122
- // New hinting
123
- const lowLeafReadHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
124
- this.avmCircuitHints.nullifierWrites.items.push(new AvmNullifierWriteTreeHint(lowLeafReadHint, insertionPath));
125
- this.log.debug(`NEW_NULLIFIER cnt: ${this.sideEffectCounter}`);
126
- this.incrementSideEffectCounter();
127
- }
128
- // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
129
- traceL1ToL2MessageCheck(_contractAddress, msgHash, msgLeafIndex, exists, path = emptyL1ToL2MessagePath()) {
130
- // NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
131
- if (this.l1ToL2MsgReadRequests.length >= MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX) {
132
- throw new SideEffectLimitReachedError('l1 to l2 message read request', MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_TX);
133
- }
134
- this.l1ToL2MsgReadRequests.push(new TreeLeafReadRequest(msgHash, msgLeafIndex));
135
- this.avmCircuitHints.l1ToL2MessageExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(msgLeafIndex), /*value=*/ exists ? Fr.ONE : Fr.ZERO));
136
- // New Hinting
137
- this.avmCircuitHints.l1ToL2MessageReads.items.push(new AvmAppendTreeHint(msgLeafIndex, msgHash, path));
138
- // NOTE: counter does not increment for l1tol2 message checks (because it doesn't rely on pending messages)
139
- }
140
- traceNewL2ToL1Message(_contractAddress, recipient, content) {
141
- if (this.newL2ToL1Messages.length >= MAX_L2_TO_L1_MSGS_PER_TX) {
142
- throw new SideEffectLimitReachedError('l2 to l1 message', MAX_L2_TO_L1_MSGS_PER_TX);
143
- }
144
- const recipientAddress = EthAddress.fromField(recipient);
145
- this.newL2ToL1Messages.push(new L2ToL1Message(recipientAddress, content, this.sideEffectCounter));
146
- this.log.debug(`NEW_L2_TO_L1_MSG cnt: ${this.sideEffectCounter}`);
147
- this.incrementSideEffectCounter();
148
- }
149
- traceUnencryptedLog(contractAddress, log) {
150
- if (this.unencryptedLogs.length >= MAX_UNENCRYPTED_LOGS_PER_TX) {
151
- throw new SideEffectLimitReachedError('unencrypted log', MAX_UNENCRYPTED_LOGS_PER_TX);
152
- }
153
- const ulog = new UnencryptedL2Log(contractAddress, Buffer.concat(log.map(f => f.toBuffer())));
154
- const basicLogHash = Fr.fromBuffer(ulog.hash());
155
- this.unencryptedLogs.push(ulog);
156
- this.allUnencryptedLogs.push(ulog);
157
- // This length is for charging DA and is checked on-chain - has to be length of log preimage + 4 bytes.
158
- // The .length call also has a +4 but that is unrelated
159
- this.unencryptedLogsHashes.push(new LogHash(basicLogHash, this.sideEffectCounter, new Fr(ulog.length + 4)));
160
- this.log.debug(`NEW_UNENCRYPTED_LOG cnt: ${this.sideEffectCounter}`);
161
- this.incrementSideEffectCounter();
162
- }
163
- traceGetContractInstance(contractAddress, exists, instance = SerializableContractInstance.default()) {
164
- this.enforceLimitOnNullifierChecks('(contract address nullifier from GETCONTRACTINSTANCE)');
165
- this.avmCircuitHints.contractInstances.items.push(new AvmContractInstanceHint(contractAddress, exists, instance.salt, instance.deployer, instance.contractClassId, instance.initializationHash, instance.publicKeys));
166
- this.log.debug(`CONTRACT_INSTANCE cnt: ${this.sideEffectCounter}`);
167
- this.incrementSideEffectCounter();
168
- }
169
- // This tracing function gets called everytime we start simulation/execution.
170
- // This happens both when starting a new top-level trace and the start of every nested trace
171
- // We use this to collect the AvmContractBytecodeHints
172
- // We need to trace teh merkle tree as well here
173
- traceGetBytecode(contractAddress, exists, bytecode = Buffer.alloc(0), contractInstance = SerializableContractInstance.default(), contractClass = {
174
- artifactHash: Fr.zero(),
175
- privateFunctionsRoot: Fr.zero(),
176
- publicBytecodeCommitment: Fr.zero(),
177
- }) {
178
- const instance = new AvmContractInstanceHint(contractAddress, exists, contractInstance.salt, contractInstance.deployer, contractInstance.contractClassId, contractInstance.initializationHash, contractInstance.publicKeys);
179
- // We need to deduplicate the contract instances based on addresses
180
- this.avmCircuitHints.contractBytecodeHints.items.push(new AvmContractBytecodeHints(bytecode, instance, contractClass));
181
- this.log.debug(`Bytecode retrieval for contract execution traced: exists=${exists}, instance=${jsonStringify(contractInstance)}`);
182
- }
183
- /**
184
- * Trace a nested call.
185
- * Accept some results from a finished nested call's trace into this one.
186
- */
187
- traceNestedCall(
188
- /** The trace of the nested call. */
189
- nestedCallTrace,
190
- /** The execution environment of the nested call. */
191
- nestedEnvironment,
192
- /** How much gas was available for this public execution. */
193
- startGasLeft,
194
- /** Bytecode used for this execution. */
195
- bytecode,
196
- /** The call's results */
197
- avmCallResults,
198
- /** Function name for logging */
199
- functionName = 'unknown') {
200
- // TODO(4805): check if some threshold is reached for max nested calls (to unique contracts?)
201
- // TODO(dbanks12): should emit a nullifier read request. There should be two thresholds.
202
- // one for max unique contract calls, and another based on max nullifier reads.
203
- // Since this trace function happens _after_ a nested call, such threshold limits must take
204
- // place in another trace function that occurs _before_ a nested call.
205
- const result = nestedCallTrace.toPublicFunctionCallResult(nestedEnvironment, startGasLeft, bytecode, avmCallResults.finalize(), functionName);
206
- this.sideEffectCounter = result.endSideEffectCounter.toNumber();
207
- // when a nested call returns, caller accepts its updated counter
208
- this.allUnencryptedLogs.push(...result.allUnencryptedLogs.logs);
209
- // NOTE: eventually if the AVM circuit processes an entire enqueued call,
210
- // this function will accept all of the nested's side effects into this instance
211
- this.nestedExecutions.push(result);
212
- const gasUsed = new Gas(result.startGasLeft.daGas - avmCallResults.gasLeft.daGas, result.startGasLeft.l2Gas - avmCallResults.gasLeft.l2Gas);
213
- this.publicCallRequests.push(resultToPublicCallRequest(result));
214
- this.avmCircuitHints.externalCalls.items.push(new AvmExternalCallHint(
215
- /*success=*/ new Fr(result.reverted ? 0 : 1), result.returnValues, gasUsed, result.endSideEffectCounter, nestedEnvironment.address));
216
- }
217
- traceEnqueuedCall(
218
- /** The call request from private that enqueued this call. */
219
- _publicCallRequest,
220
- /** The call's calldata */
221
- _calldata,
222
- /** Did the call revert? */
223
- _reverted) {
224
- throw new Error('Not implemented');
225
- }
226
- merge(_nestedTrace, _reverted = false) {
227
- throw new Error('Not implemented');
228
- }
229
- /**
230
- * Convert this trace to a PublicExecutionResult for use externally to the simulator.
231
- */
232
- toPublicFunctionCallResult(
233
- /** The execution environment of the nested call. */
234
- avmEnvironment,
235
- /** How much gas was available for this public execution. */
236
- startGasLeft,
237
- /** Bytecode used for this execution. */
238
- bytecode,
239
- /** The call's results */
240
- avmCallResults,
241
- /** Function name for logging */
242
- functionName = 'unknown') {
243
- return {
244
- executionRequest: createPublicExecutionRequest(avmEnvironment),
245
- startSideEffectCounter: new Fr(this.startSideEffectCounter),
246
- endSideEffectCounter: new Fr(this.sideEffectCounter),
247
- startGasLeft,
248
- endGasLeft: avmCallResults.gasLeft,
249
- transactionFee: avmEnvironment.transactionFee,
250
- bytecode,
251
- calldata: avmEnvironment.calldata,
252
- returnValues: avmCallResults.output,
253
- reverted: avmCallResults.reverted,
254
- revertReason: avmCallResults.revertReason,
255
- contractStorageReads: this.contractStorageReads,
256
- contractStorageUpdateRequests: this.contractStorageUpdateRequests,
257
- noteHashReadRequests: this.noteHashReadRequests,
258
- noteHashes: this.noteHashes,
259
- nullifierReadRequests: this.nullifierReadRequests,
260
- nullifierNonExistentReadRequests: this.nullifierNonExistentReadRequests,
261
- nullifiers: this.nullifiers,
262
- l1ToL2MsgReadRequests: this.l1ToL2MsgReadRequests,
263
- l2ToL1Messages: this.newL2ToL1Messages,
264
- // correct the type on these now that they are finalized (lists won't grow)
265
- unencryptedLogs: new UnencryptedFunctionL2Logs(this.unencryptedLogs),
266
- allUnencryptedLogs: new UnencryptedFunctionL2Logs(this.allUnencryptedLogs),
267
- unencryptedLogsHashes: this.unencryptedLogsHashes,
268
- publicCallRequests: this.publicCallRequests,
269
- nestedExecutions: this.nestedExecutions,
270
- avmCircuitHints: this.avmCircuitHints,
271
- functionName,
272
- };
273
- }
274
- toPublicEnqueuedCallExecutionResult(
275
- /** The call's results */
276
- _avmCallResults) {
277
- throw new Error('Not implemented');
278
- }
279
- enforceLimitOnNullifierChecks(errorMsgOrigin = '') {
280
- // NOTE: Why error if _either_ limit was reached? If user code emits either an existent or non-existent
281
- // nullifier read request (NULLIFIEREXISTS, GETCONTRACTINSTANCE, *CALL), and one of the limits has been
282
- // reached (MAX_NULLIFIER_NON_EXISTENT_RRS vs MAX_NULLIFIER_RRS), but not the other, we must prevent the
283
- // sequencer from lying and saying "this nullifier exists, but MAX_NULLIFIER_RRS has been reached, so I'm
284
- // going to skip the read request and just revert instead" when the nullifier actually doesn't exist
285
- // (or vice versa). So, if either maximum has been reached, any nullifier-reading operation must error.
286
- if (this.nullifierReadRequests.length >= MAX_NULLIFIER_READ_REQUESTS_PER_TX) {
287
- throw new SideEffectLimitReachedError(`nullifier read request ${errorMsgOrigin}`, MAX_NULLIFIER_READ_REQUESTS_PER_TX);
288
- }
289
- if (this.nullifierNonExistentReadRequests.length >= MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX) {
290
- throw new SideEffectLimitReachedError(`nullifier non-existent read request ${errorMsgOrigin}`, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX);
291
- }
292
- }
293
- getUnencryptedLogs() {
294
- throw new Error('Not implemented');
295
- }
296
- }
297
- /**
298
- * Helper function to create a public execution request from an AVM execution environment
299
- */
300
- function createPublicExecutionRequest(avmEnvironment) {
301
- const callContext = CallContext.from({
302
- msgSender: avmEnvironment.sender,
303
- contractAddress: avmEnvironment.address,
304
- functionSelector: avmEnvironment.functionSelector,
305
- isStaticCall: avmEnvironment.isStaticCall,
306
- });
307
- return new PublicExecutionRequest(callContext, avmEnvironment.calldata);
308
- }
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZix3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFFMUIsV0FBVyxFQUdYLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsVUFBVSxFQUNWLEdBQUcsRUFDSCx3QkFBd0IsRUFDeEIsYUFBYSxFQUNiLE9BQU8sRUFDUCxxQ0FBcUMsRUFDckMsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixrQ0FBa0MsRUFDbEMscUJBQXFCLEVBQ3JCLCtDQUErQyxFQUMvQyxrQ0FBa0MsRUFDbEMsNEJBQTRCLEVBQzVCLHNDQUFzQyxFQUN0QywyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsU0FBUyxFQUNULHFCQUFxQixFQUNyQix1QkFBdUIsRUFFdkIsMEJBQTBCLEVBRTFCLFdBQVcsRUFDWCw0QkFBNEIsRUFDNUIsbUJBQW1CLEdBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSWpDLE9BQU8sRUFHTCx5QkFBeUIsR0FD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
@@ -1,242 +0,0 @@
1
- import { type UnencryptedL2Log } from '@aztec/circuit-types';
2
- import {
3
- type ContractClassIdPreimage,
4
- type Gas,
5
- type NullifierLeafPreimage,
6
- type PublicCallRequest,
7
- type PublicDataTreeLeafPreimage,
8
- type SerializableContractInstance,
9
- } from '@aztec/circuits.js';
10
- import { type AztecAddress } from '@aztec/foundation/aztec-address';
11
- import { type Fr } from '@aztec/foundation/fields';
12
-
13
- import { assert } from 'console';
14
-
15
- import { type AvmContractCallResult, type AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
16
- import { type AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
17
- import { type PublicEnqueuedCallSideEffectTrace } from './enqueued_call_side_effect_trace.js';
18
- import { type EnqueuedPublicCallExecutionResultWithSideEffects, type PublicFunctionCallResult } from './execution.js';
19
- import { type PublicSideEffectTrace } from './side_effect_trace.js';
20
- import { type PublicSideEffectTraceInterface } from './side_effect_trace_interface.js';
21
-
22
- export class DualSideEffectTrace implements PublicSideEffectTraceInterface {
23
- constructor(
24
- public readonly innerCallTrace: PublicSideEffectTrace,
25
- public readonly enqueuedCallTrace: PublicEnqueuedCallSideEffectTrace,
26
- ) {}
27
-
28
- public fork() {
29
- return new DualSideEffectTrace(this.innerCallTrace.fork(), this.enqueuedCallTrace.fork());
30
- }
31
-
32
- public merge(nestedTrace: this, reverted: boolean = false) {
33
- this.enqueuedCallTrace.merge(nestedTrace.enqueuedCallTrace, reverted);
34
- }
35
-
36
- public getCounter() {
37
- assert(this.innerCallTrace.getCounter() == this.enqueuedCallTrace.getCounter());
38
- return this.innerCallTrace.getCounter();
39
- }
40
-
41
- public tracePublicStorageRead(
42
- contractAddress: AztecAddress,
43
- slot: Fr,
44
- value: Fr,
45
- leafPreimage: PublicDataTreeLeafPreimage,
46
- leafIndex: Fr,
47
- path: Fr[],
48
- ) {
49
- this.innerCallTrace.tracePublicStorageRead(contractAddress, slot, value, leafPreimage, leafIndex, path);
50
- this.enqueuedCallTrace.tracePublicStorageRead(contractAddress, slot, value, leafPreimage, leafIndex, path);
51
- }
52
-
53
- public tracePublicStorageWrite(
54
- contractAddress: AztecAddress,
55
- slot: Fr,
56
- value: Fr,
57
- lowLeafPreimage: PublicDataTreeLeafPreimage,
58
- lowLeafIndex: Fr,
59
- lowLeafPath: Fr[],
60
- newLeafPreimage: PublicDataTreeLeafPreimage,
61
- insertionPath: Fr[],
62
- ) {
63
- this.innerCallTrace.tracePublicStorageWrite(
64
- contractAddress,
65
- slot,
66
- value,
67
- lowLeafPreimage,
68
- lowLeafIndex,
69
- lowLeafPath,
70
- newLeafPreimage,
71
- insertionPath,
72
- );
73
- this.enqueuedCallTrace.tracePublicStorageWrite(
74
- contractAddress,
75
- slot,
76
- value,
77
- lowLeafPreimage,
78
- lowLeafIndex,
79
- lowLeafPath,
80
- newLeafPreimage,
81
- insertionPath,
82
- );
83
- }
84
-
85
- // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
86
- public traceNoteHashCheck(contractAddress: AztecAddress, noteHash: Fr, leafIndex: Fr, exists: boolean, path: Fr[]) {
87
- this.innerCallTrace.traceNoteHashCheck(contractAddress, noteHash, leafIndex, exists, path);
88
- this.enqueuedCallTrace.traceNoteHashCheck(contractAddress, noteHash, leafIndex, exists, path);
89
- }
90
-
91
- public traceNewNoteHash(contractAddress: AztecAddress, noteHash: Fr, leafIndex: Fr, path: Fr[]) {
92
- this.innerCallTrace.traceNewNoteHash(contractAddress, noteHash, leafIndex, path);
93
- this.enqueuedCallTrace.traceNewNoteHash(contractAddress, noteHash, leafIndex, path);
94
- }
95
-
96
- public traceNullifierCheck(
97
- siloedNullifier: Fr,
98
- exists: boolean,
99
- lowLeafPreimage: NullifierLeafPreimage,
100
- lowLeafIndex: Fr,
101
- lowLeafPath: Fr[],
102
- ) {
103
- this.innerCallTrace.traceNullifierCheck(siloedNullifier, exists, lowLeafPreimage, lowLeafIndex, lowLeafPath);
104
- this.enqueuedCallTrace.traceNullifierCheck(siloedNullifier, exists, lowLeafPreimage, lowLeafIndex, lowLeafPath);
105
- }
106
-
107
- public traceNewNullifier(
108
- siloedNullifier: Fr,
109
- lowLeafPreimage: NullifierLeafPreimage,
110
- lowLeafIndex: Fr,
111
- lowLeafPath: Fr[],
112
- insertionPath: Fr[],
113
- ) {
114
- this.innerCallTrace.traceNewNullifier(siloedNullifier, lowLeafPreimage, lowLeafIndex, lowLeafPath, insertionPath);
115
- this.enqueuedCallTrace.traceNewNullifier(
116
- siloedNullifier,
117
- lowLeafPreimage,
118
- lowLeafIndex,
119
- lowLeafPath,
120
- insertionPath,
121
- );
122
- }
123
-
124
- traceL1ToL2MessageCheck(contractAddress: AztecAddress, msgHash: Fr, msgLeafIndex: Fr, exists: boolean, path: Fr[]) {
125
- this.innerCallTrace.traceL1ToL2MessageCheck(contractAddress, msgHash, msgLeafIndex, exists, path);
126
- this.enqueuedCallTrace.traceL1ToL2MessageCheck(contractAddress, msgHash, msgLeafIndex, exists, path);
127
- }
128
-
129
- public traceNewL2ToL1Message(contractAddress: AztecAddress, recipient: Fr, content: Fr) {
130
- this.innerCallTrace.traceNewL2ToL1Message(contractAddress, recipient, content);
131
- this.enqueuedCallTrace.traceNewL2ToL1Message(contractAddress, recipient, content);
132
- }
133
-
134
- public traceUnencryptedLog(contractAddress: AztecAddress, log: Fr[]) {
135
- this.innerCallTrace.traceUnencryptedLog(contractAddress, log);
136
- this.enqueuedCallTrace.traceUnencryptedLog(contractAddress, log);
137
- }
138
-
139
- public traceGetContractInstance(
140
- contractAddress: AztecAddress,
141
- exists: boolean,
142
- instance: SerializableContractInstance | undefined,
143
- ) {
144
- this.innerCallTrace.traceGetContractInstance(contractAddress, exists, instance);
145
- this.enqueuedCallTrace.traceGetContractInstance(contractAddress, exists, instance);
146
- }
147
-
148
- public traceGetBytecode(
149
- contractAddress: AztecAddress,
150
- exists: boolean,
151
- bytecode: Buffer,
152
- contractInstance: SerializableContractInstance | undefined,
153
- contractClass: ContractClassIdPreimage | undefined,
154
- ) {
155
- this.innerCallTrace.traceGetBytecode(contractAddress, exists, bytecode, contractInstance, contractClass);
156
- this.enqueuedCallTrace.traceGetBytecode(contractAddress, exists, bytecode, contractInstance, contractClass);
157
- }
158
-
159
- /**
160
- * Trace a nested call.
161
- * Accept some results from a finished nested call's trace into this one.
162
- */
163
- public traceNestedCall(
164
- /** The trace of the nested call. */
165
- nestedCallTrace: this,
166
- /** The execution environment of the nested call. */
167
- nestedEnvironment: AvmExecutionEnvironment,
168
- /** How much gas was available for this public execution. */
169
- startGasLeft: Gas,
170
- /** Bytecode used for this execution. */
171
- bytecode: Buffer,
172
- /** The call's results */
173
- avmCallResults: AvmContractCallResult,
174
- /** Function name for logging */
175
- functionName: string = 'unknown',
176
- ) {
177
- this.innerCallTrace.traceNestedCall(
178
- nestedCallTrace.innerCallTrace,
179
- nestedEnvironment,
180
- startGasLeft,
181
- bytecode,
182
- avmCallResults,
183
- functionName,
184
- );
185
- this.enqueuedCallTrace.traceNestedCall(
186
- nestedCallTrace.enqueuedCallTrace,
187
- nestedEnvironment,
188
- startGasLeft,
189
- bytecode,
190
- avmCallResults,
191
- functionName,
192
- );
193
- }
194
-
195
- public traceEnqueuedCall(
196
- /** The call request from private that enqueued this call. */
197
- publicCallRequest: PublicCallRequest,
198
- /** The call's calldata */
199
- calldata: Fr[],
200
- /** Did the call revert? */
201
- reverted: boolean,
202
- ) {
203
- this.enqueuedCallTrace.traceEnqueuedCall(publicCallRequest, calldata, reverted);
204
- }
205
-
206
- /**
207
- * Convert this trace to a PublicExecutionResult for use externally to the simulator.
208
- */
209
- public toPublicEnqueuedCallExecutionResult(
210
- /** The call's results */
211
- avmCallResults: AvmFinalizedCallResult,
212
- ): EnqueuedPublicCallExecutionResultWithSideEffects {
213
- return this.enqueuedCallTrace.toPublicEnqueuedCallExecutionResult(avmCallResults);
214
- }
215
- /**
216
- * Convert this trace to a PublicExecutionResult for use externally to the simulator.
217
- */
218
- public toPublicFunctionCallResult(
219
- /** The execution environment of the nested call. */
220
- avmEnvironment: AvmExecutionEnvironment,
221
- /** How much gas was available for this public execution. */
222
- startGasLeft: Gas,
223
- /** Bytecode used for this execution. */
224
- bytecode: Buffer,
225
- /** The call's results */
226
- avmCallResults: AvmFinalizedCallResult,
227
- /** Function name for logging */
228
- functionName: string = 'unknown',
229
- ): PublicFunctionCallResult {
230
- return this.innerCallTrace.toPublicFunctionCallResult(
231
- avmEnvironment,
232
- startGasLeft,
233
- bytecode,
234
- avmCallResults,
235
- functionName,
236
- );
237
- }
238
-
239
- public getUnencryptedLogs(): UnencryptedL2Log[] {
240
- return this.enqueuedCallTrace.getUnencryptedLogs();
241
- }
242
- }