@aztec/simulator 0.47.0 → 0.48.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 +1 -1
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.d.ts +5 -5
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +13 -16
- package/dest/acvm/oracle/typed_oracle.d.ts +12 -9
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +6 -6
- package/dest/acvm/serialize.d.ts +0 -11
- package/dest/acvm/serialize.d.ts.map +1 -1
- package/dest/acvm/serialize.js +1 -26
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +2 -1
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +2 -2
- package/dest/avm/opcodes/commitment.d.ts +16 -0
- package/dest/avm/opcodes/commitment.d.ts.map +1 -0
- package/dest/avm/opcodes/commitment.js +50 -0
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +3 -1
- package/dest/avm/serialization/instruction_serialization.d.ts +4 -3
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +6 -5
- package/dest/client/client_execution_context.d.ts +20 -17
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +42 -45
- package/dest/client/db_oracle.d.ts +4 -3
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/execution_note_cache.d.ts +17 -13
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +65 -26
- package/dest/client/execution_result.d.ts +15 -8
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +40 -16
- package/dest/client/private_execution.js +3 -3
- package/dest/client/simulator.d.ts +7 -6
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +14 -12
- package/dest/client/test_utils.d.ts +9 -0
- package/dest/client/test_utils.d.ts.map +1 -0
- package/dest/client/test_utils.js +21 -0
- package/dest/client/view_data_oracle.d.ts +2 -1
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +4 -3
- package/dest/index.d.ts +0 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -2
- package/dest/mocks/fixtures.d.ts +5 -5
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +6 -9
- package/dest/public/abstract_phase_manager.d.ts +4 -5
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +17 -84
- package/dest/public/execution.d.ts +8 -10
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +10 -1
- package/dest/public/executor.d.ts +6 -2
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +12 -4
- package/dest/public/executor_metrics.d.ts +10 -0
- package/dest/public/executor_metrics.d.ts.map +1 -0
- package/dest/public/executor_metrics.js +32 -0
- package/dest/public/fee_payment.d.ts +2 -2
- package/dest/public/fee_payment.d.ts.map +1 -1
- package/dest/public/fee_payment.js +9 -10
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +1 -1
- package/dest/public/index.d.ts +1 -1
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +1 -1
- package/dest/public/public_processor.d.ts +3 -3
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +33 -14
- package/dest/public/public_processor_metrics.d.ts +19 -0
- package/dest/public/public_processor_metrics.d.ts.map +1 -0
- package/dest/public/public_processor_metrics.js +57 -0
- package/dest/public/side_effect_trace.d.ts +1 -0
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +9 -9
- package/package.json +9 -9
- package/src/acvm/acvm.ts +1 -1
- package/src/acvm/oracle/oracle.ts +13 -30
- package/src/acvm/oracle/typed_oracle.ts +12 -31
- package/src/acvm/serialize.ts +0 -29
- package/src/avm/avm_gas.ts +1 -0
- package/src/avm/fixtures/index.ts +1 -0
- package/src/avm/opcodes/commitment.ts +66 -0
- package/src/avm/serialization/bytecode_serialization.ts +2 -0
- package/src/avm/serialization/instruction_serialization.ts +2 -1
- package/src/client/client_execution_context.ts +51 -49
- package/src/client/db_oracle.ts +9 -3
- package/src/client/execution_note_cache.ts +76 -25
- package/src/client/execution_result.ts +54 -19
- package/src/client/private_execution.ts +2 -2
- package/src/client/simulator.ts +18 -14
- package/src/client/test_utils.ts +30 -0
- package/src/client/view_data_oracle.ts +2 -1
- package/src/index.ts +0 -1
- package/src/mocks/fixtures.ts +13 -11
- package/src/public/abstract_phase_manager.ts +23 -104
- package/src/public/execution.ts +30 -14
- package/src/public/executor.ts +18 -4
- package/src/public/executor_metrics.ts +48 -0
- package/src/public/fee_payment.ts +8 -10
- package/src/public/hints_builder.ts +2 -2
- package/src/public/index.ts +1 -1
- package/src/public/public_processor.ts +46 -15
- package/src/public/public_processor_metrics.ts +90 -0
- package/src/public/side_effect_trace.ts +13 -7
- package/dest/utils.d.ts +0 -12
- package/dest/utils.d.ts.map +0 -1
- package/dest/utils.js +0 -11
- package/src/utils.ts +0 -18
package/dest/mocks/fixtures.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
|
|
1
|
+
import { PublicExecutionRequest, UnencryptedFunctionL2Logs, } from '@aztec/circuit-types';
|
|
2
2
|
import { ARGS_LENGTH, AvmExecutionHints, CallContext, Fr, Gas, } from '@aztec/circuits.js';
|
|
3
3
|
import { makeAztecAddress, makeSelector } from '@aztec/circuits.js/testing';
|
|
4
4
|
import { FunctionType } from '@aztec/foundation/abi';
|
|
5
5
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
6
|
+
import { resultToPublicCallRequest } from '../public/execution.js';
|
|
6
7
|
export class PublicExecutionResultBuilder {
|
|
7
8
|
constructor(executionRequest) {
|
|
8
9
|
this._nestedExecutions = [];
|
|
@@ -13,7 +14,7 @@ export class PublicExecutionResultBuilder {
|
|
|
13
14
|
this._revertReason = undefined;
|
|
14
15
|
this._executionRequest = executionRequest;
|
|
15
16
|
}
|
|
16
|
-
static
|
|
17
|
+
static fromPublicExecutionRequest({ request, returnValues = [new Fr(1n)], nestedExecutions = [], contractStorageUpdateRequests = [], contractStorageReads = [], revertReason = undefined, }) {
|
|
17
18
|
const builder = new PublicExecutionResultBuilder(request);
|
|
18
19
|
builder.withNestedExecutions(...nestedExecutions);
|
|
19
20
|
builder.withContractStorageUpdateRequest(...contractStorageUpdateRequests);
|
|
@@ -25,12 +26,7 @@ export class PublicExecutionResultBuilder {
|
|
|
25
26
|
return builder;
|
|
26
27
|
}
|
|
27
28
|
static fromFunctionCall({ from, tx, returnValues = [new Fr(1n)], nestedExecutions = [], contractStorageUpdateRequests = [], contractStorageReads = [], revertReason, }) {
|
|
28
|
-
const builder = new PublicExecutionResultBuilder(
|
|
29
|
-
callContext: new CallContext(from, tx.to, tx.selector, false, false),
|
|
30
|
-
contractAddress: tx.to,
|
|
31
|
-
functionSelector: tx.selector,
|
|
32
|
-
args: tx.args,
|
|
33
|
-
});
|
|
29
|
+
const builder = new PublicExecutionResultBuilder(new PublicExecutionRequest(tx.to, new CallContext(from, tx.to, tx.selector, false, false), tx.args));
|
|
34
30
|
builder.withNestedExecutions(...nestedExecutions);
|
|
35
31
|
builder.withContractStorageUpdateRequest(...contractStorageUpdateRequests);
|
|
36
32
|
builder.withContractStorageRead(...contractStorageReads);
|
|
@@ -65,6 +61,7 @@ export class PublicExecutionResultBuilder {
|
|
|
65
61
|
return {
|
|
66
62
|
executionRequest: this._executionRequest,
|
|
67
63
|
nestedExecutions: this._nestedExecutions,
|
|
64
|
+
publicCallRequests: this._nestedExecutions.map(resultToPublicCallRequest),
|
|
68
65
|
noteHashReadRequests: [],
|
|
69
66
|
nullifierReadRequests: [],
|
|
70
67
|
nullifierNonExistentReadRequests: [],
|
|
@@ -93,4 +90,4 @@ export class PublicExecutionResultBuilder {
|
|
|
93
90
|
}
|
|
94
91
|
}
|
|
95
92
|
export const makeFunctionCall = (name = 'function', to = makeAztecAddress(30), selector = makeSelector(5), type = FunctionType.PUBLIC, args = new Array(ARGS_LENGTH).fill(Fr.ZERO), isStatic = false, returnTypes = []) => ({ name, to, selector, type, args, isStatic, returnTypes });
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9ja3MvZml4dHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHNCQUFzQixFQUV0Qix5QkFBeUIsR0FDMUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGlCQUFpQixFQUVqQixXQUFXLEVBR1gsRUFBRSxFQUNGLEdBQUcsR0FDSixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNELE9BQU8sRUFBOEIseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRixNQUFNLE9BQU8sNEJBQTRCO0lBU3ZDLFlBQVksZ0JBQXdDO1FBUDVDLHNCQUFpQixHQUE0QixFQUFFLENBQUM7UUFDaEQsbUNBQThCLEdBQW1DLEVBQUUsQ0FBQztRQUNwRSwwQkFBcUIsR0FBMEIsRUFBRSxDQUFDO1FBQ2xELGtCQUFhLEdBQVMsRUFBRSxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsa0JBQWEsR0FBZ0MsU0FBUyxDQUFDO1FBRzdELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxDQUFDLDBCQUEwQixDQUFDLEVBQ2hDLE9BQU8sRUFDUCxZQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMzQixnQkFBZ0IsR0FBRyxFQUFFLEVBQ3JCLDZCQUE2QixHQUFHLEVBQUUsRUFDbEMsb0JBQW9CLEdBQUcsRUFBRSxFQUN6QixZQUFZLEdBQUcsU0FBUyxHQVF6QjtRQUNDLE1BQU0s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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { type AvmProvingRequest, type NestedProcessReturnValues, type PublicKernelNonTailRequest, PublicKernelType, type PublicProvingRequest, type SimulationError, type Tx, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
|
|
3
|
-
import { type AvmExecutionHints, Fr, Gas, type GlobalVariables, type Header, type KernelCircuitPublicInputs, PublicCallData,
|
|
2
|
+
import { type AvmProvingRequest, type NestedProcessReturnValues, type PublicExecutionRequest, type PublicKernelNonTailRequest, PublicKernelType, type PublicProvingRequest, type SimulationError, type Tx, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
|
|
3
|
+
import { type AvmExecutionHints, Fr, Gas, type GlobalVariables, type Header, type KernelCircuitPublicInputs, PublicCallData, PublicCallStackItem, PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, PublicKernelData } from '@aztec/circuits.js';
|
|
4
4
|
import { type DebugLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
|
|
6
6
|
import { type PublicExecutionResult, type PublicExecutor } from '@aztec/simulator';
|
|
@@ -63,8 +63,8 @@ export declare abstract class AbstractPhaseManager {
|
|
|
63
63
|
* @param publicKernelPublicInputs - the output of the public kernel circuit for the previous phase
|
|
64
64
|
*/
|
|
65
65
|
abstract handle(tx: Tx, publicKernelPublicInputs: PublicKernelCircuitPublicInputs, previousKernelArtifact: ProtocolArtifact): Promise<PhaseResult>;
|
|
66
|
-
static extractEnqueuedPublicCallsByPhase(tx: Tx): Record<PublicKernelType,
|
|
67
|
-
protected extractEnqueuedPublicCalls(tx: Tx):
|
|
66
|
+
static extractEnqueuedPublicCallsByPhase(tx: Tx): Record<PublicKernelType, PublicExecutionRequest[]>;
|
|
67
|
+
protected extractEnqueuedPublicCalls(tx: Tx): PublicExecutionRequest[];
|
|
68
68
|
protected processEnqueuedPublicCalls(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousKernelArtifact: ProtocolArtifact): Promise<TxPublicCallsResult>;
|
|
69
69
|
/** Returns all pending private and public nullifiers. */
|
|
70
70
|
private getSiloedPendingNullifiers;
|
|
@@ -73,7 +73,6 @@ export declare abstract class AbstractPhaseManager {
|
|
|
73
73
|
private runKernelCircuit;
|
|
74
74
|
protected getPreviousKernelData(previousOutput: PublicKernelCircuitPublicInputs, previousCircuit: ProtocolArtifact): PublicKernelData;
|
|
75
75
|
protected getPublicCallStackItem(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallStackItem>;
|
|
76
|
-
protected getPublicCallStackPreimages(result: PublicExecutionResult): Promise<PublicCallStackItem[]>;
|
|
77
76
|
/**
|
|
78
77
|
* Looks at the side effects of a transaction and returns the highest counter
|
|
79
78
|
* @param tx - A transaction
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/abstract_phase_manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,EAAE,EACP,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/abstract_phase_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AVM_REQUEST, MerkleTreeId, PublicKernelType, } from '@aztec/circuit-types';
|
|
2
|
-
import { AztecAddress,
|
|
2
|
+
import { AztecAddress, ContractStorageRead, ContractStorageUpdateRequest, Fr, FunctionData, Gas, L2ToL1Message, LogHash, MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NOTE_HASHES_PER_CALL, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_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, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL, NESTED_RECURSIVE_PROOF_LENGTH, NoteHash, Nullifier, PublicCallData, PublicCallRequest, PublicCallStackItem, PublicCircuitPublicInputs, PublicKernelCircuitPrivateInputs, PublicKernelData, ReadRequest, RevertCode, makeEmptyProof, makeEmptyRecursiveProof, } from '@aztec/circuits.js';
|
|
3
3
|
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
4
4
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
5
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
@@ -38,73 +38,21 @@ export class AbstractPhaseManager {
|
|
|
38
38
|
this.log = createDebugLogger(`aztec:sequencer:${phase}`);
|
|
39
39
|
}
|
|
40
40
|
static extractEnqueuedPublicCallsByPhase(tx) {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
const publicCallsStack = tx.enqueuedPublicFunctionCalls.slice().reverse();
|
|
52
|
-
const nonRevertibleCallStack = data.endNonRevertibleData.publicCallStack.filter(i => !i.isEmpty());
|
|
53
|
-
const revertibleCallStack = data.end.publicCallStack.filter(i => !i.isEmpty());
|
|
54
|
-
const callRequestsStack = publicCallsStack
|
|
55
|
-
.map(call => call.toCallRequest())
|
|
56
|
-
.filter(
|
|
57
|
-
// filter out enqueued calls that are not in the public call stack
|
|
58
|
-
// TODO mitch left a question about whether this is only needed when unit testing
|
|
59
|
-
// with mock data
|
|
60
|
-
call => revertibleCallStack.find(p => p.equals(call)) || nonRevertibleCallStack.find(p => p.equals(call)));
|
|
61
|
-
const teardownCallStack = tx.publicTeardownFunctionCall.isEmpty() ? [] : [tx.publicTeardownFunctionCall];
|
|
62
|
-
if (callRequestsStack.length === 0) {
|
|
63
|
-
return {
|
|
64
|
-
[PublicKernelType.NON_PUBLIC]: [],
|
|
65
|
-
[PublicKernelType.SETUP]: [],
|
|
66
|
-
[PublicKernelType.APP_LOGIC]: [],
|
|
67
|
-
[PublicKernelType.TEARDOWN]: teardownCallStack,
|
|
68
|
-
[PublicKernelType.TAIL]: [],
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
// find the first call that is revertible
|
|
72
|
-
const firstRevertibleCallIndex = callRequestsStack.findIndex(c => revertibleCallStack.findIndex(p => p.equals(c)) !== -1);
|
|
73
|
-
if (firstRevertibleCallIndex === 0) {
|
|
74
|
-
return {
|
|
75
|
-
[PublicKernelType.NON_PUBLIC]: [],
|
|
76
|
-
[PublicKernelType.SETUP]: [],
|
|
77
|
-
[PublicKernelType.APP_LOGIC]: publicCallsStack,
|
|
78
|
-
[PublicKernelType.TEARDOWN]: teardownCallStack,
|
|
79
|
-
[PublicKernelType.TAIL]: [],
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
else if (firstRevertibleCallIndex === -1) {
|
|
83
|
-
// there's no app logic, split the functions between setup (many) and teardown (just one function call)
|
|
84
|
-
return {
|
|
85
|
-
[PublicKernelType.NON_PUBLIC]: [],
|
|
86
|
-
[PublicKernelType.SETUP]: publicCallsStack,
|
|
87
|
-
[PublicKernelType.APP_LOGIC]: [],
|
|
88
|
-
[PublicKernelType.TEARDOWN]: teardownCallStack,
|
|
89
|
-
[PublicKernelType.TAIL]: [],
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
return {
|
|
94
|
-
[PublicKernelType.NON_PUBLIC]: [],
|
|
95
|
-
[PublicKernelType.SETUP]: publicCallsStack.slice(0, firstRevertibleCallIndex),
|
|
96
|
-
[PublicKernelType.APP_LOGIC]: publicCallsStack.slice(firstRevertibleCallIndex),
|
|
97
|
-
[PublicKernelType.TEARDOWN]: teardownCallStack,
|
|
98
|
-
[PublicKernelType.TAIL]: [],
|
|
99
|
-
};
|
|
100
|
-
}
|
|
41
|
+
const teardownRequest = tx.getPublicTeardownExecutionRequest();
|
|
42
|
+
return {
|
|
43
|
+
[PublicKernelType.NON_PUBLIC]: [],
|
|
44
|
+
[PublicKernelType.SETUP]: tx.getNonRevertiblePublicExecutionRequests(),
|
|
45
|
+
[PublicKernelType.APP_LOGIC]: tx.getRevertiblePublicExecutionRequests(),
|
|
46
|
+
[PublicKernelType.TEARDOWN]: teardownRequest ? [teardownRequest] : [],
|
|
47
|
+
[PublicKernelType.TAIL]: [],
|
|
48
|
+
};
|
|
101
49
|
}
|
|
102
50
|
extractEnqueuedPublicCalls(tx) {
|
|
103
51
|
const calls = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx)[this.phase];
|
|
104
52
|
return calls;
|
|
105
53
|
}
|
|
106
54
|
async processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousKernelArtifact) {
|
|
107
|
-
const enqueuedCalls = this.extractEnqueuedPublicCalls(tx);
|
|
55
|
+
const enqueuedCalls = [...this.extractEnqueuedPublicCalls(tx)].reverse();
|
|
108
56
|
if (!enqueuedCalls || !enqueuedCalls.length) {
|
|
109
57
|
return {
|
|
110
58
|
publicProvingInformation: [],
|
|
@@ -143,7 +91,7 @@ export class AbstractPhaseManager {
|
|
|
143
91
|
gasUsed = gasUsed.add(Gas.from(result.startGasLeft).sub(Gas.from(result.endGasLeft)));
|
|
144
92
|
// Sanity check for a current upstream assumption.
|
|
145
93
|
// Consumers of the result seem to expect "reverted <=> revertReason !== undefined".
|
|
146
|
-
const functionSelector = result.executionRequest.functionSelector.toString();
|
|
94
|
+
const functionSelector = result.executionRequest.callContext.functionSelector.toString();
|
|
147
95
|
if (result.reverted && !result.revertReason) {
|
|
148
96
|
throw new Error(`Simulation of ${result.executionRequest.contractAddress.toString()}:${functionSelector}(${result.functionName}) reverted with no reason.`);
|
|
149
97
|
}
|
|
@@ -222,7 +170,7 @@ export class AbstractPhaseManager {
|
|
|
222
170
|
async runKernelCircuit(previousOutput, previousCircuit, callData) {
|
|
223
171
|
const previousKernel = this.getPreviousKernelData(previousOutput, previousCircuit);
|
|
224
172
|
// We take a deep copy (clone) of these inputs to be passed to the prover
|
|
225
|
-
const inputs = new PublicKernelCircuitPrivateInputs(previousKernel,
|
|
173
|
+
const inputs = new PublicKernelCircuitPrivateInputs(previousKernel, callData);
|
|
226
174
|
switch (this.phase) {
|
|
227
175
|
case PublicKernelType.SETUP:
|
|
228
176
|
return [inputs.clone(), await this.publicKernel.publicKernelCircuitSetup(inputs), 'PublicKernelSetupArtifact'];
|
|
@@ -253,8 +201,6 @@ export class AbstractPhaseManager {
|
|
|
253
201
|
async getPublicCallStackItem(result, isExecutionRequest = false) {
|
|
254
202
|
const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE);
|
|
255
203
|
this.historicalHeader.state.partial.publicDataTree.root = Fr.fromBuffer(publicDataTreeInfo.root);
|
|
256
|
-
const callStackPreimages = await this.getPublicCallStackPreimages(result);
|
|
257
|
-
const publicCallStackHashes = padArrayEnd(callStackPreimages.map(c => c.getCompressed().hash()), Fr.ZERO, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
|
|
258
204
|
const publicCircuitPublicInputs = PublicCircuitPublicInputs.from({
|
|
259
205
|
callContext: result.executionRequest.callContext,
|
|
260
206
|
proverAddress: AztecAddress.ZERO,
|
|
@@ -271,7 +217,7 @@ export class AbstractPhaseManager {
|
|
|
271
217
|
l1ToL2MsgReadRequests: padArrayEnd(result.l1ToL2MsgReadRequests, ReadRequest.empty(), MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL),
|
|
272
218
|
contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL),
|
|
273
219
|
contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL),
|
|
274
|
-
|
|
220
|
+
publicCallRequests: padArrayEnd(result.publicCallRequests, PublicCallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL),
|
|
275
221
|
unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL),
|
|
276
222
|
historicalHeader: this.historicalHeader,
|
|
277
223
|
globalVariables: this.globalVariables,
|
|
@@ -281,14 +227,7 @@ export class AbstractPhaseManager {
|
|
|
281
227
|
// TODO(@just-mitch): need better mapping from simulator to revert code.
|
|
282
228
|
revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK,
|
|
283
229
|
});
|
|
284
|
-
return new PublicCallStackItem(result.executionRequest.contractAddress, new FunctionData(result.executionRequest.functionSelector, false), publicCircuitPublicInputs, isExecutionRequest);
|
|
285
|
-
}
|
|
286
|
-
async getPublicCallStackPreimages(result) {
|
|
287
|
-
const nested = result.nestedExecutions;
|
|
288
|
-
if (nested.length > MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL) {
|
|
289
|
-
throw new Error(`Public call stack size exceeded (max ${MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL}, got ${nested.length})`);
|
|
290
|
-
}
|
|
291
|
-
return await Promise.all(nested.map(n => this.getPublicCallStackItem(n)));
|
|
230
|
+
return new PublicCallStackItem(result.executionRequest.contractAddress, new FunctionData(result.executionRequest.callContext.functionSelector, false), publicCircuitPublicInputs, isExecutionRequest);
|
|
292
231
|
}
|
|
293
232
|
/**
|
|
294
233
|
* Looks at the side effects of a transaction and returns the highest counter
|
|
@@ -314,11 +253,7 @@ export class AbstractPhaseManager {
|
|
|
314
253
|
];
|
|
315
254
|
let max = 0;
|
|
316
255
|
for (const sideEffect of sideEffectCounters) {
|
|
317
|
-
if ('
|
|
318
|
-
// look at both start and end counters because for enqueued public calls start > 0 while end === 0
|
|
319
|
-
max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber());
|
|
320
|
-
}
|
|
321
|
-
else if ('counter' in sideEffect) {
|
|
256
|
+
if ('counter' in sideEffect) {
|
|
322
257
|
max = Math.max(max, sideEffect.counter);
|
|
323
258
|
}
|
|
324
259
|
else {
|
|
@@ -344,9 +279,7 @@ export class AbstractPhaseManager {
|
|
|
344
279
|
async getPublicCallData(result, isExecutionRequest = false) {
|
|
345
280
|
const bytecodeHash = await this.getBytecodeHash(result);
|
|
346
281
|
const callStackItem = await this.getPublicCallStackItem(result, isExecutionRequest);
|
|
347
|
-
|
|
348
|
-
const publicCallStack = padArrayEnd(publicCallRequests, CallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
|
|
349
|
-
return new PublicCallData(callStackItem, publicCallStack, makeEmptyProof(), bytecodeHash);
|
|
282
|
+
return new PublicCallData(callStackItem, makeEmptyProof(), bytecodeHash);
|
|
350
283
|
}
|
|
351
284
|
}
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUVYLFlBQVksRUFHWixnQkFBZ0IsR0FLakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsWUFBWSxFQUNaLFdBQVcsRUFDWCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1QixFQUFFLEVBQ0YsWUFBWSxFQUNaLEdBQUcsRUFJSCxhQUFhLEVBQ2IsT0FBTyxFQUNQLHVDQUF1QyxFQUN2QywwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLG9DQUFvQyxFQUNwQyx1QkFBdUIsRUFDdkIsaURBQWlELEVBQ2pELG9DQUFvQyxFQUNwQyxxQ0FBcUMsRUFDckMsOEJBQThCLEVBQzlCLHdDQUF3QyxFQUN4Qyw2QkFBNkIsRUFDN0IsNkJBQTZCLEVBQzdCLFFBQVEsRUFDUixTQUFTLEVBQ1QsY0FBYyxFQUVkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsZ0NBQWdDLEVBRWhDLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsVUFBVSxFQUNWLGNBQWMsRUFDZCx1QkFBdUIsR0FDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFFTCx3QkFBd0IsRUFDeEIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixnQkFBZ0IsR0FDakIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBSUwsc0JBQXNCLEVBQ3RCLHVCQUF1QixHQUN4QixNQUFNLGtCQUFrQixD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
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUVYLFlBQVksRUFJWixnQkFBZ0IsR0FLakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsWUFBWSxFQUNaLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsRUFBRSxFQUNGLFlBQVksRUFDWixHQUFHLEVBSUgsYUFBYSxFQUNiLE9BQU8sRUFDUCx1Q0FBdUMsRUFDdkMsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4QixvQ0FBb0MsRUFDcEMsdUJBQXVCLEVBQ3ZCLGlEQUFpRCxFQUNqRCxvQ0FBb0MsRUFDcEMscUNBQXFDLEVBQ3JDLDhCQUE4QixFQUM5Qix3Q0FBd0MsRUFDeEMsNkJBQTZCLEVBQzdCLDZCQUE2QixFQUM3QixRQUFRLEVBQ1IsU0FBUyxFQUNULGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixnQ0FBZ0MsRUFFaEMsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxVQUFVLEVBQ1YsY0FBYyxFQUNkLHVCQUF1QixHQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUVMLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLGdCQUFnQixHQUNqQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7QUFHMUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFzQztJQUNsRSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUs7SUFDcEMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLO0lBQy9CLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSTtJQUNsQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUk7SUFDakMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLO0NBQy9CLENBQUM7QUFVRixNQUFNLFVBQVUscUJBQXFCLENBQ25DLElBQThCLEVBQzlCLFVBQThDO0lBRTlDLE9BQU87UUFDTCxJQUFJLEVBQUUsV0FBVztRQUNqQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7UUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtRQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFVBQVU7WUFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFvQ0QsTUFBTSxPQUFnQixvQkFBb0I7SUFHeEMsWUFDWSxFQUF3QixFQUN4QixjQUE4QixFQUM5QixZQUEwQyxFQUMxQyxlQUFnQyxFQUNoQyxnQkFBd0IsRUFDM0IsS0FBdUI7UUFMcEIsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUE4QjtRQUMxQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQzNCLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBRTlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBWU0sTUFBTSxDQUFDLGlDQUFpQyxDQUFDLEVBQU07UUFDcEQsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDL0QsT0FBTztZQUNMLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUN0RSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtZQUN2RSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFUywwQkFBMEIsQ0FBQyxFQUFNO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLGlDQUFpQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxLQUFLLENBQUMsMEJBQTBCLENBQ3hDLEVBQU0sRUFDTiwwQkFBMkQsRUFDM0Qsc0JBQXdDO1FBRXhDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV6RSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVDLE9BQU87Z0JBQ0wsd0JBQXdCLEVBQUUsRUFBRTtnQkFDNUIsWUFBWSxFQUFFLDBCQUEwQjtnQkFDeEMsa0JBQWtCLEVBQUUsc0JBQXNCO2dCQUMxQyxrQkFBa0IsRUFBRSxFQUFFO2dCQUN0QixZQUFZLEVBQUUsRUFBRTtnQkFDaEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUU7YUFDckIsQ0FBQztRQUNKLENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsOEVBQThFO1FBQzlFLCtDQUErQztRQUUvQyxNQUFNLHNCQUFzQixHQUErQixFQUFFLENBQUM7UUFDOUQsTUFBTSwwQkFBMEIsR0FBZ0MsRUFBRSxDQUFDO1FBQ25FLHlEQUF5RDtRQUN6RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFDOUUsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksa0JBQWtCLEdBQW9DLDBCQUEwQixDQUFDO1FBRXJGLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBRS9CLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFLENBQUM7WUFDekMsTUFBTSxjQUFjLEdBQXVELENBQUMsWUFBWSxDQUFDLENBQUM7WUFFMUYsMERBQTBEO1lBQzFELElBQUksdUJBQTBELENBQUM7WUFFL0QsT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztnQkFDdEMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3RCxNQUFNLE1BQU0sR0FBRyxrQkFBa0I7b0JBQy9CLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUTtvQkFDaEMscUJBQXFCLENBQUMsT0FBTyxFQUM3QixJQUFJLENBQUMsZUFBZTtvQkFDcEIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsRUFDOUQsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUztvQkFDM0Isc0JBQXNCLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLEVBQzFFLGNBQWM7b0JBQ2QsMkJBQTJCLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBR2pHO29CQUNILENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBRVosd0NBQXdDO2dCQUN4QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV0RixrREFBa0Q7Z0JBQ2xELG9GQUFvRjtnQkFDcEYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6RixJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzVDLE1BQU0sSUFBSSxLQUFLLENBQ2IsaUJBQWlCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksZ0JBQWdCLElBQ3JGLE1BQU0sQ0FBQyxZQUNULDRCQUE0QixDQUM3QixDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNaLHVCQUF1QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLGdCQUFnQixJQUMzRixNQUFNLENBQUMsWUFDVCxrQkFBa0IsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUN4QyxDQUFDO29CQUNGLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDNUIsQ0FBQztnQkFFRCxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQ3ZCLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztnQkFDRCxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRWhELHNDQUFzQztnQkFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ1oscUNBQXFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksZ0JBQWdCLElBQ3pHLE1BQU0sQ0FBQyxZQUNULEdBQUcsQ0FDSixDQUFDO2dCQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FDekUsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixRQUFRLENBQ1QsQ0FBQztnQkFDRixrQkFBa0IsR0FBRyxZQUFZLENBQUM7Z0JBQ2xDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztnQkFFbEMsOERBQThEO2dCQUM5RCxNQUFNLHdCQUF3QixHQUE2QjtvQkFDekQsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO29CQUNqQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUztvQkFDMUIsTUFBTSxFQUFFLGFBQWE7b0JBQ3JCLFFBQVEsRUFBRSxNQUFNLENBQUMsZUFBZTtpQkFDakMsQ0FBQztnQkFDRixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFFdEQseUVBQXlFO2dCQUN6RSw2R0FBNkc7Z0JBQzdHLHdHQUF3RztnQkFDeEcsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUM1RCxNQUFNLElBQUksS0FBSyxDQUNiLDJDQUEyQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLGdCQUFnQixJQUMvRyxNQUFNLENBQUMsWUFDVCx1QkFBdUIsQ0FDeEIsQ0FBQztnQkFDSixDQUFDO2dCQUVELDBEQUEwRDtnQkFDMUQsK0dBQStHO2dCQUMvRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ1osZ0JBQWdCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksZ0JBQWdCLElBQ3BGLE1BQU0sQ0FBQyxZQUNULGtCQUFrQixNQUFNLENBQUMsWUFBWSxFQUFFLENBQ3hDLENBQUM7b0JBQ0Ysa0hBQWtIO29CQUNsSCxPQUFPO3dCQUNMLHdCQUF3QixFQUFFLEVBQUU7d0JBQzVCLFlBQVksRUFBRSxrQkFBa0I7d0JBQ2hDLGtCQUFrQixFQUFFLHNCQUFzQjt3QkFDMUMsa0JBQWtCLEVBQUUsRUFBRTt3QkFDdEIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO3dCQUNqQyxZQUFZLEVBQUUsRUFBRTt3QkFDaEIsT0FBTztxQkFDUixDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQzdCLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztnQkFDbkMsQ0FBQztnQkFFRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQzVFLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLHdCQUF3QixFQUFFLHNCQUFzQjtZQUNoRCxZQUFZLEVBQUUsa0JBQWtCO1lBQ2hDLGtCQUFrQixFQUFFLHNCQUFzQjtZQUMxQyxrQkFBa0IsRUFBRSwwQkFBMEI7WUFDOUMsWUFBWSxFQUFFLG1CQUFtQjtZQUNqQyxPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRCx5REFBeUQ7SUFDakQsMEJBQTBCLENBQUMsRUFBbUM7UUFDcEUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRVMsZUFBZSxDQUFDLEVBQU0sRUFBRSwwQkFBMkQ7UUFDM0YsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVzthQUMzQyxTQUFTLEVBQUUsQ0FBQyxxRkFBcUY7YUFDakcsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7YUFDM0MsR0FBRyxDQUFDLDBCQUEwQixDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxHQUFPLEVBQUUsMkJBQTREO1FBQy9GLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztJQUNqQixDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUM1QixjQUErQyxFQUMvQyxlQUFpQyxFQUNqQyxRQUF3QjtRQUV4QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRW5GLHlFQUF5RTtRQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLGdDQUFnQyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixLQUFLLGdCQUFnQixDQUFDLEtBQUs7Z0JBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDakgsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUM3QixPQUFPO29CQUNMLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQztvQkFDM0QsOEJBQThCO2lCQUMvQixDQUFDO1lBQ0osS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRO2dCQUM1QixPQUFPO29CQUNMLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQztvQkFDM0QsOEJBQThCO2lCQUMvQixDQUFDO1lBQ0o7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRVMscUJBQXFCLENBQzdCLGNBQStDLEVBQy9DLGVBQWlDO1FBRWpDLHNDQUFzQztRQUN0QyxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sRUFBRSxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTFELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVTLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxNQUE2QixFQUFFLGtCQUFrQixHQUFHLEtBQUs7UUFDOUYsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqRyxNQUFNLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQztZQUMvRCxXQUFXLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVc7WUFDaEQsYUFBYSxFQUFFLFlBQVksQ0FBQyxJQUFJO1lBQ2hDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzFELFVBQVUsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsd0JBQXdCLENBQUM7WUFDdEYsVUFBVSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQztZQUN0RixVQUFVLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLDBCQUEwQixDQUFDO1lBQ2pHLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7WUFDckQsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtZQUNqRCxXQUFXLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUNwRCxvQkFBb0IsRUFBRSxXQUFXLENBQy9CLE1BQU0sQ0FBQyxvQkFBb0IsRUFDM0IsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUNuQixvQ0FBb0MsQ0FDckM7WUFDRCxxQkFBcUIsRUFBRSxXQUFXLENBQ2hDLE1BQU0sQ0FBQyxxQkFBcUIsRUFDNUIsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUNuQixvQ0FBb0MsQ0FDckM7WUFDRCxnQ0FBZ0MsRUFBRSxXQUFXLENBQzNDLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFDdkMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUNuQixpREFBaUQsQ0FDbEQ7WUFDRCxxQkFBcUIsRUFBRSxXQUFXLENBQ2hDLE1BQU0sQ0FBQyxxQkFBcUIsRUFDNUIsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUNuQix1Q0FBdUMsQ0FDeEM7WUFDRCxvQkFBb0IsRUFBRSxXQUFXLENBQy9CLE1BQU0sQ0FBQyxvQkFBb0IsRUFDM0IsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQzNCLDhCQUE4QixDQUMvQjtZQUNELDZCQUE2QixFQUFFLFdBQVcsQ0FDeEMsTUFBTSxDQUFDLDZCQUE2QixFQUNwQyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsRUFDcEMsd0NBQXdDLENBQ3pDO1lBQ0Qsa0JBQWtCLEVBQUUsV0FBVyxDQUM3QixNQUFNLENBQUMsa0JBQWtCLEVBQ3pCLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUN6QixxQ0FBcUMsQ0FDdEM7WUFDRCxxQkFBcUIsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSw2QkFBNkIsQ0FBQztZQUNoSCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxZQUFZLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQzNDLFVBQVUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDdkMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO1lBQ3JDLHdFQUF3RTtZQUN4RSxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRTtTQUM1RSxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksbUJBQW1CLENBQzVCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQ3ZDLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEVBQzdFLHlCQUF5QixFQUN6QixrQkFBa0IsQ0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUFDLE1BQXVDO1FBQ3BFLE1BQU0sa0JBQWtCLEdBQUc7WUFDekIsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVTtZQUN6QyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVO1lBQ3pDLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QjtZQUN0RCxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUI7WUFDbEQsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMscUJBQXFCO1lBQ3BELEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGVBQWU7WUFDOUMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCO1lBQ3ZELEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVO1lBQ3hCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVO1lBQ3hCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUI7WUFDckMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtZQUNqQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMscUJBQXFCO1lBQ25DLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlO1lBQzdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0I7U0FDdkMsQ0FBQztRQUVGLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLEtBQUssTUFBTSxVQUFVLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUM1QyxJQUFJLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRVMsZUFBZSxDQUFDLE9BQThCO1FBQ3RELDZGQUE2RjtRQUM3RixrRUFBa0U7UUFDbEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQTZCLEVBQUUsa0JBQWtCLEdBQUcsS0FBSztRQUN6RixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDcEYsT0FBTyxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDM0UsQ0FBQztDQUNGIn0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { type SimulationError, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
|
|
3
|
-
import { type AvmExecutionHints, type ContractStorageRead, type ContractStorageUpdateRequest, type Fr, type L2ToL1Message, type LogHash, type NoteHash, type Nullifier,
|
|
4
|
-
import { type Gas } from '../avm/avm_gas.js';
|
|
2
|
+
import { type PublicExecutionRequest, type SimulationError, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
|
|
3
|
+
import { type AvmExecutionHints, type ContractStorageRead, type ContractStorageUpdateRequest, type Fr, type L2ToL1Message, type LogHash, type NoteHash, type Nullifier, PublicCallRequest, type ReadRequest } from '@aztec/circuits.js';
|
|
4
|
+
import { type Gas as AvmGas } from '../avm/avm_gas.js';
|
|
5
5
|
/**
|
|
6
6
|
* The public function execution result.
|
|
7
7
|
*/
|
|
@@ -13,9 +13,9 @@ export interface PublicExecutionResult {
|
|
|
13
13
|
/** The side effect counter after executing this function call */
|
|
14
14
|
endSideEffectCounter: Fr;
|
|
15
15
|
/** How much gas was available for this public execution. */
|
|
16
|
-
startGasLeft:
|
|
16
|
+
startGasLeft: AvmGas;
|
|
17
17
|
/** How much gas was left after this public execution. */
|
|
18
|
-
endGasLeft:
|
|
18
|
+
endGasLeft: AvmGas;
|
|
19
19
|
/** Transaction fee set for this tx. */
|
|
20
20
|
transactionFee: Fr;
|
|
21
21
|
/** Bytecode used for this execution. */
|
|
@@ -61,6 +61,8 @@ export interface PublicExecutionResult {
|
|
|
61
61
|
* Useful for maintaining correct ordering in ts.
|
|
62
62
|
*/
|
|
63
63
|
allUnencryptedLogs: UnencryptedFunctionL2Logs;
|
|
64
|
+
/** The requests to call public functions made by this call. */
|
|
65
|
+
publicCallRequests: PublicCallRequest[];
|
|
64
66
|
/** The results of nested calls. */
|
|
65
67
|
nestedExecutions: this[];
|
|
66
68
|
/** Hints for proving AVM execution. */
|
|
@@ -68,11 +70,6 @@ export interface PublicExecutionResult {
|
|
|
68
70
|
/** The name of the function that was executed. Only used for logging. */
|
|
69
71
|
functionName: string;
|
|
70
72
|
}
|
|
71
|
-
/**
|
|
72
|
-
* The execution request of a public function.
|
|
73
|
-
* A subset of PublicCallRequest
|
|
74
|
-
*/
|
|
75
|
-
export type PublicExecutionRequest = Pick<PublicCallRequest, 'contractAddress' | 'functionSelector' | 'callContext' | 'args'>;
|
|
76
73
|
/**
|
|
77
74
|
* Returns if the input is a public execution result and not just a public execution.
|
|
78
75
|
* @param input - Public execution or public execution result.
|
|
@@ -84,4 +81,5 @@ export declare function isPublicExecutionResult(input: PublicExecutionRequest |
|
|
|
84
81
|
* @param executionResult - The execution result of a public function
|
|
85
82
|
*/
|
|
86
83
|
export declare function checkValidStaticCall(noteHashes: NoteHash[], nullifiers: Nullifier[], contractStorageUpdateRequests: ContractStorageUpdateRequest[], l2ToL1Messages: L2ToL1Message[], unencryptedLogs: UnencryptedFunctionL2Logs): void;
|
|
84
|
+
export declare function resultToPublicCallRequest(result: PublicExecutionResult): PublicCallRequest;
|
|
87
85
|
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/public/execution.ts"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/public/execution.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,EAAE,EAEP,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,iBAAiB,EAEjB,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,KAAK,GAAG,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,gBAAgB,EAAE,sBAAsB,CAAC;IAEzC,iEAAiE;IACjE,sBAAsB,EAAE,EAAE,CAAC;IAC3B,iEAAiE;IACjE,oBAAoB,EAAE,EAAE,CAAC;IACzB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,cAAc,EAAE,EAAE,CAAC;IAEnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,EAAE,EAAE,EAAE,CAAC;IACf,yCAAyC;IACzC,YAAY,EAAE,EAAE,EAAE,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,YAAY,CAAC,EAAE,eAAe,CAAC;IAE/B,4DAA4D;IAC5D,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,sEAAsE;IACtE,6BAA6B,EAAE,4BAA4B,EAAE,CAAC;IAC9D,oEAAoE;IACpE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,wDAAwD;IACxD,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,iEAAiE;IACjE,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,wDAAwD;IACxD,oBAAoB,EAAE,WAAW,EAAE,CAAC;IACpC,wDAAwD;IACxD,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC,qEAAqE;IACrE,gCAAgC,EAAE,WAAW,EAAE,CAAC;IAChD,2DAA2D;IAC3D,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACrC;;;OAGG;IACH,qBAAqB,EAAE,OAAO,EAAE,CAAC;IACjC;;;OAGG;IACH,eAAe,EAAE,yBAAyB,CAAC;IAC3C;;;OAGG;IACH,kBAAkB,EAAE,yBAAyB,CAAC;IAI9C,+DAA+D;IAC/D,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,mCAAmC;IACnC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAEzB,uCAAuC;IACvC,eAAe,EAAE,iBAAiB,CAAC;IAEnC,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,GAAG,qBAAqB,GACpD,KAAK,IAAI,qBAAqB,CAEhC;AAED;;;GAGG;AAEH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,QAAQ,EAAE,EACtB,UAAU,EAAE,SAAS,EAAE,EACvB,6BAA6B,EAAE,4BAA4B,EAAE,EAC7D,cAAc,EAAE,aAAa,EAAE,EAC/B,eAAe,EAAE,yBAAyB,QAW3C;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,qBAAqB,qBAatE"}
|
package/dest/public/execution.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Gas, PublicCallRequest, PublicCallStackItemCompressed, RevertCode, } from '@aztec/circuits.js';
|
|
2
|
+
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
1
3
|
/**
|
|
2
4
|
* Returns if the input is a public execution result and not just a public execution.
|
|
3
5
|
* @param input - Public execution or public execution result.
|
|
@@ -19,4 +21,11 @@ export function checkValidStaticCall(noteHashes, nullifiers, contractStorageUpda
|
|
|
19
21
|
throw new Error('Static call cannot update the state, emit L2->L1 messages or generate logs');
|
|
20
22
|
}
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
export function resultToPublicCallRequest(result) {
|
|
25
|
+
const request = result.executionRequest;
|
|
26
|
+
const item = new PublicCallStackItemCompressed(request.contractAddress, request.callContext, computeVarArgsHash(request.args), computeVarArgsHash(result.returnValues),
|
|
27
|
+
// TODO(@just-mitch): need better mapping from simulator to revert code.
|
|
28
|
+
result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK, Gas.from(result.startGasLeft), Gas.from(result.endGasLeft));
|
|
29
|
+
return new PublicCallRequest(item, result.startSideEffectCounter.toNumber());
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy9leGVjdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUtMLEdBQUcsRUFLSCxpQkFBaUIsRUFDakIsNkJBQTZCLEVBRTdCLFVBQVUsR0FDWCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBaUY3RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxLQUFxRDtJQUVyRCxPQUFPLGtCQUFrQixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDO0FBQzdFLENBQUM7QUFFRDs7O0dBR0c7QUFFSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFVBQXNCLEVBQ3RCLFVBQXVCLEVBQ3ZCLDZCQUE2RCxFQUM3RCxjQUErQixFQUMvQixlQUEwQztJQUUxQyxJQUNFLDZCQUE2QixDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNyQixVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDckIsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3pCLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDL0IsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxNQUE2QjtJQUNyRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7SUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSw2QkFBNkIsQ0FDNUMsT0FBTyxDQUFDLGVBQWUsRUFDdkIsT0FBTyxDQUFDLFdBQVcsRUFDbkIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUNoQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLHdFQUF3RTtJQUN4RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQy9ELEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FDNUIsQ0FBQztJQUNGLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDL0UsQ0FBQyJ9
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { type PublicExecutionRequest } from '@aztec/circuit-types';
|
|
1
2
|
import { Fr, Gas, type GlobalVariables, type Header, type Nullifier, type TxContext } from '@aztec/circuits.js';
|
|
3
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
2
4
|
import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from './db_interfaces.js';
|
|
3
|
-
import { type
|
|
5
|
+
import { type PublicExecutionResult } from './execution.js';
|
|
6
|
+
import { ExecutorMetrics } from './executor_metrics.js';
|
|
4
7
|
/**
|
|
5
8
|
* Handles execution of public functions.
|
|
6
9
|
*/
|
|
@@ -9,7 +12,8 @@ export declare class PublicExecutor {
|
|
|
9
12
|
private readonly contractsDb;
|
|
10
13
|
private readonly commitmentsDb;
|
|
11
14
|
private readonly header;
|
|
12
|
-
|
|
15
|
+
metrics: ExecutorMetrics;
|
|
16
|
+
constructor(publicStorageDB: PublicStateDB, contractsDb: PublicContractsDB, commitmentsDb: CommitmentsDB, header: Header, client: TelemetryClient);
|
|
13
17
|
static readonly log: import("@aztec/foundation/log").Logger;
|
|
14
18
|
/**
|
|
15
19
|
* Executes a public execution request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/public/executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/public/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGhH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAQ/D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,EAAE,eAAe,CAAC;gBAGN,eAAe,EAAE,aAAa,EAC9B,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EAC/B,MAAM,EAAE,eAAe;IAKzB,MAAM,CAAC,QAAQ,CAAC,GAAG,yCAAwD;IAE3E;;;;;;;;;;OAUG;IACU,QAAQ,CACnB,gBAAgB,EAAE,sBAAsB,EACxC,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,GAAG,EACjB,UAAU,EAAE,SAAS,EACrB,uBAAuB,EAAE,SAAS,EAAE,EACpC,cAAc,GAAE,EAAY,EAC5B,sBAAsB,GAAE,MAAU,GACjC,OAAO,CAAC,qBAAqB,CAAC;CAgElC"}
|
package/dest/public/executor.js
CHANGED
|
@@ -7,16 +7,18 @@ import { AvmMachineState } from '../avm/avm_machine_state.js';
|
|
|
7
7
|
import { AvmSimulator } from '../avm/avm_simulator.js';
|
|
8
8
|
import { HostStorage } from '../avm/journal/host_storage.js';
|
|
9
9
|
import { AvmPersistableStateManager } from '../avm/journal/index.js';
|
|
10
|
+
import { ExecutorMetrics } from './executor_metrics.js';
|
|
10
11
|
import { PublicSideEffectTrace } from './side_effect_trace.js';
|
|
11
12
|
/**
|
|
12
13
|
* Handles execution of public functions.
|
|
13
14
|
*/
|
|
14
15
|
export class PublicExecutor {
|
|
15
|
-
constructor(publicStorageDB, contractsDb, commitmentsDb, header) {
|
|
16
|
+
constructor(publicStorageDB, contractsDb, commitmentsDb, header, client) {
|
|
16
17
|
this.publicStorageDB = publicStorageDB;
|
|
17
18
|
this.contractsDb = contractsDb;
|
|
18
19
|
this.commitmentsDb = commitmentsDb;
|
|
19
20
|
this.header = header;
|
|
21
|
+
this.metrics = new ExecutorMetrics(client, 'PublicExecutor');
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* Executes a public execution request.
|
|
@@ -31,7 +33,7 @@ export class PublicExecutor {
|
|
|
31
33
|
*/
|
|
32
34
|
async simulate(executionRequest, globalVariables, availableGas, _txContext, pendingSiloedNullifiers, transactionFee = Fr.ZERO, startSideEffectCounter = 0) {
|
|
33
35
|
const address = executionRequest.contractAddress;
|
|
34
|
-
const selector = executionRequest.functionSelector;
|
|
36
|
+
const selector = executionRequest.callContext.functionSelector;
|
|
35
37
|
const fnName = (await this.contractsDb.getDebugFunctionName(address, selector)) ?? `${address}:${selector}`;
|
|
36
38
|
PublicExecutor.log.verbose(`[AVM] Executing public external function ${fnName}.`);
|
|
37
39
|
const timer = new Timer();
|
|
@@ -58,6 +60,12 @@ export class PublicExecutor {
|
|
|
58
60
|
const publicExecutionResult = trace.toPublicExecutionResult(avmExecutionEnv,
|
|
59
61
|
/*startGasLeft=*/ availableGas,
|
|
60
62
|
/*endGasLeft=*/ Gas.from(avmContext.machineState.gasLeft), bytecode, avmResult, fnName);
|
|
63
|
+
if (publicExecutionResult.reverted) {
|
|
64
|
+
this.metrics.recordFunctionSimulationFailure();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.metrics.recordFunctionSimulation(bytecode.length, timer.ms());
|
|
68
|
+
}
|
|
61
69
|
return publicExecutionResult;
|
|
62
70
|
}
|
|
63
71
|
}
|
|
@@ -70,7 +78,7 @@ PublicExecutor.log = createDebugLogger('aztec:simulator:public_executor');
|
|
|
70
78
|
* @returns
|
|
71
79
|
*/
|
|
72
80
|
function createAvmExecutionEnvironment(executionRequest, header, globalVariables, transactionFee) {
|
|
73
|
-
return new AvmExecutionEnvironment(executionRequest.contractAddress, executionRequest.callContext.storageContractAddress, executionRequest.callContext.msgSender, executionRequest.functionSelector,
|
|
81
|
+
return new AvmExecutionEnvironment(executionRequest.contractAddress, executionRequest.callContext.storageContractAddress, executionRequest.callContext.msgSender, executionRequest.callContext.functionSelector,
|
|
74
82
|
/*contractCallDepth=*/ Fr.zero(), transactionFee, header, globalVariables, executionRequest.callContext.isStaticCall, executionRequest.callContext.isDelegateCall, executionRequest.args);
|
|
75
83
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFxRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9EOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFHekIsWUFDbUIsZUFBOEIsRUFDOUIsV0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsTUFBYyxFQUMvQixNQUF1QjtRQUpOLG9CQUFlLEdBQWYsZUFBZSxDQUFlO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUlEOzs7Ozs7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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
2
|
+
export declare class ExecutorMetrics {
|
|
3
|
+
private fnCount;
|
|
4
|
+
private fnDuration;
|
|
5
|
+
private bytecodeSize;
|
|
6
|
+
constructor(client: TelemetryClient, name?: string);
|
|
7
|
+
recordFunctionSimulation(bytecodeSize: number, durationMs: number): void;
|
|
8
|
+
recordFunctionSimulationFailure(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=executor_metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor_metrics.d.ts","sourceRoot":"","sources":["../../src/public/executor_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,YAAY,CAAY;gBAEpB,MAAM,EAAE,eAAe,EAAE,IAAI,SAAmB;IAoB5D,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAQjE,+BAA+B;CAKhC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Attributes, Metrics, ValueType, } from '@aztec/telemetry-client';
|
|
2
|
+
export class ExecutorMetrics {
|
|
3
|
+
constructor(client, name = 'PublicExecutor') {
|
|
4
|
+
const meter = client.getMeter(name);
|
|
5
|
+
this.fnCount = meter.createUpDownCounter(Metrics.PUBLIC_EXECUTOR_SIMULATION_COUNT, {
|
|
6
|
+
description: 'Number of functions executed',
|
|
7
|
+
});
|
|
8
|
+
this.fnDuration = meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_DURATION, {
|
|
9
|
+
description: 'How long it takes to execute a function',
|
|
10
|
+
unit: 'ms',
|
|
11
|
+
valueType: ValueType.INT,
|
|
12
|
+
});
|
|
13
|
+
this.bytecodeSize = meter.createHistogram(Metrics.PUBLIC_EXECUTION_SIMULATION_BYTECODE_SIZE, {
|
|
14
|
+
description: 'Size of the function bytecode',
|
|
15
|
+
unit: 'By',
|
|
16
|
+
valueType: ValueType.INT,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
recordFunctionSimulation(bytecodeSize, durationMs) {
|
|
20
|
+
this.fnCount.add(1, {
|
|
21
|
+
[Attributes.OK]: true,
|
|
22
|
+
});
|
|
23
|
+
this.bytecodeSize.record(bytecodeSize);
|
|
24
|
+
this.fnDuration.record(Math.ceil(durationMs));
|
|
25
|
+
}
|
|
26
|
+
recordFunctionSimulationFailure() {
|
|
27
|
+
this.fnCount.add(1, {
|
|
28
|
+
[Attributes.OK]: false,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3JfbWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvZXhlY3V0b3JfbWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLE9BQU8sRUFHUCxTQUFTLEdBQ1YsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUFZLE1BQXVCLEVBQUUsSUFBSSxHQUFHLGdCQUFnQjtRQUMxRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRTtZQUNqRixXQUFXLEVBQUUsOEJBQThCO1NBQzVDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLEVBQUU7WUFDbkYsV0FBVyxFQUFFLHlDQUF5QztZQUN0RCxJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxFQUFFO1lBQzNGLFdBQVcsRUFBRSwrQkFBK0I7WUFDNUMsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLFlBQW9CLEVBQUUsVUFBa0I7UUFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCwrQkFBK0I7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
/**
|
|
4
|
-
* Computes the storage slot within the
|
|
4
|
+
* Computes the storage slot within the Fee Juice contract for the balance of the fee payer.
|
|
5
5
|
*/
|
|
6
6
|
export declare function computeFeePayerBalanceStorageSlot(feePayer: AztecAddress): Fr;
|
|
7
7
|
/**
|
|
8
|
-
* Computes the leaf slot in the public data tree for the balance of the fee payer in the
|
|
8
|
+
* Computes the leaf slot in the public data tree for the balance of the fee payer in the Fee Juice.
|
|
9
9
|
*/
|
|
10
10
|
export declare function computeFeePayerBalanceLeafSlot(feePayer: AztecAddress): Fr;
|
|
11
11
|
//# sourceMappingURL=fee_payment.d.ts.map
|