@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.
Files changed (88) hide show
  1. package/dest/block_builder/solo_block_builder.d.ts +9 -9
  2. package/dest/block_builder/solo_block_builder.d.ts.map +1 -1
  3. package/dest/block_builder/solo_block_builder.js +26 -48
  4. package/dest/global_variable_builder/viem-reader.js +2 -2
  5. package/dest/prover/empty.d.ts +2 -2
  6. package/dest/prover/empty.d.ts.map +1 -1
  7. package/dest/prover/empty.js +1 -1
  8. package/dest/prover/index.d.ts +2 -2
  9. package/dest/prover/index.d.ts.map +1 -1
  10. package/dest/publisher/l1-publisher.d.ts +0 -2
  11. package/dest/publisher/l1-publisher.d.ts.map +1 -1
  12. package/dest/publisher/l1-publisher.js +2 -3
  13. package/dest/publisher/viem-tx-sender.d.ts.map +1 -1
  14. package/dest/publisher/viem-tx-sender.js +6 -10
  15. package/dest/sequencer/abstract_phase_manager.d.ts +23 -30
  16. package/dest/sequencer/abstract_phase_manager.d.ts.map +1 -1
  17. package/dest/sequencer/abstract_phase_manager.js +151 -98
  18. package/dest/sequencer/{fee_distribution_phase_manager.d.ts → app_logic_phase_manager.d.ts} +9 -11
  19. package/dest/sequencer/app_logic_phase_manager.d.ts.map +1 -0
  20. package/dest/sequencer/app_logic_phase_manager.js +44 -0
  21. package/dest/sequencer/phase_manager_factory.d.ts +19 -0
  22. package/dest/sequencer/phase_manager_factory.d.ts.map +1 -0
  23. package/dest/sequencer/phase_manager_factory.js +51 -0
  24. package/dest/sequencer/processed_tx.d.ts +4 -4
  25. package/dest/sequencer/processed_tx.d.ts.map +1 -1
  26. package/dest/sequencer/processed_tx.js +8 -8
  27. package/dest/sequencer/public_processor.d.ts +1 -1
  28. package/dest/sequencer/public_processor.d.ts.map +1 -1
  29. package/dest/sequencer/public_processor.js +13 -11
  30. package/dest/sequencer/sequencer.d.ts +3 -3
  31. package/dest/sequencer/sequencer.d.ts.map +1 -1
  32. package/dest/sequencer/sequencer.js +23 -16
  33. package/dest/sequencer/{fee_preparation_phase_manager.d.ts → setup_phase_manager.d.ts} +9 -11
  34. package/dest/sequencer/setup_phase_manager.d.ts.map +1 -0
  35. package/dest/sequencer/setup_phase_manager.js +37 -0
  36. package/dest/sequencer/{application_logic_phase_manager.d.ts → teardown_phase_manager.d.ts} +9 -12
  37. package/dest/sequencer/teardown_phase_manager.d.ts.map +1 -0
  38. package/dest/sequencer/teardown_phase_manager.js +36 -0
  39. package/dest/simulator/index.d.ts +11 -5
  40. package/dest/simulator/index.d.ts.map +1 -1
  41. package/dest/simulator/public_executor.d.ts +8 -3
  42. package/dest/simulator/public_executor.d.ts.map +1 -1
  43. package/dest/simulator/public_executor.js +64 -11
  44. package/dest/simulator/public_kernel.d.ts +11 -5
  45. package/dest/simulator/public_kernel.d.ts.map +1 -1
  46. package/dest/simulator/public_kernel.js +35 -16
  47. package/dest/simulator/rollup.js +2 -2
  48. package/package.json +14 -24
  49. package/src/block_builder/index.ts +24 -0
  50. package/src/block_builder/solo_block_builder.ts +726 -0
  51. package/src/block_builder/types.ts +8 -0
  52. package/src/client/index.ts +1 -0
  53. package/src/client/sequencer-client.ts +97 -0
  54. package/src/config.ts +86 -0
  55. package/src/global_variable_builder/config.ts +20 -0
  56. package/src/global_variable_builder/global_builder.ts +95 -0
  57. package/src/global_variable_builder/index.ts +16 -0
  58. package/src/global_variable_builder/viem-reader.ts +61 -0
  59. package/src/index.ts +15 -0
  60. package/src/mocks/verification_keys.ts +36 -0
  61. package/src/prover/empty.ts +74 -0
  62. package/src/prover/index.ts +53 -0
  63. package/src/publisher/config.ts +41 -0
  64. package/src/publisher/index.ts +14 -0
  65. package/src/publisher/l1-publisher.ts +362 -0
  66. package/src/publisher/viem-tx-sender.ts +235 -0
  67. package/src/receiver.ts +13 -0
  68. package/src/sequencer/abstract_phase_manager.ts +489 -0
  69. package/src/sequencer/app_logic_phase_manager.ts +75 -0
  70. package/src/sequencer/config.ts +1 -0
  71. package/src/sequencer/index.ts +2 -0
  72. package/src/sequencer/phase_manager_factory.ts +122 -0
  73. package/src/sequencer/processed_tx.ts +94 -0
  74. package/src/sequencer/public_processor.ts +153 -0
  75. package/src/sequencer/sequencer.ts +469 -0
  76. package/src/sequencer/setup_phase_manager.ts +68 -0
  77. package/src/sequencer/teardown_phase_manager.ts +67 -0
  78. package/src/simulator/index.ts +57 -0
  79. package/src/simulator/public_executor.ts +267 -0
  80. package/src/simulator/public_kernel.ts +84 -0
  81. package/src/simulator/rollup.ts +76 -0
  82. package/src/utils.ts +16 -0
  83. package/dest/sequencer/application_logic_phase_manager.d.ts.map +0 -1
  84. package/dest/sequencer/application_logic_phase_manager.js +0 -64
  85. package/dest/sequencer/fee_distribution_phase_manager.d.ts.map +0 -1
  86. package/dest/sequencer/fee_distribution_phase_manager.js +0 -42
  87. package/dest/sequencer/fee_preparation_phase_manager.d.ts.map +0 -1
  88. 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, KernelCircuitPublicInputs, PreviousKernelData, Proof, PublicCallData, PublicCallRequest, PublicCallStackItem, PublicCircuitPublicInputs, PublicKernelPublicInputs } from '@aztec/circuits.js';
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
- * A phase manager is responsible for performing/rolling back a phase of a transaction.
10
- *
11
- * The phases are as follows:
12
- * 1. Fee Preparation
13
- * 2. Application Logic
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
- protected log: import("@aztec/foundation/log").DebugLogger;
24
- constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, log?: import("@aztec/foundation/log").DebugLogger);
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 previousPublicKernelOutput - the output of the public kernel circuit for the previous phase
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, previousPublicKernelOutput?: PublicKernelPublicInputs, previousPublicKernelProof?: Proof): Promise<{
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?: PublicKernelPublicInputs;
35
+ publicKernelOutput: PublicKernelCircuitPublicInputs;
36
36
  /**
37
37
  * the proof of the public kernel circuit for this phase
38
38
  */
39
- publicKernelProof?: Proof;
39
+ publicKernelProof: Proof;
40
40
  }>;
41
- abstract nextPhase(): AbstractPhaseManager | null;
42
41
  abstract rollback(tx: Tx, err: unknown): Promise<FailedTx>;
43
- abstract extractEnqueuedPublicCalls(tx: Tx): PublicCallRequest[];
44
- protected getKernelOutputAndProof(tx: Tx, previousPublicKernelOutput?: PublicKernelPublicInputs, previousPublicKernelProof?: Proof): {
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
- publicKernelOutput: PublicKernelPublicInputs;
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(enqueuedCalls: PublicCallRequest[], previousPublicKernelOutput: PublicKernelPublicInputs, previousPublicKernelProof: Proof): Promise<[PublicKernelPublicInputs, Proof, FunctionL2Logs[]]>;
55
- protected runKernelCircuit(callData: PublicCallData, previousOutput: KernelCircuitPublicInputs, previousProof: Proof): Promise<[KernelCircuitPublicInputs, Proof]>;
56
- protected getKernelCircuitOutput(callData: PublicCallData, previousOutput: KernelCircuitPublicInputs, previousProof: Proof): Promise<KernelCircuitPublicInputs>;
57
- protected getPreviousKernelData(previousOutput: KernelCircuitPublicInputs, previousProof: Proof): PreviousKernelData;
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":"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"}
1
+ {"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/abstract_phase_manager.ts"],"names":[],"mappings":"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"}
@@ -1,51 +1,96 @@
1
1
  import { MerkleTreeId } from '@aztec/circuit-types';
2
- import { AztecAddress, CallRequest, CombinedAccumulatedData, ContractStorageRead, ContractStorageUpdateRequest, Fr, KernelCircuitPublicInputs, MAX_NEW_COMMITMENTS_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, PreviousKernelData, PublicCallData, PublicCallStackItem, PublicCircuitPublicInputs, PublicDataRead, PublicDataUpdateRequest, PublicKernelInputs, RETURN_VALUES_LENGTH, SideEffect, SideEffectLinkedToNoteHash, VK_TREE_HEIGHT, } from '@aztec/circuits.js';
3
- import { computeVarArgsHash } from '@aztec/circuits.js/abis';
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
- * A phase manager is responsible for performing/rolling back a phase of a transaction.
11
- *
12
- * The phases are as follows:
13
- * 1. Fee Preparation
14
- * 2. Application Logic
15
- * 3. Fee Distribution
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, log = createDebugLogger('aztec:sequencer:phase-manager')) {
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.log = log;
29
+ this.phase = phase;
30
+ this.log = createDebugLogger(`aztec:sequencer:${phase}`);
26
31
  }
27
- getKernelOutputAndProof(tx, previousPublicKernelOutput, previousPublicKernelProof) {
28
- if (previousPublicKernelOutput && previousPublicKernelProof) {
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
- publicKernelOutput: previousPublicKernelOutput,
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 publicKernelOutput = new KernelCircuitPublicInputs(tx.data.aggregationObject, tx.data.metaHwm, CombinedAccumulatedData.fromFinalAccumulatedData(tx.data.end), tx.data.constants, tx.data.isPrivate);
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
- publicKernelOutput,
82
+ publicKernelPublicInput,
39
83
  publicKernelProof,
40
84
  };
41
85
  }
42
86
  }
43
- async processEnqueuedPublicCalls(enqueuedCalls, previousPublicKernelOutput, previousPublicKernelProof) {
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
- const result = isExecutionRequest ? await this.publicExecutor.simulate(current, this.globalVariables) : current;
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 ${functionSelector}@${result.execution.contractAddress.toString()}`);
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
- this.patchPublicStorageActionOrdering(kernelOutput, enqueuedExecutionResult);
122
+ patchPublicStorageActionOrdering(kernelOutput, enqueuedExecutionResult, this.phase);
74
123
  }
75
124
  // TODO(#3675): This should be done in a public kernel circuit
76
- this.removeRedundantPublicDataWrites(kernelOutput);
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
- if (previousOutput?.isPrivate && previousProof) {
86
- // Run the public kernel circuit with previous private kernel
87
- const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
88
- const inputs = new PublicKernelInputs(previousKernel, callData);
89
- return this.publicKernel.publicKernelCircuitPrivateInput(inputs);
90
- }
91
- else if (previousOutput && previousProof) {
92
- // Run the public kernel circuit with previous public kernel
93
- const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
94
- const inputs = new PublicKernelInputs(previousKernel, callData);
95
- return this.publicKernel.publicKernelCircuitNonFirstIteration(inputs);
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 PreviousKernelData(previousOutput, previousProof, vk, vkIndex, vkSiblingPath);
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
- newCommitments: padArrayEnd(result.newCommitments, SideEffect.empty(), MAX_NEW_COMMITMENTS_PER_CALL),
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, Fr.ZERO, MAX_NEW_L2_TO_L1_MSGS_PER_CALL),
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
- // HACK(#1622): this is a hack to fix ordering of public state in the call stack. Since the private kernel
165
- // cannot keep track of side effects that happen after or before a nested call, we override the public
166
- // state actions it emits with whatever we got from the simulator. As a sanity check, we at least verify
167
- // that the elements are the same, so we are only tweaking their ordering.
168
- // See yarn-project/end-to-end/src/e2e_ordering.test.ts
169
- // See https://github.com/AztecProtocol/aztec-packages/issues/1616
170
- // TODO(#757): Enforce proper ordering of public state actions
171
- /**
172
- * Patch the ordering of storage actions output from the public kernel.
173
- * @param publicInputs - to be patched here: public inputs to the kernel iteration up to this point
174
- * @param execResult - result of the top/first execution for this enqueued public call
175
- */
176
- patchPublicStorageActionOrdering(publicInputs, execResult) {
177
- // Convert ContractStorage* objects to PublicData* objects and sort them in execution order
178
- const simPublicDataReads = collectPublicDataReads(execResult);
179
- const simPublicDataUpdateRequests = collectPublicDataUpdateRequests(execResult);
180
- const { publicDataReads, publicDataUpdateRequests } = publicInputs.end; // from kernel
181
- // Validate all items in enqueued public calls are in the kernel emitted stack
182
- const readsAreEqual = simPublicDataReads.reduce((accum, read) => accum && !!publicDataReads.find(item => item.leafSlot.equals(read.leafSlot) && item.value.equals(read.value)), true);
183
- const updatesAreEqual = simPublicDataUpdateRequests.reduce((accum, update) => accum &&
184
- !!publicDataUpdateRequests.find(item => item.leafSlot.equals(update.leafSlot) &&
185
- item.oldValue.equals(update.oldValue) &&
186
- item.newValue.equals(update.newValue)), true);
187
- if (!readsAreEqual) {
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
- if (!updatesAreEqual) {
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.map(i => i.toFriendlyJSON()).join(', ')}`);
196
- }
197
- // Assume that kernel public inputs has the right number of items.
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, PublicCallRequest, PublicKernelPublicInputs } from '@aztec/circuits.js';
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 FeeDistributionPhaseManager extends AbstractPhaseManager {
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
- protected log: import("@aztec/foundation/log").DebugLogger;
23
- constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, log?: import("@aztec/foundation/log").DebugLogger);
24
- extractEnqueuedPublicCalls(_tx: Tx): PublicCallRequest[];
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?: PublicKernelPublicInputs;
28
+ publicKernelOutput: PublicKernelCircuitPublicInputs;
30
29
  /**
31
30
  * the proof of the public kernel circuit for this phase
32
31
  */
33
- publicKernelProof?: Proof;
32
+ publicKernelProof: Proof;
34
33
  }>;
35
- nextPhase(): null;
36
34
  rollback(tx: Tx, err: unknown): Promise<FailedTx>;
37
35
  }
38
- //# sourceMappingURL=fee_distribution_phase_manager.d.ts.map
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"}