@aztec/simulator 0.71.0 → 0.73.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 (137) hide show
  1. package/README.md +1 -1
  2. package/dest/acvm/oracle/oracle.d.ts +0 -1
  3. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  4. package/dest/acvm/oracle/oracle.js +1 -5
  5. package/dest/acvm/oracle/typed_oracle.d.ts +0 -1
  6. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  7. package/dest/acvm/oracle/typed_oracle.js +1 -4
  8. package/dest/avm/avm_simulator.d.ts +0 -1
  9. package/dest/avm/avm_simulator.d.ts.map +1 -1
  10. package/dest/avm/avm_simulator.js +4 -19
  11. package/dest/avm/avm_tree.d.ts +9 -8
  12. package/dest/avm/avm_tree.d.ts.map +1 -1
  13. package/dest/avm/avm_tree.js +35 -30
  14. package/dest/avm/errors.d.ts +6 -0
  15. package/dest/avm/errors.d.ts.map +1 -1
  16. package/dest/avm/errors.js +10 -1
  17. package/dest/avm/fixtures/avm_simulation_tester.d.ts +21 -0
  18. package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
  19. package/dest/avm/fixtures/avm_simulation_tester.js +74 -0
  20. package/dest/avm/fixtures/base_avm_simulation_tester.d.ts +35 -0
  21. package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
  22. package/dest/avm/fixtures/base_avm_simulation_tester.js +76 -0
  23. package/dest/avm/fixtures/index.d.ts +6 -2
  24. package/dest/avm/fixtures/index.d.ts.map +1 -1
  25. package/dest/avm/fixtures/index.js +28 -14
  26. package/dest/avm/fixtures/simple_contract_data_source.d.ts +31 -0
  27. package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
  28. package/dest/avm/fixtures/simple_contract_data_source.js +75 -0
  29. package/dest/avm/journal/journal.d.ts +5 -6
  30. package/dest/avm/journal/journal.d.ts.map +1 -1
  31. package/dest/avm/journal/journal.js +28 -26
  32. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  33. package/dest/avm/opcodes/accrued_substate.js +4 -3
  34. package/dest/avm/opcodes/conversion.d.ts.map +1 -1
  35. package/dest/avm/opcodes/conversion.js +10 -7
  36. package/dest/avm/opcodes/ec_add.js +2 -2
  37. package/dest/avm/opcodes/hashing.js +2 -2
  38. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
  39. package/dest/avm/opcodes/multi_scalar_mul.js +9 -7
  40. package/dest/avm/test_utils.d.ts +1 -1
  41. package/dest/avm/test_utils.d.ts.map +1 -1
  42. package/dest/avm/test_utils.js +4 -3
  43. package/dest/client/client_execution_context.d.ts +2 -6
  44. package/dest/client/client_execution_context.d.ts.map +1 -1
  45. package/dest/client/client_execution_context.js +23 -26
  46. package/dest/client/execution_note_cache.d.ts +3 -3
  47. package/dest/client/execution_note_cache.d.ts.map +1 -1
  48. package/dest/client/execution_note_cache.js +10 -10
  49. package/dest/client/pick_notes.js +5 -5
  50. package/dest/client/simulator.js +4 -4
  51. package/dest/client/view_data_oracle.js +2 -2
  52. package/dest/common/hashed_values_cache.d.ts +1 -1
  53. package/dest/common/hashed_values_cache.d.ts.map +1 -1
  54. package/dest/common/hashed_values_cache.js +5 -5
  55. package/dest/providers/acvm_wasm.d.ts +2 -0
  56. package/dest/providers/acvm_wasm.d.ts.map +1 -1
  57. package/dest/providers/acvm_wasm.js +15 -2
  58. package/dest/public/execution.d.ts +8 -26
  59. package/dest/public/execution.d.ts.map +1 -1
  60. package/dest/public/execution.js +3 -3
  61. package/dest/public/fee_payment.d.ts +2 -2
  62. package/dest/public/fee_payment.d.ts.map +1 -1
  63. package/dest/public/fee_payment.js +3 -3
  64. package/dest/public/fixtures/index.d.ts +2 -37
  65. package/dest/public/fixtures/index.d.ts.map +1 -1
  66. package/dest/public/fixtures/index.js +3 -247
  67. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +21 -0
  68. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -0
  69. package/dest/public/fixtures/public_tx_simulation_tester.js +89 -0
  70. package/dest/public/fixtures/utils.d.ts +17 -0
  71. package/dest/public/fixtures/utils.d.ts.map +1 -0
  72. package/dest/public/fixtures/utils.js +66 -0
  73. package/dest/public/index.d.ts +1 -1
  74. package/dest/public/index.d.ts.map +1 -1
  75. package/dest/public/index.js +2 -2
  76. package/dest/public/public_db_sources.d.ts +2 -1
  77. package/dest/public/public_db_sources.d.ts.map +1 -1
  78. package/dest/public/public_db_sources.js +27 -21
  79. package/dest/public/public_processor.d.ts +4 -5
  80. package/dest/public/public_processor.d.ts.map +1 -1
  81. package/dest/public/public_processor.js +28 -28
  82. package/dest/public/public_tx_context.d.ts +5 -5
  83. package/dest/public/public_tx_context.d.ts.map +1 -1
  84. package/dest/public/public_tx_context.js +44 -18
  85. package/dest/public/public_tx_simulator.d.ts.map +1 -1
  86. package/dest/public/public_tx_simulator.js +9 -12
  87. package/dest/public/{enqueued_call_side_effect_trace.d.ts → side_effect_trace.d.ts} +12 -15
  88. package/dest/public/side_effect_trace.d.ts.map +1 -0
  89. package/dest/public/side_effect_trace.js +350 -0
  90. package/dest/public/side_effect_trace_interface.d.ts +4 -5
  91. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  92. package/dest/test/utils.d.ts +1 -1
  93. package/dest/test/utils.d.ts.map +1 -1
  94. package/dest/test/utils.js +3 -3
  95. package/package.json +10 -10
  96. package/src/acvm/oracle/oracle.ts +0 -5
  97. package/src/acvm/oracle/typed_oracle.ts +0 -4
  98. package/src/avm/avm_simulator.ts +3 -27
  99. package/src/avm/avm_tree.ts +39 -37
  100. package/src/avm/errors.ts +10 -0
  101. package/src/avm/fixtures/avm_simulation_tester.ts +105 -0
  102. package/src/avm/fixtures/base_avm_simulation_tester.ts +104 -0
  103. package/src/avm/fixtures/index.ts +46 -17
  104. package/src/avm/fixtures/simple_contract_data_source.ts +98 -0
  105. package/src/avm/journal/journal.ts +28 -26
  106. package/src/avm/opcodes/accrued_substate.ts +3 -2
  107. package/src/avm/opcodes/conversion.ts +15 -6
  108. package/src/avm/opcodes/ec_add.ts +1 -1
  109. package/src/avm/opcodes/hashing.ts +1 -1
  110. package/src/avm/opcodes/multi_scalar_mul.ts +8 -6
  111. package/src/avm/test_utils.ts +3 -4
  112. package/src/client/client_execution_context.ts +29 -30
  113. package/src/client/execution_note_cache.ts +19 -14
  114. package/src/client/pick_notes.ts +4 -4
  115. package/src/client/simulator.ts +3 -3
  116. package/src/client/view_data_oracle.ts +1 -1
  117. package/src/common/hashed_values_cache.ts +4 -4
  118. package/src/providers/acvm_wasm.ts +13 -2
  119. package/src/public/execution.ts +10 -34
  120. package/src/public/fee_payment.ts +2 -2
  121. package/src/public/fixtures/index.ts +2 -381
  122. package/src/public/fixtures/public_tx_simulation_tester.ts +174 -0
  123. package/src/public/fixtures/utils.ts +110 -0
  124. package/src/public/index.ts +1 -1
  125. package/src/public/public_db_sources.ts +31 -20
  126. package/src/public/public_processor.ts +32 -30
  127. package/src/public/public_tx_context.ts +87 -28
  128. package/src/public/public_tx_simulator.ts +7 -14
  129. package/src/public/{enqueued_call_side_effect_trace.ts → side_effect_trace.ts} +29 -41
  130. package/src/public/side_effect_trace_interface.ts +4 -4
  131. package/src/test/utils.ts +2 -2
  132. package/dest/public/enqueued_call_side_effect_trace.d.ts.map +0 -1
  133. package/dest/public/enqueued_call_side_effect_trace.js +0 -357
  134. package/dest/public/transitional_adapters.d.ts +0 -4
  135. package/dest/public/transitional_adapters.d.ts.map +0 -1
  136. package/dest/public/transitional_adapters.js +0 -29
  137. package/src/public/transitional_adapters.ts +0 -113
@@ -1,357 +0,0 @@
1
- import { UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
2
- import { AvmAccumulatedData, AvmAppendTreeHint, AvmCircuitPublicInputs, AvmContractBytecodeHints, AvmContractInstanceHint, AvmEnqueuedCallHint, AvmExecutionHints, AvmNullifierReadTreeHint, AvmNullifierWriteTreeHint, AvmPublicDataReadTreeHint, AvmPublicDataWriteTreeHint, EthAddress, Gas, L1_TO_L2_MSG_TREE_HEIGHT, L2ToL1Message, LogHash, MAX_ENQUEUED_CALLS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_UNENCRYPTED_LOGS_PER_TX, NOTE_HASH_TREE_HEIGHT, NULLIFIER_TREE_HEIGHT, NoteHash, Nullifier, NullifierLeafPreimage, PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PUBLIC_DATA_TREE_HEIGHT, PrivateToAvmAccumulatedData, PrivateToAvmAccumulatedDataArrayLengths, PublicCallRequest, PublicDataTreeLeafPreimage, PublicDataUpdateRequest, PublicDataWrite, ScopedL2ToL1Message, ScopedLogHash, SerializableContractInstance, } from '@aztec/circuits.js';
3
- import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
4
- import { padArrayEnd } from '@aztec/foundation/collection';
5
- import { Fr } from '@aztec/foundation/fields';
6
- import { jsonStringify } from '@aztec/foundation/json-rpc';
7
- import { createLogger } from '@aztec/foundation/log';
8
- import { strict as assert } from 'assert';
9
- import { SideEffectLimitReachedError } from './side_effect_errors.js';
10
- import { UniqueClassIds } from './unique_class_ids.js';
11
- const emptyPublicDataPath = () => new Array(PUBLIC_DATA_TREE_HEIGHT).fill(Fr.zero());
12
- const emptyNoteHashPath = () => new Array(NOTE_HASH_TREE_HEIGHT).fill(Fr.zero());
13
- const emptyNullifierPath = () => new Array(NULLIFIER_TREE_HEIGHT).fill(Fr.zero());
14
- const emptyL1ToL2MessagePath = () => new Array(L1_TO_L2_MSG_TREE_HEIGHT).fill(Fr.zero());
15
- export class SideEffectArrayLengths {
16
- constructor(publicDataWrites, protocolPublicDataWrites, noteHashes, nullifiers, l2ToL1Msgs, unencryptedLogs) {
17
- this.publicDataWrites = publicDataWrites;
18
- this.protocolPublicDataWrites = protocolPublicDataWrites;
19
- this.noteHashes = noteHashes;
20
- this.nullifiers = nullifiers;
21
- this.l2ToL1Msgs = l2ToL1Msgs;
22
- this.unencryptedLogs = unencryptedLogs;
23
- }
24
- static empty() {
25
- return new this(0, 0, 0, 0, 0, 0);
26
- }
27
- }
28
- /**
29
- * Trace side effects for an entire enqueued call.
30
- */
31
- export class PublicEnqueuedCallSideEffectTrace {
32
- constructor(
33
- /** The counter of this trace's first side effect. */
34
- startSideEffectCounter = 0,
35
- /** Track parent's (or previous kernel's) lengths so the AVM can properly enforce TX-wide limits,
36
- * otherwise the public kernel can fail to prove because TX limits are breached.
37
- */
38
- previousSideEffectArrayLengths = SideEffectArrayLengths.empty(),
39
- /** We need to track the set of class IDs used for bytecode retrieval to deduplicate and enforce limits. */
40
- gotBytecodeFromClassIds = new UniqueClassIds()) {
41
- this.startSideEffectCounter = startSideEffectCounter;
42
- this.previousSideEffectArrayLengths = previousSideEffectArrayLengths;
43
- this.gotBytecodeFromClassIds = gotBytecodeFromClassIds;
44
- this.log = createLogger('simulator:public_enqueued_call_side_effect_trace');
45
- this.enqueuedCalls = [];
46
- this.publicDataWrites = [];
47
- this.protocolPublicDataWritesLength = 0;
48
- this.userPublicDataWritesLength = 0;
49
- this.noteHashes = [];
50
- this.nullifiers = [];
51
- this.l2ToL1Messages = [];
52
- this.unencryptedLogs = [];
53
- this.unencryptedLogsHashes = [];
54
- /** Make sure a forked trace is never merged twice. */
55
- this.alreadyMergedIntoParent = false;
56
- this.log.debug(`Creating trace instance with startSideEffectCounter: ${startSideEffectCounter}`);
57
- this.sideEffectCounter = startSideEffectCounter;
58
- this.avmCircuitHints = AvmExecutionHints.empty();
59
- }
60
- fork() {
61
- return new PublicEnqueuedCallSideEffectTrace(this.sideEffectCounter, new SideEffectArrayLengths(this.previousSideEffectArrayLengths.publicDataWrites + this.userPublicDataWritesLength, this.previousSideEffectArrayLengths.protocolPublicDataWrites + this.protocolPublicDataWritesLength, this.previousSideEffectArrayLengths.noteHashes + this.noteHashes.length, this.previousSideEffectArrayLengths.nullifiers + this.nullifiers.length, this.previousSideEffectArrayLengths.l2ToL1Msgs + this.l2ToL1Messages.length, this.previousSideEffectArrayLengths.unencryptedLogs + this.unencryptedLogs.length), this.gotBytecodeFromClassIds.fork());
62
- }
63
- merge(forkedTrace, reverted = false) {
64
- // sanity check to avoid merging the same forked trace twice
65
- assert(!forkedTrace.alreadyMergedIntoParent, 'Bug! Cannot merge a forked trace that has already been merged into its parent!');
66
- forkedTrace.alreadyMergedIntoParent = true;
67
- this.sideEffectCounter = forkedTrace.sideEffectCounter;
68
- this.enqueuedCalls.push(...forkedTrace.enqueuedCalls);
69
- if (!reverted) {
70
- this.publicDataWrites.push(...forkedTrace.publicDataWrites);
71
- this.noteHashes.push(...forkedTrace.noteHashes);
72
- this.nullifiers.push(...forkedTrace.nullifiers);
73
- this.l2ToL1Messages.push(...forkedTrace.l2ToL1Messages);
74
- this.unencryptedLogs.push(...forkedTrace.unencryptedLogs);
75
- this.unencryptedLogsHashes.push(...forkedTrace.unencryptedLogsHashes);
76
- }
77
- this.mergeHints(forkedTrace);
78
- }
79
- mergeHints(forkedTrace) {
80
- this.gotBytecodeFromClassIds.acceptAndMerge(forkedTrace.gotBytecodeFromClassIds);
81
- this.avmCircuitHints.enqueuedCalls.items.push(...forkedTrace.avmCircuitHints.enqueuedCalls.items);
82
- this.avmCircuitHints.contractInstances.items.push(...forkedTrace.avmCircuitHints.contractInstances.items);
83
- // merge in contract bytecode hints
84
- // UniqueClassIds should prevent duplication
85
- for (const [contractClassId, bytecodeHint] of forkedTrace.avmCircuitHints.contractBytecodeHints) {
86
- assert(!this.avmCircuitHints.contractBytecodeHints.has(contractClassId), 'Bug preventing duplication of contract bytecode hints');
87
- this.avmCircuitHints.contractBytecodeHints.set(contractClassId, bytecodeHint);
88
- }
89
- this.avmCircuitHints.publicDataReads.items.push(...forkedTrace.avmCircuitHints.publicDataReads.items);
90
- this.avmCircuitHints.publicDataWrites.items.push(...forkedTrace.avmCircuitHints.publicDataWrites.items);
91
- this.avmCircuitHints.nullifierReads.items.push(...forkedTrace.avmCircuitHints.nullifierReads.items);
92
- this.avmCircuitHints.nullifierWrites.items.push(...forkedTrace.avmCircuitHints.nullifierWrites.items);
93
- this.avmCircuitHints.noteHashReads.items.push(...forkedTrace.avmCircuitHints.noteHashReads.items);
94
- this.avmCircuitHints.noteHashWrites.items.push(...forkedTrace.avmCircuitHints.noteHashWrites.items);
95
- this.avmCircuitHints.l1ToL2MessageReads.items.push(...forkedTrace.avmCircuitHints.l1ToL2MessageReads.items);
96
- }
97
- getCounter() {
98
- return this.sideEffectCounter;
99
- }
100
- incrementSideEffectCounter() {
101
- this.sideEffectCounter++;
102
- }
103
- getNoteHashCount() {
104
- return this.previousSideEffectArrayLengths.noteHashes + this.noteHashes.length;
105
- }
106
- tracePublicStorageRead(contractAddress, slot, value, leafPreimage = PublicDataTreeLeafPreimage.empty(), leafIndex = Fr.zero(), path = emptyPublicDataPath()) {
107
- this.avmCircuitHints.publicDataReads.items.push(new AvmPublicDataReadTreeHint(leafPreimage, leafIndex, path));
108
- this.log.debug(`Tracing storage read (address=${contractAddress}, slot=${slot}): value=${value} (counter=${this.sideEffectCounter})`);
109
- this.incrementSideEffectCounter();
110
- }
111
- tracePublicStorageWrite(contractAddress, slot, value, protocolWrite, lowLeafPreimage = PublicDataTreeLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyPublicDataPath(), newLeafPreimage = PublicDataTreeLeafPreimage.empty(), insertionPath = emptyPublicDataPath()) {
112
- if (protocolWrite) {
113
- if (this.protocolPublicDataWritesLength + this.previousSideEffectArrayLengths.protocolPublicDataWrites >=
114
- PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
115
- throw new SideEffectLimitReachedError('protocol public data (contract storage) write', PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
116
- }
117
- this.protocolPublicDataWritesLength++;
118
- }
119
- else {
120
- if (this.userPublicDataWritesLength + this.previousSideEffectArrayLengths.publicDataWrites >=
121
- MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
122
- throw new SideEffectLimitReachedError('public data (contract storage) write', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
123
- }
124
- this.userPublicDataWritesLength++;
125
- }
126
- const leafSlot = computePublicDataTreeLeafSlot(contractAddress, slot);
127
- this.publicDataWrites.push(new PublicDataUpdateRequest(leafSlot, value, this.sideEffectCounter));
128
- // New hinting
129
- const readHint = new AvmPublicDataReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
130
- this.avmCircuitHints.publicDataWrites.items.push(new AvmPublicDataWriteTreeHint(readHint, newLeafPreimage, insertionPath));
131
- this.log.debug(`Traced public data write (address=${contractAddress}, slot=${slot}): value=${value} (counter=${this.sideEffectCounter}, isProtocol:${protocolWrite})`);
132
- this.incrementSideEffectCounter();
133
- }
134
- // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
135
- traceNoteHashCheck(_contractAddress, noteHash, leafIndex, _exists, path = emptyNoteHashPath()) {
136
- // New Hinting
137
- this.avmCircuitHints.noteHashReads.items.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
138
- // NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
139
- }
140
- traceNewNoteHash(noteHash, leafIndex = Fr.zero(), path = emptyNoteHashPath()) {
141
- if (this.noteHashes.length + this.previousSideEffectArrayLengths.noteHashes >= MAX_NOTE_HASHES_PER_TX) {
142
- throw new SideEffectLimitReachedError('note hash', MAX_NOTE_HASHES_PER_TX);
143
- }
144
- this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
145
- this.log.debug(`NEW_NOTE_HASH cnt: ${this.sideEffectCounter}`);
146
- this.avmCircuitHints.noteHashWrites.items.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
147
- this.incrementSideEffectCounter();
148
- }
149
- traceNullifierCheck(_siloedNullifier, _exists, lowLeafPreimage = NullifierLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyNullifierPath()) {
150
- this.avmCircuitHints.nullifierReads.items.push(new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath));
151
- this.log.debug(`NULLIFIER_EXISTS cnt: ${this.sideEffectCounter}`);
152
- this.incrementSideEffectCounter();
153
- }
154
- traceNewNullifier(siloedNullifier, lowLeafPreimage = NullifierLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyNullifierPath(), insertionPath = emptyNullifierPath()) {
155
- if (this.nullifiers.length + this.previousSideEffectArrayLengths.nullifiers >= MAX_NULLIFIERS_PER_TX) {
156
- throw new SideEffectLimitReachedError('nullifier', MAX_NULLIFIERS_PER_TX);
157
- }
158
- this.nullifiers.push(new Nullifier(siloedNullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
159
- const lowLeafReadHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
160
- this.avmCircuitHints.nullifierWrites.items.push(new AvmNullifierWriteTreeHint(lowLeafReadHint, insertionPath));
161
- this.log.debug(`NEW_NULLIFIER cnt: ${this.sideEffectCounter}`);
162
- this.incrementSideEffectCounter();
163
- }
164
- // TODO(8287): _exists can be removed once we have the vm properly handling the equality check
165
- traceL1ToL2MessageCheck(_contractAddress, msgHash, msgLeafIndex, _exists, path = emptyL1ToL2MessagePath()) {
166
- this.avmCircuitHints.l1ToL2MessageReads.items.push(new AvmAppendTreeHint(msgLeafIndex, msgHash, path));
167
- }
168
- traceNewL2ToL1Message(contractAddress, recipient, content) {
169
- if (this.l2ToL1Messages.length + this.previousSideEffectArrayLengths.l2ToL1Msgs >= MAX_L2_TO_L1_MSGS_PER_TX) {
170
- throw new SideEffectLimitReachedError('l2 to l1 message', MAX_L2_TO_L1_MSGS_PER_TX);
171
- }
172
- const recipientAddress = EthAddress.fromField(recipient);
173
- this.l2ToL1Messages.push(new L2ToL1Message(recipientAddress, content, this.sideEffectCounter).scope(contractAddress));
174
- this.log.debug(`NEW_L2_TO_L1_MSG cnt: ${this.sideEffectCounter}`);
175
- this.incrementSideEffectCounter();
176
- }
177
- traceUnencryptedLog(contractAddress, log) {
178
- if (this.unencryptedLogs.length + this.previousSideEffectArrayLengths.unencryptedLogs >=
179
- MAX_UNENCRYPTED_LOGS_PER_TX) {
180
- throw new SideEffectLimitReachedError('unencrypted log', MAX_UNENCRYPTED_LOGS_PER_TX);
181
- }
182
- const ulog = new UnencryptedL2Log(contractAddress, Buffer.concat(log.map(f => f.toBuffer())));
183
- const basicLogHash = Fr.fromBuffer(ulog.hash());
184
- this.unencryptedLogs.push(ulog);
185
- // This length is for charging DA and is checked on-chain - has to be length of log preimage + 4 bytes.
186
- // The .length call also has a +4 but that is unrelated
187
- this.unencryptedLogsHashes.push(new LogHash(basicLogHash, this.sideEffectCounter, new Fr(ulog.length + 4)).scope(contractAddress));
188
- this.log.debug(`NEW_UNENCRYPTED_LOG cnt: ${this.sideEffectCounter}`);
189
- this.incrementSideEffectCounter();
190
- }
191
- traceGetContractInstance(contractAddress, exists, instance = SerializableContractInstance.default(), lowLeafPreimage = NullifierLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyNullifierPath()) {
192
- const membershipHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
193
- this.avmCircuitHints.contractInstances.items.push(new AvmContractInstanceHint(contractAddress, exists, instance.salt, instance.deployer, instance.contractClassId, instance.initializationHash, instance.publicKeys, membershipHint));
194
- this.log.debug(`CONTRACT_INSTANCE cnt: ${this.sideEffectCounter}`);
195
- this.incrementSideEffectCounter();
196
- }
197
- // This tracing function gets called everytime we start simulation/execution.
198
- // This happens both when starting a new top-level trace and the start of every forked trace
199
- // We use this to collect the AvmContractBytecodeHints
200
- traceGetBytecode(contractAddress, exists, bytecode = Buffer.alloc(0), contractInstance = SerializableContractInstance.default(), contractClass = {
201
- artifactHash: Fr.zero(),
202
- privateFunctionsRoot: Fr.zero(),
203
- publicBytecodeCommitment: Fr.zero(),
204
- }, lowLeafPreimage = NullifierLeafPreimage.empty(), lowLeafIndex = Fr.zero(), lowLeafPath = emptyNullifierPath()) {
205
- // FIXME: The way we are hinting contract bytecodes is fundamentally broken.
206
- // We are mapping contract class ID to a bytecode hint
207
- // But a bytecode hint is tied to a contract INSTANCE.
208
- // What if you encounter another contract instance with the same class ID?
209
- // We can't hint that instance too since there is already an entry in the hints set that class ID.
210
- // But without that instance hinted, the circuit can't prove that the called contract address
211
- // actually corresponds to any class ID.
212
- const membershipHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
213
- const instance = new AvmContractInstanceHint(contractAddress, exists, contractInstance.salt, contractInstance.deployer, contractInstance.contractClassId, contractInstance.initializationHash, contractInstance.publicKeys, membershipHint);
214
- // Always hint the contract instance separately from the bytecode hint.
215
- // Since the bytecode hints are keyed by class ID, we need to hint the instance separately
216
- // since there might be multiple instances hinted for the same class ID.
217
- this.avmCircuitHints.contractInstances.items.push(instance);
218
- this.log.debug(`Tracing contract instance for bytecode retrieval: exists=${exists}, instance=${jsonStringify(contractInstance)}`);
219
- if (!exists) {
220
- // this ensures there are no duplicates
221
- this.log.debug(`Contract address ${contractAddress} does not exist. Not tracing bytecode & class ID.`);
222
- return;
223
- }
224
- // We already hinted this bytecode. No need to
225
- // Don't we still need to hint if the class ID already exists?
226
- // Because the circuit needs to prove that the called contract address corresponds to the class ID.
227
- // To do so, the circuit needs to know the class ID in the
228
- if (this.gotBytecodeFromClassIds.has(contractInstance.contractClassId.toString())) {
229
- // this ensures there are no duplicates
230
- this.log.debug(`Contract class id ${contractInstance.contractClassId.toString()} already exists in previous hints`);
231
- return;
232
- }
233
- // If we could actually allow contract calls after the limit was reached, we would hint even if we have
234
- // surpassed the limit of unique class IDs (still trace the failed bytecode retrieval)
235
- // because the circuit needs to know the class ID to know when the limit is hit.
236
- // BUT, the issue with this approach is that the sequencer could lie and say "this call was to a new class ID",
237
- // and the circuit cannot prove that it's not true without deriving the class ID from bytecode,
238
- // proving that it corresponds to the called contract address, and proving that the class ID wasn't already
239
- // present/used. That would require more bytecode hashing which is exactly what this limit exists to avoid.
240
- if (this.gotBytecodeFromClassIds.size() >= MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS) {
241
- this.log.debug(`Bytecode retrieval failure for contract class ID ${contractInstance.contractClassId.toString()} (limit reached)`);
242
- throw new SideEffectLimitReachedError('contract calls to unique class IDs', MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS);
243
- }
244
- this.log.debug(`Tracing bytecode & contract class for bytecode retrieval: class=${jsonStringify(contractClass)}`);
245
- this.avmCircuitHints.contractBytecodeHints.set(contractInstance.contractClassId.toString(), new AvmContractBytecodeHints(bytecode, instance, contractClass));
246
- // After adding the bytecode hint, mark the classId as retrieved to avoid duplication.
247
- // The above map alone isn't sufficient because we need to check the parent trace's (and its parent) as well.
248
- this.gotBytecodeFromClassIds.add(contractInstance.contractClassId.toString());
249
- }
250
- /**
251
- * Trace an enqueued call.
252
- * Accept some results from a finished call's trace into this one.
253
- */
254
- traceEnqueuedCall(
255
- /** The call request from private that enqueued this call. */
256
- publicCallRequest,
257
- /** The call's calldata */
258
- calldata,
259
- /** Did the call revert? */
260
- _reverted) {
261
- this.log.debug(`Tracing enqueued call`);
262
- // TODO(4805): check if some threshold is reached for max enqueued or nested calls (to unique contracts?)
263
- this.enqueuedCalls.push(publicCallRequest);
264
- this.avmCircuitHints.enqueuedCalls.items.push(new AvmEnqueuedCallHint(publicCallRequest.contractAddress, calldata));
265
- }
266
- getSideEffects() {
267
- return {
268
- enqueuedCalls: this.enqueuedCalls,
269
- publicDataWrites: this.publicDataWrites,
270
- noteHashes: this.noteHashes,
271
- nullifiers: this.nullifiers,
272
- l2ToL1Msgs: this.l2ToL1Messages,
273
- unencryptedLogs: this.unencryptedLogs,
274
- unencryptedLogsHashes: this.unencryptedLogsHashes,
275
- };
276
- }
277
- /**
278
- * Get the results of public execution.
279
- */
280
- toPublicEnqueuedCallExecutionResult(
281
- /** The call's results */
282
- avmCallResults) {
283
- return {
284
- endGasLeft: Gas.from(avmCallResults.gasLeft),
285
- endSideEffectCounter: new Fr(this.sideEffectCounter),
286
- returnValues: avmCallResults.output,
287
- reverted: avmCallResults.reverted,
288
- revertReason: avmCallResults.revertReason,
289
- sideEffects: {
290
- publicDataWrites: this.publicDataWrites,
291
- noteHashes: this.noteHashes,
292
- nullifiers: this.nullifiers,
293
- l2ToL1Messages: this.l2ToL1Messages,
294
- unencryptedLogsHashes: this.unencryptedLogsHashes, // Scoped?
295
- unencryptedLogs: new UnencryptedFunctionL2Logs(this.unencryptedLogs),
296
- },
297
- };
298
- }
299
- toAvmCircuitPublicInputs(
300
- /** Globals. */
301
- globalVariables,
302
- /** Start tree snapshots. */
303
- startTreeSnapshots,
304
- /** Gas used at start of TX. */
305
- startGasUsed,
306
- /** How much gas was available for this public execution. */
307
- gasLimits,
308
- /** Address of the fee payer. */
309
- feePayer,
310
- /** Call requests for setup phase. */
311
- publicSetupCallRequests,
312
- /** Call requests for app logic phase. */
313
- publicAppLogicCallRequests,
314
- /** Call request for teardown phase. */
315
- publicTeardownCallRequest,
316
- /** End tree snapshots. */
317
- endTreeSnapshots,
318
- /**
319
- * Gas used by the whole transaction, assuming entire teardown limit is used.
320
- * This is the gas used when computing transaction fee.
321
- */
322
- endGasUsed,
323
- /** Transaction fee. */
324
- transactionFee,
325
- /** The call's results */
326
- reverted) {
327
- return new AvmCircuitPublicInputs(globalVariables, startTreeSnapshots, startGasUsed, gasLimits, feePayer, padArrayEnd(publicSetupCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX), padArrayEnd(publicAppLogicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX), publicTeardownCallRequest,
328
- /*previousNonRevertibleAccumulatedDataArrayLengths=*/ PrivateToAvmAccumulatedDataArrayLengths.empty(),
329
- /*previousRevertibleAccumulatedDataArrayLengths=*/ PrivateToAvmAccumulatedDataArrayLengths.empty(),
330
- /*previousNonRevertibleAccumulatedDataArray=*/ PrivateToAvmAccumulatedData.empty(),
331
- /*previousRevertibleAccumulatedDataArray=*/ PrivateToAvmAccumulatedData.empty(), endTreeSnapshots, endGasUsed,
332
- /*accumulatedData=*/ this.getAvmAccumulatedData(), transactionFee, reverted);
333
- }
334
- toPublicFunctionCallResult(
335
- /** The execution environment of the nested call. */
336
- _avmEnvironment,
337
- /** How much gas was available for this public execution. */
338
- _startGasLeft,
339
- /** Bytecode used for this execution. */
340
- _bytecode,
341
- /** The call's results */
342
- _avmCallResults,
343
- /** Function name for logging */
344
- _functionName = 'unknown') {
345
- throw new Error('Not implemented');
346
- }
347
- getUnencryptedLogs() {
348
- return this.unencryptedLogs;
349
- }
350
- getAvmCircuitHints() {
351
- return this.avmCircuitHints;
352
- }
353
- getAvmAccumulatedData() {
354
- return new AvmAccumulatedData(padArrayEnd(this.noteHashes.map(n => n.value), Fr.zero(), MAX_NOTE_HASHES_PER_TX), padArrayEnd(this.nullifiers.map(n => n.value), Fr.zero(), MAX_NULLIFIERS_PER_TX), padArrayEnd(this.l2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(this.unencryptedLogsHashes, ScopedLogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_TX), padArrayEnd(this.publicDataWrites.map(w => new PublicDataWrite(w.leafSlot, w.newValue)), PublicDataWrite.empty(), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX));
355
- }
356
- }
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5xdWV1ZWRfY2FsbF9zaWRlX2VmZmVjdF90cmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvZW5xdWV1ZWRfY2FsbF9zaWRlX2VmZmVjdF90cmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLDBCQUEwQixFQUcxQixVQUFVLEVBQ1YsR0FBRyxFQUdILHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsT0FBTyxFQUNQLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiw2Q0FBNkMsRUFDN0Msc0NBQXNDLEVBQ3RDLDRDQUE0QyxFQUM1QywyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsU0FBUyxFQUNULHFCQUFxQixFQUNyQiwyQ0FBMkMsRUFDM0MsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQix1Q0FBdUMsRUFDdkMsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQix1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsNEJBQTRCLEdBRTdCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxF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
@@ -1,4 +0,0 @@
1
- import { type AvmCircuitPublicInputs, type AztecAddress, Fr, type Gas, type GasSettings, type GlobalVariables, type PrivateToPublicAccumulatedData, PublicCallRequest, type RevertCode, type StateReference, TreeSnapshots } from '@aztec/circuits.js';
2
- import { type PublicEnqueuedCallSideEffectTrace } from './enqueued_call_side_effect_trace.js';
3
- export declare function generateAvmCircuitPublicInputs(trace: PublicEnqueuedCallSideEffectTrace, globalVariables: GlobalVariables, startStateReference: StateReference, startGasUsed: Gas, gasSettings: GasSettings, feePayer: AztecAddress, setupCallRequests: PublicCallRequest[], appLogicCallRequests: PublicCallRequest[], teardownCallRequests: PublicCallRequest[], nonRevertibleAccumulatedDataFromPrivate: PrivateToPublicAccumulatedData, revertibleAccumulatedDataFromPrivate: PrivateToPublicAccumulatedData, endTreeSnapshots: TreeSnapshots, endGasUsed: Gas, transactionFee: Fr, revertCode: RevertCode): AvmCircuitPublicInputs;
4
- //# sourceMappingURL=transitional_adapters.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transitional_adapters.d.ts","sourceRoot":"","sources":["../../src/public/transitional_adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,EAAE,EACF,KAAK,GAAG,EACR,KAAK,WAAW,EAChB,KAAK,eAAe,EAKpB,KAAK,8BAA8B,EACnC,iBAAiB,EAEjB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,aAAa,EAGd,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,sCAAsC,CAAC;AAE9F,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,iCAAiC,EACxC,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,cAAc,EACnC,YAAY,EAAE,GAAG,EACjB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,EACtB,iBAAiB,EAAE,iBAAiB,EAAE,EACtC,oBAAoB,EAAE,iBAAiB,EAAE,EACzC,oBAAoB,EAAE,iBAAiB,EAAE,EACzC,uCAAuC,EAAE,8BAA8B,EACvE,oCAAoC,EAAE,8BAA8B,EACpE,gBAAgB,EAAE,aAAa,EAC/B,UAAU,EAAE,GAAG,EACf,cAAc,EAAE,EAAE,EAClB,UAAU,EAAE,UAAU,GACrB,sBAAsB,CAuExB"}
@@ -1,29 +0,0 @@
1
- import { Fr, MAX_L2_TO_L1_MSGS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PrivateToAvmAccumulatedData, PrivateToAvmAccumulatedDataArrayLengths, PublicCallRequest, PublicDataWrite, TreeSnapshots, countAccumulatedItems, mergeAccumulatedData, } from '@aztec/circuits.js';
2
- import { padArrayEnd } from '@aztec/foundation/collection';
3
- import { assertLength } from '@aztec/foundation/serialize';
4
- export function generateAvmCircuitPublicInputs(trace, globalVariables, startStateReference, startGasUsed, gasSettings, feePayer, setupCallRequests, appLogicCallRequests, teardownCallRequests, nonRevertibleAccumulatedDataFromPrivate, revertibleAccumulatedDataFromPrivate, endTreeSnapshots, endGasUsed, transactionFee, revertCode) {
5
- const startTreeSnapshots = new TreeSnapshots(startStateReference.l1ToL2MessageTree, startStateReference.partial.noteHashTree, startStateReference.partial.nullifierTree, startStateReference.partial.publicDataTree);
6
- const avmCircuitPublicInputs = trace.toAvmCircuitPublicInputs(globalVariables, startTreeSnapshots, startGasUsed, gasSettings, feePayer, setupCallRequests, appLogicCallRequests, teardownCallRequests.length ? teardownCallRequests[0] : PublicCallRequest.empty(), endTreeSnapshots, endGasUsed, transactionFee, !revertCode.isOK());
7
- const getArrayLengths = (from) => new PrivateToAvmAccumulatedDataArrayLengths(countAccumulatedItems(from.noteHashes), countAccumulatedItems(from.nullifiers), countAccumulatedItems(from.l2ToL1Msgs));
8
- const convertAccumulatedData = (from) => new PrivateToAvmAccumulatedData(from.noteHashes, from.nullifiers, from.l2ToL1Msgs);
9
- // Temporary overrides as these entries aren't yet populated in trace
10
- avmCircuitPublicInputs.previousNonRevertibleAccumulatedDataArrayLengths = getArrayLengths(nonRevertibleAccumulatedDataFromPrivate);
11
- avmCircuitPublicInputs.previousRevertibleAccumulatedDataArrayLengths = getArrayLengths(revertibleAccumulatedDataFromPrivate);
12
- avmCircuitPublicInputs.previousNonRevertibleAccumulatedData = convertAccumulatedData(nonRevertibleAccumulatedDataFromPrivate);
13
- avmCircuitPublicInputs.previousRevertibleAccumulatedData = convertAccumulatedData(revertibleAccumulatedDataFromPrivate);
14
- const msgsFromPrivate = revertCode.isOK()
15
- ? mergeAccumulatedData(avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs, avmCircuitPublicInputs.previousRevertibleAccumulatedData.l2ToL1Msgs)
16
- : avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs;
17
- avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs = assertLength(mergeAccumulatedData(msgsFromPrivate, avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs), MAX_L2_TO_L1_MSGS_PER_TX);
18
- // Maps slot to value. Maps in TS are iterable in insertion order, which is exactly what we want for
19
- // squashing "to the left", where the first occurrence of a slot uses the value of the last write to it,
20
- // and the rest occurrences are omitted
21
- const squashedPublicDataWrites = new Map();
22
- for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
23
- squashedPublicDataWrites.set(publicDataWrite.leafSlot.toBigInt(), publicDataWrite.value);
24
- }
25
- avmCircuitPublicInputs.accumulatedData.publicDataWrites = padArrayEnd(Array.from(squashedPublicDataWrites.entries()).map(([slot, value]) => new PublicDataWrite(new Fr(slot), value)), PublicDataWrite.empty(), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
26
- //console.log(`AvmCircuitPublicInputs:\n${inspect(avmCircuitPublicInputs)}`);
27
- return avmCircuitPublicInputs;
28
- }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLEVBQUUsRUFJRix3QkFBd0IsRUFDeEIsNENBQTRDLEVBQzVDLDJCQUEyQixFQUMzQix1Q0FBdUMsRUFFdkMsaUJBQWlCLEVBQ2pCLGVBQWUsRUFHZixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJM0QsTUFBTSxVQUFVLDhCQUE4QixDQUM1QyxLQUF3QyxFQUN4QyxlQUFnQyxFQUNoQyxtQkFBbUMsRUFDbkMsWUFBaUIsRUFDakIsV0FBd0IsRUFDeEIsUUFBc0IsRUFDdEIsaUJBQXNDLEVBQ3RDLG9CQUF5QyxFQUN6QyxvQkFBeUMsRUFDekMsdUNBQXVFLEVBQ3ZFLG9DQUFvRSxFQUNwRSxnQkFBK0IsRUFDL0IsVUFBZSxFQUNmLGNBQWtCLEVBQ2xCLFVBQXNCO0lBRXRCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxhQUFhLENBQzFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUNyQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUN4QyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUN6QyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUMzQyxDQUFDO0lBRUYsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsd0JBQXdCLENBQzNELGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLFdBQVcsRUFDWCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixvQkFBb0IsQ0FBQyxNQUFNLENB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
@@ -1,113 +0,0 @@
1
- import {
2
- type AvmCircuitPublicInputs,
3
- type AztecAddress,
4
- Fr,
5
- type Gas,
6
- type GasSettings,
7
- type GlobalVariables,
8
- MAX_L2_TO_L1_MSGS_PER_TX,
9
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
10
- PrivateToAvmAccumulatedData,
11
- PrivateToAvmAccumulatedDataArrayLengths,
12
- type PrivateToPublicAccumulatedData,
13
- PublicCallRequest,
14
- PublicDataWrite,
15
- type RevertCode,
16
- type StateReference,
17
- TreeSnapshots,
18
- countAccumulatedItems,
19
- mergeAccumulatedData,
20
- } from '@aztec/circuits.js';
21
- import { padArrayEnd } from '@aztec/foundation/collection';
22
- import { assertLength } from '@aztec/foundation/serialize';
23
-
24
- import { type PublicEnqueuedCallSideEffectTrace } from './enqueued_call_side_effect_trace.js';
25
-
26
- export function generateAvmCircuitPublicInputs(
27
- trace: PublicEnqueuedCallSideEffectTrace,
28
- globalVariables: GlobalVariables,
29
- startStateReference: StateReference,
30
- startGasUsed: Gas,
31
- gasSettings: GasSettings,
32
- feePayer: AztecAddress,
33
- setupCallRequests: PublicCallRequest[],
34
- appLogicCallRequests: PublicCallRequest[],
35
- teardownCallRequests: PublicCallRequest[],
36
- nonRevertibleAccumulatedDataFromPrivate: PrivateToPublicAccumulatedData,
37
- revertibleAccumulatedDataFromPrivate: PrivateToPublicAccumulatedData,
38
- endTreeSnapshots: TreeSnapshots,
39
- endGasUsed: Gas,
40
- transactionFee: Fr,
41
- revertCode: RevertCode,
42
- ): AvmCircuitPublicInputs {
43
- const startTreeSnapshots = new TreeSnapshots(
44
- startStateReference.l1ToL2MessageTree,
45
- startStateReference.partial.noteHashTree,
46
- startStateReference.partial.nullifierTree,
47
- startStateReference.partial.publicDataTree,
48
- );
49
-
50
- const avmCircuitPublicInputs = trace.toAvmCircuitPublicInputs(
51
- globalVariables,
52
- startTreeSnapshots,
53
- startGasUsed,
54
- gasSettings,
55
- feePayer,
56
- setupCallRequests,
57
- appLogicCallRequests,
58
- teardownCallRequests.length ? teardownCallRequests[0] : PublicCallRequest.empty(),
59
- endTreeSnapshots,
60
- endGasUsed,
61
- transactionFee,
62
- !revertCode.isOK(),
63
- );
64
-
65
- const getArrayLengths = (from: PrivateToPublicAccumulatedData) =>
66
- new PrivateToAvmAccumulatedDataArrayLengths(
67
- countAccumulatedItems(from.noteHashes),
68
- countAccumulatedItems(from.nullifiers),
69
- countAccumulatedItems(from.l2ToL1Msgs),
70
- );
71
- const convertAccumulatedData = (from: PrivateToPublicAccumulatedData) =>
72
- new PrivateToAvmAccumulatedData(from.noteHashes, from.nullifiers, from.l2ToL1Msgs);
73
- // Temporary overrides as these entries aren't yet populated in trace
74
- avmCircuitPublicInputs.previousNonRevertibleAccumulatedDataArrayLengths = getArrayLengths(
75
- nonRevertibleAccumulatedDataFromPrivate,
76
- );
77
- avmCircuitPublicInputs.previousRevertibleAccumulatedDataArrayLengths = getArrayLengths(
78
- revertibleAccumulatedDataFromPrivate,
79
- );
80
- avmCircuitPublicInputs.previousNonRevertibleAccumulatedData = convertAccumulatedData(
81
- nonRevertibleAccumulatedDataFromPrivate,
82
- );
83
- avmCircuitPublicInputs.previousRevertibleAccumulatedData = convertAccumulatedData(
84
- revertibleAccumulatedDataFromPrivate,
85
- );
86
-
87
- const msgsFromPrivate = revertCode.isOK()
88
- ? mergeAccumulatedData(
89
- avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs,
90
- avmCircuitPublicInputs.previousRevertibleAccumulatedData.l2ToL1Msgs,
91
- )
92
- : avmCircuitPublicInputs.previousNonRevertibleAccumulatedData.l2ToL1Msgs;
93
- avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs = assertLength(
94
- mergeAccumulatedData(msgsFromPrivate, avmCircuitPublicInputs.accumulatedData.l2ToL1Msgs),
95
- MAX_L2_TO_L1_MSGS_PER_TX,
96
- );
97
-
98
- // Maps slot to value. Maps in TS are iterable in insertion order, which is exactly what we want for
99
- // squashing "to the left", where the first occurrence of a slot uses the value of the last write to it,
100
- // and the rest occurrences are omitted
101
- const squashedPublicDataWrites: Map<bigint, Fr> = new Map();
102
- for (const publicDataWrite of avmCircuitPublicInputs.accumulatedData.publicDataWrites) {
103
- squashedPublicDataWrites.set(publicDataWrite.leafSlot.toBigInt(), publicDataWrite.value);
104
- }
105
-
106
- avmCircuitPublicInputs.accumulatedData.publicDataWrites = padArrayEnd(
107
- Array.from(squashedPublicDataWrites.entries()).map(([slot, value]) => new PublicDataWrite(new Fr(slot), value)),
108
- PublicDataWrite.empty(),
109
- MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
110
- );
111
- //console.log(`AvmCircuitPublicInputs:\n${inspect(avmCircuitPublicInputs)}`);
112
- return avmCircuitPublicInputs;
113
- }