@aztec/sequencer-client 0.23.0 → 0.26.1
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/block_builder/solo_block_builder.d.ts +9 -9
- package/dest/block_builder/solo_block_builder.d.ts.map +1 -1
- package/dest/block_builder/solo_block_builder.js +26 -48
- package/dest/global_variable_builder/viem-reader.js +2 -2
- package/dest/prover/empty.d.ts +2 -2
- package/dest/prover/empty.d.ts.map +1 -1
- package/dest/prover/empty.js +1 -1
- package/dest/prover/index.d.ts +2 -2
- package/dest/prover/index.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.d.ts +0 -2
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +2 -3
- package/dest/publisher/viem-tx-sender.d.ts.map +1 -1
- package/dest/publisher/viem-tx-sender.js +6 -10
- package/dest/sequencer/abstract_phase_manager.d.ts +23 -30
- package/dest/sequencer/abstract_phase_manager.d.ts.map +1 -1
- package/dest/sequencer/abstract_phase_manager.js +151 -98
- package/dest/sequencer/{fee_distribution_phase_manager.d.ts → app_logic_phase_manager.d.ts} +9 -11
- package/dest/sequencer/app_logic_phase_manager.d.ts.map +1 -0
- package/dest/sequencer/app_logic_phase_manager.js +44 -0
- package/dest/sequencer/phase_manager_factory.d.ts +19 -0
- package/dest/sequencer/phase_manager_factory.d.ts.map +1 -0
- package/dest/sequencer/phase_manager_factory.js +51 -0
- package/dest/sequencer/processed_tx.d.ts +4 -4
- package/dest/sequencer/processed_tx.d.ts.map +1 -1
- package/dest/sequencer/processed_tx.js +8 -8
- package/dest/sequencer/public_processor.d.ts +1 -1
- package/dest/sequencer/public_processor.d.ts.map +1 -1
- package/dest/sequencer/public_processor.js +13 -11
- package/dest/sequencer/sequencer.d.ts +3 -3
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +23 -16
- package/dest/sequencer/{fee_preparation_phase_manager.d.ts → setup_phase_manager.d.ts} +9 -11
- package/dest/sequencer/setup_phase_manager.d.ts.map +1 -0
- package/dest/sequencer/setup_phase_manager.js +37 -0
- package/dest/sequencer/{application_logic_phase_manager.d.ts → teardown_phase_manager.d.ts} +9 -12
- package/dest/sequencer/teardown_phase_manager.d.ts.map +1 -0
- package/dest/sequencer/teardown_phase_manager.js +36 -0
- package/dest/simulator/index.d.ts +11 -5
- package/dest/simulator/index.d.ts.map +1 -1
- package/dest/simulator/public_executor.d.ts +8 -3
- package/dest/simulator/public_executor.d.ts.map +1 -1
- package/dest/simulator/public_executor.js +64 -11
- package/dest/simulator/public_kernel.d.ts +11 -5
- package/dest/simulator/public_kernel.d.ts.map +1 -1
- package/dest/simulator/public_kernel.js +35 -16
- package/dest/simulator/rollup.js +2 -2
- package/package.json +14 -24
- package/src/block_builder/index.ts +24 -0
- package/src/block_builder/solo_block_builder.ts +726 -0
- package/src/block_builder/types.ts +8 -0
- package/src/client/index.ts +1 -0
- package/src/client/sequencer-client.ts +97 -0
- package/src/config.ts +86 -0
- package/src/global_variable_builder/config.ts +20 -0
- package/src/global_variable_builder/global_builder.ts +95 -0
- package/src/global_variable_builder/index.ts +16 -0
- package/src/global_variable_builder/viem-reader.ts +61 -0
- package/src/index.ts +15 -0
- package/src/mocks/verification_keys.ts +36 -0
- package/src/prover/empty.ts +74 -0
- package/src/prover/index.ts +53 -0
- package/src/publisher/config.ts +41 -0
- package/src/publisher/index.ts +14 -0
- package/src/publisher/l1-publisher.ts +362 -0
- package/src/publisher/viem-tx-sender.ts +235 -0
- package/src/receiver.ts +13 -0
- package/src/sequencer/abstract_phase_manager.ts +489 -0
- package/src/sequencer/app_logic_phase_manager.ts +75 -0
- package/src/sequencer/config.ts +1 -0
- package/src/sequencer/index.ts +2 -0
- package/src/sequencer/phase_manager_factory.ts +122 -0
- package/src/sequencer/processed_tx.ts +94 -0
- package/src/sequencer/public_processor.ts +153 -0
- package/src/sequencer/sequencer.ts +469 -0
- package/src/sequencer/setup_phase_manager.ts +68 -0
- package/src/sequencer/teardown_phase_manager.ts +67 -0
- package/src/simulator/index.ts +57 -0
- package/src/simulator/public_executor.ts +267 -0
- package/src/simulator/public_kernel.ts +84 -0
- package/src/simulator/rollup.ts +76 -0
- package/src/utils.ts +16 -0
- package/dest/sequencer/application_logic_phase_manager.d.ts.map +0 -1
- package/dest/sequencer/application_logic_phase_manager.js +0 -64
- package/dest/sequencer/fee_distribution_phase_manager.d.ts.map +0 -1
- package/dest/sequencer/fee_distribution_phase_manager.js +0 -42
- package/dest/sequencer/fee_preparation_phase_manager.d.ts.map +0 -1
- package/dest/sequencer/fee_preparation_phase_manager.js +0 -43
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { FunctionL2Logs, Tx } from '@aztec/circuit-types';
|
|
2
|
-
import { Fr, GlobalVariables, Header,
|
|
2
|
+
import { Fr, GlobalVariables, Header, PrivateKernelTailCircuitPublicInputs, Proof, PublicCallData, PublicCallRequest, PublicCallStackItem, PublicCircuitPublicInputs, PublicKernelCircuitPublicInputs, PublicKernelData } from '@aztec/circuits.js';
|
|
3
|
+
import { DebugLogger } from '@aztec/foundation/log';
|
|
3
4
|
import { PublicExecutionResult, PublicExecutor } from '@aztec/simulator';
|
|
4
5
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
5
6
|
import { PublicProver } from '../prover/index.js';
|
|
6
7
|
import { PublicKernelCircuitSimulator } from '../simulator/index.js';
|
|
7
8
|
import { FailedTx } from './processed_tx.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* 3. Fee Distribution
|
|
15
|
-
*/
|
|
9
|
+
export declare enum PublicKernelPhase {
|
|
10
|
+
SETUP = "setup",
|
|
11
|
+
APP_LOGIC = "app-logic",
|
|
12
|
+
TEARDOWN = "teardown"
|
|
13
|
+
}
|
|
14
|
+
export declare const PhaseIsRevertible: Record<PublicKernelPhase, boolean>;
|
|
16
15
|
export declare abstract class AbstractPhaseManager {
|
|
17
16
|
protected db: MerkleTreeOperations;
|
|
18
17
|
protected publicExecutor: PublicExecutor;
|
|
@@ -20,41 +19,42 @@ export declare abstract class AbstractPhaseManager {
|
|
|
20
19
|
protected publicProver: PublicProver;
|
|
21
20
|
protected globalVariables: GlobalVariables;
|
|
22
21
|
protected historicalHeader: Header;
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
phase: PublicKernelPhase;
|
|
23
|
+
protected log: DebugLogger;
|
|
24
|
+
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, phase: PublicKernelPhase);
|
|
25
25
|
/**
|
|
26
26
|
*
|
|
27
27
|
* @param tx - the tx to be processed
|
|
28
|
-
* @param
|
|
28
|
+
* @param publicKernelPublicInputs - the output of the public kernel circuit for the previous phase
|
|
29
29
|
* @param previousPublicKernelProof - the proof of the public kernel circuit for the previous phase
|
|
30
30
|
*/
|
|
31
|
-
abstract handle(tx: Tx,
|
|
31
|
+
abstract handle(tx: Tx, publicKernelPublicInputs: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
|
|
32
32
|
/**
|
|
33
33
|
* the output of the public kernel circuit for this phase
|
|
34
34
|
*/
|
|
35
|
-
publicKernelOutput
|
|
35
|
+
publicKernelOutput: PublicKernelCircuitPublicInputs;
|
|
36
36
|
/**
|
|
37
37
|
* the proof of the public kernel circuit for this phase
|
|
38
38
|
*/
|
|
39
|
-
publicKernelProof
|
|
39
|
+
publicKernelProof: Proof;
|
|
40
40
|
}>;
|
|
41
|
-
abstract nextPhase(): AbstractPhaseManager | null;
|
|
42
41
|
abstract rollback(tx: Tx, err: unknown): Promise<FailedTx>;
|
|
43
|
-
|
|
44
|
-
protected
|
|
42
|
+
static extractEnqueuedPublicCallsByPhase(publicInputs: PrivateKernelTailCircuitPublicInputs, enqueuedPublicFunctionCalls: PublicCallRequest[]): Record<PublicKernelPhase, PublicCallRequest[]>;
|
|
43
|
+
protected extractEnqueuedPublicCalls(tx: Tx): PublicCallRequest[];
|
|
44
|
+
static getKernelOutputAndProof(tx: Tx, publicKernelPublicInput?: PublicKernelCircuitPublicInputs, previousPublicKernelProof?: Proof): {
|
|
45
45
|
/**
|
|
46
46
|
* the output of the public kernel circuit for this phase
|
|
47
47
|
*/
|
|
48
|
-
|
|
48
|
+
publicKernelPublicInput: PublicKernelCircuitPublicInputs;
|
|
49
49
|
/**
|
|
50
50
|
* the proof of the public kernel circuit for this phase
|
|
51
51
|
*/
|
|
52
52
|
publicKernelProof: Proof;
|
|
53
53
|
};
|
|
54
|
-
protected processEnqueuedPublicCalls(
|
|
55
|
-
protected runKernelCircuit(callData: PublicCallData, previousOutput:
|
|
56
|
-
protected getKernelCircuitOutput(callData: PublicCallData, previousOutput:
|
|
57
|
-
protected getPreviousKernelData(previousOutput:
|
|
54
|
+
protected processEnqueuedPublicCalls(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<[PublicKernelCircuitPublicInputs, Proof, FunctionL2Logs[]]>;
|
|
55
|
+
protected runKernelCircuit(callData: PublicCallData, previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof): Promise<[PublicKernelCircuitPublicInputs, Proof]>;
|
|
56
|
+
protected getKernelCircuitOutput(callData: PublicCallData, previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof): Promise<PublicKernelCircuitPublicInputs>;
|
|
57
|
+
protected getPreviousKernelData(previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof): PublicKernelData;
|
|
58
58
|
protected getPublicCircuitPublicInputs(result: PublicExecutionResult): Promise<PublicCircuitPublicInputs>;
|
|
59
59
|
protected getPublicCallStackItem(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallStackItem>;
|
|
60
60
|
protected getPublicCallStackPreimages(result: PublicExecutionResult): Promise<PublicCallStackItem[]>;
|
|
@@ -68,12 +68,5 @@ export declare abstract class AbstractPhaseManager {
|
|
|
68
68
|
* @returns A corresponding PublicCallData object.
|
|
69
69
|
*/
|
|
70
70
|
protected getPublicCallData(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallData>;
|
|
71
|
-
/**
|
|
72
|
-
* Patch the ordering of storage actions output from the public kernel.
|
|
73
|
-
* @param publicInputs - to be patched here: public inputs to the kernel iteration up to this point
|
|
74
|
-
* @param execResult - result of the top/first execution for this enqueued public call
|
|
75
|
-
*/
|
|
76
|
-
private patchPublicStorageActionOrdering;
|
|
77
|
-
private removeRedundantPublicDataWrites;
|
|
78
71
|
}
|
|
79
72
|
//# sourceMappingURL=abstract_phase_manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/abstract_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/abstract_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAKL,EAAE,EACF,eAAe,EACf,MAAM,EAaN,oCAAoC,EACpC,KAAK,EAGL,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EAIzB,+BAA+B,EAC/B,gBAAgB,EAKjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAEL,qBAAqB,EACrB,cAAc,EAIf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAK1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,oBAAY,iBAAiB;IAC3B,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAIhE,CAAC;AAEF,8BAAsB,oBAAoB;IAGtC,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,YAAY,EAAE,YAAY;IACpC,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAC3B,KAAK,EAAE,iBAAiB;IARjC,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC;gBAEf,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EAC3B,KAAK,EAAE,iBAAiB;IAIjC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CACb,EAAE,EAAE,EAAE,EACN,wBAAwB,EAAE,+BAA+B,EACzD,yBAAyB,EAAE,KAAK,GAC/B,OAAO,CAAC;QACT;;WAEG;QACH,kBAAkB,EAAE,+BAA+B,CAAC;QACpD;;WAEG;QACH,iBAAiB,EAAE,KAAK,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;WAE5C,iCAAiC,CAC7C,YAAY,EAAE,oCAAoC,EAClD,2BAA2B,EAAE,iBAAiB,EAAE,GAC/C,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IA0CjD,SAAS,CAAC,0BAA0B,CAAC,EAAE,EAAE,EAAE,GAAG,iBAAiB,EAAE;WAQnD,uBAAuB,CACnC,EAAE,EAAE,EAAE,EACN,uBAAuB,CAAC,EAAE,+BAA+B,EACzD,yBAAyB,CAAC,EAAE,KAAK,GAChC;QACD;;WAEG;QACH,uBAAuB,EAAE,+BAA+B,CAAC;QACzD;;WAEG;QACH,iBAAiB,EAAE,KAAK,CAAC;KAC1B;cAwBe,0BAA0B,CACxC,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,yBAAyB,EAAE,KAAK,GAC/B,OAAO,CAAC,CAAC,+BAA+B,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;cA2DtD,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,+BAA+B,EAC/C,aAAa,EAAE,KAAK,GACnB,OAAO,CAAC,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IAMpD,SAAS,CAAC,sBAAsB,CAC9B,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,+BAA+B,EAC/C,aAAa,EAAE,KAAK,GACnB,OAAO,CAAC,+BAA+B,CAAC;IAe3C,SAAS,CAAC,qBAAqB,CAC7B,cAAc,EAAE,+BAA+B,EAC/C,aAAa,EAAE,KAAK,GACnB,gBAAgB;cAOH,4BAA4B,CAAC,MAAM,EAAE,qBAAqB;cAwC1D,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,UAAQ;cAShF,2BAA2B,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAW1G,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,qBAAqB;IAOxD;;;;;;;OAOG;cACa,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,UAAQ;CAW5F"}
|
|
@@ -1,51 +1,96 @@
|
|
|
1
1
|
import { MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
-
import { AztecAddress, CallRequest,
|
|
3
|
-
import { computeVarArgsHash } from '@aztec/circuits.js/
|
|
2
|
+
import { AztecAddress, CallRequest, ContractStorageRead, ContractStorageUpdateRequest, Fr, L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NON_REVERTIBLE_PUBLIC_DATA_READS_PER_TX, MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_REVERTIBLE_PUBLIC_DATA_READS_PER_TX, MAX_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, PublicAccumulatedNonRevertibleData, PublicAccumulatedRevertibleData, PublicCallData, PublicCallStackItem, PublicCircuitPublicInputs, PublicDataRead, PublicDataUpdateRequest, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, PublicKernelData, RETURN_VALUES_LENGTH, SideEffect, SideEffectLinkedToNoteHash, VK_TREE_HEIGHT, } from '@aztec/circuits.js';
|
|
3
|
+
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
4
4
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
5
5
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { to2Fields } from '@aztec/foundation/serialize';
|
|
7
7
|
import { collectPublicDataReads, collectPublicDataUpdateRequests, isPublicExecutionResult, } from '@aztec/simulator';
|
|
8
|
+
import { env } from 'process';
|
|
8
9
|
import { getVerificationKeys } from '../mocks/verification_keys.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
export var PublicKernelPhase;
|
|
11
|
+
(function (PublicKernelPhase) {
|
|
12
|
+
PublicKernelPhase["SETUP"] = "setup";
|
|
13
|
+
PublicKernelPhase["APP_LOGIC"] = "app-logic";
|
|
14
|
+
PublicKernelPhase["TEARDOWN"] = "teardown";
|
|
15
|
+
})(PublicKernelPhase || (PublicKernelPhase = {}));
|
|
16
|
+
export const PhaseIsRevertible = {
|
|
17
|
+
[PublicKernelPhase.SETUP]: false,
|
|
18
|
+
[PublicKernelPhase.APP_LOGIC]: true,
|
|
19
|
+
[PublicKernelPhase.TEARDOWN]: false,
|
|
20
|
+
};
|
|
17
21
|
export class AbstractPhaseManager {
|
|
18
|
-
constructor(db, publicExecutor, publicKernel, publicProver, globalVariables, historicalHeader,
|
|
22
|
+
constructor(db, publicExecutor, publicKernel, publicProver, globalVariables, historicalHeader, phase) {
|
|
19
23
|
this.db = db;
|
|
20
24
|
this.publicExecutor = publicExecutor;
|
|
21
25
|
this.publicKernel = publicKernel;
|
|
22
26
|
this.publicProver = publicProver;
|
|
23
27
|
this.globalVariables = globalVariables;
|
|
24
28
|
this.historicalHeader = historicalHeader;
|
|
25
|
-
this.
|
|
29
|
+
this.phase = phase;
|
|
30
|
+
this.log = createDebugLogger(`aztec:sequencer:${phase}`);
|
|
26
31
|
}
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
static extractEnqueuedPublicCallsByPhase(publicInputs, enqueuedPublicFunctionCalls) {
|
|
33
|
+
const publicCallsStack = enqueuedPublicFunctionCalls.slice().reverse();
|
|
34
|
+
const nonRevertibleCallStack = publicInputs.endNonRevertibleData.publicCallStack.filter(i => !i.isEmpty());
|
|
35
|
+
const revertibleCallStack = publicInputs.end.publicCallStack.filter(i => !i.isEmpty());
|
|
36
|
+
const callRequestsStack = publicCallsStack
|
|
37
|
+
.map(call => call.toCallRequest())
|
|
38
|
+
.filter(
|
|
39
|
+
// filter out enqueued calls that are not in the public call stack
|
|
40
|
+
// TODO mitch left a question about whether this is only needed when unit testing
|
|
41
|
+
// with mock data
|
|
42
|
+
call => revertibleCallStack.find(p => p.equals(call)) || nonRevertibleCallStack.find(p => p.equals(call)));
|
|
43
|
+
if (callRequestsStack.length === 0) {
|
|
44
|
+
return {
|
|
45
|
+
[PublicKernelPhase.SETUP]: [],
|
|
46
|
+
[PublicKernelPhase.APP_LOGIC]: [],
|
|
47
|
+
[PublicKernelPhase.TEARDOWN]: [],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// find the first call that is revertible
|
|
51
|
+
const firstRevertibleCallIndex = callRequestsStack.findIndex(c => revertibleCallStack.findIndex(p => p.equals(c)) !== -1);
|
|
52
|
+
if (firstRevertibleCallIndex === 0) {
|
|
29
53
|
return {
|
|
30
|
-
|
|
54
|
+
[PublicKernelPhase.SETUP]: [],
|
|
55
|
+
[PublicKernelPhase.APP_LOGIC]: publicCallsStack,
|
|
56
|
+
[PublicKernelPhase.TEARDOWN]: [],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return {
|
|
61
|
+
[PublicKernelPhase.SETUP]: publicCallsStack.slice(0, firstRevertibleCallIndex - 1),
|
|
62
|
+
[PublicKernelPhase.APP_LOGIC]: publicCallsStack.slice(firstRevertibleCallIndex),
|
|
63
|
+
[PublicKernelPhase.TEARDOWN]: [publicCallsStack[firstRevertibleCallIndex - 1]],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
extractEnqueuedPublicCalls(tx) {
|
|
68
|
+
const calls = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx.data, tx.enqueuedPublicFunctionCalls)[this.phase];
|
|
69
|
+
return calls;
|
|
70
|
+
}
|
|
71
|
+
static getKernelOutputAndProof(tx, publicKernelPublicInput, previousPublicKernelProof) {
|
|
72
|
+
if (publicKernelPublicInput && previousPublicKernelProof) {
|
|
73
|
+
return {
|
|
74
|
+
publicKernelPublicInput: publicKernelPublicInput,
|
|
31
75
|
publicKernelProof: previousPublicKernelProof,
|
|
32
76
|
};
|
|
33
77
|
}
|
|
34
78
|
else {
|
|
35
|
-
const
|
|
79
|
+
const publicKernelPublicInput = new PublicKernelCircuitPublicInputs(tx.data.aggregationObject, PublicAccumulatedNonRevertibleData.fromPrivateAccumulatedNonRevertibleData(tx.data.endNonRevertibleData), PublicAccumulatedRevertibleData.fromPrivateAccumulatedRevertibleData(tx.data.end), tx.data.constants, tx.data.needsSetup, tx.data.needsAppLogic, tx.data.needsTeardown);
|
|
36
80
|
const publicKernelProof = previousPublicKernelProof || tx.proof;
|
|
37
81
|
return {
|
|
38
|
-
|
|
82
|
+
publicKernelPublicInput,
|
|
39
83
|
publicKernelProof,
|
|
40
84
|
};
|
|
41
85
|
}
|
|
42
86
|
}
|
|
43
|
-
async processEnqueuedPublicCalls(
|
|
44
|
-
if (!enqueuedCalls || !enqueuedCalls.length) {
|
|
45
|
-
throw new Error(`Missing preimages for enqueued public calls`);
|
|
46
|
-
}
|
|
87
|
+
async processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof) {
|
|
47
88
|
let kernelOutput = previousPublicKernelOutput;
|
|
48
89
|
let kernelProof = previousPublicKernelProof;
|
|
90
|
+
const enqueuedCalls = this.extractEnqueuedPublicCalls(tx);
|
|
91
|
+
if (!enqueuedCalls || !enqueuedCalls.length) {
|
|
92
|
+
return [kernelOutput, kernelProof, []];
|
|
93
|
+
}
|
|
49
94
|
const newUnencryptedFunctionLogs = [];
|
|
50
95
|
// TODO(#1684): Should multiple separately enqueued public calls be treated as
|
|
51
96
|
// separate public callstacks to be proven by separate public kernel sequences
|
|
@@ -57,10 +102,14 @@ export class AbstractPhaseManager {
|
|
|
57
102
|
while (executionStack.length) {
|
|
58
103
|
const current = executionStack.pop();
|
|
59
104
|
const isExecutionRequest = !isPublicExecutionResult(current);
|
|
60
|
-
|
|
105
|
+
// NOTE: temporary glue to incorporate avm execution calls
|
|
106
|
+
const simulator = (execution, globalVariables) => env.AVM_ENABLED
|
|
107
|
+
? this.publicExecutor.simulateAvm(execution, globalVariables)
|
|
108
|
+
: this.publicExecutor.simulate(execution, globalVariables);
|
|
109
|
+
const result = isExecutionRequest ? await simulator(current, this.globalVariables) : current;
|
|
61
110
|
newUnencryptedFunctionLogs.push(result.unencryptedLogs);
|
|
62
111
|
const functionSelector = result.execution.functionData.selector.toString();
|
|
63
|
-
this.log(`Running public kernel circuit for ${
|
|
112
|
+
this.log.debug(`Running public kernel circuit for ${result.execution.contractAddress.toString()}:${functionSelector}`);
|
|
64
113
|
executionStack.push(...result.nestedExecutions);
|
|
65
114
|
const callData = await this.getPublicCallData(result, isExecutionRequest);
|
|
66
115
|
[kernelOutput, kernelProof] = await this.runKernelCircuit(callData, kernelOutput, kernelProof);
|
|
@@ -70,10 +119,10 @@ export class AbstractPhaseManager {
|
|
|
70
119
|
}
|
|
71
120
|
// HACK(#1622): Manually patches the ordering of public state actions
|
|
72
121
|
// TODO(#757): Enforce proper ordering of public state actions
|
|
73
|
-
|
|
122
|
+
patchPublicStorageActionOrdering(kernelOutput, enqueuedExecutionResult, this.phase);
|
|
74
123
|
}
|
|
75
124
|
// TODO(#3675): This should be done in a public kernel circuit
|
|
76
|
-
|
|
125
|
+
removeRedundantPublicDataWrites(kernelOutput);
|
|
77
126
|
return [kernelOutput, kernelProof, newUnencryptedFunctionLogs];
|
|
78
127
|
}
|
|
79
128
|
async runKernelCircuit(callData, previousOutput, previousProof) {
|
|
@@ -82,27 +131,24 @@ export class AbstractPhaseManager {
|
|
|
82
131
|
return [output, proof];
|
|
83
132
|
}
|
|
84
133
|
getKernelCircuitOutput(callData, previousOutput, previousProof) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
throw new Error(`No public kernel circuit for inputs`);
|
|
134
|
+
const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
|
|
135
|
+
const inputs = new PublicKernelCircuitPrivateInputs(previousKernel, callData);
|
|
136
|
+
switch (this.phase) {
|
|
137
|
+
case PublicKernelPhase.SETUP:
|
|
138
|
+
return this.publicKernel.publicKernelCircuitSetup(inputs);
|
|
139
|
+
case PublicKernelPhase.APP_LOGIC:
|
|
140
|
+
return this.publicKernel.publicKernelCircuitAppLogic(inputs);
|
|
141
|
+
case PublicKernelPhase.TEARDOWN:
|
|
142
|
+
return this.publicKernel.publicKernelCircuitTeardown(inputs);
|
|
143
|
+
default:
|
|
144
|
+
throw new Error(`No public kernel circuit for inputs`);
|
|
99
145
|
}
|
|
100
146
|
}
|
|
101
147
|
getPreviousKernelData(previousOutput, previousProof) {
|
|
102
148
|
const vk = getVerificationKeys().publicKernelCircuit;
|
|
103
149
|
const vkIndex = 0;
|
|
104
150
|
const vkSiblingPath = MembershipWitness.random(VK_TREE_HEIGHT).siblingPath;
|
|
105
|
-
return new
|
|
151
|
+
return new PublicKernelData(previousOutput, previousProof, vk, vkIndex, vkSiblingPath);
|
|
106
152
|
}
|
|
107
153
|
async getPublicCircuitPublicInputs(result) {
|
|
108
154
|
const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE);
|
|
@@ -116,9 +162,9 @@ export class AbstractPhaseManager {
|
|
|
116
162
|
callContext: result.execution.callContext,
|
|
117
163
|
proverAddress: AztecAddress.ZERO,
|
|
118
164
|
argsHash: computeVarArgsHash(result.execution.args),
|
|
119
|
-
|
|
165
|
+
newNoteHashes: padArrayEnd(result.newNoteHashes, SideEffect.empty(), MAX_NEW_NOTE_HASHES_PER_CALL),
|
|
120
166
|
newNullifiers: padArrayEnd(result.newNullifiers, SideEffectLinkedToNoteHash.empty(), MAX_NEW_NULLIFIERS_PER_CALL),
|
|
121
|
-
newL2ToL1Msgs: padArrayEnd(result.newL2ToL1Messages,
|
|
167
|
+
newL2ToL1Msgs: padArrayEnd(result.newL2ToL1Messages, L2ToL1Message.empty(), MAX_NEW_L2_TO_L1_MSGS_PER_CALL),
|
|
122
168
|
returnValues: padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH),
|
|
123
169
|
contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL),
|
|
124
170
|
contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL),
|
|
@@ -155,73 +201,80 @@ export class AbstractPhaseManager {
|
|
|
155
201
|
async getPublicCallData(result, isExecutionRequest = false) {
|
|
156
202
|
const bytecodeHash = await this.getBytecodeHash(result);
|
|
157
203
|
const callStackItem = await this.getPublicCallStackItem(result, isExecutionRequest);
|
|
158
|
-
const publicCallRequests = (await this.getPublicCallStackPreimages(result)).map(c => c.toCallRequest());
|
|
204
|
+
const publicCallRequests = (await this.getPublicCallStackPreimages(result)).map(c => c.toCallRequest(callStackItem.publicInputs.callContext));
|
|
159
205
|
const publicCallStack = padArrayEnd(publicCallRequests, CallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
|
|
160
206
|
const portalContractAddress = result.execution.callContext.portalContractAddress.toField();
|
|
161
207
|
const proof = await this.publicProver.getPublicCircuitProof(callStackItem.publicInputs);
|
|
162
208
|
return new PublicCallData(callStackItem, publicCallStack, proof, portalContractAddress, bytecodeHash);
|
|
163
209
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
210
|
+
}
|
|
211
|
+
function removeRedundantPublicDataWrites(publicInputs) {
|
|
212
|
+
const patch = (requests) => {
|
|
213
|
+
const lastWritesMap = new Map();
|
|
214
|
+
for (const write of requests) {
|
|
215
|
+
const key = write.leafSlot.toString();
|
|
216
|
+
lastWritesMap.set(key, write);
|
|
217
|
+
}
|
|
218
|
+
return requests.filter(write => lastWritesMap.get(write.leafSlot.toString())?.equals(write));
|
|
219
|
+
};
|
|
220
|
+
publicInputs.end.publicDataUpdateRequests = padArrayEnd(patch(publicInputs.end.publicDataUpdateRequests), PublicDataUpdateRequest.empty(), MAX_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
221
|
+
publicInputs.endNonRevertibleData.publicDataUpdateRequests = padArrayEnd(patch(publicInputs.endNonRevertibleData.publicDataUpdateRequests), PublicDataUpdateRequest.empty(), MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
222
|
+
}
|
|
223
|
+
// HACK(#1622): this is a hack to fix ordering of public state in the call stack. Since the private kernel
|
|
224
|
+
// cannot keep track of side effects that happen after or before a nested call, we override the public
|
|
225
|
+
// state actions it emits with whatever we got from the simulator. As a sanity check, we at least verify
|
|
226
|
+
// that the elements are the same, so we are only tweaking their ordering.
|
|
227
|
+
// See yarn-project/end-to-end/src/e2e_ordering.test.ts
|
|
228
|
+
// See https://github.com/AztecProtocol/aztec-packages/issues/1616
|
|
229
|
+
// TODO(#757): Enforce proper ordering of public state actions
|
|
230
|
+
/**
|
|
231
|
+
* Patch the ordering of storage actions output from the public kernel.
|
|
232
|
+
* @param publicInputs - to be patched here: public inputs to the kernel iteration up to this point
|
|
233
|
+
* @param execResult - result of the top/first execution for this enqueued public call
|
|
234
|
+
*/
|
|
235
|
+
function patchPublicStorageActionOrdering(publicInputs, execResult, phase) {
|
|
236
|
+
const { publicDataReads, publicDataUpdateRequests } = PhaseIsRevertible[phase]
|
|
237
|
+
? publicInputs.end
|
|
238
|
+
: publicInputs.endNonRevertibleData;
|
|
239
|
+
// Convert ContractStorage* objects to PublicData* objects and sort them in execution order.
|
|
240
|
+
// Note, this only pulls simulated reads/writes from the current phase,
|
|
241
|
+
// so the returned result will be a subset of the public kernel output.
|
|
242
|
+
const simPublicDataReads = collectPublicDataReads(execResult);
|
|
243
|
+
// verify that each read is in the kernel output
|
|
244
|
+
for (const read of simPublicDataReads) {
|
|
245
|
+
if (!publicDataReads.find(item => item.equals(read))) {
|
|
188
246
|
throw new Error(`Public data reads from simulator do not match those from public kernel.\nFrom simulator: ${simPublicDataReads
|
|
189
247
|
.map(p => p.toFriendlyJSON())
|
|
190
248
|
.join(', ')}\nFrom public kernel: ${publicDataReads.map(i => i.toFriendlyJSON()).join(', ')}`);
|
|
191
249
|
}
|
|
192
|
-
|
|
250
|
+
}
|
|
251
|
+
const simPublicDataUpdateRequests = collectPublicDataUpdateRequests(execResult);
|
|
252
|
+
for (const update of simPublicDataUpdateRequests) {
|
|
253
|
+
if (!publicDataUpdateRequests.find(item => item.equals(update))) {
|
|
193
254
|
throw new Error(`Public data update requests from simulator do not match those from public kernel.\nFrom simulator: ${simPublicDataUpdateRequests
|
|
194
255
|
.map(p => p.toFriendlyJSON())
|
|
195
|
-
.join(', ')}\nFrom public kernel: ${publicDataUpdateRequests
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
// We only want to reorder the items from the public inputs of the
|
|
199
|
-
// most recently processed top/enqueued call.
|
|
200
|
-
const numTotalReadsInKernel = arrayNonEmptyLength(publicInputs.end.publicDataReads, f => f.leafSlot.equals(Fr.ZERO) && f.value.equals(Fr.ZERO));
|
|
201
|
-
const numTotalUpdatesInKernel = arrayNonEmptyLength(publicInputs.end.publicDataUpdateRequests, f => f.leafSlot.equals(Fr.ZERO) && f.oldValue.equals(Fr.ZERO) && f.newValue.equals(Fr.ZERO));
|
|
202
|
-
const numReadsBeforeThisEnqueuedCall = numTotalReadsInKernel - simPublicDataReads.length;
|
|
203
|
-
const numUpdatesBeforeThisEnqueuedCall = numTotalUpdatesInKernel - simPublicDataUpdateRequests.length;
|
|
204
|
-
// Override kernel output
|
|
205
|
-
publicInputs.end.publicDataReads = padArrayEnd([
|
|
206
|
-
// do not mess with items from previous top/enqueued calls in kernel output
|
|
207
|
-
...publicDataReads.slice(0, numReadsBeforeThisEnqueuedCall),
|
|
208
|
-
...simPublicDataReads,
|
|
209
|
-
], PublicDataRead.empty(), MAX_PUBLIC_DATA_READS_PER_TX);
|
|
210
|
-
// Override kernel output
|
|
211
|
-
publicInputs.end.publicDataUpdateRequests = padArrayEnd([
|
|
212
|
-
// do not mess with items from previous top/enqueued calls in kernel output
|
|
213
|
-
...publicDataUpdateRequests.slice(0, numUpdatesBeforeThisEnqueuedCall),
|
|
214
|
-
...simPublicDataUpdateRequests,
|
|
215
|
-
], PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
216
|
-
}
|
|
217
|
-
removeRedundantPublicDataWrites(publicInputs) {
|
|
218
|
-
const lastWritesMap = new Map();
|
|
219
|
-
for (const write of publicInputs.end.publicDataUpdateRequests) {
|
|
220
|
-
const key = write.leafSlot.toString();
|
|
221
|
-
lastWritesMap.set(key, write);
|
|
256
|
+
.join(', ')}\nFrom public kernel revertible: ${publicDataUpdateRequests
|
|
257
|
+
.map(i => i.toFriendlyJSON())
|
|
258
|
+
.join(', ')}`);
|
|
222
259
|
}
|
|
223
|
-
const lastWrites = publicInputs.end.publicDataUpdateRequests.filter(write => lastWritesMap.get(write.leafSlot.toString()) === write);
|
|
224
|
-
publicInputs.end.publicDataUpdateRequests = padArrayEnd(lastWrites, PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
225
260
|
}
|
|
261
|
+
// We only want to reorder the items from the public inputs of the
|
|
262
|
+
// most recently processed top/enqueued call.
|
|
263
|
+
const effectSet = PhaseIsRevertible[phase] ? 'end' : 'endNonRevertibleData';
|
|
264
|
+
const numReadsInKernel = arrayNonEmptyLength(publicDataReads, f => f.isEmpty());
|
|
265
|
+
const numReadsBeforeThisEnqueuedCall = numReadsInKernel - simPublicDataReads.length;
|
|
266
|
+
publicInputs[effectSet].publicDataReads = padArrayEnd([
|
|
267
|
+
// do not mess with items from previous top/enqueued calls in kernel output
|
|
268
|
+
...publicInputs[effectSet].publicDataReads.slice(0, numReadsBeforeThisEnqueuedCall),
|
|
269
|
+
...simPublicDataReads,
|
|
270
|
+
], PublicDataRead.empty(), PhaseIsRevertible[phase] ? MAX_REVERTIBLE_PUBLIC_DATA_READS_PER_TX : MAX_NON_REVERTIBLE_PUBLIC_DATA_READS_PER_TX);
|
|
271
|
+
const numUpdatesInKernel = arrayNonEmptyLength(publicDataUpdateRequests, f => f.isEmpty());
|
|
272
|
+
const numUpdatesBeforeThisEnqueuedCall = numUpdatesInKernel - simPublicDataUpdateRequests.length;
|
|
273
|
+
publicInputs[effectSet].publicDataUpdateRequests = padArrayEnd([
|
|
274
|
+
...publicInputs[effectSet].publicDataUpdateRequests.slice(0, numUpdatesBeforeThisEnqueuedCall),
|
|
275
|
+
...simPublicDataUpdateRequests,
|
|
276
|
+
], PublicDataUpdateRequest.empty(), PhaseIsRevertible[phase]
|
|
277
|
+
? MAX_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
|
|
278
|
+
: MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
226
279
|
}
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFlBQVksRUFBTSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLEVBQUUsRUFHRix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzVCLDhCQUE4QixFQUM5QiwyQkFBMkIsRUFDM0IscUNBQXFDLEVBQ3JDLDhCQUE4QixFQUM5Qiw0QkFBNEIsRUFDNUIsd0NBQXdDLEVBQ3hDLHNDQUFzQyxFQUN0QyxpQkFBaUIsRUFDakIsa0JBQWtCLEVBRWxCLGNBQWMsRUFFZCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBRWxCLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsMEJBQTBCLEVBQzFCLGNBQWMsR0FDZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUlMLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7QUFHMUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFLcEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBZ0Isb0JBQW9CO0lB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
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFlBQVksRUFBTSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsRUFBRSxFQUdGLGFBQWEsRUFDYiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQiwyQ0FBMkMsRUFDM0MscURBQXFELEVBQ3JELHFDQUFxQyxFQUNyQyw4QkFBOEIsRUFDOUIsd0NBQXdDLEVBQ3hDLHVDQUF1QyxFQUN2QyxpREFBaUQsRUFDakQsaUJBQWlCLEVBR2pCLGtDQUFrQyxFQUNsQywrQkFBK0IsRUFDL0IsY0FBYyxFQUVkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLDBCQUEwQixFQUMxQixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFTLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFJTCxzQkFBc0IsRUFDdEIsK0JBQStCLEVBQy9CLHVCQUF1QixHQUN4QixNQUFNLGtCQUFrQixDQUFDO0FBRzFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxTQUFTLENB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
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Tx } from '@aztec/circuit-types';
|
|
2
|
-
import { GlobalVariables, Header, Proof,
|
|
2
|
+
import { GlobalVariables, Header, Proof, PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
|
|
3
3
|
import { PublicExecutor, PublicStateDB } from '@aztec/simulator';
|
|
4
4
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
5
5
|
import { PublicProver } from '../prover/index.js';
|
|
6
6
|
import { PublicKernelCircuitSimulator } from '../simulator/index.js';
|
|
7
7
|
import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js';
|
|
8
|
-
import { AbstractPhaseManager } from './abstract_phase_manager.js';
|
|
8
|
+
import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
|
|
9
9
|
import { FailedTx } from './processed_tx.js';
|
|
10
10
|
/**
|
|
11
11
|
* The phase manager responsible for performing the fee preparation phase.
|
|
12
12
|
*/
|
|
13
|
-
export declare class
|
|
13
|
+
export declare class AppLogicPhaseManager extends AbstractPhaseManager {
|
|
14
14
|
protected db: MerkleTreeOperations;
|
|
15
15
|
protected publicExecutor: PublicExecutor;
|
|
16
16
|
protected publicKernel: PublicKernelCircuitSimulator;
|
|
@@ -19,20 +19,18 @@ export declare class FeeDistributionPhaseManager extends AbstractPhaseManager {
|
|
|
19
19
|
protected historicalHeader: Header;
|
|
20
20
|
protected publicContractsDB: ContractsDataSourcePublicDB;
|
|
21
21
|
protected publicStateDB: PublicStateDB;
|
|
22
|
-
|
|
23
|
-
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB,
|
|
24
|
-
|
|
25
|
-
handle(tx: Tx, previousPublicKernelOutput?: PublicKernelPublicInputs, previousPublicKernelProof?: Proof): Promise<{
|
|
22
|
+
phase: PublicKernelPhase;
|
|
23
|
+
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelPhase);
|
|
24
|
+
handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
|
|
26
25
|
/**
|
|
27
26
|
* the output of the public kernel circuit for this phase
|
|
28
27
|
*/
|
|
29
|
-
publicKernelOutput
|
|
28
|
+
publicKernelOutput: PublicKernelCircuitPublicInputs;
|
|
30
29
|
/**
|
|
31
30
|
* the proof of the public kernel circuit for this phase
|
|
32
31
|
*/
|
|
33
|
-
publicKernelProof
|
|
32
|
+
publicKernelProof: Proof;
|
|
34
33
|
}>;
|
|
35
|
-
nextPhase(): null;
|
|
36
34
|
rollback(tx: Tx, err: unknown): Promise<FailedTx>;
|
|
37
35
|
}
|
|
38
|
-
//# sourceMappingURL=
|
|
36
|
+
//# sourceMappingURL=app_logic_phase_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app_logic_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/app_logic_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,oBAAoB;IAE1D,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,YAAY,EAAE,YAAY;IACpC,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAClC,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;IAC/B,KAAK,EAAE,iBAAiB;gBARrB,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EAC/B,KAAK,GAAE,iBAA+C;IAKzD,MAAM,CACV,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,yBAAyB,EAAE,KAAK,GAC/B,OAAO,CAAC;QACT;;WAEG;QACH,kBAAkB,EAAE,+BAA+B,CAAC;QACpD;;WAEG;QACH,iBAAiB,EAAE,KAAK,CAAC;KAC1B,CAAC;IAqBI,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAWxD"}
|