@aztec/simulator 0.41.0 → 0.43.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 +7 -4
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +32 -12
- package/dest/acvm/oracle/typed_oracle.d.ts +6 -3
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +15 -6
- 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 +69 -73
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +2 -4
- 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 +6 -0
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +18 -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 +5 -3
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +23 -14
- package/dest/avm/journal/trace.d.ts +3 -1
- package/dest/avm/journal/trace.d.ts.map +1 -1
- package/dest/avm/journal/trace.js +8 -1
- package/dest/avm/journal/trace_types.d.ts +5 -0
- package/dest/avm/journal/trace_types.d.ts.map +1 -1
- package/dest/avm/journal/trace_types.js +1 -5
- package/dest/avm/opcodes/accrued_substate.d.ts +2 -2
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +36 -21
- 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 +12 -20
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +11 -8
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +7 -5
- package/dest/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/avm/opcodes/contract.js +20 -24
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/avm/opcodes/control_flow.js +4 -2
- package/dest/avm/opcodes/conversion.js +2 -2
- package/dest/avm/opcodes/ec_add.d.ts +19 -0
- package/dest/avm/opcodes/ec_add.d.ts.map +1 -0
- package/dest/avm/opcodes/ec_add.js +78 -0
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +11 -5
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +10 -2
- 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/instruction_impl.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction_impl.js +4 -2
- package/dest/avm/opcodes/memory.d.ts +1 -5
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +14 -18
- package/dest/avm/opcodes/multi_scalar_mul.d.ts +16 -0
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -0
- package/dest/avm/opcodes/multi_scalar_mul.js +95 -0
- package/dest/avm/opcodes/storage.d.ts +1 -6
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +11 -14
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +6 -2
- package/dest/avm/serialization/instruction_serialization.d.ts +3 -1
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +4 -2
- package/dest/client/client_execution_context.d.ts +24 -20
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +52 -55
- 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 +2 -17
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +24 -33
- 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 +53 -53
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +146 -153
- package/dest/public/app_logic_phase_manager.d.ts +8 -9
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/public/app_logic_phase_manager.js +15 -15
- package/dest/public/{db.d.ts → db_interfaces.d.ts} +4 -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 -23
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -51
- package/dest/public/executor.d.ts +4 -31
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +40 -283
- 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 +2 -1
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +6 -2
- package/dest/public/index.d.ts +8 -6
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +9 -7
- package/dest/public/phase_manager_factory.d.ts +4 -4
- package/dest/public/phase_manager_factory.d.ts.map +1 -1
- package/dest/public/phase_manager_factory.js +5 -5
- package/dest/public/{public_executor.d.ts → public_db_sources.d.ts} +6 -3
- package/dest/public/public_db_sources.d.ts.map +1 -0
- package/dest/public/public_db_sources.js +244 -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 +48 -30
- package/dest/public/setup_phase_manager.d.ts +8 -10
- package/dest/public/setup_phase_manager.d.ts.map +1 -1
- package/dest/public/setup_phase_manager.js +12 -21
- package/dest/public/tail_phase_manager.d.ts +7 -13
- package/dest/public/tail_phase_manager.d.ts.map +1 -1
- package/dest/public/tail_phase_manager.js +17 -37
- package/dest/public/teardown_phase_manager.d.ts +8 -10
- package/dest/public/teardown_phase_manager.d.ts.map +1 -1
- package/dest/public/teardown_phase_manager.js +16 -22
- package/dest/public/transitional_adaptors.d.ts +2 -2
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +14 -6
- package/package.json +12 -9
- package/src/acvm/acvm.ts +0 -3
- package/src/acvm/oracle/oracle.ts +68 -16
- package/src/acvm/oracle/typed_oracle.ts +31 -6
- package/src/acvm/serialize.ts +1 -1
- package/src/avm/avm_gas.ts +68 -73
- package/src/avm/avm_memory_types.ts +1 -3
- package/src/avm/avm_simulator.ts +9 -0
- package/src/avm/fixtures/index.ts +24 -0
- package/src/avm/index.ts +1 -0
- package/src/avm/journal/host_storage.ts +1 -1
- package/src/avm/journal/journal.ts +32 -22
- package/src/avm/journal/trace.ts +9 -0
- package/src/avm/journal/trace_types.ts +4 -0
- package/src/avm/opcodes/accrued_substate.ts +53 -20
- package/src/avm/opcodes/arithmetic.ts +18 -22
- package/src/avm/opcodes/bitwise.ts +13 -8
- package/src/avm/opcodes/comparators.ts +9 -4
- package/src/avm/opcodes/contract.ts +22 -26
- package/src/avm/opcodes/control_flow.ts +3 -1
- package/src/avm/opcodes/conversion.ts +1 -1
- package/src/avm/opcodes/ec_add.ts +92 -0
- package/src/avm/opcodes/external_calls.ts +11 -3
- package/src/avm/opcodes/hashing.ts +11 -1
- package/src/avm/opcodes/instruction.ts +5 -3
- package/src/avm/opcodes/instruction_impl.ts +4 -1
- package/src/avm/opcodes/memory.ts +19 -19
- package/src/avm/opcodes/multi_scalar_mul.ts +114 -0
- package/src/avm/opcodes/storage.ts +10 -17
- package/src/avm/serialization/bytecode_serialization.ts +5 -1
- package/src/avm/serialization/instruction_serialization.ts +2 -0
- package/src/client/client_execution_context.ts +76 -60
- 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 +25 -35
- 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 +209 -258
- package/src/public/app_logic_phase_manager.ts +24 -40
- package/src/public/{db.ts → db_interfaces.ts} +4 -2
- package/src/public/execution.ts +15 -77
- package/src/public/executor.ts +61 -399
- package/src/public/fee_payment.ts +26 -0
- package/src/public/hints_builder.ts +6 -0
- package/src/public/index.ts +8 -12
- package/src/public/phase_manager_factory.ts +7 -7
- package/src/public/{public_executor.ts → public_db_sources.ts} +65 -9
- package/src/public/public_kernel.ts +24 -24
- package/src/public/public_processor.ts +81 -40
- package/src/public/setup_phase_manager.ts +21 -46
- package/src/public/tail_phase_manager.ts +19 -67
- package/src/public/teardown_phase_manager.ts +23 -42
- package/src/public/transitional_adaptors.ts +41 -5
- 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/public/utils.d.ts +0 -8
- package/dest/public/utils.d.ts.map +0 -1
- package/dest/public/utils.js +0 -31
- 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/src/public/utils.ts +0 -33
- /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,36 +1,28 @@
|
|
|
1
|
-
import { MerkleTreeId, PublicKernelType, } from '@aztec/circuit-types';
|
|
2
|
-
import { AztecAddress, CallRequest, ContractStorageRead, ContractStorageUpdateRequest, Fr, Gas, L2ToL1Message, LogHash, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,
|
|
1
|
+
import { AVM_REQUEST, MerkleTreeId, PublicKernelType, } from '@aztec/circuit-types';
|
|
2
|
+
import { AztecAddress, CallRequest, ContractStorageRead, ContractStorageUpdateRequest, Fr, FunctionData, Gas, L2ToL1Message, LogHash, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL, MembershipWitness, NESTED_RECURSIVE_PROOF_LENGTH, NoteHash, Nullifier, PublicCallData, PublicCallStackItem, PublicCircuitPublicInputs, PublicKernelCircuitPrivateInputs, PublicKernelData, ReadRequest, RevertCode, VK_TREE_HEIGHT, VerificationKeyData, makeEmptyProof, makeEmptyRecursiveProof, } from '@aztec/circuits.js';
|
|
3
3
|
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
4
|
-
import {
|
|
4
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
5
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
6
|
-
import { accumulateReturnValues,
|
|
6
|
+
import { accumulateReturnValues, isPublicExecutionResult, } from '@aztec/simulator';
|
|
7
7
|
import { HintsBuilder } from './hints_builder.js';
|
|
8
|
-
import { lastSideEffectCounter } from './utils.js';
|
|
9
|
-
export var PublicKernelPhase;
|
|
10
|
-
(function (PublicKernelPhase) {
|
|
11
|
-
PublicKernelPhase["SETUP"] = "setup";
|
|
12
|
-
PublicKernelPhase["APP_LOGIC"] = "app-logic";
|
|
13
|
-
PublicKernelPhase["TEARDOWN"] = "teardown";
|
|
14
|
-
PublicKernelPhase["TAIL"] = "tail";
|
|
15
|
-
})(PublicKernelPhase || (PublicKernelPhase = {}));
|
|
16
8
|
export const PhaseIsRevertible = {
|
|
17
|
-
[
|
|
18
|
-
[
|
|
19
|
-
[
|
|
20
|
-
[
|
|
9
|
+
[PublicKernelType.NON_PUBLIC]: false,
|
|
10
|
+
[PublicKernelType.SETUP]: false,
|
|
11
|
+
[PublicKernelType.APP_LOGIC]: true,
|
|
12
|
+
[PublicKernelType.TEARDOWN]: true,
|
|
13
|
+
[PublicKernelType.TAIL]: false,
|
|
21
14
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
15
|
+
export function makeAvmProvingRequest(info, kernelType) {
|
|
16
|
+
return {
|
|
17
|
+
type: AVM_REQUEST,
|
|
18
|
+
bytecode: info.bytecode,
|
|
19
|
+
calldata: info.calldata,
|
|
20
|
+
avmHints: info.avmHints,
|
|
21
|
+
kernelRequest: {
|
|
22
|
+
type: kernelType,
|
|
23
|
+
inputs: info.inputs,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
34
26
|
}
|
|
35
27
|
export class AbstractPhaseManager {
|
|
36
28
|
constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase) {
|
|
@@ -47,10 +39,11 @@ export class AbstractPhaseManager {
|
|
|
47
39
|
const data = tx.data.forPublic;
|
|
48
40
|
if (!data) {
|
|
49
41
|
return {
|
|
50
|
-
[
|
|
51
|
-
[
|
|
52
|
-
[
|
|
53
|
-
[
|
|
42
|
+
[PublicKernelType.NON_PUBLIC]: [],
|
|
43
|
+
[PublicKernelType.SETUP]: [],
|
|
44
|
+
[PublicKernelType.APP_LOGIC]: [],
|
|
45
|
+
[PublicKernelType.TEARDOWN]: [],
|
|
46
|
+
[PublicKernelType.TAIL]: [],
|
|
54
47
|
};
|
|
55
48
|
}
|
|
56
49
|
const publicCallsStack = tx.enqueuedPublicFunctionCalls.slice().reverse();
|
|
@@ -65,10 +58,11 @@ export class AbstractPhaseManager {
|
|
|
65
58
|
call => revertibleCallStack.find(p => p.equals(call)) || nonRevertibleCallStack.find(p => p.equals(call)));
|
|
66
59
|
if (callRequestsStack.length === 0) {
|
|
67
60
|
return {
|
|
68
|
-
[
|
|
69
|
-
[
|
|
70
|
-
[
|
|
71
|
-
[
|
|
61
|
+
[PublicKernelType.NON_PUBLIC]: [],
|
|
62
|
+
[PublicKernelType.SETUP]: [],
|
|
63
|
+
[PublicKernelType.APP_LOGIC]: [],
|
|
64
|
+
[PublicKernelType.TEARDOWN]: [],
|
|
65
|
+
[PublicKernelType.TAIL]: [],
|
|
72
66
|
};
|
|
73
67
|
}
|
|
74
68
|
// find the first call that is revertible
|
|
@@ -76,27 +70,30 @@ export class AbstractPhaseManager {
|
|
|
76
70
|
const teardownCallStack = tx.publicTeardownFunctionCall.isEmpty() ? [] : [tx.publicTeardownFunctionCall];
|
|
77
71
|
if (firstRevertibleCallIndex === 0) {
|
|
78
72
|
return {
|
|
79
|
-
[
|
|
80
|
-
[
|
|
81
|
-
[
|
|
82
|
-
[
|
|
73
|
+
[PublicKernelType.NON_PUBLIC]: [],
|
|
74
|
+
[PublicKernelType.SETUP]: [],
|
|
75
|
+
[PublicKernelType.APP_LOGIC]: publicCallsStack,
|
|
76
|
+
[PublicKernelType.TEARDOWN]: teardownCallStack,
|
|
77
|
+
[PublicKernelType.TAIL]: [],
|
|
83
78
|
};
|
|
84
79
|
}
|
|
85
80
|
else if (firstRevertibleCallIndex === -1) {
|
|
86
81
|
// there's no app logic, split the functions between setup (many) and teardown (just one function call)
|
|
87
82
|
return {
|
|
88
|
-
[
|
|
89
|
-
[
|
|
90
|
-
[
|
|
91
|
-
[
|
|
83
|
+
[PublicKernelType.NON_PUBLIC]: [],
|
|
84
|
+
[PublicKernelType.SETUP]: publicCallsStack,
|
|
85
|
+
[PublicKernelType.APP_LOGIC]: [],
|
|
86
|
+
[PublicKernelType.TEARDOWN]: teardownCallStack,
|
|
87
|
+
[PublicKernelType.TAIL]: [],
|
|
92
88
|
};
|
|
93
89
|
}
|
|
94
90
|
else {
|
|
95
91
|
return {
|
|
96
|
-
[
|
|
97
|
-
[
|
|
98
|
-
[
|
|
99
|
-
[
|
|
92
|
+
[PublicKernelType.NON_PUBLIC]: [],
|
|
93
|
+
[PublicKernelType.SETUP]: publicCallsStack.slice(0, firstRevertibleCallIndex),
|
|
94
|
+
[PublicKernelType.APP_LOGIC]: publicCallsStack.slice(firstRevertibleCallIndex),
|
|
95
|
+
[PublicKernelType.TEARDOWN]: teardownCallStack,
|
|
96
|
+
[PublicKernelType.TAIL]: [],
|
|
100
97
|
};
|
|
101
98
|
}
|
|
102
99
|
}
|
|
@@ -104,22 +101,26 @@ export class AbstractPhaseManager {
|
|
|
104
101
|
const calls = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx)[this.phase];
|
|
105
102
|
return calls;
|
|
106
103
|
}
|
|
107
|
-
|
|
108
|
-
async processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof) {
|
|
109
|
-
let kernelOutput = previousPublicKernelOutput;
|
|
110
|
-
const kernelProof = previousPublicKernelProof;
|
|
111
|
-
const publicKernelInputs = [];
|
|
104
|
+
async processEnqueuedPublicCalls(tx, previousPublicKernelOutput) {
|
|
112
105
|
const enqueuedCalls = this.extractEnqueuedPublicCalls(tx);
|
|
113
106
|
if (!enqueuedCalls || !enqueuedCalls.length) {
|
|
114
|
-
return
|
|
107
|
+
return {
|
|
108
|
+
publicProvingInformation: [],
|
|
109
|
+
kernelOutput: previousPublicKernelOutput,
|
|
110
|
+
newUnencryptedLogs: [],
|
|
111
|
+
returnValues: [],
|
|
112
|
+
gasUsed: Gas.empty(),
|
|
113
|
+
};
|
|
115
114
|
}
|
|
116
|
-
const newUnencryptedFunctionLogs = [];
|
|
117
|
-
// Transaction fee is zero for all phases except teardown
|
|
118
|
-
const transactionFee = this.getTransactionFee(tx, previousPublicKernelOutput);
|
|
119
115
|
// TODO(#1684): Should multiple separately enqueued public calls be treated as
|
|
120
116
|
// separate public callstacks to be proven by separate public kernel sequences
|
|
121
117
|
// and submitted separately to the base rollup?
|
|
118
|
+
const provingInformationList = [];
|
|
119
|
+
const newUnencryptedFunctionLogs = [];
|
|
120
|
+
// Transaction fee is zero for all phases except teardown
|
|
121
|
+
const transactionFee = this.getTransactionFee(tx, previousPublicKernelOutput);
|
|
122
122
|
let gasUsed = Gas.empty();
|
|
123
|
+
let kernelPublicOutput = previousPublicKernelOutput;
|
|
123
124
|
const enqueuedCallResults = [];
|
|
124
125
|
for (const enqueuedCall of enqueuedCalls) {
|
|
125
126
|
const executionStack = [enqueuedCall];
|
|
@@ -128,21 +129,20 @@ export class AbstractPhaseManager {
|
|
|
128
129
|
while (executionStack.length) {
|
|
129
130
|
const current = executionStack.pop();
|
|
130
131
|
const isExecutionRequest = !isPublicExecutionResult(current);
|
|
131
|
-
// TODO(6052): Extract correct new counter from nested calls
|
|
132
|
-
const sideEffectCounter = lastSideEffectCounter(tx) + 1;
|
|
133
|
-
const availableGas = this.getAvailableGas(tx, kernelOutput);
|
|
134
|
-
const pendingNullifiers = this.getSiloedPendingNullifiers(kernelOutput);
|
|
135
132
|
const result = isExecutionRequest
|
|
136
|
-
? await this.publicExecutor.simulate(current, this.globalVariables,
|
|
133
|
+
? await this.publicExecutor.simulate(current, this.globalVariables,
|
|
134
|
+
/*availableGas=*/ this.getAvailableGas(tx, kernelPublicOutput), tx.data.constants.txContext,
|
|
135
|
+
/*pendingNullifiers=*/ this.getSiloedPendingNullifiers(kernelPublicOutput), transactionFee,
|
|
136
|
+
/*startSideEffectCounter=*/ AbstractPhaseManager.getMaxSideEffectCounter(kernelPublicOutput) + 1)
|
|
137
137
|
: current;
|
|
138
|
+
// Accumulate gas used in this execution
|
|
139
|
+
gasUsed = gasUsed.add(Gas.from(result.startGasLeft).sub(Gas.from(result.endGasLeft)));
|
|
138
140
|
// Sanity check for a current upstream assumption.
|
|
139
141
|
// Consumers of the result seem to expect "reverted <=> revertReason !== undefined".
|
|
140
|
-
const functionSelector = result.execution.
|
|
142
|
+
const functionSelector = result.execution.functionSelector.toString();
|
|
141
143
|
if (result.reverted && !result.revertReason) {
|
|
142
144
|
throw new Error(`Simulation of ${result.execution.contractAddress.toString()}:${functionSelector} reverted with no reason.`);
|
|
143
145
|
}
|
|
144
|
-
// Accumulate gas used in this execution
|
|
145
|
-
gasUsed = gasUsed.add(Gas.from(result.startGasLeft).sub(Gas.from(result.endGasLeft)));
|
|
146
146
|
if (result.reverted && !PhaseIsRevertible[this.phase]) {
|
|
147
147
|
this.log.debug(`Simulation error on ${result.execution.contractAddress.toString()}:${functionSelector} with reason: ${result.revertReason}`);
|
|
148
148
|
throw result.revertReason;
|
|
@@ -150,17 +150,24 @@ export class AbstractPhaseManager {
|
|
|
150
150
|
if (isExecutionRequest) {
|
|
151
151
|
newUnencryptedFunctionLogs.push(result.allUnencryptedLogs);
|
|
152
152
|
}
|
|
153
|
-
this.log.debug(`Running public kernel circuit for ${result.execution.contractAddress.toString()}:${functionSelector}`);
|
|
154
153
|
executionStack.push(...result.nestedExecutions);
|
|
154
|
+
// Simulate the public kernel circuit.
|
|
155
|
+
this.log.debug(`Running public kernel circuit for ${result.execution.contractAddress.toString()}:${functionSelector}`);
|
|
155
156
|
const callData = await this.getPublicCallData(result, isExecutionRequest);
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
// Capture the inputs
|
|
159
|
-
|
|
160
|
-
|
|
157
|
+
const [privateInputs, publicInputs] = await this.runKernelCircuit(kernelPublicOutput, callData);
|
|
158
|
+
kernelPublicOutput = publicInputs;
|
|
159
|
+
// Capture the inputs for later proving in the AVM and kernel.
|
|
160
|
+
const publicProvingInformation = {
|
|
161
|
+
calldata: result.calldata,
|
|
162
|
+
bytecode: result.bytecode,
|
|
163
|
+
inputs: privateInputs,
|
|
164
|
+
avmHints: result.avmHints,
|
|
165
|
+
};
|
|
166
|
+
provingInformationList.push(publicProvingInformation);
|
|
167
|
+
// Sanity check: Note we can't expect them to just be equal, because e.g.
|
|
161
168
|
// if the simulator reverts in app logic, it "resets" and result.reverted will be false when we run teardown,
|
|
162
169
|
// but the kernel carries the reverted flag forward. But if the simulator reverts, so should the kernel.
|
|
163
|
-
if (result.reverted &&
|
|
170
|
+
if (result.reverted && kernelPublicOutput.revertCode.isOK()) {
|
|
164
171
|
throw new Error(`Public kernel circuit did not revert on ${result.execution.contractAddress.toString()}:${functionSelector}, but simulator did.`);
|
|
165
172
|
}
|
|
166
173
|
// We know the phase is revertible due to the above check.
|
|
@@ -168,30 +175,30 @@ export class AbstractPhaseManager {
|
|
|
168
175
|
if (result.reverted) {
|
|
169
176
|
this.log.debug(`Reverting on ${result.execution.contractAddress.toString()}:${functionSelector} with reason: ${result.revertReason}`);
|
|
170
177
|
// TODO(@spalladino): Check gasUsed is correct. The AVM should take care of setting gasLeft to zero upon a revert.
|
|
171
|
-
return
|
|
178
|
+
return {
|
|
179
|
+
publicProvingInformation: [],
|
|
180
|
+
kernelOutput: kernelPublicOutput,
|
|
181
|
+
newUnencryptedLogs: [],
|
|
182
|
+
revertReason: result.revertReason,
|
|
183
|
+
returnValues: [],
|
|
184
|
+
gasUsed,
|
|
185
|
+
};
|
|
172
186
|
}
|
|
173
187
|
if (!enqueuedExecutionResult) {
|
|
174
188
|
enqueuedExecutionResult = result;
|
|
175
189
|
}
|
|
176
190
|
enqueuedCallResults.push(accumulateReturnValues(enqueuedExecutionResult));
|
|
177
191
|
}
|
|
178
|
-
// HACK(#1622): Manually patches the ordering of public state actions
|
|
179
|
-
// TODO(#757): Enforce proper ordering of public state actions
|
|
180
|
-
patchPublicStorageActionOrdering(kernelOutput, enqueuedExecutionResult, this.phase);
|
|
181
192
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
kernelProof,
|
|
188
|
-
newUnencryptedFunctionLogs,
|
|
189
|
-
undefined,
|
|
190
|
-
enqueuedCallResults,
|
|
193
|
+
return {
|
|
194
|
+
publicProvingInformation: provingInformationList,
|
|
195
|
+
kernelOutput: kernelPublicOutput,
|
|
196
|
+
newUnencryptedLogs: newUnencryptedFunctionLogs,
|
|
197
|
+
returnValues: enqueuedCallResults,
|
|
191
198
|
gasUsed,
|
|
192
|
-
|
|
199
|
+
};
|
|
193
200
|
}
|
|
194
|
-
/** Returns all pending private and public nullifiers.
|
|
201
|
+
/** Returns all pending private and public nullifiers. */
|
|
195
202
|
getSiloedPendingNullifiers(ko) {
|
|
196
203
|
return [...ko.end.newNullifiers, ...ko.endNonRevertibleData.newNullifiers].filter(n => !n.isEmpty());
|
|
197
204
|
}
|
|
@@ -204,30 +211,28 @@ export class AbstractPhaseManager {
|
|
|
204
211
|
getTransactionFee(_tx, _previousPublicKernelOutput) {
|
|
205
212
|
return Fr.ZERO;
|
|
206
213
|
}
|
|
207
|
-
async runKernelCircuit(previousOutput,
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
async getKernelCircuitOutput(previousOutput, previousProof, callData) {
|
|
211
|
-
const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
|
|
214
|
+
async runKernelCircuit(previousOutput, callData) {
|
|
215
|
+
const previousKernel = this.getPreviousKernelData(previousOutput);
|
|
212
216
|
// We take a deep copy (clone) of these inputs to be passed to the prover
|
|
213
217
|
const inputs = new PublicKernelCircuitPrivateInputs(previousKernel, callData);
|
|
214
218
|
switch (this.phase) {
|
|
215
|
-
case
|
|
219
|
+
case PublicKernelType.SETUP:
|
|
216
220
|
return [inputs.clone(), await this.publicKernel.publicKernelCircuitSetup(inputs)];
|
|
217
|
-
case
|
|
221
|
+
case PublicKernelType.APP_LOGIC:
|
|
218
222
|
return [inputs.clone(), await this.publicKernel.publicKernelCircuitAppLogic(inputs)];
|
|
219
|
-
case
|
|
223
|
+
case PublicKernelType.TEARDOWN:
|
|
220
224
|
return [inputs.clone(), await this.publicKernel.publicKernelCircuitTeardown(inputs)];
|
|
221
225
|
default:
|
|
222
226
|
throw new Error(`No public kernel circuit for inputs`);
|
|
223
227
|
}
|
|
224
228
|
}
|
|
225
|
-
getPreviousKernelData(previousOutput
|
|
226
|
-
//
|
|
227
|
-
const vk =
|
|
229
|
+
getPreviousKernelData(previousOutput) {
|
|
230
|
+
// The proof and verification key are not used in simulation
|
|
231
|
+
const vk = VerificationKeyData.makeFake();
|
|
232
|
+
const proof = makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH);
|
|
228
233
|
const vkIndex = 0;
|
|
229
234
|
const vkSiblingPath = MembershipWitness.random(VK_TREE_HEIGHT).siblingPath;
|
|
230
|
-
return new PublicKernelData(previousOutput,
|
|
235
|
+
return new PublicKernelData(previousOutput, proof, vk, vkIndex, vkSiblingPath);
|
|
231
236
|
}
|
|
232
237
|
async getPublicCallStackItem(result, isExecutionRequest = false) {
|
|
233
238
|
const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE);
|
|
@@ -244,8 +249,10 @@ export class AbstractPhaseManager {
|
|
|
244
249
|
startSideEffectCounter: result.startSideEffectCounter,
|
|
245
250
|
endSideEffectCounter: result.endSideEffectCounter,
|
|
246
251
|
returnsHash: computeVarArgsHash(result.returnValues),
|
|
252
|
+
noteHashReadRequests: padArrayEnd(result.noteHashReadRequests, ReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_CALL),
|
|
247
253
|
nullifierReadRequests: padArrayEnd(result.nullifierReadRequests, ReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_CALL),
|
|
248
254
|
nullifierNonExistentReadRequests: padArrayEnd(result.nullifierNonExistentReadRequests, ReadRequest.empty(), MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL),
|
|
255
|
+
l1ToL2MsgReadRequests: padArrayEnd(result.l1ToL2MsgReadRequests, ReadRequest.empty(), MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL),
|
|
249
256
|
contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL),
|
|
250
257
|
contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL),
|
|
251
258
|
publicCallStackHashes,
|
|
@@ -256,9 +263,9 @@ export class AbstractPhaseManager {
|
|
|
256
263
|
endGasLeft: Gas.from(result.endGasLeft),
|
|
257
264
|
transactionFee: result.transactionFee,
|
|
258
265
|
// TODO(@just-mitch): need better mapping from simulator to revert code.
|
|
259
|
-
revertCode: result.reverted ? RevertCode.
|
|
266
|
+
revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK,
|
|
260
267
|
});
|
|
261
|
-
return new PublicCallStackItem(result.execution.contractAddress, result.execution.
|
|
268
|
+
return new PublicCallStackItem(result.execution.contractAddress, new FunctionData(result.execution.functionSelector, false), publicCircuitPublicInputs, isExecutionRequest);
|
|
262
269
|
}
|
|
263
270
|
async getPublicCallStackPreimages(result) {
|
|
264
271
|
const nested = result.nestedExecutions;
|
|
@@ -267,6 +274,43 @@ export class AbstractPhaseManager {
|
|
|
267
274
|
}
|
|
268
275
|
return await Promise.all(nested.map(n => this.getPublicCallStackItem(n)));
|
|
269
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Looks at the side effects of a transaction and returns the highest counter
|
|
279
|
+
* @param tx - A transaction
|
|
280
|
+
* @returns The highest side effect counter in the transaction so far
|
|
281
|
+
*/
|
|
282
|
+
static getMaxSideEffectCounter(inputs) {
|
|
283
|
+
const sideEffectCounters = [
|
|
284
|
+
...inputs.endNonRevertibleData.newNoteHashes,
|
|
285
|
+
...inputs.endNonRevertibleData.newNullifiers,
|
|
286
|
+
...inputs.endNonRevertibleData.noteEncryptedLogsHashes,
|
|
287
|
+
...inputs.endNonRevertibleData.encryptedLogsHashes,
|
|
288
|
+
...inputs.endNonRevertibleData.unencryptedLogsHashes,
|
|
289
|
+
...inputs.endNonRevertibleData.publicCallStack,
|
|
290
|
+
...inputs.endNonRevertibleData.publicDataUpdateRequests,
|
|
291
|
+
...inputs.end.newNoteHashes,
|
|
292
|
+
...inputs.end.newNullifiers,
|
|
293
|
+
...inputs.end.noteEncryptedLogsHashes,
|
|
294
|
+
...inputs.end.encryptedLogsHashes,
|
|
295
|
+
...inputs.end.unencryptedLogsHashes,
|
|
296
|
+
...inputs.end.publicCallStack,
|
|
297
|
+
...inputs.end.publicDataUpdateRequests,
|
|
298
|
+
];
|
|
299
|
+
let max = 0;
|
|
300
|
+
for (const sideEffect of sideEffectCounters) {
|
|
301
|
+
if ('startSideEffectCounter' in sideEffect) {
|
|
302
|
+
// look at both start and end counters because for enqueued public calls start > 0 while end === 0
|
|
303
|
+
max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber());
|
|
304
|
+
}
|
|
305
|
+
else if ('counter' in sideEffect) {
|
|
306
|
+
max = Math.max(max, sideEffect.counter);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
throw new Error('Unknown side effect type');
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return max;
|
|
313
|
+
}
|
|
270
314
|
getBytecodeHash(_result) {
|
|
271
315
|
// TODO: Determine how to calculate bytecode hash. Circuits just check it isn't zero for now.
|
|
272
316
|
// See https://github.com/AztecProtocol/aztec3-packages/issues/378
|
|
@@ -289,55 +333,4 @@ export class AbstractPhaseManager {
|
|
|
289
333
|
return new PublicCallData(callStackItem, publicCallStack, makeEmptyProof(), bytecodeHash);
|
|
290
334
|
}
|
|
291
335
|
}
|
|
292
|
-
function removeRedundantPublicDataWrites(publicInputs, phase) {
|
|
293
|
-
const lastWritesMap = new Map();
|
|
294
|
-
const patch = (requests) => requests.filter(write => {
|
|
295
|
-
const leafSlot = write.leafSlot.toString();
|
|
296
|
-
const exists = lastWritesMap.get(leafSlot);
|
|
297
|
-
lastWritesMap.set(leafSlot, true);
|
|
298
|
-
return !exists;
|
|
299
|
-
});
|
|
300
|
-
const [prev, curr] = PhaseIsRevertible[phase]
|
|
301
|
-
? [publicInputs.endNonRevertibleData, publicInputs.end]
|
|
302
|
-
: [publicInputs.end, publicInputs.endNonRevertibleData];
|
|
303
|
-
curr.publicDataUpdateRequests = padArrayEnd(patch(curr.publicDataUpdateRequests.reverse()).reverse(), PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
304
|
-
prev.publicDataUpdateRequests = padArrayEnd(patch(prev.publicDataUpdateRequests.reverse()), PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
305
|
-
}
|
|
306
|
-
// HACK(#1622): this is a hack to fix ordering of public state in the call stack. Since the private kernel
|
|
307
|
-
// cannot keep track of side effects that happen after or before a nested call, we override the public
|
|
308
|
-
// state actions it emits with whatever we got from the simulator. As a sanity check, we at least verify
|
|
309
|
-
// that the elements are the same, so we are only tweaking their ordering.
|
|
310
|
-
// See yarn-project/end-to-end/src/e2e_ordering.test.ts
|
|
311
|
-
// See https://github.com/AztecProtocol/aztec-packages/issues/1616
|
|
312
|
-
// TODO(#757): Enforce proper ordering of public state actions
|
|
313
|
-
/**
|
|
314
|
-
* Patch the ordering of storage actions output from the public kernel.
|
|
315
|
-
* @param publicInputs - to be patched here: public inputs to the kernel iteration up to this point
|
|
316
|
-
* @param execResult - result of the top/first execution for this enqueued public call
|
|
317
|
-
*/
|
|
318
|
-
function patchPublicStorageActionOrdering(publicInputs, execResult, phase) {
|
|
319
|
-
const { publicDataUpdateRequests } = PhaseIsRevertible[phase] ? publicInputs.end : publicInputs.endNonRevertibleData;
|
|
320
|
-
const { publicDataReads } = publicInputs.validationRequests;
|
|
321
|
-
// Convert ContractStorage* objects to PublicData* objects and sort them in execution order.
|
|
322
|
-
// Note, this only pulls simulated reads/writes from the current phase,
|
|
323
|
-
// so the returned result will be a subset of the public kernel output.
|
|
324
|
-
const simPublicDataReads = collectPublicDataReads(execResult);
|
|
325
|
-
const simPublicDataUpdateRequests = collectPublicDataUpdateRequests(execResult);
|
|
326
|
-
// We only want to reorder the items from the public inputs of the
|
|
327
|
-
// most recently processed top/enqueued call.
|
|
328
|
-
const effectSet = PhaseIsRevertible[phase] ? 'end' : 'endNonRevertibleData';
|
|
329
|
-
const numReadsInKernel = arrayNonEmptyLength(publicDataReads, f => f.isEmpty());
|
|
330
|
-
const numReadsBeforeThisEnqueuedCall = numReadsInKernel - simPublicDataReads.length;
|
|
331
|
-
publicInputs.validationRequests.publicDataReads = padArrayEnd([
|
|
332
|
-
// do not mess with items from previous top/enqueued calls in kernel output
|
|
333
|
-
...publicInputs.validationRequests.publicDataReads.slice(0, numReadsBeforeThisEnqueuedCall),
|
|
334
|
-
...simPublicDataReads,
|
|
335
|
-
], PublicDataRead.empty(), MAX_PUBLIC_DATA_READS_PER_TX);
|
|
336
|
-
const numUpdatesInKernel = arrayNonEmptyLength(publicDataUpdateRequests, f => f.isEmpty());
|
|
337
|
-
const numUpdatesBeforeThisEnqueuedCall = numUpdatesInKernel - simPublicDataUpdateRequests.length;
|
|
338
|
-
publicInputs[effectSet].publicDataUpdateRequests = padArrayEnd([
|
|
339
|
-
...publicInputs[effectSet].publicDataUpdateRequests.slice(0, numUpdatesBeforeThisEnqueuedCall),
|
|
340
|
-
...simPublicDataUpdateRequests,
|
|
341
|
-
], PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
342
|
-
}
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsWUFBWSxFQUdaLGdCQUFnQixHQUlqQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsRUFBRSxFQUNGLEdBQUcsRUFJSCxhQUFhLEVBQ2IsT0FBTyxFQUNQLDhCQUE4QixFQUM5Qiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLGlEQUFpRCxFQUNqRCxvQ0FBb0MsRUFDcEMscUNBQXFDLEVBQ3JDLDhCQUE4QixFQUM5Qiw0QkFBNEIsRUFDNUIsd0NBQXdDLEVBQ3hDLHNDQUFzQyxFQUN0Qyw2QkFBNkIsRUFDN0IsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixTQUFTLEVBRVQsY0FBYyxFQUVkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFFaEMsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVFLE9BQU8sRUFJTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUMvQix1QkFBdUIsR0FDeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUcxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENB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
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUVYLFlBQVksRUFHWixnQkFBZ0IsR0FLakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsWUFBWSxFQUNaLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLEVBQUUsRUFDRixZQUFZLEVBQ1osR0FBRyxFQUlILGFBQWEsRUFDYixPQUFPLEVBQ1AsdUNBQXVDLEVBQ3ZDLDhCQUE4QixFQUM5Qiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLG9DQUFvQyxFQUNwQyxpREFBaUQsRUFDakQsb0NBQW9DLEVBQ3BDLHFDQUFxQyxFQUNyQyw4QkFBOEIsRUFDOUIsd0NBQXdDLEVBQ3hDLDZCQUE2QixFQUM3QixpQkFBaUIsRUFDakIsNkJBQTZCLEVBQzdCLFFBQVEsRUFDUixTQUFTLEVBQ1QsY0FBYyxFQUVkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsZ0NBQWdDLEVBRWhDLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsVUFBVSxFQUNWLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLHVCQUF1QixHQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUlMLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FDeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUcxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHbEQsTUFB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
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type Tx } from '@aztec/circuit-types';
|
|
2
|
-
import { type GlobalVariables, type Header, type
|
|
1
|
+
import { PublicKernelType, type PublicProvingRequest, type Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { type GlobalVariables, type Header, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
|
|
3
3
|
import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator';
|
|
4
4
|
import { type MerkleTreeOperations } from '@aztec/world-state';
|
|
5
|
-
import { AbstractPhaseManager
|
|
6
|
-
import { type ContractsDataSourcePublicDB } from './
|
|
5
|
+
import { AbstractPhaseManager } from './abstract_phase_manager.js';
|
|
6
|
+
import { type ContractsDataSourcePublicDB } from './public_db_sources.js';
|
|
7
7
|
import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js';
|
|
8
8
|
/**
|
|
9
9
|
* The phase manager responsible for performing the fee preparation phase.
|
|
@@ -11,14 +11,13 @@ import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simul
|
|
|
11
11
|
export declare class AppLogicPhaseManager extends AbstractPhaseManager {
|
|
12
12
|
protected publicContractsDB: ContractsDataSourcePublicDB;
|
|
13
13
|
protected publicStateDB: PublicStateDB;
|
|
14
|
-
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?:
|
|
15
|
-
handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs
|
|
16
|
-
|
|
14
|
+
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelType);
|
|
15
|
+
handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs): Promise<{
|
|
16
|
+
publicProvingRequests: PublicProvingRequest[];
|
|
17
17
|
publicKernelOutput: PublicKernelCircuitPublicInputs;
|
|
18
|
-
publicKernelProof: Proof;
|
|
19
18
|
revertReason: import("@aztec/circuit-types").SimulationError | undefined;
|
|
20
19
|
returnValues: import("@aztec/circuit-types").NestedProcessReturnValues[];
|
|
21
|
-
gasUsed: import("@aztec/circuits.js").Gas;
|
|
20
|
+
gasUsed: import("@aztec/circuits.js").Gas | undefined;
|
|
22
21
|
}>;
|
|
23
22
|
}
|
|
24
23
|
//# sourceMappingURL=app_logic_phase_manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_logic_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/app_logic_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"app_logic_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/app_logic_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAC7G,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/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,gBAA6C;IAKvC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,0BAA0B,EAAE,+BAA+B;;;;;;;CAkC1F"}
|