@aztec/simulator 0.55.1 → 0.57.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 -5
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +6 -37
- package/dest/acvm/oracle/typed_oracle.d.ts +3 -6
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +1 -10
- package/dest/avm/avm_execution_environment.d.ts +2 -11
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +3 -22
- package/dest/avm/avm_gas.d.ts +2 -2
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +31 -116
- package/dest/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/avm/avm_machine_state.js +6 -6
- package/dest/avm/avm_memory_types.d.ts +38 -9
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +27 -13
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +5 -6
- package/dest/avm/bytecode_utils.d.ts +1 -2
- package/dest/avm/bytecode_utils.d.ts.map +1 -1
- package/dest/avm/bytecode_utils.js +3 -17
- package/dest/avm/errors.d.ts +1 -1
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/errors.js +12 -3
- package/dest/avm/fixtures/index.d.ts +4 -16
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +11 -27
- package/dest/avm/journal/index.d.ts +0 -1
- package/dest/avm/journal/index.d.ts.map +1 -1
- package/dest/avm/journal/index.js +1 -2
- package/dest/avm/journal/journal.d.ts +6 -5
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +18 -16
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +37 -30
- package/dest/avm/opcodes/addressing_mode.d.ts +3 -2
- package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/avm/opcodes/addressing_mode.js +25 -21
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +6 -5
- package/dest/avm/opcodes/bitwise.d.ts +10 -4
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +26 -18
- package/dest/avm/opcodes/commitment.d.ts.map +1 -1
- package/dest/avm/opcodes/commitment.js +6 -5
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +8 -7
- package/dest/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/avm/opcodes/contract.js +6 -5
- package/dest/avm/opcodes/control_flow.js +6 -6
- package/dest/avm/opcodes/conversion.d.ts +3 -2
- package/dest/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/avm/opcodes/conversion.js +21 -13
- package/dest/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/avm/opcodes/ec_add.js +8 -7
- package/dest/avm/opcodes/environment_getters.d.ts +27 -63
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +76 -80
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +27 -16
- package/dest/avm/opcodes/hashing.d.ts +5 -5
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +47 -40
- package/dest/avm/opcodes/index.d.ts +3 -0
- package/dest/avm/opcodes/index.d.ts.map +1 -1
- package/dest/avm/opcodes/index.js +4 -1
- package/dest/avm/opcodes/instruction.d.ts +2 -6
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +3 -9
- package/dest/avm/opcodes/instruction_impl.d.ts +0 -26
- package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction_impl.js +1 -51
- package/dest/avm/opcodes/memory.d.ts +5 -12
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +40 -53
- package/dest/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/avm/opcodes/misc.js +6 -5
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
- package/dest/avm/opcodes/multi_scalar_mul.js +17 -16
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +11 -9
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +5 -25
- package/dest/avm/serialization/instruction_serialization.d.ts +40 -54
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +41 -57
- package/dest/avm/test_utils.d.ts +8 -8
- package/dest/avm/test_utils.d.ts.map +1 -1
- package/dest/avm/test_utils.js +15 -15
- package/dest/client/client_execution_context.d.ts +6 -30
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +31 -53
- package/dest/client/index.d.ts +0 -1
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +1 -2
- package/dest/client/private_execution.d.ts +2 -2
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +5 -19
- package/dest/client/simulator.d.ts +3 -4
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +1 -1
- package/dest/client/test_utils.d.ts.map +1 -1
- package/dest/client/test_utils.js +12 -6
- package/dest/client/unconstrained_execution.d.ts +2 -2
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +3 -3
- package/dest/common/debug_fn_name.d.ts +4 -0
- package/dest/common/debug_fn_name.d.ts.map +1 -0
- package/dest/common/debug_fn_name.js +15 -0
- package/dest/common/index.d.ts +0 -1
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +1 -2
- package/dest/public/enqueued_call_simulator.d.ts +43 -0
- package/dest/public/enqueued_call_simulator.d.ts.map +1 -0
- package/dest/public/enqueued_call_simulator.js +154 -0
- package/dest/public/enqueued_calls_processor.d.ts +44 -0
- package/dest/public/enqueued_calls_processor.d.ts.map +1 -0
- package/dest/public/enqueued_calls_processor.js +218 -0
- package/dest/public/execution.d.ts +10 -8
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +15 -8
- package/dest/public/executor.d.ts +4 -7
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +10 -14
- package/dest/public/hints_builder.d.ts +4 -3
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +5 -5
- package/dest/public/index.d.ts +3 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +3 -3
- package/dest/public/public_db_sources.d.ts +17 -24
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +58 -65
- package/dest/public/public_kernel.d.ts +3 -9
- package/dest/public/public_kernel.d.ts.map +1 -1
- package/dest/public/public_kernel.js +13 -40
- package/dest/public/public_kernel_circuit_simulator.d.ts +5 -11
- package/dest/public/public_kernel_circuit_simulator.d.ts.map +1 -1
- package/dest/public/public_kernel_tail_simulator.d.ts +19 -0
- package/dest/public/public_kernel_tail_simulator.d.ts.map +1 -0
- package/dest/public/public_kernel_tail_simulator.js +45 -0
- package/dest/public/public_processor.d.ts +9 -5
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +34 -48
- package/dest/public/public_processor_metrics.d.ts +3 -3
- package/dest/public/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor_metrics.js +1 -1
- package/dest/public/side_effect_errors.d.ts +4 -0
- package/dest/public/side_effect_errors.d.ts.map +1 -0
- package/dest/public/side_effect_errors.js +7 -0
- package/dest/public/side_effect_trace.d.ts +2 -2
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +56 -35
- package/dest/public/side_effect_trace_interface.d.ts +1 -1
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/package.json +12 -9
- package/src/acvm/oracle/oracle.ts +7 -85
- package/src/acvm/oracle/typed_oracle.ts +2 -31
- package/src/avm/avm_execution_environment.ts +2 -24
- package/src/avm/avm_gas.ts +30 -115
- package/src/avm/avm_machine_state.ts +5 -5
- package/src/avm/avm_memory_types.ts +41 -14
- package/src/avm/avm_simulator.ts +4 -5
- package/src/avm/bytecode_utils.ts +2 -17
- package/src/avm/errors.ts +11 -3
- package/src/avm/fixtures/index.ts +13 -46
- package/src/avm/journal/index.ts +0 -1
- package/src/avm/journal/journal.ts +22 -22
- package/src/avm/opcodes/accrued_substate.ts +36 -44
- package/src/avm/opcodes/addressing_mode.ts +27 -24
- package/src/avm/opcodes/arithmetic.ts +5 -7
- package/src/avm/opcodes/bitwise.ts +23 -20
- package/src/avm/opcodes/commitment.ts +6 -7
- package/src/avm/opcodes/comparators.ts +7 -9
- package/src/avm/opcodes/contract.ts +5 -7
- package/src/avm/opcodes/control_flow.ts +5 -5
- package/src/avm/opcodes/conversion.ts +19 -12
- package/src/avm/opcodes/ec_add.ts +14 -16
- package/src/avm/opcodes/environment_getters.ts +73 -99
- package/src/avm/opcodes/external_calls.ts +27 -20
- package/src/avm/opcodes/hashing.ts +52 -52
- package/src/avm/opcodes/index.ts +3 -0
- package/src/avm/opcodes/instruction.ts +3 -10
- package/src/avm/opcodes/instruction_impl.ts +0 -62
- package/src/avm/opcodes/memory.ts +37 -67
- package/src/avm/opcodes/misc.ts +5 -7
- package/src/avm/opcodes/multi_scalar_mul.ts +16 -19
- package/src/avm/opcodes/storage.ts +10 -8
- package/src/avm/serialization/bytecode_serialization.ts +11 -35
- package/src/avm/serialization/instruction_serialization.ts +3 -19
- package/src/avm/test_utils.ts +20 -16
- package/src/client/client_execution_context.ts +40 -96
- package/src/client/index.ts +0 -1
- package/src/client/private_execution.ts +9 -9
- package/src/client/simulator.ts +2 -3
- package/src/client/test_utils.ts +36 -9
- package/src/client/unconstrained_execution.ts +3 -8
- package/src/common/debug_fn_name.ts +22 -0
- package/src/common/index.ts +0 -1
- package/src/public/enqueued_call_simulator.ts +335 -0
- package/src/public/enqueued_calls_processor.ts +388 -0
- package/src/public/execution.ts +16 -12
- package/src/public/executor.ts +8 -22
- package/src/public/hints_builder.ts +21 -21
- package/src/public/index.ts +3 -2
- package/src/public/public_db_sources.ts +62 -67
- package/src/public/public_kernel.ts +15 -49
- package/src/public/public_kernel_circuit_simulator.ts +6 -10
- package/src/public/public_kernel_tail_simulator.ts +106 -0
- package/src/public/public_processor.ts +65 -86
- package/src/public/public_processor_metrics.ts +3 -3
- package/src/public/side_effect_errors.ts +6 -0
- package/src/public/side_effect_trace.ts +77 -39
- package/src/public/side_effect_trace_interface.ts +2 -2
- package/dest/avm/journal/host_storage.d.ts +0 -13
- package/dest/avm/journal/host_storage.d.ts.map +0 -1
- package/dest/avm/journal/host_storage.js +0 -13
- package/dest/avm/opcodes/context_getters.d.ts +0 -15
- package/dest/avm/opcodes/context_getters.d.ts.map +0 -1
- package/dest/avm/opcodes/context_getters.js +0 -19
- package/dest/client/execution_result.d.ts +0 -104
- package/dest/client/execution_result.d.ts.map +0 -1
- package/dest/client/execution_result.js +0 -136
- package/dest/common/return_values.d.ts +0 -11
- package/dest/common/return_values.d.ts.map +0 -1
- package/dest/common/return_values.js +0 -13
- package/dest/public/abstract_phase_manager.d.ts +0 -93
- package/dest/public/abstract_phase_manager.d.ts.map +0 -1
- package/dest/public/abstract_phase_manager.js +0 -285
- package/dest/public/app_logic_phase_manager.d.ts +0 -25
- package/dest/public/app_logic_phase_manager.d.ts.map +0 -1
- package/dest/public/app_logic_phase_manager.js +0 -52
- package/dest/public/phase_manager_factory.d.ts +0 -18
- package/dest/public/phase_manager_factory.d.ts.map +0 -1
- package/dest/public/phase_manager_factory.js +0 -56
- package/dest/public/setup_phase_manager.d.ts +0 -25
- package/dest/public/setup_phase_manager.d.ts.map +0 -1
- package/dest/public/setup_phase_manager.js +0 -39
- package/dest/public/tail_phase_manager.d.ts +0 -23
- package/dest/public/tail_phase_manager.d.ts.map +0 -1
- package/dest/public/tail_phase_manager.js +0 -50
- package/dest/public/teardown_phase_manager.d.ts +0 -27
- package/dest/public/teardown_phase_manager.d.ts.map +0 -1
- package/dest/public/teardown_phase_manager.js +0 -56
- package/src/avm/journal/host_storage.ts +0 -14
- package/src/avm/opcodes/context_getters.ts +0 -23
- package/src/client/execution_result.ts +0 -228
- package/src/common/return_values.ts +0 -18
- package/src/public/abstract_phase_manager.ts +0 -522
- package/src/public/app_logic_phase_manager.ts +0 -81
- package/src/public/phase_manager_factory.ts +0 -126
- package/src/public/setup_phase_manager.ts +0 -61
- package/src/public/tail_phase_manager.ts +0 -127
- package/src/public/teardown_phase_manager.ts +0 -86
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { PublicKernelType } from '@aztec/circuit-types';
|
|
2
|
-
import { MAX_NULLIFIERS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PublicKernelTailCircuitPrivateInputs, mergeAccumulatedData, } from '@aztec/circuits.js';
|
|
3
|
-
import { AbstractPhaseManager } from './abstract_phase_manager.js';
|
|
4
|
-
export class TailPhaseManager extends AbstractPhaseManager {
|
|
5
|
-
constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, publicContractsDB, publicStateDB, phase = PublicKernelType.TAIL) {
|
|
6
|
-
super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
|
|
7
|
-
this.publicContractsDB = publicContractsDB;
|
|
8
|
-
this.publicStateDB = publicStateDB;
|
|
9
|
-
}
|
|
10
|
-
async handle(tx, previousPublicKernelOutput, previousKernelArtifact) {
|
|
11
|
-
this.log.verbose(`Processing tx ${tx.getTxHash()}`);
|
|
12
|
-
const [inputs, finalKernelOutput] = await this.simulate(previousPublicKernelOutput, previousKernelArtifact).catch(
|
|
13
|
-
// the abstract phase manager throws if simulation gives error in non-revertible phase
|
|
14
|
-
async (err) => {
|
|
15
|
-
await this.publicStateDB.rollbackToCommit();
|
|
16
|
-
throw err;
|
|
17
|
-
});
|
|
18
|
-
// Return a tail proving request
|
|
19
|
-
const kernelRequest = {
|
|
20
|
-
type: PublicKernelType.TAIL,
|
|
21
|
-
inputs: inputs,
|
|
22
|
-
};
|
|
23
|
-
return {
|
|
24
|
-
publicProvingRequests: [kernelRequest],
|
|
25
|
-
publicKernelOutput: previousPublicKernelOutput,
|
|
26
|
-
lastKernelArtifact: 'PublicKernelTailArtifact',
|
|
27
|
-
finalKernelOutput,
|
|
28
|
-
returnValues: [],
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
async simulate(previousOutput, previousKernelArtifact) {
|
|
32
|
-
const inputs = await this.buildPrivateInputs(previousOutput, previousKernelArtifact);
|
|
33
|
-
// We take a deep copy (clone) of these to pass to the prover
|
|
34
|
-
return [inputs.clone(), await this.publicKernel.publicKernelCircuitTail(inputs)];
|
|
35
|
-
}
|
|
36
|
-
async buildPrivateInputs(previousOutput, previousKernelArtifact) {
|
|
37
|
-
const previousKernel = this.getPreviousKernelData(previousOutput, previousKernelArtifact);
|
|
38
|
-
const { validationRequests, endNonRevertibleData: nonRevertibleData, end: revertibleData } = previousOutput;
|
|
39
|
-
const noteHashReadRequestHints = await this.hintsBuilder.getNoteHashReadRequestsHints(validationRequests.noteHashReadRequests);
|
|
40
|
-
const pendingNullifiers = mergeAccumulatedData(nonRevertibleData.nullifiers, revertibleData.nullifiers, MAX_NULLIFIERS_PER_TX);
|
|
41
|
-
const nullifierReadRequestHints = await this.hintsBuilder.getNullifierReadRequestHints(validationRequests.nullifierReadRequests, pendingNullifiers);
|
|
42
|
-
const nullifierNonExistentReadRequestHints = await this.hintsBuilder.getNullifierNonExistentReadRequestHints(validationRequests.nullifierNonExistentReadRequests, pendingNullifiers);
|
|
43
|
-
const l1ToL2MsgReadRequestHints = await this.hintsBuilder.getL1ToL2MsgReadRequestsHints(validationRequests.l1ToL2MsgReadRequests);
|
|
44
|
-
const pendingPublicDataWrites = mergeAccumulatedData(nonRevertibleData.publicDataUpdateRequests, revertibleData.publicDataUpdateRequests, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
45
|
-
const publicDataHints = await this.hintsBuilder.getPublicDataHints(validationRequests.publicDataReads, pendingPublicDataWrites);
|
|
46
|
-
const currentState = await this.db.getStateReference();
|
|
47
|
-
return new PublicKernelTailCircuitPrivateInputs(previousKernel, noteHashReadRequestHints, nullifierReadRequestHints, nullifierNonExistentReadRequestHints, l1ToL2MsgReadRequestHints, publicDataHints, currentState.partial);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpbF9waGFzZV9tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90YWlsX3BoYXNlX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixnQkFBZ0IsRUFBVyxNQUFNLHNCQUFzQixDQUFDO0FBQzNGLE9BQU8sRUFJTCxxQkFBcUIsRUFDckIsc0NBQXNDLEVBRXRDLG9DQUFvQyxFQUNwQyxvQkFBb0IsR0FDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUluRSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsb0JBQW9CO0lBQ3hELFlBQ0UsRUFBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBMEMsRUFDMUMsZUFBZ0MsRUFDaEMsZ0JBQXdCLEVBQ2QsaUJBQThDLEVBQzlDLGFBQTRCLEVBQ3RDLFFBQTBCLGdCQUFnQixDQUFDLElBQUk7UUFFL0MsS0FBSyxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUp4RSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQTZCO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBSXhDLENBQUM7SUFFUSxLQUFLLENBQUMsTUFBTSxDQUNuQixFQUFNLEVBQ04sMEJBQTJELEVBQzNELHNCQUF3QztRQUV4QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLHNCQUFzQixDQUFDLENBQUMsS0FBSztRQUMvRyxzRkFBc0Y7UUFDdEYsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO1lB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
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { PublicKernelType, type PublicProvingRequest, type Tx } from '@aztec/circuit-types';
|
|
2
|
-
import { type Fr, type Gas, type GlobalVariables, type Header, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
|
|
3
|
-
import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
|
|
4
|
-
import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator';
|
|
5
|
-
import { type MerkleTreeOperations } from '@aztec/world-state';
|
|
6
|
-
import { AbstractPhaseManager } from './abstract_phase_manager.js';
|
|
7
|
-
import { type ContractsDataSourcePublicDB } from './public_db_sources.js';
|
|
8
|
-
import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js';
|
|
9
|
-
/**
|
|
10
|
-
* The phase manager responsible for performing the fee preparation phase.
|
|
11
|
-
*/
|
|
12
|
-
export declare class TeardownPhaseManager extends AbstractPhaseManager {
|
|
13
|
-
protected publicContractsDB: ContractsDataSourcePublicDB;
|
|
14
|
-
protected publicStateDB: PublicStateDB;
|
|
15
|
-
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelType);
|
|
16
|
-
handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousKernelArtifact: ProtocolArtifact): Promise<{
|
|
17
|
-
publicProvingRequests: PublicProvingRequest[];
|
|
18
|
-
publicKernelOutput: PublicKernelCircuitPublicInputs;
|
|
19
|
-
lastKernelArtifact: ProtocolArtifact;
|
|
20
|
-
revertReason: import("@aztec/circuit-types").SimulationError | undefined;
|
|
21
|
-
returnValues: never[];
|
|
22
|
-
gasUsed: Gas | undefined;
|
|
23
|
-
}>;
|
|
24
|
-
protected getTransactionFee(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs): Fr;
|
|
25
|
-
protected getAvailableGas(tx: Tx, _previousPublicKernelOutput: PublicKernelCircuitPublicInputs): Gas;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=teardown_phase_manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,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,CACnB,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,sBAAsB,EAAE,gBAAgB;;;;;;;;cAkCvB,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"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { PublicKernelType } from '@aztec/circuit-types';
|
|
2
|
-
import { inspect } from 'util';
|
|
3
|
-
import { AbstractPhaseManager, makeAvmProvingRequest } from './abstract_phase_manager.js';
|
|
4
|
-
/**
|
|
5
|
-
* The phase manager responsible for performing the fee preparation phase.
|
|
6
|
-
*/
|
|
7
|
-
export class TeardownPhaseManager extends AbstractPhaseManager {
|
|
8
|
-
constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, publicContractsDB, publicStateDB, phase = PublicKernelType.TEARDOWN) {
|
|
9
|
-
super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
|
|
10
|
-
this.publicContractsDB = publicContractsDB;
|
|
11
|
-
this.publicStateDB = publicStateDB;
|
|
12
|
-
}
|
|
13
|
-
async handle(tx, previousPublicKernelOutput, previousKernelArtifact) {
|
|
14
|
-
this.log.verbose(`Processing tx ${tx.getTxHash()}`);
|
|
15
|
-
const { publicProvingInformation, kernelOutput, lastKernelArtifact, newUnencryptedLogs, revertReason, gasUsed } = await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousKernelArtifact).catch(
|
|
16
|
-
// the abstract phase manager throws if simulation gives error in a non-revertible phase
|
|
17
|
-
async (err) => {
|
|
18
|
-
await this.publicStateDB.rollbackToCommit();
|
|
19
|
-
throw err;
|
|
20
|
-
});
|
|
21
|
-
if (revertReason) {
|
|
22
|
-
await this.publicStateDB.rollbackToCheckpoint();
|
|
23
|
-
tx.filterRevertedLogs(kernelOutput);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
// TODO(#6464): Should we allow emitting contracts in the public teardown phase?
|
|
27
|
-
// if so, we should insert them here
|
|
28
|
-
tx.unencryptedLogs.addFunctionLogs(newUnencryptedLogs);
|
|
29
|
-
}
|
|
30
|
-
// Return a list of teardown proving requests
|
|
31
|
-
const publicProvingRequests = publicProvingInformation.map(info => {
|
|
32
|
-
return makeAvmProvingRequest(info, PublicKernelType.TEARDOWN);
|
|
33
|
-
});
|
|
34
|
-
return {
|
|
35
|
-
publicProvingRequests,
|
|
36
|
-
publicKernelOutput: kernelOutput,
|
|
37
|
-
lastKernelArtifact,
|
|
38
|
-
revertReason,
|
|
39
|
-
returnValues: [],
|
|
40
|
-
gasUsed,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
getTransactionFee(tx, previousPublicKernelOutput) {
|
|
44
|
-
const gasSettings = tx.data.constants.txContext.gasSettings;
|
|
45
|
-
const gasFees = this.globalVariables.gasFees;
|
|
46
|
-
// No need to add teardown limits since they are already included in end.gasUsed
|
|
47
|
-
const gasUsed = previousPublicKernelOutput.end.gasUsed.add(previousPublicKernelOutput.endNonRevertibleData.gasUsed);
|
|
48
|
-
const txFee = gasSettings.inclusionFee.add(gasUsed.computeFee(gasFees));
|
|
49
|
-
this.log.debug(`Computed tx fee`, { txFee, gasUsed: inspect(gasUsed), gasFees: inspect(gasFees) });
|
|
50
|
-
return txFee;
|
|
51
|
-
}
|
|
52
|
-
getAvailableGas(tx, _previousPublicKernelOutput) {
|
|
53
|
-
return tx.data.constants.txContext.gasSettings.getTeardownLimits();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcmRvd25fcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvdGVhcmRvd25fcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXNDLE1BQU0sc0JBQXNCLENBQUM7QUFZNUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUkxRjs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUFDNUQsWUFDRSxFQUF3QixFQUN4QixjQUE4QixFQUM5QixZQUEwQyxFQUMxQyxlQUFnQyxFQUNoQyxnQkFBd0IsRUFDZCxpQkFBOEMsRUFDOUMsYUFBNEIsRUFDdEMsUUFBMEIsZ0JBQWdCLENBQUMsUUFBUTtRQUVuRCxLQUFLLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBSnhFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFDOUMsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFJeEMsQ0FBQztJQUVRLEtBQUssQ0FBQyxNQUFNLENBQ25CLEVBQU0sRUFDTiwwQkFBMkQsRUFDM0Qsc0JBQXdDO1FBRXhDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUM3RyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxLQUFLO1FBQ2pHLHdGQUF3RjtRQUN4RixLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUU7WUFDVixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1QyxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUMsQ0FDRixDQUFDO1FBQ0osSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNoRCxFQUFFLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDTixnRkFBZ0Y7WUFDaEYsb0NBQW9DO1lBQ3BDLEVBQUUsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELDZDQUE2QztRQUM3QyxNQUFNLHFCQUFxQixHQUEyQix3QkFBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEYsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0wscUJBQXFCO1lBQ3JCLGtCQUFrQixFQUFFLFlBQVk7WUFDaEMsa0JBQWtCO1lBQ2xCLFlBQVk7WUFDWixZQUFZLEVBQUUsRUFBRTtZQUNoQixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFa0IsaUJBQWlCLENBQUMsRUFBTSxFQUFFLDBCQUEyRDtRQUN0RyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO1FBQzdDLGdGQUFnRjtRQUNoRixNQUFNLE9BQU8sR0FBRywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwSCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFa0IsZUFBZSxDQUFDLEVBQU0sRUFBRSwyQkFBNEQ7UUFDckcsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDckUsQ0FBQztDQUNGIn0=
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../public/db_interfaces.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Host storage
|
|
5
|
-
*
|
|
6
|
-
* A wrapper around the node dbs
|
|
7
|
-
*/
|
|
8
|
-
export class HostStorage {
|
|
9
|
-
constructor(
|
|
10
|
-
public readonly publicStateDb: PublicStateDB,
|
|
11
|
-
public readonly contractsDb: PublicContractsDB,
|
|
12
|
-
public readonly commitmentsDb: CommitmentsDB,
|
|
13
|
-
) {}
|
|
14
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { Field, type MemoryValue } from '../avm_memory_types.js';
|
|
3
|
-
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
4
|
-
import { GetterInstruction } from './instruction_impl.js';
|
|
5
|
-
|
|
6
|
-
export class L2GasLeft extends GetterInstruction {
|
|
7
|
-
static type: string = 'L2GASLEFT';
|
|
8
|
-
static readonly opcode: Opcode = Opcode.L2GASLEFT;
|
|
9
|
-
|
|
10
|
-
// TODO(@spalladino) Protocol specs specifies that the value should be an Uint32, not a Field.
|
|
11
|
-
protected getValue(context: AvmContext): MemoryValue {
|
|
12
|
-
return new Field(context.machineState.l2GasLeft);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export class DAGasLeft extends GetterInstruction {
|
|
17
|
-
static type: string = 'DAGASLEFT';
|
|
18
|
-
static readonly opcode: Opcode = Opcode.DAGASLEFT;
|
|
19
|
-
|
|
20
|
-
protected getValue(context: AvmContext): MemoryValue {
|
|
21
|
-
return new Field(context.machineState.daGasLeft);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
EncryptedFunctionL2Logs,
|
|
3
|
-
type EncryptedL2Log,
|
|
4
|
-
type EncryptedL2NoteLog,
|
|
5
|
-
EncryptedNoteFunctionL2Logs,
|
|
6
|
-
type Note,
|
|
7
|
-
PublicExecutionRequest,
|
|
8
|
-
UnencryptedFunctionL2Logs,
|
|
9
|
-
type UnencryptedL2Log,
|
|
10
|
-
} from '@aztec/circuit-types';
|
|
11
|
-
import { type IsEmpty, type PrivateCallStackItem, sortByCounter } from '@aztec/circuits.js';
|
|
12
|
-
import { type NoteSelector } from '@aztec/foundation/abi';
|
|
13
|
-
import { type Fr } from '@aztec/foundation/fields';
|
|
14
|
-
|
|
15
|
-
import { type ACVMField } from '../acvm/index.js';
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* The contents of a new note.
|
|
19
|
-
*/
|
|
20
|
-
export interface NoteAndSlot {
|
|
21
|
-
/** The note. */
|
|
22
|
-
note: Note;
|
|
23
|
-
/** The storage slot of the note. */
|
|
24
|
-
storageSlot: Fr;
|
|
25
|
-
/** The note type identifier. */
|
|
26
|
-
noteTypeId: NoteSelector;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export class CountedLog<TLog extends UnencryptedL2Log | EncryptedL2NoteLog | EncryptedL2Log> implements IsEmpty {
|
|
30
|
-
constructor(public log: TLog, public counter: number) {}
|
|
31
|
-
|
|
32
|
-
isEmpty(): boolean {
|
|
33
|
-
return !this.log.data.length && !this.counter;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export class CountedNoteLog extends CountedLog<EncryptedL2NoteLog> {
|
|
38
|
-
constructor(log: EncryptedL2NoteLog, counter: number, public noteHashCounter: number) {
|
|
39
|
-
super(log, counter);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export class CountedPublicExecutionRequest {
|
|
44
|
-
constructor(public request: PublicExecutionRequest, public counter: number) {}
|
|
45
|
-
|
|
46
|
-
isEmpty(): boolean {
|
|
47
|
-
return this.request.isEmpty() && !this.counter;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* The result of executing a private function.
|
|
53
|
-
*/
|
|
54
|
-
export interface ExecutionResult {
|
|
55
|
-
// Needed for prover
|
|
56
|
-
/** The ACIR bytecode. */
|
|
57
|
-
acir: Buffer;
|
|
58
|
-
/** The verification key. */
|
|
59
|
-
vk: Buffer;
|
|
60
|
-
/** The partial witness. */
|
|
61
|
-
partialWitness: Map<number, ACVMField>;
|
|
62
|
-
// Needed for the verifier (kernel)
|
|
63
|
-
/** The call stack item. */
|
|
64
|
-
callStackItem: PrivateCallStackItem;
|
|
65
|
-
/** Mapping of note hash to its index in the note hash tree. Used for building hints for note hash read requests. */
|
|
66
|
-
noteHashLeafIndexMap: Map<bigint, bigint>;
|
|
67
|
-
/** The notes created in the executed function. */
|
|
68
|
-
newNotes: NoteAndSlot[];
|
|
69
|
-
/** Mapping of note hash counter to the counter of its nullifier. */
|
|
70
|
-
noteHashNullifierCounterMap: Map<number, number>;
|
|
71
|
-
/** The raw return values of the executed function. */
|
|
72
|
-
returnValues: Fr[];
|
|
73
|
-
/** The nested executions. */
|
|
74
|
-
nestedExecutions: this[];
|
|
75
|
-
/** Enqueued public function execution requests to be picked up by the sequencer. */
|
|
76
|
-
enqueuedPublicFunctionCalls: CountedPublicExecutionRequest[];
|
|
77
|
-
/** Public function execution requested for teardown */
|
|
78
|
-
publicTeardownFunctionCall: PublicExecutionRequest;
|
|
79
|
-
/**
|
|
80
|
-
* Encrypted note logs emitted during execution of this function call.
|
|
81
|
-
* Note: These are preimages to `noteEncryptedLogsHashes`.
|
|
82
|
-
*/
|
|
83
|
-
noteEncryptedLogs: CountedNoteLog[];
|
|
84
|
-
/**
|
|
85
|
-
* Encrypted logs emitted during execution of this function call.
|
|
86
|
-
* Note: These are preimages to `encryptedLogsHashes`.
|
|
87
|
-
*/
|
|
88
|
-
encryptedLogs: CountedLog<EncryptedL2Log>[];
|
|
89
|
-
/**
|
|
90
|
-
* Unencrypted logs emitted during execution of this function call.
|
|
91
|
-
* Note: These are preimages to `unencryptedLogsHashes`.
|
|
92
|
-
*/
|
|
93
|
-
unencryptedLogs: CountedLog<UnencryptedL2Log>[];
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export function collectNoteHashLeafIndexMap(execResult: ExecutionResult, accum: Map<bigint, bigint> = new Map()) {
|
|
97
|
-
execResult.noteHashLeafIndexMap.forEach((value, key) => accum.set(key, value));
|
|
98
|
-
execResult.nestedExecutions.forEach(nested => collectNoteHashLeafIndexMap(nested, accum));
|
|
99
|
-
return accum;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export function collectNoteHashNullifierCounterMap(
|
|
103
|
-
execResult: ExecutionResult,
|
|
104
|
-
accum: Map<number, number> = new Map(),
|
|
105
|
-
) {
|
|
106
|
-
execResult.noteHashNullifierCounterMap.forEach((value, key) => accum.set(key, value));
|
|
107
|
-
execResult.nestedExecutions.forEach(nested => collectNoteHashNullifierCounterMap(nested, accum));
|
|
108
|
-
return accum;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Collect all encrypted logs across all nested executions.
|
|
113
|
-
* @param execResult - The topmost execution result.
|
|
114
|
-
* @returns All encrypted logs.
|
|
115
|
-
*/
|
|
116
|
-
function collectNoteEncryptedLogs(
|
|
117
|
-
execResult: ExecutionResult,
|
|
118
|
-
noteHashNullifierCounterMap: Map<number, number>,
|
|
119
|
-
minRevertibleSideEffectCounter: number,
|
|
120
|
-
): CountedLog<EncryptedL2NoteLog>[] {
|
|
121
|
-
return [
|
|
122
|
-
execResult.noteEncryptedLogs.filter(noteLog => {
|
|
123
|
-
const nullifierCounter = noteHashNullifierCounterMap.get(noteLog.noteHashCounter);
|
|
124
|
-
return (
|
|
125
|
-
nullifierCounter === undefined ||
|
|
126
|
-
(noteLog.noteHashCounter < minRevertibleSideEffectCounter && nullifierCounter >= minRevertibleSideEffectCounter)
|
|
127
|
-
);
|
|
128
|
-
}),
|
|
129
|
-
...execResult.nestedExecutions.flatMap(res =>
|
|
130
|
-
collectNoteEncryptedLogs(res, noteHashNullifierCounterMap, minRevertibleSideEffectCounter),
|
|
131
|
-
),
|
|
132
|
-
].flat();
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Collect all encrypted logs across all nested executions and sorts by counter.
|
|
137
|
-
* @param execResult - The topmost execution result.
|
|
138
|
-
* @returns All encrypted logs.
|
|
139
|
-
*/
|
|
140
|
-
export function collectSortedNoteEncryptedLogs(execResult: ExecutionResult): EncryptedNoteFunctionL2Logs {
|
|
141
|
-
const noteHashNullifierCounterMap = collectNoteHashNullifierCounterMap(execResult);
|
|
142
|
-
const minRevertibleSideEffectCounter = getFinalMinRevertibleSideEffectCounter(execResult);
|
|
143
|
-
const allLogs = collectNoteEncryptedLogs(execResult, noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
|
|
144
|
-
const sortedLogs = sortByCounter(allLogs);
|
|
145
|
-
return new EncryptedNoteFunctionL2Logs(sortedLogs.map(l => l.log));
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Collect all encrypted logs across all nested executions.
|
|
149
|
-
* @param execResult - The topmost execution result.
|
|
150
|
-
* @returns All encrypted logs.
|
|
151
|
-
*/
|
|
152
|
-
function collectEncryptedLogs(execResult: ExecutionResult): CountedLog<EncryptedL2Log>[] {
|
|
153
|
-
return [execResult.encryptedLogs, ...execResult.nestedExecutions.flatMap(collectEncryptedLogs)].flat();
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Collect all encrypted logs across all nested executions and sorts by counter.
|
|
158
|
-
* @param execResult - The topmost execution result.
|
|
159
|
-
* @returns All encrypted logs.
|
|
160
|
-
*/
|
|
161
|
-
export function collectSortedEncryptedLogs(execResult: ExecutionResult): EncryptedFunctionL2Logs {
|
|
162
|
-
const allLogs = collectEncryptedLogs(execResult);
|
|
163
|
-
const sortedLogs = sortByCounter(allLogs);
|
|
164
|
-
return new EncryptedFunctionL2Logs(sortedLogs.map(l => l.log));
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Collect all unencrypted logs across all nested executions.
|
|
169
|
-
* @param execResult - The topmost execution result.
|
|
170
|
-
* @returns All unencrypted logs.
|
|
171
|
-
*/
|
|
172
|
-
function collectUnencryptedLogs(execResult: ExecutionResult): CountedLog<UnencryptedL2Log>[] {
|
|
173
|
-
return [execResult.unencryptedLogs, ...execResult.nestedExecutions.flatMap(collectUnencryptedLogs)].flat();
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Collect all unencrypted logs across all nested executions and sorts by counter.
|
|
178
|
-
* @param execResult - The topmost execution result.
|
|
179
|
-
* @returns All unencrypted logs.
|
|
180
|
-
*/
|
|
181
|
-
export function collectSortedUnencryptedLogs(execResult: ExecutionResult): UnencryptedFunctionL2Logs {
|
|
182
|
-
const allLogs = collectUnencryptedLogs(execResult);
|
|
183
|
-
const sortedLogs = sortByCounter(allLogs);
|
|
184
|
-
return new UnencryptedFunctionL2Logs(sortedLogs.map(l => l.log));
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
function collectEnqueuedCountedPublicExecutionRequests(execResult: ExecutionResult): CountedPublicExecutionRequest[] {
|
|
188
|
-
return [
|
|
189
|
-
...execResult.enqueuedPublicFunctionCalls,
|
|
190
|
-
...execResult.nestedExecutions.flatMap(collectEnqueuedCountedPublicExecutionRequests),
|
|
191
|
-
];
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Collect all enqueued public function calls across all nested executions.
|
|
196
|
-
* @param execResult - The topmost execution result.
|
|
197
|
-
* @returns All enqueued public function calls.
|
|
198
|
-
*/
|
|
199
|
-
export function collectEnqueuedPublicFunctionCalls(execResult: ExecutionResult): PublicExecutionRequest[] {
|
|
200
|
-
const countedRequests = collectEnqueuedCountedPublicExecutionRequests(execResult);
|
|
201
|
-
// without the reverse sort, the logs will be in a queue like fashion which is wrong
|
|
202
|
-
// as the kernel processes it like a stack, popping items off and pushing them to output
|
|
203
|
-
return sortByCounter(countedRequests, false).map(r => r.request);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
export function collectPublicTeardownFunctionCall(execResult: ExecutionResult): PublicExecutionRequest {
|
|
207
|
-
const teardownCalls = [
|
|
208
|
-
execResult.publicTeardownFunctionCall,
|
|
209
|
-
...execResult.nestedExecutions.flatMap(collectPublicTeardownFunctionCall),
|
|
210
|
-
].filter(call => !call.isEmpty());
|
|
211
|
-
|
|
212
|
-
if (teardownCalls.length === 1) {
|
|
213
|
-
return teardownCalls[0];
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
if (teardownCalls.length > 1) {
|
|
217
|
-
throw new Error('Multiple public teardown calls detected');
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
return PublicExecutionRequest.empty();
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
export function getFinalMinRevertibleSideEffectCounter(execResult: ExecutionResult): number {
|
|
224
|
-
return execResult.nestedExecutions.reduce((counter, exec) => {
|
|
225
|
-
const nestedCounter = getFinalMinRevertibleSideEffectCounter(exec);
|
|
226
|
-
return nestedCounter ? nestedCounter : counter;
|
|
227
|
-
}, execResult.callStackItem.publicInputs.minRevertibleSideEffectCounter.toNumber());
|
|
228
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { NestedProcessReturnValues } from '@aztec/circuit-types';
|
|
2
|
-
|
|
3
|
-
import type { ExecutionResult } from '../client/execution_result.js';
|
|
4
|
-
import type { PublicExecutionResult } from '../public/execution.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Recursively accummulate the return values of a call result and its nested executions,
|
|
8
|
-
* so they can be retrieved in order.
|
|
9
|
-
* @param executionResult
|
|
10
|
-
* @returns
|
|
11
|
-
*/
|
|
12
|
-
export function accumulateReturnValues(
|
|
13
|
-
executionResult: PublicExecutionResult | ExecutionResult,
|
|
14
|
-
): NestedProcessReturnValues {
|
|
15
|
-
const acc = new NestedProcessReturnValues(executionResult.returnValues);
|
|
16
|
-
acc.nested = executionResult.nestedExecutions.map(nestedExecution => accumulateReturnValues(nestedExecution));
|
|
17
|
-
return acc;
|
|
18
|
-
}
|