@aztec/simulator 0.43.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.
- package/dest/acvm/oracle/oracle.d.ts +2 -0
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +10 -4
- package/dest/acvm/oracle/typed_oracle.d.ts +5 -3
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +7 -1
- package/dest/avm/avm_execution_environment.d.ts +2 -0
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +9 -4
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +2 -3
- package/dest/avm/fixtures/index.d.ts +10 -6
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +8 -15
- package/dest/avm/journal/journal.d.ts +56 -65
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +76 -115
- package/dest/avm/journal/nullifiers.d.ts +21 -8
- package/dest/avm/journal/nullifiers.d.ts.map +1 -1
- package/dest/avm/journal/nullifiers.js +26 -8
- package/dest/avm/journal/public_storage.d.ts +4 -0
- package/dest/avm/journal/public_storage.d.ts.map +1 -1
- package/dest/avm/journal/public_storage.js +10 -1
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +4 -4
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +12 -27
- package/dest/avm/test_utils.d.ts +14 -0
- package/dest/avm/test_utils.d.ts.map +1 -0
- package/dest/avm/test_utils.js +36 -0
- package/dest/client/client_execution_context.d.ts +3 -3
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +3 -3
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +1 -1
- package/dest/client/execution_result.d.ts +2 -1
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +1 -1
- package/dest/client/index.d.ts +2 -0
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +3 -1
- package/dest/client/simulator.d.ts +3 -3
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +1 -1
- package/dest/client/view_data_oracle.d.ts +2 -0
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +7 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +3 -2
- package/dest/public/abstract_phase_manager.d.ts +1 -0
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +11 -8
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/public/app_logic_phase_manager.js +2 -1
- package/dest/public/execution.d.ts +27 -25
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -1
- package/dest/public/executor.d.ts +9 -4
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +29 -25
- package/dest/public/public_processor.d.ts +5 -2
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +142 -123
- package/dest/public/side_effect_trace.d.ts +86 -0
- package/dest/public/side_effect_trace.d.ts.map +1 -0
- package/dest/public/side_effect_trace.js +222 -0
- package/dest/public/side_effect_trace_interface.d.ts +36 -0
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -0
- package/dest/public/side_effect_trace_interface.js +2 -0
- package/dest/public/teardown_phase_manager.d.ts.map +1 -1
- package/dest/public/teardown_phase_manager.js +2 -1
- package/dest/public/transitional_adaptors.d.ts +2 -6
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +1 -49
- package/package.json +18 -9
- package/src/acvm/oracle/oracle.ts +11 -3
- package/src/acvm/oracle/typed_oracle.ts +17 -3
- package/src/avm/avm_execution_environment.ts +10 -3
- package/src/avm/avm_simulator.ts +2 -3
- package/src/avm/fixtures/index.ts +18 -17
- package/src/avm/journal/journal.ts +114 -223
- package/src/avm/journal/nullifiers.ts +30 -13
- package/src/avm/journal/public_storage.ts +10 -0
- package/src/avm/opcodes/accrued_substate.ts +7 -3
- package/src/avm/opcodes/external_calls.ts +12 -34
- package/src/avm/test_utils.ts +53 -0
- package/src/client/client_execution_context.ts +10 -4
- package/src/client/execution_note_cache.ts +0 -1
- package/src/client/execution_result.ts +2 -1
- package/src/client/index.ts +2 -0
- package/src/client/simulator.ts +8 -2
- package/src/client/view_data_oracle.ts +8 -0
- package/src/mocks/fixtures.ts +2 -1
- package/src/public/abstract_phase_manager.ts +22 -11
- package/src/public/app_logic_phase_manager.ts +1 -0
- package/src/public/execution.ts +35 -25
- package/src/public/executor.ts +44 -37
- package/src/public/public_processor.ts +11 -2
- package/src/public/side_effect_trace.ts +323 -0
- package/src/public/side_effect_trace_interface.ts +41 -0
- package/src/public/teardown_phase_manager.ts +1 -0
- package/src/public/transitional_adaptors.ts +2 -100
- package/dest/avm/journal/trace.d.ts +0 -33
- package/dest/avm/journal/trace.d.ts.map +0 -1
- package/dest/avm/journal/trace.js +0 -152
- package/dest/avm/journal/trace_types.d.ts +0 -55
- package/dest/avm/journal/trace_types.d.ts.map +0 -1
- package/dest/avm/journal/trace_types.js +0 -2
- package/src/avm/journal/trace.ts +0 -181
- package/src/avm/journal/trace_types.ts +0 -91
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
+
import { AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, AztecAddress, CallContext, ContractStorageRead, ContractStorageUpdateRequest, EthAddress, Gas, L2ToL1Message, LogHash, NoteHash, Nullifier, ReadRequest, } from '@aztec/circuits.js';
|
|
3
|
+
import { EventSelector } from '@aztec/foundation/abi';
|
|
4
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
+
import { createSimulationError } from '../common/errors.js';
|
|
6
|
+
export class PublicSideEffectTrace {
|
|
7
|
+
constructor(
|
|
8
|
+
/** The counter of this trace's first side effect. */
|
|
9
|
+
startSideEffectCounter = 0) {
|
|
10
|
+
this.startSideEffectCounter = startSideEffectCounter;
|
|
11
|
+
this.contractStorageReads = [];
|
|
12
|
+
this.contractStorageUpdateRequests = [];
|
|
13
|
+
this.noteHashReadRequests = [];
|
|
14
|
+
this.newNoteHashes = [];
|
|
15
|
+
this.nullifierReadRequests = [];
|
|
16
|
+
this.nullifierNonExistentReadRequests = [];
|
|
17
|
+
this.newNullifiers = [];
|
|
18
|
+
this.l1ToL2MsgReadRequests = [];
|
|
19
|
+
this.newL2ToL1Messages = [];
|
|
20
|
+
this.unencryptedLogs = [];
|
|
21
|
+
this.allUnencryptedLogs = [];
|
|
22
|
+
this.unencryptedLogsHashes = [];
|
|
23
|
+
this.gotContractInstances = [];
|
|
24
|
+
this.nestedExecutions = [];
|
|
25
|
+
this.sideEffectCounter = startSideEffectCounter;
|
|
26
|
+
this.avmCircuitHints = AvmExecutionHints.empty();
|
|
27
|
+
}
|
|
28
|
+
fork() {
|
|
29
|
+
return new PublicSideEffectTrace(this.sideEffectCounter);
|
|
30
|
+
}
|
|
31
|
+
getCounter() {
|
|
32
|
+
return this.sideEffectCounter;
|
|
33
|
+
}
|
|
34
|
+
incrementSideEffectCounter() {
|
|
35
|
+
this.sideEffectCounter++;
|
|
36
|
+
}
|
|
37
|
+
tracePublicStorageRead(storageAddress, slot, value, _exists, _cached) {
|
|
38
|
+
// TODO(4805): check if some threshold is reached for max storage reads
|
|
39
|
+
// (need access to parent length, or trace needs to be initialized with parent's contents)
|
|
40
|
+
// NOTE: exists and cached are unused for now but may be used for optimizations or kernel hints later
|
|
41
|
+
this.contractStorageReads.push(new ContractStorageRead(slot, value, this.sideEffectCounter, AztecAddress.fromField(storageAddress)));
|
|
42
|
+
this.avmCircuitHints.storageValues.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ value));
|
|
43
|
+
this.incrementSideEffectCounter();
|
|
44
|
+
}
|
|
45
|
+
tracePublicStorageWrite(storageAddress, slot, value) {
|
|
46
|
+
// TODO(4805): check if some threshold is reached for max storage writes
|
|
47
|
+
// (need access to parent length, or trace needs to be initialized with parent's contents)
|
|
48
|
+
this.contractStorageUpdateRequests.push(new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, storageAddress));
|
|
49
|
+
this.incrementSideEffectCounter();
|
|
50
|
+
}
|
|
51
|
+
traceNoteHashCheck(_storageAddress, noteHash, _leafIndex, exists) {
|
|
52
|
+
// TODO(4805): check if some threshold is reached for max note hash checks
|
|
53
|
+
// NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
54
|
+
// TODO(dbanks12): leafIndex is unused for now but later must be used by kernel to constrain that the kernel
|
|
55
|
+
// is in fact checking the leaf indicated by the user
|
|
56
|
+
this.noteHashReadRequests.push(new ReadRequest(noteHash, this.sideEffectCounter));
|
|
57
|
+
this.avmCircuitHints.noteHashExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ new Fr(exists ? 1 : 0)));
|
|
58
|
+
this.incrementSideEffectCounter();
|
|
59
|
+
}
|
|
60
|
+
traceNewNoteHash(_storageAddress, noteHash) {
|
|
61
|
+
// TODO(4805): check if some threshold is reached for max new note hash
|
|
62
|
+
// NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
63
|
+
// TODO(dbanks12): non-existent note hashes should emit a read request of the note hash that actually
|
|
64
|
+
// IS there, and the AVM circuit should accept THAT noteHash as a hint. The circuit will then compare
|
|
65
|
+
// the noteHash against the one provided by the user code to determine what to return to the user (exists or not),
|
|
66
|
+
// and will then propagate the actually-present noteHash to its public inputs.
|
|
67
|
+
this.newNoteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
|
|
68
|
+
this.incrementSideEffectCounter();
|
|
69
|
+
}
|
|
70
|
+
traceNullifierCheck(_storageAddress, nullifier, _leafIndex, exists, _isPending) {
|
|
71
|
+
// TODO(4805): check if some threshold is reached for max new nullifier
|
|
72
|
+
// NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
73
|
+
// NOTE: isPending and leafIndex are unused for now but may be used for optimizations or kernel hints later
|
|
74
|
+
const readRequest = new ReadRequest(nullifier, this.sideEffectCounter);
|
|
75
|
+
if (exists) {
|
|
76
|
+
this.nullifierReadRequests.push(readRequest);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.nullifierNonExistentReadRequests.push(readRequest);
|
|
80
|
+
}
|
|
81
|
+
this.avmCircuitHints.nullifierExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ new Fr(exists ? 1 : 0)));
|
|
82
|
+
this.incrementSideEffectCounter();
|
|
83
|
+
}
|
|
84
|
+
traceNewNullifier(_storageAddress, nullifier) {
|
|
85
|
+
// TODO(4805): check if some threshold is reached for max new nullifier
|
|
86
|
+
// NOTE: storageAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
87
|
+
this.newNullifiers.push(new Nullifier(nullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
|
|
88
|
+
this.incrementSideEffectCounter();
|
|
89
|
+
}
|
|
90
|
+
traceL1ToL2MessageCheck(_contractAddress, msgHash, _msgLeafIndex, exists) {
|
|
91
|
+
// TODO(4805): check if some threshold is reached for max message reads
|
|
92
|
+
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
93
|
+
// TODO(dbanks12): leafIndex is unused for now but later must be used by kernel to constrain that the kernel
|
|
94
|
+
// is in fact checking the leaf indicated by the user
|
|
95
|
+
this.l1ToL2MsgReadRequests.push(new ReadRequest(msgHash, this.sideEffectCounter));
|
|
96
|
+
this.avmCircuitHints.l1ToL2MessageExists.items.push(new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ new Fr(exists ? 1 : 0)));
|
|
97
|
+
this.incrementSideEffectCounter();
|
|
98
|
+
}
|
|
99
|
+
traceNewL2ToL1Message(recipient, content) {
|
|
100
|
+
// TODO(4805): check if some threshold is reached for max messages
|
|
101
|
+
const recipientAddress = EthAddress.fromField(recipient);
|
|
102
|
+
this.newL2ToL1Messages.push(new L2ToL1Message(recipientAddress, content, this.sideEffectCounter));
|
|
103
|
+
this.incrementSideEffectCounter();
|
|
104
|
+
}
|
|
105
|
+
traceUnencryptedLog(contractAddress, event, log) {
|
|
106
|
+
// TODO(4805): check if some threshold is reached for max logs
|
|
107
|
+
const ulog = new UnencryptedL2Log(AztecAddress.fromField(contractAddress), EventSelector.fromField(event), Buffer.concat(log.map(f => f.toBuffer())));
|
|
108
|
+
const basicLogHash = Fr.fromBuffer(ulog.hash());
|
|
109
|
+
this.unencryptedLogs.push(ulog);
|
|
110
|
+
this.allUnencryptedLogs.push(ulog);
|
|
111
|
+
// TODO(6578): explain magic number 4 here
|
|
112
|
+
this.unencryptedLogsHashes.push(new LogHash(basicLogHash, this.sideEffectCounter, new Fr(ulog.length + 4)));
|
|
113
|
+
this.incrementSideEffectCounter();
|
|
114
|
+
}
|
|
115
|
+
traceGetContractInstance(instance) {
|
|
116
|
+
// TODO(4805): check if some threshold is reached for max contract instance retrievals
|
|
117
|
+
this.gotContractInstances.push(instance);
|
|
118
|
+
this.avmCircuitHints.contractInstances.items.push(new AvmContractInstanceHint(instance.address, new Fr(instance.exists ? 1 : 0), instance.salt, instance.deployer, instance.contractClassId, instance.initializationHash, instance.publicKeysHash));
|
|
119
|
+
this.incrementSideEffectCounter();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Trace a nested call.
|
|
123
|
+
* Accept some results from a finished nested call's trace into this one.
|
|
124
|
+
*/
|
|
125
|
+
traceNestedCall(
|
|
126
|
+
/** The trace of the nested call. */
|
|
127
|
+
nestedCallTrace,
|
|
128
|
+
/** The execution environment of the nested call. */
|
|
129
|
+
nestedEnvironment,
|
|
130
|
+
/** How much gas was available for this public execution. */
|
|
131
|
+
startGasLeft,
|
|
132
|
+
/** How much gas was left after this public execution. */
|
|
133
|
+
endGasLeft,
|
|
134
|
+
/** Bytecode used for this execution. */
|
|
135
|
+
bytecode,
|
|
136
|
+
/** The call's results */
|
|
137
|
+
avmCallResults,
|
|
138
|
+
/** Function name for logging */
|
|
139
|
+
functionName = 'unknown') {
|
|
140
|
+
const result = nestedCallTrace.toPublicExecutionResult(nestedEnvironment, startGasLeft, endGasLeft, bytecode, avmCallResults, functionName);
|
|
141
|
+
this.sideEffectCounter = result.endSideEffectCounter.toNumber();
|
|
142
|
+
// when a nested call returns, caller accepts its updated counter
|
|
143
|
+
this.allUnencryptedLogs.push(...result.allUnencryptedLogs.logs);
|
|
144
|
+
// NOTE: eventually if the AVM circuit processes an entire enqueued call,
|
|
145
|
+
// this function will accept all of the nested's side effects into this instance
|
|
146
|
+
this.nestedExecutions.push(result);
|
|
147
|
+
const gasUsed = new Gas(result.startGasLeft.daGas - result.endGasLeft.daGas, result.startGasLeft.l2Gas - result.endGasLeft.l2Gas);
|
|
148
|
+
this.avmCircuitHints.externalCalls.items.push(new AvmExternalCallHint(/*success=*/ new Fr(result.reverted ? 0 : 1), result.returnValues, gasUsed));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Convert this trace to a PublicExecutionResult for use externally to the simulator.
|
|
152
|
+
*/
|
|
153
|
+
toPublicExecutionResult(
|
|
154
|
+
/** The execution environment of the nested call. */
|
|
155
|
+
avmEnvironment,
|
|
156
|
+
/** How much gas was available for this public execution. */
|
|
157
|
+
startGasLeft,
|
|
158
|
+
/** How much gas was left after this public execution. */
|
|
159
|
+
endGasLeft,
|
|
160
|
+
/** Bytecode used for this execution. */
|
|
161
|
+
bytecode,
|
|
162
|
+
/** The call's results */
|
|
163
|
+
avmCallResults,
|
|
164
|
+
/** Function name for logging */
|
|
165
|
+
functionName = 'unknown',
|
|
166
|
+
/** The side effect counter of the execution request itself */
|
|
167
|
+
requestSideEffectCounter = this.startSideEffectCounter) {
|
|
168
|
+
return {
|
|
169
|
+
execution: createPublicExecutionRequest(requestSideEffectCounter, avmEnvironment),
|
|
170
|
+
startSideEffectCounter: new Fr(this.startSideEffectCounter),
|
|
171
|
+
endSideEffectCounter: new Fr(this.sideEffectCounter),
|
|
172
|
+
startGasLeft,
|
|
173
|
+
endGasLeft,
|
|
174
|
+
transactionFee: avmEnvironment.transactionFee,
|
|
175
|
+
bytecode,
|
|
176
|
+
calldata: avmEnvironment.calldata,
|
|
177
|
+
returnValues: avmCallResults.output,
|
|
178
|
+
reverted: avmCallResults.reverted,
|
|
179
|
+
revertReason: avmCallResults.revertReason ? createSimulationError(avmCallResults.revertReason) : undefined,
|
|
180
|
+
contractStorageReads: this.contractStorageReads,
|
|
181
|
+
contractStorageUpdateRequests: this.contractStorageUpdateRequests,
|
|
182
|
+
noteHashReadRequests: this.noteHashReadRequests,
|
|
183
|
+
newNoteHashes: this.newNoteHashes,
|
|
184
|
+
nullifierReadRequests: this.nullifierReadRequests,
|
|
185
|
+
nullifierNonExistentReadRequests: this.nullifierNonExistentReadRequests,
|
|
186
|
+
newNullifiers: this.newNullifiers,
|
|
187
|
+
l1ToL2MsgReadRequests: this.l1ToL2MsgReadRequests,
|
|
188
|
+
newL2ToL1Messages: this.newL2ToL1Messages,
|
|
189
|
+
// correct the type on these now that they are finalized (lists won't grow)
|
|
190
|
+
unencryptedLogs: new UnencryptedFunctionL2Logs(this.unencryptedLogs),
|
|
191
|
+
allUnencryptedLogs: new UnencryptedFunctionL2Logs(this.allUnencryptedLogs),
|
|
192
|
+
unencryptedLogsHashes: this.unencryptedLogsHashes,
|
|
193
|
+
// TODO(dbanks12): process contract instance read requests in public kernel
|
|
194
|
+
//gotContractInstances: this.gotContractInstances,
|
|
195
|
+
nestedExecutions: this.nestedExecutions,
|
|
196
|
+
avmCircuitHints: this.avmCircuitHints,
|
|
197
|
+
functionName,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Helper function to create a public execution request from an AVM execution environment
|
|
203
|
+
*/
|
|
204
|
+
function createPublicExecutionRequest(requestSideEffectCounter, avmEnvironment) {
|
|
205
|
+
const callContext = CallContext.from({
|
|
206
|
+
msgSender: avmEnvironment.sender,
|
|
207
|
+
storageContractAddress: avmEnvironment.storageAddress,
|
|
208
|
+
functionSelector: avmEnvironment.temporaryFunctionSelector,
|
|
209
|
+
isDelegateCall: avmEnvironment.isDelegateCall,
|
|
210
|
+
isStaticCall: avmEnvironment.isStaticCall,
|
|
211
|
+
sideEffectCounter: requestSideEffectCounter,
|
|
212
|
+
});
|
|
213
|
+
const execution = {
|
|
214
|
+
contractAddress: avmEnvironment.address,
|
|
215
|
+
functionSelector: avmEnvironment.temporaryFunctionSelector,
|
|
216
|
+
callContext,
|
|
217
|
+
// execution request does not contain AvmContextInputs prefix
|
|
218
|
+
args: avmEnvironment.getCalldataWithoutPrefix(),
|
|
219
|
+
};
|
|
220
|
+
return execution;
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfdHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFVBQVUsRUFDVixHQUFHLEVBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsR0FDWixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFLOUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNNUQsTUFBTSxPQUFPLHFCQUFxQjtJQTJCaEM7SUFDRSxxREFBcUQ7SUFDckMseUJBQWlDLENBQUM7UUFBbEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFZO1FBekI1Qyx5QkFBb0IsR0FBMEIsRUFBRSxDQUFDO1FBQ2pELGtDQUE2QixHQUFtQyxFQUFFLENBQUM7UUFFbkUseUJBQW9CLEdBQWtCLEVBQUUsQ0FBQztRQUN6QyxrQkFBYSxHQUFlLEVBQUUsQ0FBQztRQUUvQiwwQkFBcUIsR0FBa0IsRUFBRSxDQUFDO1FBQzFDLHFDQUFnQyxHQUFrQixFQUFFLENBQUM7UUFDckQsa0JBQWEsR0FBZ0IsRUFBRSxDQUFDO1FBRWhDLDBCQUFxQixHQUFrQixFQUFFLENBQUM7UUFDMUMsc0JBQWlCLEdBQW9CLEVBQUUsQ0FBQztRQUV4QyxvQkFBZSxHQUF1QixFQUFFLENBQUM7UUFD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
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { type Gas } from '@aztec/circuits.js';
|
|
3
|
+
import { type Fr } from '@aztec/foundation/fields';
|
|
4
|
+
import { type AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
5
|
+
import { type AvmContractCallResults } from '../avm/avm_message_call_result.js';
|
|
6
|
+
import { type TracedContractInstance } from './side_effect_trace.js';
|
|
7
|
+
export interface PublicSideEffectTraceInterface {
|
|
8
|
+
fork(): PublicSideEffectTraceInterface;
|
|
9
|
+
getCounter(): number;
|
|
10
|
+
tracePublicStorageRead(storageAddress: Fr, slot: Fr, value: Fr, exists: boolean, cached: boolean): void;
|
|
11
|
+
tracePublicStorageWrite(storageAddress: Fr, slot: Fr, value: Fr): void;
|
|
12
|
+
traceNoteHashCheck(storageAddress: Fr, noteHash: Fr, leafIndex: Fr, exists: boolean): void;
|
|
13
|
+
traceNewNoteHash(storageAddress: Fr, noteHash: Fr): void;
|
|
14
|
+
traceNullifierCheck(storageAddress: Fr, nullifier: Fr, leafIndex: Fr, exists: boolean, isPending: boolean): void;
|
|
15
|
+
traceNewNullifier(storageAddress: Fr, nullifier: Fr): void;
|
|
16
|
+
traceL1ToL2MessageCheck(contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr, exists: boolean): void;
|
|
17
|
+
traceNewL2ToL1Message(recipient: Fr, content: Fr): void;
|
|
18
|
+
traceUnencryptedLog(contractAddress: Fr, event: Fr, log: Fr[]): void;
|
|
19
|
+
traceGetContractInstance(instance: TracedContractInstance): void;
|
|
20
|
+
traceNestedCall(
|
|
21
|
+
/** The trace of the nested call. */
|
|
22
|
+
nestedCallTrace: PublicSideEffectTraceInterface,
|
|
23
|
+
/** The execution environment of the nested call. */
|
|
24
|
+
nestedEnvironment: AvmExecutionEnvironment,
|
|
25
|
+
/** How much gas was available for this public execution. */
|
|
26
|
+
startGasLeft: Gas,
|
|
27
|
+
/** How much gas was left after this public execution. */
|
|
28
|
+
endGasLeft: Gas,
|
|
29
|
+
/** Bytecode used for this execution. */
|
|
30
|
+
bytecode: Buffer,
|
|
31
|
+
/** The call's results */
|
|
32
|
+
avmCallResults: AvmContractCallResults,
|
|
33
|
+
/** Function name */
|
|
34
|
+
functionName: string): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=side_effect_trace_interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"side_effect_trace_interface.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace_interface.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,IAAI,8BAA8B,CAAC;IACvC,UAAU,IAAI,MAAM,CAAC;IACrB,sBAAsB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACxG,uBAAuB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;IACvE,kBAAkB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3F,gBAAgB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC;IACzD,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACjH,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC;IAC3D,uBAAuB,CAAC,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnG,qBAAqB,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;IACxD,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAErE,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACjE,eAAe;IACb,oCAAoC;IACpC,eAAe,EAAE,8BAA8B;IAC/C,oDAAoD;IACpD,iBAAiB,EAAE,uBAAuB;IAC1C,4DAA4D;IAE5D,YAAY,EAAE,GAAG;IACjB,yDAAyD;IAEzD,UAAU,EAAE,GAAG;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM;IAChB,yBAAyB;IACzB,cAAc,EAAE,sBAAsB;IACtC,oBAAoB;IACpB,YAAY,EAAE,MAAM,GACnB,IAAI,CAAC;CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teardown_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/teardown_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EACL,KAAK,EAAE,EACP,KAAK,GAAG,EACR,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEzF;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,oBAAoB;IAO1D,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;gBANtC,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACd,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EACtC,KAAK,GAAE,gBAA4C;IAKtC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,0BAA0B,EAAE,+BAA+B;;;;;;;
|
|
1
|
+
{"version":3,"file":"teardown_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/teardown_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EACL,KAAK,EAAE,EACP,KAAK,GAAG,EACR,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEzF;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,oBAAoB;IAO1D,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;gBANtC,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACd,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EACtC,KAAK,GAAE,gBAA4C;IAKtC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,0BAA0B,EAAE,+BAA+B;;;;;;;cA0BtE,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,0BAA0B,EAAE,+BAA+B,GAAG,EAAE;cAU1F,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,2BAA2B,EAAE,+BAA+B,GAAG,GAAG;CAG9G"}
|
|
@@ -20,6 +20,7 @@ export class TeardownPhaseManager extends AbstractPhaseManager {
|
|
|
20
20
|
});
|
|
21
21
|
if (revertReason) {
|
|
22
22
|
await this.publicStateDB.rollbackToCheckpoint();
|
|
23
|
+
tx.filterRevertedLogs(kernelOutput);
|
|
23
24
|
}
|
|
24
25
|
else {
|
|
25
26
|
// TODO(#6464): Should we allow emitting contracts in the public teardown phase?
|
|
@@ -45,4 +46,4 @@ export class TeardownPhaseManager extends AbstractPhaseManager {
|
|
|
45
46
|
return tx.data.constants.txContext.gasSettings.getTeardownLimits();
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcmRvd25fcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvdGVhcmRvd25fcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXNDLE1BQU0sc0JBQXNCLENBQUM7QUFXNUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUkxRjs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUFDNUQsWUFDRSxFQUF3QixFQUN4QixjQUE4QixFQUM5QixZQUEwQyxFQUMxQyxlQUFnQyxFQUNoQyxnQkFBd0IsRUFDZCxpQkFBOEMsRUFDOUMsYUFBNEIsRUFDdEMsUUFBMEIsZ0JBQWdCLENBQUMsUUFBUTtRQUVuRCxLQUFLLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBSnhFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFDOUMsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFJeEMsQ0FBQztJQUVRLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBTSxFQUFFLDBCQUEyRDtRQUN2RixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FDekYsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxFQUFFLDBCQUEwQixDQUFDLENBQUMsS0FBSztRQUN6RSx3RkFBd0Y7UUFDeEYsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDNUMsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQ0YsQ0FBQztRQUNKLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDaEQsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ04sZ0ZBQWdGO1lBQ2hGLG9DQUFvQztZQUNwQyxFQUFFLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCw2Q0FBNkM7UUFDN0MsTUFBTSxxQkFBcUIsR0FBMkIsd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hGLE9BQU8scUJBQXFCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM5RyxDQUFDO0lBRWtCLGlCQUFpQixDQUFDLEVBQU0sRUFBRSwwQkFBMkQ7UUFDdEcsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUM3QyxnRkFBZ0Y7UUFDaEYsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEgsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkcsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRWtCLGVBQWUsQ0FBQyxFQUFNLEVBQUUsMkJBQTREO1FBQ3JHLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3JFLENBQUM7Q0FDRiJ9
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import {
|
|
2
|
+
import { type GasSettings, type GlobalVariables, type Header } from '@aztec/circuits.js';
|
|
3
3
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
import { type AvmContext } from '../avm/avm_context.js';
|
|
5
4
|
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
6
|
-
import { type
|
|
7
|
-
import { type PublicExecution, type PublicExecutionResult } from './execution.js';
|
|
5
|
+
import { type PublicExecution } from './execution.js';
|
|
8
6
|
/**
|
|
9
7
|
* Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
|
|
10
8
|
*
|
|
@@ -13,8 +11,6 @@ import { type PublicExecution, type PublicExecutionResult } from './execution.js
|
|
|
13
11
|
* @returns
|
|
14
12
|
*/
|
|
15
13
|
export declare function createAvmExecutionEnvironment(current: PublicExecution, header: Header, globalVariables: GlobalVariables, gasSettings: GasSettings, transactionFee: Fr): AvmExecutionEnvironment;
|
|
16
|
-
export declare function createPublicExecution(startSideEffectCounter: number, avmEnvironment: AvmExecutionEnvironment, calldata: Fr[]): PublicExecution;
|
|
17
|
-
export declare function convertAvmResultsToPxResult(avmResult: AvmContractCallResults, startSideEffectCounter: number, fromPx: PublicExecution, startGas: Gas, endAvmContext: AvmContext, bytecode: Buffer | undefined): PublicExecutionResult;
|
|
18
14
|
export declare function markBytecodeAsAvm(bytecode: Buffer): Buffer;
|
|
19
15
|
export declare function decompressBytecodeIfCompressed(bytecode: Buffer): Promise<Buffer>;
|
|
20
16
|
export declare function isAvmBytecode(bytecode: Buffer): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transitional_adaptors.d.ts","sourceRoot":"","sources":["../../src/public/transitional_adaptors.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"transitional_adaptors.d.ts","sourceRoot":"","sources":["../../src/public/transitional_adaptors.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAK9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,EAAE,GACjB,uBAAuB,CAiBzB;AASD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAGD,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtF;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAItE"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
// All code in this file needs to die once the public executor is phased out in favor of the AVM.
|
|
2
|
-
import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
|
|
3
|
-
import { AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, CallContext, Gas, } from '@aztec/circuits.js';
|
|
4
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
2
|
import { promisify } from 'util';
|
|
6
3
|
import { gunzip } from 'zlib';
|
|
7
4
|
import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
8
5
|
import { Mov } from '../avm/opcodes/memory.js';
|
|
9
|
-
import { createSimulationError } from '../common/errors.js';
|
|
10
6
|
/**
|
|
11
7
|
* Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
|
|
12
8
|
*
|
|
@@ -18,50 +14,6 @@ export function createAvmExecutionEnvironment(current, header, globalVariables,
|
|
|
18
14
|
return new AvmExecutionEnvironment(current.contractAddress, current.callContext.storageContractAddress, current.callContext.msgSender, globalVariables.gasFees.feePerL2Gas, globalVariables.gasFees.feePerDaGas,
|
|
19
15
|
/*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, gasSettings, transactionFee, current.functionSelector);
|
|
20
16
|
}
|
|
21
|
-
export function createPublicExecution(startSideEffectCounter, avmEnvironment, calldata) {
|
|
22
|
-
const callContext = CallContext.from({
|
|
23
|
-
msgSender: avmEnvironment.sender,
|
|
24
|
-
storageContractAddress: avmEnvironment.storageAddress,
|
|
25
|
-
functionSelector: avmEnvironment.temporaryFunctionSelector,
|
|
26
|
-
isDelegateCall: avmEnvironment.isDelegateCall,
|
|
27
|
-
isStaticCall: avmEnvironment.isStaticCall,
|
|
28
|
-
sideEffectCounter: startSideEffectCounter,
|
|
29
|
-
});
|
|
30
|
-
const execution = {
|
|
31
|
-
contractAddress: avmEnvironment.address,
|
|
32
|
-
callContext,
|
|
33
|
-
args: calldata,
|
|
34
|
-
functionSelector: avmEnvironment.temporaryFunctionSelector,
|
|
35
|
-
};
|
|
36
|
-
return execution;
|
|
37
|
-
}
|
|
38
|
-
function computeHints(trace, executionResult) {
|
|
39
|
-
return new AvmExecutionHints(trace.publicStorageReads.map(read => new AvmKeyValueHint(read.counter, read.value)), trace.noteHashChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))), trace.nullifierChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))), trace.l1ToL2MessageChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))), executionResult.nestedExecutions.map(nested => {
|
|
40
|
-
const gasUsed = new Gas(nested.startGasLeft.daGas - nested.endGasLeft.daGas, nested.startGasLeft.l2Gas - nested.endGasLeft.l2Gas);
|
|
41
|
-
return new AvmExternalCallHint(/*success=*/ new Fr(nested.reverted ? 0 : 1), nested.returnValues, gasUsed);
|
|
42
|
-
}), trace.gotContractInstances.map(instance => new AvmContractInstanceHint(instance.address, new Fr(instance.exists ? 1 : 0), instance.salt, instance.deployer, instance.contractClassId, instance.initializationHash, instance.publicKeysHash)));
|
|
43
|
-
}
|
|
44
|
-
export function convertAvmResultsToPxResult(avmResult, startSideEffectCounter, fromPx, startGas, endAvmContext, bytecode) {
|
|
45
|
-
const endPersistableState = endAvmContext.persistableState;
|
|
46
|
-
const endMachineState = endAvmContext.machineState;
|
|
47
|
-
return {
|
|
48
|
-
...endPersistableState.transitionalExecutionResult, // includes nestedExecutions
|
|
49
|
-
execution: fromPx,
|
|
50
|
-
returnValues: avmResult.output,
|
|
51
|
-
startSideEffectCounter: new Fr(startSideEffectCounter),
|
|
52
|
-
endSideEffectCounter: new Fr(endPersistableState.trace.accessCounter),
|
|
53
|
-
unencryptedLogs: new UnencryptedFunctionL2Logs(endPersistableState.transitionalExecutionResult.unencryptedLogs),
|
|
54
|
-
allUnencryptedLogs: new UnencryptedFunctionL2Logs(endPersistableState.transitionalExecutionResult.allUnencryptedLogs),
|
|
55
|
-
reverted: avmResult.reverted,
|
|
56
|
-
revertReason: avmResult.revertReason ? createSimulationError(avmResult.revertReason) : undefined,
|
|
57
|
-
startGasLeft: startGas,
|
|
58
|
-
endGasLeft: endMachineState.gasLeft,
|
|
59
|
-
transactionFee: endAvmContext.environment.transactionFee,
|
|
60
|
-
bytecode: bytecode,
|
|
61
|
-
calldata: endAvmContext.environment.calldata,
|
|
62
|
-
avmHints: computeHints(endPersistableState.trace, endPersistableState.transitionalExecutionResult),
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
17
|
const AVM_MAGIC_SUFFIX = Buffer.from([
|
|
66
18
|
Mov.opcode, // opcode
|
|
67
19
|
0x00, // indirect
|
|
@@ -87,4 +39,4 @@ export async function isAvmBytecode(bytecode) {
|
|
|
87
39
|
const magicSize = AVM_MAGIC_SUFFIX.length;
|
|
88
40
|
return decompressedBytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
|
|
89
41
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHL0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxPQUF3QixFQUN4QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsV0FBd0IsRUFDeEIsY0FBa0I7SUFFbEIsT0FBTyxJQUFJLHVCQUF1QixDQUNoQyxPQUFPLENBQUMsZUFBZSxFQUN2QixPQUFPLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUMxQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFDN0IsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVztJQUNuQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQ2hDLE1BQU0sRUFDTixlQUFlLEVBQ2YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQ2hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUNsQyxPQUFPLENBQUMsSUFBSSxFQUNaLFdBQVcsRUFDWCxjQUFjLEVBQ2QsT0FBTyxDQUFDLGdCQUFnQixDQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNuQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVM7SUFDckIsSUFBSSxFQUFFLFdBQVc7SUFDakIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxZQUFZO0lBQy9DLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsWUFBWTtDQUNoRCxDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsc0RBQXNEO0FBQ3RELE1BQU0sQ0FBQyxLQUFLLFVBQVUsOEJBQThCLENBQUMsUUFBZ0I7SUFDbkUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxRQUFnQjtJQUNsRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUUsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0lBQzFDLE9BQU8sb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDNUUsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -32,7 +32,15 @@
|
|
|
32
32
|
"rootDir": "./src",
|
|
33
33
|
"transform": {
|
|
34
34
|
"^.+\\.tsx?$": [
|
|
35
|
-
"@swc/jest"
|
|
35
|
+
"@swc/jest",
|
|
36
|
+
{
|
|
37
|
+
"jsc": {
|
|
38
|
+
"parser": {
|
|
39
|
+
"syntax": "typescript",
|
|
40
|
+
"decorators": true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
36
44
|
]
|
|
37
45
|
},
|
|
38
46
|
"extensionsToTreatAsEsm": [
|
|
@@ -48,13 +56,14 @@
|
|
|
48
56
|
]
|
|
49
57
|
},
|
|
50
58
|
"dependencies": {
|
|
51
|
-
"@aztec/circuit-types": "0.
|
|
52
|
-
"@aztec/circuits.js": "0.
|
|
53
|
-
"@aztec/foundation": "0.
|
|
54
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
55
|
-
"@aztec/protocol-contracts": "0.
|
|
56
|
-
"@aztec/
|
|
57
|
-
"@aztec/
|
|
59
|
+
"@aztec/circuit-types": "0.44.0",
|
|
60
|
+
"@aztec/circuits.js": "0.44.0",
|
|
61
|
+
"@aztec/foundation": "0.44.0",
|
|
62
|
+
"@aztec/noir-protocol-circuits-types": "0.44.0",
|
|
63
|
+
"@aztec/protocol-contracts": "0.44.0",
|
|
64
|
+
"@aztec/telemetry-client": "0.44.0",
|
|
65
|
+
"@aztec/types": "0.44.0",
|
|
66
|
+
"@aztec/world-state": "0.44.0",
|
|
58
67
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
59
68
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
60
69
|
"levelup": "^5.1.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
2
|
import { KeyValidationRequest } from '@aztec/circuits.js';
|
|
3
|
-
import { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
|
|
3
|
+
import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/foundation/abi';
|
|
4
4
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
5
|
import { Fr, Point } from '@aztec/foundation/fields';
|
|
6
6
|
|
|
@@ -49,6 +49,14 @@ export class Oracle {
|
|
|
49
49
|
return toACVMField(await this.typedOracle.getContractAddress());
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
async getVersion(): Promise<ACVMField> {
|
|
53
|
+
return toACVMField(await this.typedOracle.getVersion());
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async getChainId(): Promise<ACVMField> {
|
|
57
|
+
return toACVMField(await this.typedOracle.getChainId());
|
|
58
|
+
}
|
|
59
|
+
|
|
52
60
|
async getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
|
|
53
61
|
const { pkM, skApp } = await this.typedOracle.getKeyValidationRequest(fromACVMField(pkMHash));
|
|
54
62
|
|
|
@@ -244,7 +252,7 @@ export class Oracle {
|
|
|
244
252
|
): ACVMField {
|
|
245
253
|
this.typedOracle.notifyCreatedNote(
|
|
246
254
|
fromACVMField(storageSlot),
|
|
247
|
-
fromACVMField(noteTypeId),
|
|
255
|
+
NoteSelector.fromField(fromACVMField(noteTypeId)),
|
|
248
256
|
note.map(fromACVMField),
|
|
249
257
|
fromACVMField(innerNoteHash),
|
|
250
258
|
+counter,
|
|
@@ -357,7 +365,7 @@ export class Oracle {
|
|
|
357
365
|
const encLog = this.typedOracle.computeEncryptedNoteLog(
|
|
358
366
|
AztecAddress.fromString(contractAddress),
|
|
359
367
|
Fr.fromString(storageSlot),
|
|
360
|
-
Fr.fromString(noteTypeId),
|
|
368
|
+
NoteSelector.fromField(Fr.fromString(noteTypeId)),
|
|
361
369
|
ovKeys,
|
|
362
370
|
ivpkM,
|
|
363
371
|
preimage.map(fromACVMField),
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
type PrivateCallStackItem,
|
|
17
17
|
type PublicCallRequest,
|
|
18
18
|
} from '@aztec/circuits.js';
|
|
19
|
-
import { type FunctionSelector } from '@aztec/foundation/abi';
|
|
19
|
+
import { type FunctionSelector, type NoteSelector } from '@aztec/foundation/abi';
|
|
20
20
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
21
21
|
import { Fr } from '@aztec/foundation/fields';
|
|
22
22
|
import { type ContractInstance } from '@aztec/types/contracts';
|
|
@@ -90,6 +90,14 @@ export abstract class TypedOracle {
|
|
|
90
90
|
throw new OracleMethodNotAvailableError('getContractAddress');
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
getChainId(): Promise<Fr> {
|
|
94
|
+
throw new OracleMethodNotAvailableError('getChainId');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
getVersion(): Promise<Fr> {
|
|
98
|
+
throw new OracleMethodNotAvailableError('getVersion');
|
|
99
|
+
}
|
|
100
|
+
|
|
93
101
|
getKeyValidationRequest(_pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
94
102
|
throw new OracleMethodNotAvailableError('getKeyValidationRequest');
|
|
95
103
|
}
|
|
@@ -156,7 +164,13 @@ export abstract class TypedOracle {
|
|
|
156
164
|
throw new OracleMethodNotAvailableError('getNotes');
|
|
157
165
|
}
|
|
158
166
|
|
|
159
|
-
notifyCreatedNote(
|
|
167
|
+
notifyCreatedNote(
|
|
168
|
+
_storageSlot: Fr,
|
|
169
|
+
_noteTypeId: NoteSelector,
|
|
170
|
+
_note: Fr[],
|
|
171
|
+
_innerNoteHash: Fr,
|
|
172
|
+
_counter: number,
|
|
173
|
+
): void {
|
|
160
174
|
throw new OracleMethodNotAvailableError('notifyCreatedNote');
|
|
161
175
|
}
|
|
162
176
|
|
|
@@ -211,7 +225,7 @@ export abstract class TypedOracle {
|
|
|
211
225
|
computeEncryptedNoteLog(
|
|
212
226
|
_contractAddress: AztecAddress,
|
|
213
227
|
_storageSlot: Fr,
|
|
214
|
-
_noteTypeId:
|
|
228
|
+
_noteTypeId: NoteSelector,
|
|
215
229
|
_ovKeys: KeyValidationRequest,
|
|
216
230
|
_ivpkM: PublicKey,
|
|
217
231
|
_preimage: Fr[],
|
|
@@ -19,6 +19,7 @@ export class AvmContextInputs {
|
|
|
19
19
|
*/
|
|
20
20
|
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/3992): gas not implemented
|
|
21
21
|
export class AvmExecutionEnvironment {
|
|
22
|
+
private readonly calldataPrefixLength;
|
|
22
23
|
constructor(
|
|
23
24
|
public readonly address: AztecAddress,
|
|
24
25
|
public readonly storageAddress: AztecAddress,
|
|
@@ -45,8 +46,9 @@ export class AvmExecutionEnvironment {
|
|
|
45
46
|
temporaryFunctionSelector.toField(),
|
|
46
47
|
computeVarArgsHash(calldata),
|
|
47
48
|
isStaticCall,
|
|
48
|
-
);
|
|
49
|
-
this.calldata = [...inputs
|
|
49
|
+
).toFields();
|
|
50
|
+
this.calldata = [...inputs, ...calldata];
|
|
51
|
+
this.calldataPrefixLength = inputs.length;
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
private deriveEnvironmentForNestedCallInternal(
|
|
@@ -62,7 +64,7 @@ export class AvmExecutionEnvironment {
|
|
|
62
64
|
/*sender=*/ this.address,
|
|
63
65
|
this.feePerL2Gas,
|
|
64
66
|
this.feePerDaGas,
|
|
65
|
-
this.contractCallDepth,
|
|
67
|
+
this.contractCallDepth.add(Fr.ONE),
|
|
66
68
|
this.header,
|
|
67
69
|
this.globals,
|
|
68
70
|
isStaticCall,
|
|
@@ -109,4 +111,9 @@ export class AvmExecutionEnvironment {
|
|
|
109
111
|
): AvmExecutionEnvironment {
|
|
110
112
|
throw new Error('Delegate calls not supported!');
|
|
111
113
|
}
|
|
114
|
+
|
|
115
|
+
public getCalldataWithoutPrefix(): Fr[] {
|
|
116
|
+
// clip off the first few entries
|
|
117
|
+
return this.calldata.slice(this.calldataPrefixLength);
|
|
118
|
+
}
|
|
112
119
|
}
|
package/src/avm/avm_simulator.ts
CHANGED
|
@@ -29,10 +29,9 @@ export class AvmSimulator {
|
|
|
29
29
|
* Fetch the bytecode and execute it in the current context.
|
|
30
30
|
*/
|
|
31
31
|
public async execute(): Promise<AvmContractCallResults> {
|
|
32
|
-
const
|
|
33
|
-
const bytecode = await this.context.persistableState.hostStorage.contractsDb.getBytecode(
|
|
32
|
+
const bytecode = await this.context.persistableState.getBytecode(
|
|
34
33
|
this.context.environment.address,
|
|
35
|
-
|
|
34
|
+
this.context.environment.temporaryFunctionSelector,
|
|
36
35
|
);
|
|
37
36
|
|
|
38
37
|
// This assumes that we will not be able to send messages to accounts without code
|