@aztec/simulator 0.41.0 → 0.42.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/acvm.d.ts +2 -2
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/acvm.js +3 -3
- package/dest/acvm/oracle/oracle.d.ts +6 -4
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +20 -11
- 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 +10 -4
- package/dest/acvm/serialize.js +2 -2
- package/dest/avm/avm_gas.d.ts +1 -5
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +67 -73
- package/dest/avm/avm_simulator.d.ts +5 -0
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +8 -1
- package/dest/avm/fixtures/index.d.ts +3 -0
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +13 -1
- package/dest/avm/index.d.ts +2 -0
- package/dest/avm/index.d.ts.map +1 -0
- package/dest/avm/index.js +2 -0
- package/dest/avm/journal/host_storage.d.ts +1 -1
- package/dest/avm/journal/host_storage.d.ts.map +1 -1
- package/dest/avm/journal/journal.d.ts +2 -0
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +6 -2
- package/dest/avm/journal/trace.d.ts +2 -0
- package/dest/avm/journal/trace.d.ts.map +1 -1
- package/dest/avm/journal/trace.js +7 -1
- package/dest/avm/journal/trace_types.d.ts +1 -0
- package/dest/avm/journal/trace_types.d.ts.map +1 -1
- package/dest/avm/journal/trace_types.js +1 -1
- package/dest/avm/opcodes/arithmetic.d.ts +1 -7
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +1 -12
- package/dest/avm/opcodes/conversion.js +2 -2
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +4 -3
- package/dest/avm/opcodes/instruction.d.ts +1 -1
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +6 -4
- package/dest/avm/opcodes/memory.d.ts +0 -4
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +1 -7
- package/dest/avm/opcodes/storage.d.ts +0 -5
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +1 -7
- package/dest/avm/serialization/bytecode_serialization.js +2 -2
- package/dest/client/client_execution_context.d.ts +11 -19
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +26 -43
- package/dest/client/db_oracle.d.ts +7 -1
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/execution_note_cache.d.ts +0 -17
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +1 -24
- package/dest/client/execution_result.d.ts +8 -4
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +16 -6
- package/dest/client/private_execution.d.ts +2 -3
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +20 -9
- package/dest/client/simulator.d.ts +0 -16
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +8 -25
- package/dest/client/unconstrained_execution.d.ts +2 -3
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +5 -7
- 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/index.d.ts +3 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +4 -2
- package/dest/mocks/fixtures.d.ts +14 -10
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +22 -16
- package/dest/{simulator → providers}/acvm_native.d.ts.map +1 -1
- package/dest/{simulator → providers}/acvm_native.js +13 -14
- package/dest/providers/acvm_wasm.d.ts.map +1 -0
- package/dest/providers/acvm_wasm.js +15 -0
- package/dest/providers/index.d.ts.map +1 -0
- package/dest/{simulator → providers}/index.js +1 -1
- package/dest/{simulator → providers}/simulation_provider.d.ts.map +1 -1
- package/dest/{simulator → providers}/simulation_provider.js +1 -1
- package/dest/public/abstract_phase_manager.d.ts +43 -42
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +77 -106
- package/dest/public/app_logic_phase_manager.d.ts +6 -7
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/public/app_logic_phase_manager.js +14 -14
- package/dest/public/{db.d.ts → db_interfaces.d.ts} +3 -3
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +2 -0
- package/dest/public/execution.d.ts +16 -9
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -1
- package/dest/public/executor.d.ts +3 -30
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +32 -282
- package/dest/public/fee_payment.d.ts +11 -0
- package/dest/public/fee_payment.d.ts.map +1 -0
- package/dest/public/fee_payment.js +24 -0
- package/dest/public/hints_builder.d.ts +1 -0
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +6 -2
- package/dest/public/index.d.ts +4 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +5 -3
- package/dest/public/phase_manager_factory.d.ts +1 -1
- package/dest/public/phase_manager_factory.d.ts.map +1 -1
- package/dest/public/{public_executor.d.ts → public_db_sources.d.ts} +3 -2
- package/dest/public/public_db_sources.d.ts.map +1 -0
- package/dest/public/public_db_sources.js +198 -0
- package/dest/public/public_kernel.js +14 -14
- package/dest/public/public_processor.d.ts +6 -4
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +46 -27
- package/dest/public/setup_phase_manager.d.ts +6 -8
- package/dest/public/setup_phase_manager.d.ts.map +1 -1
- package/dest/public/setup_phase_manager.js +11 -20
- package/dest/public/tail_phase_manager.d.ts +4 -10
- package/dest/public/tail_phase_manager.d.ts.map +1 -1
- package/dest/public/tail_phase_manager.js +15 -35
- package/dest/public/teardown_phase_manager.d.ts +6 -8
- package/dest/public/teardown_phase_manager.d.ts.map +1 -1
- package/dest/public/teardown_phase_manager.js +15 -21
- package/dest/public/transitional_adaptors.d.ts +1 -1
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +8 -6
- package/dest/public/utils.d.ts +2 -2
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +21 -14
- package/package.json +12 -9
- package/src/acvm/acvm.ts +0 -3
- package/src/acvm/oracle/oracle.ts +36 -13
- package/src/acvm/oracle/typed_oracle.ts +12 -3
- package/src/acvm/serialize.ts +1 -1
- package/src/avm/avm_gas.ts +66 -73
- package/src/avm/avm_simulator.ts +9 -0
- package/src/avm/fixtures/index.ts +20 -0
- package/src/avm/index.ts +1 -0
- package/src/avm/journal/host_storage.ts +1 -1
- package/src/avm/journal/journal.ts +6 -1
- package/src/avm/journal/trace.ts +12 -0
- package/src/avm/journal/trace_types.ts +1 -0
- package/src/avm/opcodes/arithmetic.ts +1 -14
- package/src/avm/opcodes/conversion.ts +1 -1
- package/src/avm/opcodes/external_calls.ts +3 -1
- package/src/avm/opcodes/instruction.ts +5 -3
- package/src/avm/opcodes/memory.ts +1 -8
- package/src/avm/opcodes/storage.ts +1 -8
- package/src/avm/serialization/bytecode_serialization.ts +1 -1
- package/src/client/client_execution_context.ts +33 -45
- package/src/client/db_oracle.ts +8 -1
- package/src/client/execution_note_cache.ts +0 -28
- package/src/client/execution_result.ts +21 -7
- package/src/client/private_execution.ts +36 -21
- package/src/client/simulator.ts +7 -27
- package/src/client/unconstrained_execution.ts +9 -12
- package/src/client/view_data_oracle.ts +8 -0
- package/src/index.ts +3 -1
- package/src/mocks/fixtures.ts +30 -32
- package/src/{simulator → providers}/acvm_native.ts +21 -19
- package/src/{simulator → providers}/acvm_wasm.ts +2 -16
- package/src/public/abstract_phase_manager.ts +138 -205
- package/src/public/app_logic_phase_manager.ts +23 -39
- package/src/public/{db.ts → db_interfaces.ts} +2 -2
- package/src/public/execution.ts +15 -8
- package/src/public/executor.ts +51 -398
- package/src/public/fee_payment.ts +26 -0
- package/src/public/hints_builder.ts +6 -0
- package/src/public/index.ts +4 -2
- package/src/public/phase_manager_factory.ts +1 -1
- package/src/public/{public_executor.ts → public_db_sources.ts} +3 -2
- package/src/public/public_kernel.ts +24 -24
- package/src/public/public_processor.ts +77 -33
- package/src/public/setup_phase_manager.ts +20 -45
- package/src/public/tail_phase_manager.ts +17 -65
- package/src/public/teardown_phase_manager.ts +22 -41
- package/src/public/transitional_adaptors.ts +7 -11
- package/src/public/utils.ts +20 -14
- package/dest/public/db.d.ts.map +0 -1
- package/dest/public/db.js +0 -2
- package/dest/public/public_execution_context.d.ts +0 -121
- package/dest/public/public_execution_context.d.ts.map +0 -1
- package/dest/public/public_execution_context.js +0 -214
- package/dest/public/public_executor.d.ts.map +0 -1
- package/dest/public/public_executor.js +0 -197
- package/dest/public/state_actions.d.ts +0 -39
- package/dest/public/state_actions.d.ts.map +0 -1
- package/dest/public/state_actions.js +0 -80
- package/dest/simulator/acvm_wasm.d.ts.map +0 -1
- package/dest/simulator/acvm_wasm.js +0 -22
- package/dest/simulator/index.d.ts.map +0 -1
- package/src/public/public_execution_context.ts +0 -289
- package/src/public/state_actions.ts +0 -102
- /package/dest/{simulator → providers}/acvm_native.d.ts +0 -0
- /package/dest/{simulator → providers}/acvm_wasm.d.ts +0 -0
- /package/dest/{simulator → providers}/index.d.ts +0 -0
- /package/dest/{simulator → providers}/simulation_provider.d.ts +0 -0
- /package/src/{simulator → providers}/index.ts +0 -0
- /package/src/{simulator → providers}/simulation_provider.ts +0 -0
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
var _ClientExecutionContext_instances, _ClientExecutionContext_checkValidStaticCall;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
|
-
import { EncryptedL2Log, L1NotePayload, Note, TaggedNote, } from '@aztec/circuit-types';
|
|
4
|
-
import { CallContext,
|
|
3
|
+
import { EncryptedL2Log, EncryptedL2NoteLog, L1NotePayload, Note, TaggedNote, } from '@aztec/circuit-types';
|
|
4
|
+
import { CallContext, FunctionSelector, PrivateContextInputs, PublicCallRequest, } from '@aztec/circuits.js';
|
|
5
5
|
import { Aes128 } from '@aztec/circuits.js/barretenberg';
|
|
6
6
|
import { computePublicDataTreeLeafSlot, computeUniqueNoteHash, siloNoteHash } from '@aztec/circuits.js/hash';
|
|
7
7
|
import { countArgumentsSize } from '@aztec/foundation/abi';
|
|
8
8
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
9
|
+
import { pedersenHash } from '@aztec/foundation/crypto';
|
|
9
10
|
import { Fr, GrumpkinScalar } from '@aztec/foundation/fields';
|
|
10
11
|
import { applyStringFormatting, createDebugLogger } from '@aztec/foundation/log';
|
|
11
12
|
import { toACVMWitness } from '../acvm/index.js';
|
|
12
|
-
import { CountedLog } from './execution_result.js';
|
|
13
|
+
import { CountedLog, CountedNoteLog } from './execution_result.js';
|
|
13
14
|
import { pickNotes } from './pick_notes.js';
|
|
14
15
|
import { executePrivateFunction } from './private_execution.js';
|
|
15
16
|
import { ViewDataOracle } from './view_data_oracle.js';
|
|
@@ -98,30 +99,6 @@ export class ClientExecutionContext extends ViewDataOracle {
|
|
|
98
99
|
getNoteEncryptedLogs() {
|
|
99
100
|
return this.noteEncryptedLogs;
|
|
100
101
|
}
|
|
101
|
-
/**
|
|
102
|
-
* Sometimes notes can be chopped after a nested execution is complete.
|
|
103
|
-
* This means finished nested executions still hold transient logs. This method removes them.
|
|
104
|
-
* TODO(Miranda): is there a cleaner solution?
|
|
105
|
-
*/
|
|
106
|
-
chopNoteEncryptedLogs() {
|
|
107
|
-
// Do not return logs that have been chopped in the cache
|
|
108
|
-
const allNoteLogs = this.noteCache.getLogs();
|
|
109
|
-
this.noteEncryptedLogs = this.noteEncryptedLogs.filter(l => allNoteLogs.includes(l));
|
|
110
|
-
const chop = (thing) => thing.nestedExecutions.forEach((result) => {
|
|
111
|
-
if (!result.noteEncryptedLogs[0]?.isEmpty()) {
|
|
112
|
-
// The execution has note logs
|
|
113
|
-
result.noteEncryptedLogs = result.noteEncryptedLogs.filter(l => allNoteLogs.includes(l));
|
|
114
|
-
}
|
|
115
|
-
chop(result);
|
|
116
|
-
});
|
|
117
|
-
chop(this);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Return the note encrypted logs emitted during this execution and nested executions.
|
|
121
|
-
*/
|
|
122
|
-
getAllNoteEncryptedLogs() {
|
|
123
|
-
return this.noteCache.getLogs();
|
|
124
|
-
}
|
|
125
102
|
/**
|
|
126
103
|
* Return the encrypted logs emitted during this execution.
|
|
127
104
|
*/
|
|
@@ -271,38 +248,42 @@ export class ClientExecutionContext extends ViewDataOracle {
|
|
|
271
248
|
* @param encryptedNote - The encrypted data.
|
|
272
249
|
* @param counter - The effects counter.
|
|
273
250
|
*/
|
|
274
|
-
emitEncryptedLog(encryptedData, counter) {
|
|
275
|
-
|
|
251
|
+
emitEncryptedLog(contractAddress, randomness, encryptedData, counter) {
|
|
252
|
+
// In some cases, we actually want to reveal the contract address we are siloing with:
|
|
253
|
+
// e.g. 'handshaking' contract w/ known address
|
|
254
|
+
// An app providing randomness = 0 signals to not mask the address.
|
|
255
|
+
const maskedContractAddress = randomness.isZero()
|
|
256
|
+
? contractAddress.toField()
|
|
257
|
+
: pedersenHash([contractAddress, randomness], 0);
|
|
258
|
+
const encryptedLog = new CountedLog(new EncryptedL2Log(encryptedData, maskedContractAddress), counter);
|
|
276
259
|
this.encryptedLogs.push(encryptedLog);
|
|
277
260
|
}
|
|
278
261
|
/**
|
|
279
262
|
* Emit encrypted note data
|
|
280
|
-
* @param
|
|
263
|
+
* @param noteHashCounter - The note hash counter.
|
|
281
264
|
* @param encryptedNote - The encrypted note data.
|
|
282
|
-
* @param counter - The
|
|
265
|
+
* @param counter - The log counter.
|
|
283
266
|
*/
|
|
284
|
-
emitEncryptedNoteLog(
|
|
285
|
-
const encryptedLog = new
|
|
267
|
+
emitEncryptedNoteLog(noteHashCounter, encryptedNote, counter) {
|
|
268
|
+
const encryptedLog = new CountedNoteLog(new EncryptedL2NoteLog(encryptedNote), counter, noteHashCounter);
|
|
286
269
|
this.noteEncryptedLogs.push(encryptedLog);
|
|
287
|
-
this.noteCache.addNewLog(encryptedLog, noteHash);
|
|
288
270
|
}
|
|
289
271
|
/**
|
|
290
272
|
* Encrypt a note
|
|
291
273
|
* @param contractAddress - The contract address of the note.
|
|
292
274
|
* @param storageSlot - The storage slot the note is at.
|
|
293
275
|
* @param noteTypeId - The type ID of the note.
|
|
294
|
-
* @param
|
|
276
|
+
* @param ovKeys - The outgoing viewing keys to use to encrypt.
|
|
277
|
+
* @param ivpkM - The master incoming viewing public key.
|
|
295
278
|
* @param preimage - The note preimage.
|
|
296
279
|
*/
|
|
297
|
-
computeEncryptedLog(contractAddress, storageSlot, noteTypeId,
|
|
280
|
+
computeEncryptedLog(contractAddress, storageSlot, noteTypeId, ovKeys, ivpkM, preimage) {
|
|
298
281
|
const note = new Note(preimage);
|
|
299
282
|
const l1NotePayload = new L1NotePayload(note, contractAddress, storageSlot, noteTypeId);
|
|
300
283
|
const taggedNote = new TaggedNote(l1NotePayload);
|
|
301
284
|
const ephSk = GrumpkinScalar.random();
|
|
302
|
-
// @todo Issue(#6410) Right now we are completely ignoring the outgoing log. Just drawing random data.
|
|
303
|
-
const ovsk = GrumpkinScalar.random();
|
|
304
285
|
const recipient = AztecAddress.random();
|
|
305
|
-
return taggedNote.encrypt(ephSk, recipient,
|
|
286
|
+
return taggedNote.encrypt(ephSk, recipient, ivpkM, ovKeys);
|
|
306
287
|
}
|
|
307
288
|
/**
|
|
308
289
|
* Emit an unencrypted log.
|
|
@@ -340,11 +321,10 @@ export class ClientExecutionContext extends ViewDataOracle {
|
|
|
340
321
|
this.log.debug(`Calling private function ${this.contractAddress}:${functionSelector} from ${this.callContext.storageContractAddress}`);
|
|
341
322
|
isStaticCall = isStaticCall || this.callContext.isStaticCall;
|
|
342
323
|
const targetArtifact = await this.db.getFunctionArtifact(targetContractAddress, functionSelector);
|
|
343
|
-
const targetFunctionData = FunctionData.fromAbi(targetArtifact);
|
|
344
324
|
const derivedTxContext = this.txContext.clone();
|
|
345
325
|
const derivedCallContext = this.deriveCallContext(targetContractAddress, targetArtifact, sideEffectCounter, isDelegateCall, isStaticCall);
|
|
346
326
|
const context = new ClientExecutionContext(targetContractAddress, argsHash, derivedTxContext, derivedCallContext, this.historicalHeader, this.authWitnesses, this.packedValuesCache, this.noteCache, this.db, this.node, sideEffectCounter);
|
|
347
|
-
const childExecutionResult = await executePrivateFunction(context, targetArtifact, targetContractAddress,
|
|
327
|
+
const childExecutionResult = await executePrivateFunction(context, targetArtifact, targetContractAddress, functionSelector);
|
|
348
328
|
if (isStaticCall) {
|
|
349
329
|
__classPrivateFieldGet(this, _ClientExecutionContext_instances, "m", _ClientExecutionContext_checkValidStaticCall).call(this, childExecutionResult);
|
|
350
330
|
}
|
|
@@ -374,7 +354,7 @@ export class ClientExecutionContext extends ViewDataOracle {
|
|
|
374
354
|
args,
|
|
375
355
|
callContext: derivedCallContext,
|
|
376
356
|
parentCallContext: this.callContext,
|
|
377
|
-
|
|
357
|
+
functionSelector,
|
|
378
358
|
contractAddress: targetContractAddress,
|
|
379
359
|
});
|
|
380
360
|
}
|
|
@@ -452,6 +432,9 @@ export class ClientExecutionContext extends ViewDataOracle {
|
|
|
452
432
|
debugLog(message, fields) {
|
|
453
433
|
this.log.verbose(`debug_log ${applyStringFormatting(message, fields)}`);
|
|
454
434
|
}
|
|
435
|
+
getDebugFunctionName() {
|
|
436
|
+
return this.db.getDebugFunctionName(this.contractAddress, this.callContext.functionSelector);
|
|
437
|
+
}
|
|
455
438
|
}
|
|
456
439
|
_ClientExecutionContext_instances = new WeakSet(), _ClientExecutionContext_checkValidStaticCall = function _ClientExecutionContext_checkValidStaticCall(childExecutionResult) {
|
|
457
440
|
if (childExecutionResult.callStackItem.publicInputs.newNoteHashes.some(item => !item.isEmpty()) ||
|
|
@@ -462,4 +445,4 @@ _ClientExecutionContext_instances = new WeakSet(), _ClientExecutionContext_check
|
|
|
462
445
|
throw new Error(`Static call cannot update the state, emit L2->L1 messages or generate logs`);
|
|
463
446
|
}
|
|
464
447
|
};
|
|
465
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50X2V4ZWN1dGlvbl9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jbGllbnRfZXhlY3V0aW9uX2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBR0wsY0FBYyxFQUNkLGFBQWEsRUFDYixJQUFJLEVBRUosVUFBVSxHQUVYLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLFdBQVcsRUFDWCxZQUFZLEVBQ1osZ0JBQWdCLEVBRWhCLG9CQUFvQixFQUNwQixpQkFBaUIsR0FFbEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdHLE9BQU8sRUFBMkMsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRixPQUFPLEVBQWlCLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWhFLE9BQU8sRUFBRSxVQUFVLEVBQTBDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RDs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxjQUFjO0lBMkJ4RCxZQUNFLGVB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
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50X2V4ZWN1dGlvbl9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jbGllbnRfZXhlY3V0aW9uX2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBR0wsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsSUFBSSxFQUVKLFVBQVUsR0FFWCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBR2hCLG9CQUFvQixFQUNwQixpQkFBaUIsR0FFbEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdHLE9BQU8sRUFBMkMsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakYsT0FBTyxFQUFpQixhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUloRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBMEMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FB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
|
|
@@ -5,7 +5,7 @@ import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
|
5
5
|
import { type Fr } from '@aztec/foundation/fields';
|
|
6
6
|
import { type ContractInstance } from '@aztec/types/contracts';
|
|
7
7
|
import { type NoteData } from '../acvm/index.js';
|
|
8
|
-
import { type CommitmentsDB } from '../public/
|
|
8
|
+
import { type CommitmentsDB } from '../public/db_interfaces.js';
|
|
9
9
|
/**
|
|
10
10
|
* Error thrown when a contract is not found in the database.
|
|
11
11
|
*/
|
|
@@ -74,6 +74,12 @@ export interface DBOracle extends CommitmentsDB {
|
|
|
74
74
|
* @returns A Promise that resolves to a FunctionArtifact object.
|
|
75
75
|
*/
|
|
76
76
|
getFunctionArtifact(contractAddress: AztecAddress, selector: FunctionSelector): Promise<FunctionArtifact>;
|
|
77
|
+
/**
|
|
78
|
+
* Generates a stable function name for debug purposes.
|
|
79
|
+
* @param contractAddress - The contract address.
|
|
80
|
+
* @param selector - The corresponding function selector.
|
|
81
|
+
*/
|
|
82
|
+
getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string>;
|
|
77
83
|
/**
|
|
78
84
|
* Retrieves the artifact of a specified function within a given contract.
|
|
79
85
|
* The function is identified by its name, which is unique within a contract.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db_oracle.d.ts","sourceRoot":"","sources":["../../src/client/db_oracle.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"db_oracle.d.ts","sourceRoot":"","sources":["../../src/client/db_oracle.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,eAAe,EAAE,MAAM;CAGpC;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,eAAe,EAAE,MAAM;CAGpC;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,aAAa;IAC7C;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEtE;;;;;OAKG;IACH,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEpE;;;;OAIG;IACH,cAAc,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/C;;;;OAIG;IACH,UAAU,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnG;;;;;;;;;OASG;IACH,QAAQ,CAAC,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElG;;;;;;;OAOG;IACH,mBAAmB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE1G;;;;OAIG;IACH,oBAAoB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjG;;;;;;;OAOG;IACH,yBAAyB,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAEtH;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE9D;;;;;OAKG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7B;;;;;;OAMG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAErG;;;;;;OAMG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE5F;;;;;OAKG;IACH,6BAA6B,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAAC;IAEnH;;;;;;;;OAQG;IACH,gCAAgC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAAC;IAEtH;;;;OAIG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;IAEpG;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAE5D;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { type EncryptedL2Log } from '@aztec/circuit-types';
|
|
2
1
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
3
|
import { type NoteData } from '../acvm/index.js';
|
|
5
|
-
import { type CountedLog } from './execution_result.js';
|
|
6
4
|
export interface PendingNote {
|
|
7
5
|
note: NoteData;
|
|
8
6
|
counter: number;
|
|
@@ -23,22 +21,11 @@ export declare class ExecutionNoteCache {
|
|
|
23
21
|
* Note that their value (bigint representation) is used because Frs cannot be looked up in Sets.
|
|
24
22
|
*/
|
|
25
23
|
private nullifiers;
|
|
26
|
-
/**
|
|
27
|
-
* The list of encrypted logs linked to note hashes created in this transaction.
|
|
28
|
-
* This mapping maps from inner note hash to log(s) emitted for that note hash.
|
|
29
|
-
* Note that their value (bigint representation) is used because Frs cannot be looked up in Sets.
|
|
30
|
-
*/
|
|
31
|
-
private logs;
|
|
32
24
|
/**
|
|
33
25
|
* Add a new note to cache.
|
|
34
26
|
* @param note - New note created during execution.
|
|
35
27
|
*/
|
|
36
28
|
addNewNote(note: NoteData, counter: number): void;
|
|
37
|
-
/**
|
|
38
|
-
* Add a new note to cache.
|
|
39
|
-
* @param note - New note created during execution.
|
|
40
|
-
*/
|
|
41
|
-
addNewLog(log: CountedLog<EncryptedL2Log>, innerNoteHash: Fr): void;
|
|
42
29
|
/**
|
|
43
30
|
* Add a nullifier to cache. It could be for a db note or a new note created during execution.
|
|
44
31
|
* @param contractAddress - Contract address of the note.
|
|
@@ -67,9 +54,5 @@ export declare class ExecutionNoteCache {
|
|
|
67
54
|
* @param contractAddress - Address of the contract.
|
|
68
55
|
*/
|
|
69
56
|
getNullifiers(contractAddress: AztecAddress): Set<bigint>;
|
|
70
|
-
/**
|
|
71
|
-
* Return all note logs emitted from a contract.
|
|
72
|
-
*/
|
|
73
|
-
getLogs(): CountedLog<EncryptedL2Log>[];
|
|
74
57
|
}
|
|
75
58
|
//# sourceMappingURL=execution_note_cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution_note_cache.d.ts","sourceRoot":"","sources":["../../src/client/execution_note_cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execution_note_cache.d.ts","sourceRoot":"","sources":["../../src/client/execution_note_cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAyC;IAEzD;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAuC;IAEzD;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;IAMjD;;;;;;;OAOG;IACI,WAAW,CAAC,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE;IAsBvF;;;;;QAKI;IACG,QAAQ,CAAC,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE;IAK9D;;;;;QAKI;IACG,eAAe,CAAC,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE;IAKvE;;;OAGG;IACI,aAAa,CAAC,eAAe,EAAE,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;CAGjE"}
|
|
@@ -17,12 +17,6 @@ export class ExecutionNoteCache {
|
|
|
17
17
|
* Note that their value (bigint representation) is used because Frs cannot be looked up in Sets.
|
|
18
18
|
*/
|
|
19
19
|
this.nullifiers = new Map();
|
|
20
|
-
/**
|
|
21
|
-
* The list of encrypted logs linked to note hashes created in this transaction.
|
|
22
|
-
* This mapping maps from inner note hash to log(s) emitted for that note hash.
|
|
23
|
-
* Note that their value (bigint representation) is used because Frs cannot be looked up in Sets.
|
|
24
|
-
*/
|
|
25
|
-
this.logs = new Map();
|
|
26
20
|
}
|
|
27
21
|
/**
|
|
28
22
|
* Add a new note to cache.
|
|
@@ -33,15 +27,6 @@ export class ExecutionNoteCache {
|
|
|
33
27
|
notes.push({ note, counter });
|
|
34
28
|
this.newNotes.set(note.contractAddress.toBigInt(), notes);
|
|
35
29
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Add a new note to cache.
|
|
38
|
-
* @param note - New note created during execution.
|
|
39
|
-
*/
|
|
40
|
-
addNewLog(log, innerNoteHash) {
|
|
41
|
-
const logs = this.logs.get(innerNoteHash.toBigInt()) ?? [];
|
|
42
|
-
logs.push(log);
|
|
43
|
-
this.logs.set(innerNoteHash.toBigInt(), logs);
|
|
44
|
-
}
|
|
45
30
|
/**
|
|
46
31
|
* Add a nullifier to cache. It could be for a db note or a new note created during execution.
|
|
47
32
|
* @param contractAddress - Contract address of the note.
|
|
@@ -66,8 +51,6 @@ export class ExecutionNoteCache {
|
|
|
66
51
|
const note = notes.splice(noteIndexToRemove, 1)[0];
|
|
67
52
|
nullifiedNoteHashCounter = note.counter;
|
|
68
53
|
this.newNotes.set(contractAddress.toBigInt(), notes);
|
|
69
|
-
// If a log linked to the note hash does not exist, this method just does nothing
|
|
70
|
-
this.logs.delete(innerNoteHash.toBigInt());
|
|
71
54
|
}
|
|
72
55
|
return nullifiedNoteHashCounter;
|
|
73
56
|
}
|
|
@@ -98,11 +81,5 @@ export class ExecutionNoteCache {
|
|
|
98
81
|
getNullifiers(contractAddress) {
|
|
99
82
|
return this.nullifiers.get(contractAddress.toBigInt()) ?? new Set();
|
|
100
83
|
}
|
|
101
|
-
/**
|
|
102
|
-
* Return all note logs emitted from a contract.
|
|
103
|
-
*/
|
|
104
|
-
getLogs() {
|
|
105
|
-
return Array.from(this.logs.values()).flat();
|
|
106
|
-
}
|
|
107
84
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX25vdGVfY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2V4ZWN1dGlvbl9ub3RlX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTOUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQS9CO1FBQ0U7OztXQUdHO1FBQ0ssYUFBUSxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXpEOzs7OztXQUtHO1FBQ0ssZUFBVSxHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBdUUzRCxDQUFDO0lBckVDOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxJQUFjLEVBQUUsT0FBZTtRQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksV0FBVyxDQUFDLGVBQTZCLEVBQUUsY0FBa0IsRUFBRSxhQUFpQjtRQUNyRixNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTVELElBQUksd0JBQXdCLEdBQXVCLFNBQVMsQ0FBQztRQUM3RCw4RkFBOEY7UUFDOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xFLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1lBQzNFLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25ELHdCQUF3QixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7UUFLSTtJQUNHLFFBQVEsQ0FBQyxlQUE2QixFQUFFLFdBQWU7UUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xFLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7Ozs7O1FBS0k7SUFDRyxlQUFlLENBQUMsZUFBNkIsRUFBRSxhQUFpQjtRQUNyRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWEsQ0FBQyxlQUE2QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdEUsQ0FBQztDQUNGIn0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { EncryptedFunctionL2Logs, type EncryptedL2Log, type Note, UnencryptedFunctionL2Logs, type UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
+
import { EncryptedFunctionL2Logs, type EncryptedL2Log, type EncryptedL2NoteLog, EncryptedNoteFunctionL2Logs, type Note, UnencryptedFunctionL2Logs, type UnencryptedL2Log } from '@aztec/circuit-types';
|
|
3
3
|
import { type IsEmpty, type PrivateCallStackItem, PublicCallRequest } from '@aztec/circuits.js';
|
|
4
4
|
import { type Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { type ACVMField } from '../acvm/index.js';
|
|
@@ -14,12 +14,16 @@ export interface NoteAndSlot {
|
|
|
14
14
|
/** The note type identifier. */
|
|
15
15
|
noteTypeId: Fr;
|
|
16
16
|
}
|
|
17
|
-
export declare class CountedLog<TLog extends UnencryptedL2Log | EncryptedL2Log> implements IsEmpty {
|
|
17
|
+
export declare class CountedLog<TLog extends UnencryptedL2Log | EncryptedL2NoteLog | EncryptedL2Log> implements IsEmpty {
|
|
18
18
|
log: TLog;
|
|
19
19
|
counter: number;
|
|
20
20
|
constructor(log: TLog, counter: number);
|
|
21
21
|
isEmpty(): boolean;
|
|
22
22
|
}
|
|
23
|
+
export declare class CountedNoteLog extends CountedLog<EncryptedL2NoteLog> {
|
|
24
|
+
noteHashCounter: number;
|
|
25
|
+
constructor(log: EncryptedL2NoteLog, counter: number, noteHashCounter: number);
|
|
26
|
+
}
|
|
23
27
|
/**
|
|
24
28
|
* The result of executing a private function.
|
|
25
29
|
*/
|
|
@@ -50,7 +54,7 @@ export interface ExecutionResult {
|
|
|
50
54
|
* Encrypted note logs emitted during execution of this function call.
|
|
51
55
|
* Note: These are preimages to `noteEncryptedLogsHashes`.
|
|
52
56
|
*/
|
|
53
|
-
noteEncryptedLogs:
|
|
57
|
+
noteEncryptedLogs: CountedNoteLog[];
|
|
54
58
|
/**
|
|
55
59
|
* Encrypted logs emitted during execution of this function call.
|
|
56
60
|
* Note: These are preimages to `encryptedLogsHashes`.
|
|
@@ -69,7 +73,7 @@ export declare function collectNullifiedNoteHashCounters(execResult: ExecutionRe
|
|
|
69
73
|
* @param execResult - The topmost execution result.
|
|
70
74
|
* @returns All encrypted logs.
|
|
71
75
|
*/
|
|
72
|
-
export declare function collectSortedNoteEncryptedLogs(execResult: ExecutionResult):
|
|
76
|
+
export declare function collectSortedNoteEncryptedLogs(execResult: ExecutionResult): EncryptedNoteFunctionL2Logs;
|
|
73
77
|
/**
|
|
74
78
|
* Collect all encrypted logs across all nested executions and sorts by counter.
|
|
75
79
|
* @param execResult - The topmost execution result.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution_result.d.ts","sourceRoot":"","sources":["../../src/client/execution_result.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,IAAI,EACT,yBAAyB,EACzB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,oBAAoB,EAAE,iBAAiB,EAAiB,MAAM,oBAAoB,CAAC;AAC/G,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,oCAAoC;IACpC,WAAW,EAAE,EAAE,CAAC;IAChB,gCAAgC;IAChC,UAAU,EAAE,EAAE,CAAC;CAChB;AAED,qBAAa,UAAU,CAAC,IAAI,SAAS,gBAAgB,GAAG,cAAc,CAAE,YAAW,OAAO;
|
|
1
|
+
{"version":3,"file":"execution_result.d.ts","sourceRoot":"","sources":["../../src/client/execution_result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EncryptedFunctionL2Logs, UnencryptedFunctionL2Logs, } from '@aztec/circuit-types';
|
|
1
|
+
import { EncryptedFunctionL2Logs, EncryptedNoteFunctionL2Logs, UnencryptedFunctionL2Logs, } from '@aztec/circuit-types';
|
|
2
2
|
import { PublicCallRequest, sortByCounter } from '@aztec/circuits.js';
|
|
3
3
|
export class CountedLog {
|
|
4
4
|
constructor(log, counter) {
|
|
@@ -9,6 +9,12 @@ export class CountedLog {
|
|
|
9
9
|
return !this.log.data.length && !this.counter;
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
+
export class CountedNoteLog extends CountedLog {
|
|
13
|
+
constructor(log, counter, noteHashCounter) {
|
|
14
|
+
super(log, counter);
|
|
15
|
+
this.noteHashCounter = noteHashCounter;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
12
18
|
export function collectNoteHashLeafIndexMap(execResult, accum = new Map()) {
|
|
13
19
|
execResult.noteHashLeafIndexMap.forEach((value, key) => accum.set(key, value));
|
|
14
20
|
execResult.nestedExecutions.forEach(nested => collectNoteHashLeafIndexMap(nested, accum));
|
|
@@ -24,8 +30,11 @@ export function collectNullifiedNoteHashCounters(execResult, accum = new Map())
|
|
|
24
30
|
* @param execResult - The topmost execution result.
|
|
25
31
|
* @returns All encrypted logs.
|
|
26
32
|
*/
|
|
27
|
-
function collectNoteEncryptedLogs(execResult) {
|
|
28
|
-
return [
|
|
33
|
+
function collectNoteEncryptedLogs(execResult, nullifiedNoteHashCounters) {
|
|
34
|
+
return [
|
|
35
|
+
execResult.noteEncryptedLogs.filter(noteLog => !nullifiedNoteHashCounters.has(noteLog.noteHashCounter)),
|
|
36
|
+
...execResult.nestedExecutions.flatMap(res => collectNoteEncryptedLogs(res, nullifiedNoteHashCounters)),
|
|
37
|
+
].flat();
|
|
29
38
|
}
|
|
30
39
|
/**
|
|
31
40
|
* Collect all encrypted logs across all nested executions and sorts by counter.
|
|
@@ -33,9 +42,10 @@ function collectNoteEncryptedLogs(execResult) {
|
|
|
33
42
|
* @returns All encrypted logs.
|
|
34
43
|
*/
|
|
35
44
|
export function collectSortedNoteEncryptedLogs(execResult) {
|
|
36
|
-
const
|
|
45
|
+
const nullifiedNoteHashCounters = collectNullifiedNoteHashCounters(execResult);
|
|
46
|
+
const allLogs = collectNoteEncryptedLogs(execResult, nullifiedNoteHashCounters);
|
|
37
47
|
const sortedLogs = sortByCounter(allLogs);
|
|
38
|
-
return new
|
|
48
|
+
return new EncryptedNoteFunctionL2Logs(sortedLogs.map(l => l.log));
|
|
39
49
|
}
|
|
40
50
|
/**
|
|
41
51
|
* Collect all encrypted logs across all nested executions.
|
|
@@ -99,4 +109,4 @@ export function collectPublicTeardownFunctionCall(execResult) {
|
|
|
99
109
|
}
|
|
100
110
|
return PublicCallRequest.empty();
|
|
101
111
|
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX3Jlc3VsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvZXhlY3V0aW9uX3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBR3ZCLDJCQUEyQixFQUUzQix5QkFBeUIsR0FFMUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQTJDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBaUIvRyxNQUFNLE9BQU8sVUFBVTtJQUNyQixZQUFtQixHQUFTLEVBQVMsT0FBZTtRQUFqQyxRQUFHLEdBQUgsR0FBRyxDQUFNO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFFeEQsT0FBTztRQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2hELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxjQUFlLFNBQVEsVUFBOEI7SUFDaEUsWUFBWSxHQUF1QixFQUFFLE9BQWUsRUFBUyxlQUF1QjtRQUNsRixLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRHVDLG9CQUFlLEdBQWYsZUFBZSxDQUFRO0lBRXBGLENBQUM7Q0FDRjtBQThDRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsVUFBMkIsRUFBRSxRQUE2QixJQUFJLEdBQUcsRUFBRTtJQUM3RyxVQUFVLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FB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
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type FunctionArtifact } from '@aztec/foundation/abi';
|
|
1
|
+
import type { FunctionArtifact, FunctionSelector } from '@aztec/foundation/abi';
|
|
3
2
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
3
|
import { type ClientExecutionContext } from './client_execution_context.js';
|
|
5
4
|
import { type ExecutionResult } from './execution_result.js';
|
|
6
5
|
/**
|
|
7
6
|
* Execute a private function and return the execution result.
|
|
8
7
|
*/
|
|
9
|
-
export declare function executePrivateFunction(context: ClientExecutionContext, artifact: FunctionArtifact, contractAddress: AztecAddress,
|
|
8
|
+
export declare function executePrivateFunction(context: ClientExecutionContext, artifact: FunctionArtifact, contractAddress: AztecAddress, functionSelector: FunctionSelector, log?: import("@aztec/foundation/log").Logger): Promise<ExecutionResult>;
|
|
10
9
|
//# sourceMappingURL=private_execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private_execution.d.ts","sourceRoot":"","sources":["../../src/client/private_execution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"private_execution.d.ts","sourceRoot":"","sources":["../../src/client/private_execution.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAOpE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,gBAAgB,EAC1B,eAAe,EAAE,YAAY,EAC7B,gBAAgB,EAAE,gBAAgB,EAClC,GAAG,yCAAwD,GAC1D,OAAO,CAAC,eAAe,CAAC,CAuE1B"}
|
|
@@ -1,32 +1,43 @@
|
|
|
1
|
-
import { PrivateCallStackItem, PrivateCircuitPublicInputs } from '@aztec/circuits.js';
|
|
1
|
+
import { Fr, FunctionData, PrivateCallStackItem, PrivateCircuitPublicInputs } from '@aztec/circuits.js';
|
|
2
2
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
3
4
|
import { witnessMapToFields } from '../acvm/deserialize.js';
|
|
4
5
|
import { Oracle, acvm, extractCallStack } from '../acvm/index.js';
|
|
5
6
|
import { ExecutionError } from '../common/errors.js';
|
|
6
|
-
import { AcirSimulator } from './simulator.js';
|
|
7
7
|
/**
|
|
8
8
|
* Execute a private function and return the execution result.
|
|
9
9
|
*/
|
|
10
|
-
export async function executePrivateFunction(context, artifact, contractAddress,
|
|
11
|
-
const
|
|
12
|
-
log.verbose(`Executing external function ${contractAddress}:${functionSelector}(${
|
|
10
|
+
export async function executePrivateFunction(context, artifact, contractAddress, functionSelector, log = createDebugLogger('aztec:simulator:secret_execution')) {
|
|
11
|
+
const functionName = await context.getDebugFunctionName();
|
|
12
|
+
log.verbose(`Executing external function ${contractAddress}:${functionSelector}(${functionName})`);
|
|
13
13
|
const acir = artifact.bytecode;
|
|
14
14
|
const initialWitness = context.getInitialWitness(artifact);
|
|
15
15
|
const acvmCallback = new Oracle(context);
|
|
16
|
-
const
|
|
16
|
+
const timer = new Timer();
|
|
17
|
+
const acirExecutionResult = await acvm(acir, initialWitness, acvmCallback).catch((err) => {
|
|
17
18
|
throw new ExecutionError(err.message, {
|
|
18
19
|
contractAddress,
|
|
19
20
|
functionSelector,
|
|
20
21
|
}, extractCallStack(err, artifact.debug), { cause: err });
|
|
21
22
|
});
|
|
23
|
+
const duration = timer.ms();
|
|
22
24
|
const partialWitness = acirExecutionResult.partialWitness;
|
|
23
25
|
const returnWitness = witnessMapToFields(acirExecutionResult.returnWitness);
|
|
24
26
|
const publicInputs = PrivateCircuitPublicInputs.fromFields(returnWitness);
|
|
25
|
-
|
|
27
|
+
// TODO (alexg) estimate this size
|
|
28
|
+
const initialWitnessSize = witnessMapToFields(initialWitness).length * Fr.SIZE_IN_BYTES;
|
|
29
|
+
log.debug(`Ran external function ${contractAddress.toString()}:${functionSelector}`, {
|
|
30
|
+
circuitName: 'app-circuit',
|
|
31
|
+
duration,
|
|
32
|
+
eventName: 'circuit-witness-generation',
|
|
33
|
+
inputSize: initialWitnessSize,
|
|
34
|
+
outputSize: publicInputs.toBuffer().length,
|
|
35
|
+
appCircuitName: functionName,
|
|
36
|
+
});
|
|
26
37
|
const noteEncryptedLogs = context.getNoteEncryptedLogs();
|
|
27
38
|
const encryptedLogs = context.getEncryptedLogs();
|
|
28
39
|
const unencryptedLogs = context.getUnencryptedLogs();
|
|
29
|
-
const callStackItem = new PrivateCallStackItem(contractAddress,
|
|
40
|
+
const callStackItem = new PrivateCallStackItem(contractAddress, new FunctionData(functionSelector, true), publicInputs);
|
|
30
41
|
const rawReturnValues = await context.unpackReturns(publicInputs.returnsHash);
|
|
31
42
|
const noteHashLeafIndexMap = context.getNoteHashLeafIndexMap();
|
|
32
43
|
const newNotes = context.getNewNotes();
|
|
@@ -52,4 +63,4 @@ export async function executePrivateFunction(context, artifact, contractAddress,
|
|
|
52
63
|
unencryptedLogs,
|
|
53
64
|
};
|
|
54
65
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L3ByaXZhdGVfZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHeEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXJEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsT0FBK0IsRUFDL0IsUUFBMEIsRUFDMUIsZUFBNkIsRUFDN0IsZ0JBQWtDLEVBQ2xDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxrQ0FBa0MsQ0FBQztJQUUzRCxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzFELEdBQUcsQ0FBQyxPQUFPLENBQUMsK0JBQStCLGVBQWUsSUFBSSxnQkFBZ0IsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDL0IsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNELE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENB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
|
|
@@ -2,7 +2,6 @@ import { type AztecNode, type FunctionCall, type Note, type TxExecutionRequest }
|
|
|
2
2
|
import { type FunctionArtifact } from '@aztec/foundation/abi';
|
|
3
3
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
-
import { type WasmBlackBoxFunctionSolver } from '@noir-lang/acvm_js';
|
|
6
5
|
import { type DBOracle } from './db_oracle.js';
|
|
7
6
|
import { type ExecutionResult } from './execution_result.js';
|
|
8
7
|
/**
|
|
@@ -11,23 +10,8 @@ import { type ExecutionResult } from './execution_result.js';
|
|
|
11
10
|
export declare class AcirSimulator {
|
|
12
11
|
private db;
|
|
13
12
|
private node;
|
|
14
|
-
private static solver;
|
|
15
13
|
private log;
|
|
16
14
|
constructor(db: DBOracle, node: AztecNode);
|
|
17
|
-
/**
|
|
18
|
-
* Gets or initializes the ACVM WasmBlackBoxFunctionSolver.
|
|
19
|
-
*
|
|
20
|
-
* @remarks
|
|
21
|
-
*
|
|
22
|
-
* Occurs only once across all instances of AcirSimulator.
|
|
23
|
-
* Speeds up execution by only performing setup tasks (like pedersen
|
|
24
|
-
* generator initialization) one time.
|
|
25
|
-
* TODO(https://github.com/AztecProtocol/aztec-packages/issues/1627):
|
|
26
|
-
* determine whether this requires a lock
|
|
27
|
-
*
|
|
28
|
-
* @returns ACVM WasmBlackBoxFunctionSolver
|
|
29
|
-
*/
|
|
30
|
-
static getSolver(): Promise<WasmBlackBoxFunctionSolver>;
|
|
31
15
|
/**
|
|
32
16
|
* Runs a private function.
|
|
33
17
|
* @param request - The transaction request.
|