@aztec/sequencer-client 0.33.0 → 0.35.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.
Files changed (102) hide show
  1. package/dest/client/sequencer-client.d.ts.map +1 -1
  2. package/dest/client/sequencer-client.js +3 -3
  3. package/dest/config.d.ts.map +1 -1
  4. package/dest/config.js +84 -7
  5. package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
  6. package/dest/global_variable_builder/global_builder.js +5 -4
  7. package/dest/index.d.ts +0 -1
  8. package/dest/index.d.ts.map +1 -1
  9. package/dest/index.js +1 -2
  10. package/dest/publisher/l1-publisher.js +10 -10
  11. package/dest/publisher/viem-tx-sender.js +2 -2
  12. package/dest/sequencer/sequencer.d.ts +7 -8
  13. package/dest/sequencer/sequencer.d.ts.map +1 -1
  14. package/dest/sequencer/sequencer.js +22 -24
  15. package/dest/tx_validator/aggregate_tx_validator.d.ts +7 -0
  16. package/dest/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  17. package/dest/tx_validator/aggregate_tx_validator.js +23 -0
  18. package/dest/tx_validator/double_spend_validator.d.ts +11 -0
  19. package/dest/tx_validator/double_spend_validator.d.ts.map +1 -0
  20. package/dest/tx_validator/double_spend_validator.js +50 -0
  21. package/dest/tx_validator/gas_validator.d.ts +12 -0
  22. package/dest/tx_validator/gas_validator.d.ts.map +1 -0
  23. package/dest/tx_validator/gas_validator.js +62 -0
  24. package/dest/tx_validator/metadata_validator.d.ts +8 -0
  25. package/dest/tx_validator/metadata_validator.d.ts.map +1 -0
  26. package/dest/tx_validator/metadata_validator.js +50 -0
  27. package/dest/tx_validator/phases_validator.d.ts +13 -0
  28. package/dest/tx_validator/phases_validator.d.ts.map +1 -0
  29. package/dest/tx_validator/phases_validator.js +73 -0
  30. package/dest/tx_validator/tx_validator_factory.d.ts +13 -0
  31. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -0
  32. package/dest/tx_validator/tx_validator_factory.js +21 -0
  33. package/package.json +14 -13
  34. package/src/client/sequencer-client.ts +2 -3
  35. package/src/config.ts +93 -7
  36. package/src/global_variable_builder/global_builder.ts +4 -3
  37. package/src/index.ts +0 -1
  38. package/src/publisher/l1-publisher.ts +9 -9
  39. package/src/publisher/viem-tx-sender.ts +1 -1
  40. package/src/sequencer/sequencer.ts +39 -33
  41. package/src/tx_validator/aggregate_tx_validator.ts +24 -0
  42. package/src/tx_validator/double_spend_validator.ts +65 -0
  43. package/src/tx_validator/gas_validator.ts +81 -0
  44. package/src/tx_validator/metadata_validator.ts +60 -0
  45. package/src/tx_validator/phases_validator.ts +101 -0
  46. package/src/tx_validator/tx_validator_factory.ts +37 -0
  47. package/dest/sequencer/abstract_phase_manager.d.ts +0 -77
  48. package/dest/sequencer/abstract_phase_manager.d.ts.map +0 -1
  49. package/dest/sequencer/abstract_phase_manager.js +0 -307
  50. package/dest/sequencer/app_logic_phase_manager.d.ts +0 -28
  51. package/dest/sequencer/app_logic_phase_manager.d.ts.map +0 -1
  52. package/dest/sequencer/app_logic_phase_manager.js +0 -41
  53. package/dest/sequencer/hints_builder.d.ts +0 -23
  54. package/dest/sequencer/hints_builder.d.ts.map +0 -1
  55. package/dest/sequencer/hints_builder.js +0 -62
  56. package/dest/sequencer/phase_manager_factory.d.ts +0 -18
  57. package/dest/sequencer/phase_manager_factory.d.ts.map +0 -1
  58. package/dest/sequencer/phase_manager_factory.js +0 -56
  59. package/dest/sequencer/public_processor.d.ts +0 -54
  60. package/dest/sequencer/public_processor.d.ts.map +0 -1
  61. package/dest/sequencer/public_processor.js +0 -142
  62. package/dest/sequencer/setup_phase_manager.d.ts +0 -28
  63. package/dest/sequencer/setup_phase_manager.d.ts.map +0 -1
  64. package/dest/sequencer/setup_phase_manager.js +0 -30
  65. package/dest/sequencer/tail_phase_manager.d.ts +0 -29
  66. package/dest/sequencer/tail_phase_manager.d.ts.map +0 -1
  67. package/dest/sequencer/tail_phase_manager.js +0 -52
  68. package/dest/sequencer/teardown_phase_manager.d.ts +0 -28
  69. package/dest/sequencer/teardown_phase_manager.d.ts.map +0 -1
  70. package/dest/sequencer/teardown_phase_manager.js +0 -30
  71. package/dest/sequencer/tx_validator.d.ts +0 -28
  72. package/dest/sequencer/tx_validator.d.ts.map +0 -1
  73. package/dest/sequencer/tx_validator.js +0 -174
  74. package/dest/sequencer/tx_validator_factory.d.ts +0 -12
  75. package/dest/sequencer/tx_validator_factory.d.ts.map +0 -1
  76. package/dest/sequencer/tx_validator_factory.js +0 -17
  77. package/dest/sequencer/utils.d.ts +0 -8
  78. package/dest/sequencer/utils.d.ts.map +0 -1
  79. package/dest/sequencer/utils.js +0 -29
  80. package/dest/simulator/index.d.ts +0 -31
  81. package/dest/simulator/index.d.ts.map +0 -1
  82. package/dest/simulator/index.js +0 -2
  83. package/dest/simulator/public_executor.d.ts +0 -79
  84. package/dest/simulator/public_executor.d.ts.map +0 -1
  85. package/dest/simulator/public_executor.js +0 -198
  86. package/dest/simulator/public_kernel.d.ts +0 -37
  87. package/dest/simulator/public_kernel.d.ts.map +0 -1
  88. package/dest/simulator/public_kernel.js +0 -97
  89. package/src/sequencer/abstract_phase_manager.ts +0 -549
  90. package/src/sequencer/app_logic_phase_manager.ts +0 -62
  91. package/src/sequencer/hints_builder.ts +0 -119
  92. package/src/sequencer/phase_manager_factory.ts +0 -126
  93. package/src/sequencer/public_processor.ts +0 -209
  94. package/src/sequencer/setup_phase_manager.ts +0 -50
  95. package/src/sequencer/tail_phase_manager.ts +0 -111
  96. package/src/sequencer/teardown_phase_manager.ts +0 -50
  97. package/src/sequencer/tx_validator.ts +0 -265
  98. package/src/sequencer/tx_validator_factory.ts +0 -32
  99. package/src/sequencer/utils.ts +0 -31
  100. package/src/simulator/index.ts +0 -36
  101. package/src/simulator/public_executor.ts +0 -267
  102. package/src/simulator/public_kernel.ts +0 -139
@@ -1,77 +0,0 @@
1
- import { type SimulationError, type Tx, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
2
- import { Fr, type GlobalVariables, type Header, type KernelCircuitPublicInputs, type PrivateKernelTailCircuitPublicInputs, type Proof, PublicCallData, type PublicCallRequest, PublicCallStackItem, PublicCircuitPublicInputs, type PublicKernelCircuitPublicInputs, PublicKernelData } from '@aztec/circuits.js';
3
- import { type ProcessReturnValues } from '@aztec/foundation/abi';
4
- import { type DebugLogger } from '@aztec/foundation/log';
5
- import { type PublicExecutionResult, type PublicExecutor } from '@aztec/simulator';
6
- import { type MerkleTreeOperations } from '@aztec/world-state';
7
- import { type PublicKernelCircuitSimulator } from '../simulator/index.js';
8
- import { HintsBuilder } from './hints_builder.js';
9
- export declare enum PublicKernelPhase {
10
- SETUP = "setup",
11
- APP_LOGIC = "app-logic",
12
- TEARDOWN = "teardown",
13
- TAIL = "tail"
14
- }
15
- export declare const PhaseIsRevertible: Record<PublicKernelPhase, boolean>;
16
- export declare abstract class AbstractPhaseManager {
17
- protected db: MerkleTreeOperations;
18
- protected publicExecutor: PublicExecutor;
19
- protected publicKernel: PublicKernelCircuitSimulator;
20
- protected globalVariables: GlobalVariables;
21
- protected historicalHeader: Header;
22
- phase: PublicKernelPhase;
23
- protected hintsBuilder: HintsBuilder;
24
- protected log: DebugLogger;
25
- constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, phase: PublicKernelPhase);
26
- /**
27
- *
28
- * @param tx - the tx to be processed
29
- * @param publicKernelPublicInputs - the output of the public kernel circuit for the previous phase
30
- * @param previousPublicKernelProof - the proof of the public kernel circuit for the previous phase
31
- */
32
- abstract handle(tx: Tx, publicKernelPublicInputs: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
33
- /**
34
- * the output of the public kernel circuit for this phase
35
- */
36
- publicKernelOutput: PublicKernelCircuitPublicInputs;
37
- /**
38
- * the final output of the public kernel circuit for this phase
39
- */
40
- finalKernelOutput?: KernelCircuitPublicInputs;
41
- /**
42
- * the proof of the public kernel circuit for this phase
43
- */
44
- publicKernelProof: Proof;
45
- /**
46
- * revert reason, if any
47
- */
48
- revertReason: SimulationError | undefined;
49
- returnValues: ProcessReturnValues;
50
- }>;
51
- static extractEnqueuedPublicCallsByPhase(publicInputs: PrivateKernelTailCircuitPublicInputs, enqueuedPublicFunctionCalls: PublicCallRequest[]): Record<PublicKernelPhase, PublicCallRequest[]>;
52
- protected extractEnqueuedPublicCalls(tx: Tx): PublicCallRequest[];
53
- protected processEnqueuedPublicCalls(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<[
54
- PublicKernelCircuitPublicInputs,
55
- Proof,
56
- UnencryptedFunctionL2Logs[],
57
- SimulationError | undefined,
58
- ProcessReturnValues
59
- ]>;
60
- protected runKernelCircuit(previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof, callData: PublicCallData): Promise<[PublicKernelCircuitPublicInputs, Proof]>;
61
- protected getKernelCircuitOutput(previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof, callData: PublicCallData): Promise<PublicKernelCircuitPublicInputs>;
62
- protected getPreviousKernelData(previousOutput: PublicKernelCircuitPublicInputs, previousProof: Proof): PublicKernelData;
63
- protected getPublicCircuitPublicInputs(result: PublicExecutionResult): Promise<PublicCircuitPublicInputs>;
64
- protected getPublicCallStackItem(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallStackItem>;
65
- protected getPublicCallStackPreimages(result: PublicExecutionResult): Promise<PublicCallStackItem[]>;
66
- protected getBytecodeHash(_result: PublicExecutionResult): Promise<Fr>;
67
- /**
68
- * Calculates the PublicCircuitOutput for this execution result along with its proof,
69
- * and assembles a PublicCallData object from it.
70
- * @param result - The execution result.
71
- * @param preimages - The preimages of the callstack items.
72
- * @param isExecutionRequest - Whether the current callstack item should be considered a public fn execution request.
73
- * @returns A corresponding PublicCallData object.
74
- */
75
- protected getPublicCallData(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallData>;
76
- }
77
- //# sourceMappingURL=abstract_phase_manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/abstract_phase_manager.ts"],"names":[],"mappings":"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"}
@@ -1,307 +0,0 @@
1
- import { MerkleTreeId } from '@aztec/circuit-types';
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_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_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, PublicCallData, PublicCallStackItem, PublicCircuitPublicInputs, PublicDataRead, PublicDataUpdateRequest, PublicKernelCircuitPrivateInputs, PublicKernelData, RETURN_VALUES_LENGTH, ReadRequest, RevertCode, SideEffect, SideEffectLinkedToNoteHash, VK_TREE_HEIGHT, VerificationKey, makeEmptyProof, } from '@aztec/circuits.js';
3
- import { computeVarArgsHash } from '@aztec/circuits.js/hash';
4
- import { decodeReturnValues, } from '@aztec/foundation/abi';
5
- import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
6
- import { createDebugLogger } from '@aztec/foundation/log';
7
- import { collectPublicDataReads, collectPublicDataUpdateRequests, isPublicExecutionResult, } from '@aztec/simulator';
8
- import { HintsBuilder } from './hints_builder.js';
9
- import { lastSideEffectCounter } from './utils.js';
10
- export var PublicKernelPhase;
11
- (function (PublicKernelPhase) {
12
- PublicKernelPhase["SETUP"] = "setup";
13
- PublicKernelPhase["APP_LOGIC"] = "app-logic";
14
- PublicKernelPhase["TEARDOWN"] = "teardown";
15
- PublicKernelPhase["TAIL"] = "tail";
16
- })(PublicKernelPhase || (PublicKernelPhase = {}));
17
- export const PhaseIsRevertible = {
18
- [PublicKernelPhase.SETUP]: false,
19
- [PublicKernelPhase.APP_LOGIC]: true,
20
- [PublicKernelPhase.TEARDOWN]: false,
21
- [PublicKernelPhase.TAIL]: false,
22
- };
23
- export class AbstractPhaseManager {
24
- constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase) {
25
- this.db = db;
26
- this.publicExecutor = publicExecutor;
27
- this.publicKernel = publicKernel;
28
- this.globalVariables = globalVariables;
29
- this.historicalHeader = historicalHeader;
30
- this.phase = phase;
31
- this.hintsBuilder = new HintsBuilder(db);
32
- this.log = createDebugLogger(`aztec:sequencer:${phase}`);
33
- }
34
- static extractEnqueuedPublicCallsByPhase(publicInputs, enqueuedPublicFunctionCalls) {
35
- const publicCallsStack = enqueuedPublicFunctionCalls.slice().reverse();
36
- const nonRevertibleCallStack = publicInputs.forPublic.endNonRevertibleData.publicCallStack.filter(i => !i.isEmpty());
37
- const revertibleCallStack = publicInputs.forPublic.end.publicCallStack.filter(i => !i.isEmpty());
38
- const callRequestsStack = publicCallsStack
39
- .map(call => call.toCallRequest())
40
- .filter(
41
- // filter out enqueued calls that are not in the public call stack
42
- // TODO mitch left a question about whether this is only needed when unit testing
43
- // with mock data
44
- call => revertibleCallStack.find(p => p.equals(call)) || nonRevertibleCallStack.find(p => p.equals(call)));
45
- if (callRequestsStack.length === 0) {
46
- return {
47
- [PublicKernelPhase.SETUP]: [],
48
- [PublicKernelPhase.APP_LOGIC]: [],
49
- [PublicKernelPhase.TEARDOWN]: [],
50
- [PublicKernelPhase.TAIL]: [],
51
- };
52
- }
53
- // find the first call that is revertible
54
- const firstRevertibleCallIndex = callRequestsStack.findIndex(c => revertibleCallStack.findIndex(p => p.equals(c)) !== -1);
55
- if (firstRevertibleCallIndex === 0) {
56
- return {
57
- [PublicKernelPhase.SETUP]: [],
58
- [PublicKernelPhase.APP_LOGIC]: publicCallsStack,
59
- [PublicKernelPhase.TEARDOWN]: [],
60
- [PublicKernelPhase.TAIL]: [],
61
- };
62
- }
63
- else if (firstRevertibleCallIndex === -1) {
64
- // there's no app logic, split the functions between setup (many) and teardown (just one function call)
65
- return {
66
- [PublicKernelPhase.SETUP]: publicCallsStack.slice(0, -1),
67
- [PublicKernelPhase.APP_LOGIC]: [],
68
- [PublicKernelPhase.TEARDOWN]: [publicCallsStack[publicCallsStack.length - 1]],
69
- [PublicKernelPhase.TAIL]: [],
70
- };
71
- }
72
- else {
73
- return {
74
- [PublicKernelPhase.SETUP]: publicCallsStack.slice(0, firstRevertibleCallIndex - 1),
75
- [PublicKernelPhase.APP_LOGIC]: publicCallsStack.slice(firstRevertibleCallIndex),
76
- [PublicKernelPhase.TEARDOWN]: [publicCallsStack[firstRevertibleCallIndex - 1]],
77
- [PublicKernelPhase.TAIL]: [],
78
- };
79
- }
80
- }
81
- extractEnqueuedPublicCalls(tx) {
82
- const calls = AbstractPhaseManager.extractEnqueuedPublicCallsByPhase(tx.data, tx.enqueuedPublicFunctionCalls)[this.phase];
83
- return calls;
84
- }
85
- async processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof) {
86
- let kernelOutput = previousPublicKernelOutput;
87
- let kernelProof = previousPublicKernelProof;
88
- const enqueuedCalls = this.extractEnqueuedPublicCalls(tx);
89
- if (!enqueuedCalls || !enqueuedCalls.length) {
90
- return [kernelOutput, kernelProof, [], undefined, undefined];
91
- }
92
- const newUnencryptedFunctionLogs = [];
93
- // TODO(#1684): Should multiple separately enqueued public calls be treated as
94
- // separate public callstacks to be proven by separate public kernel sequences
95
- // and submitted separately to the base rollup?
96
- const returns = [];
97
- for (const enqueuedCall of enqueuedCalls) {
98
- const executionStack = [enqueuedCall];
99
- let currentReturn = undefined;
100
- // Keep track of which result is for the top/enqueued call
101
- let enqueuedExecutionResult;
102
- while (executionStack.length) {
103
- const current = executionStack.pop();
104
- const isExecutionRequest = !isPublicExecutionResult(current);
105
- const sideEffectCounter = lastSideEffectCounter(tx) + 1;
106
- const result = isExecutionRequest
107
- ? await this.publicExecutor.simulate(current, this.globalVariables, sideEffectCounter)
108
- : current;
109
- const functionSelector = result.execution.functionData.selector.toString();
110
- if (result.reverted && !PhaseIsRevertible[this.phase]) {
111
- this.log.debug(`Simulation error on ${result.execution.contractAddress.toString()}:${functionSelector} with reason: ${result.revertReason}`);
112
- throw result.revertReason;
113
- }
114
- newUnencryptedFunctionLogs.push(result.unencryptedLogs);
115
- this.log.debug(`Running public kernel circuit for ${result.execution.contractAddress.toString()}:${functionSelector}`);
116
- executionStack.push(...result.nestedExecutions);
117
- const callData = await this.getPublicCallData(result, isExecutionRequest);
118
- [kernelOutput, kernelProof] = await this.runKernelCircuit(kernelOutput, kernelProof, callData);
119
- // sanity check. Note we can't expect them to just be equal, because e.g.
120
- // if the simulator reverts in app logic, it "resets" and result.reverted will be false when we run teardown,
121
- // but the kernel carries the reverted flag forward. But if the simulator reverts, so should the kernel.
122
- if (result.reverted && kernelOutput.revertCode.isOK()) {
123
- throw new Error(`Public kernel circuit did not revert on ${result.execution.contractAddress.toString()}:${functionSelector}, but simulator did.`);
124
- }
125
- // We know the phase is revertible due to the above check.
126
- // So safely return the revert reason and the kernel output (which has had its revertible side effects dropped)
127
- if (result.reverted) {
128
- this.log.debug(`Reverting on ${result.execution.contractAddress.toString()}:${functionSelector} with reason: ${result.revertReason}`);
129
- return [kernelOutput, kernelProof, [], result.revertReason, undefined];
130
- }
131
- if (!enqueuedExecutionResult) {
132
- enqueuedExecutionResult = result;
133
- // Padding as the AVM is not always returning the expected return size (4)
134
- // which is expected by the kernel.
135
- const paddedReturn = padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH);
136
- // TODO(#5450) Need to use the proper return values here
137
- const returnTypes = [{ kind: 'array', length: 4, type: { kind: 'field' } }];
138
- const mockArtifact = { returnTypes };
139
- currentReturn = decodeReturnValues(mockArtifact, paddedReturn);
140
- }
141
- }
142
- // HACK(#1622): Manually patches the ordering of public state actions
143
- // TODO(#757): Enforce proper ordering of public state actions
144
- patchPublicStorageActionOrdering(kernelOutput, enqueuedExecutionResult, this.phase);
145
- returns.push(currentReturn);
146
- }
147
- // TODO(#3675): This should be done in a public kernel circuit
148
- removeRedundantPublicDataWrites(kernelOutput, this.phase);
149
- return [kernelOutput, kernelProof, newUnencryptedFunctionLogs, undefined, returns];
150
- }
151
- async runKernelCircuit(previousOutput, previousProof, callData) {
152
- const output = await this.getKernelCircuitOutput(previousOutput, previousProof, callData);
153
- return [output, makeEmptyProof()];
154
- }
155
- getKernelCircuitOutput(previousOutput, previousProof, callData) {
156
- const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
157
- const inputs = new PublicKernelCircuitPrivateInputs(previousKernel, callData);
158
- switch (this.phase) {
159
- case PublicKernelPhase.SETUP:
160
- return this.publicKernel.publicKernelCircuitSetup(inputs);
161
- case PublicKernelPhase.APP_LOGIC:
162
- return this.publicKernel.publicKernelCircuitAppLogic(inputs);
163
- case PublicKernelPhase.TEARDOWN:
164
- return this.publicKernel.publicKernelCircuitTeardown(inputs);
165
- default:
166
- throw new Error(`No public kernel circuit for inputs`);
167
- }
168
- }
169
- getPreviousKernelData(previousOutput, previousProof) {
170
- // TODO(@PhilWindle) Fix once we move this to prover-client
171
- const vk = VerificationKey.makeFake();
172
- const vkIndex = 0;
173
- const vkSiblingPath = MembershipWitness.random(VK_TREE_HEIGHT).siblingPath;
174
- return new PublicKernelData(previousOutput, previousProof, vk, vkIndex, vkSiblingPath);
175
- }
176
- async getPublicCircuitPublicInputs(result) {
177
- const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE);
178
- this.historicalHeader.state.partial.publicDataTree.root = Fr.fromBuffer(publicDataTreeInfo.root);
179
- const callStackPreimages = await this.getPublicCallStackPreimages(result);
180
- const publicCallStackHashes = padArrayEnd(callStackPreimages.map(c => c.hash()), Fr.ZERO, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
181
- // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165) --> set this in Noir
182
- const unencryptedLogsHash = Fr.fromBuffer(result.unencryptedLogs.hash());
183
- const unencryptedLogPreimagesLength = new Fr(result.unencryptedLogs.getSerializedLength());
184
- return PublicCircuitPublicInputs.from({
185
- callContext: result.execution.callContext,
186
- proverAddress: AztecAddress.ZERO,
187
- argsHash: computeVarArgsHash(result.execution.args),
188
- newNoteHashes: padArrayEnd(result.newNoteHashes, SideEffect.empty(), MAX_NEW_NOTE_HASHES_PER_CALL),
189
- newNullifiers: padArrayEnd(result.newNullifiers, SideEffectLinkedToNoteHash.empty(), MAX_NEW_NULLIFIERS_PER_CALL),
190
- newL2ToL1Msgs: padArrayEnd(result.newL2ToL1Messages, L2ToL1Message.empty(), MAX_NEW_L2_TO_L1_MSGS_PER_CALL),
191
- startSideEffectCounter: result.startSideEffectCounter,
192
- endSideEffectCounter: result.endSideEffectCounter,
193
- returnValues: padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH),
194
- nullifierReadRequests: padArrayEnd(result.nullifierReadRequests, ReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_CALL),
195
- nullifierNonExistentReadRequests: padArrayEnd(result.nullifierNonExistentReadRequests, ReadRequest.empty(), MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL),
196
- contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL),
197
- contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL),
198
- publicCallStackHashes,
199
- unencryptedLogsHash,
200
- unencryptedLogPreimagesLength,
201
- historicalHeader: this.historicalHeader,
202
- // TODO(@just-mitch): need better mapping from simulator to revert code.
203
- revertCode: result.reverted ? RevertCode.REVERTED : RevertCode.OK,
204
- });
205
- }
206
- async getPublicCallStackItem(result, isExecutionRequest = false) {
207
- return new PublicCallStackItem(result.execution.contractAddress, result.execution.functionData, await this.getPublicCircuitPublicInputs(result), isExecutionRequest);
208
- }
209
- async getPublicCallStackPreimages(result) {
210
- const nested = result.nestedExecutions;
211
- if (nested.length > MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL) {
212
- throw new Error(`Public call stack size exceeded (max ${MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL}, got ${nested.length})`);
213
- }
214
- return await Promise.all(nested.map(n => this.getPublicCallStackItem(n)));
215
- }
216
- getBytecodeHash(_result) {
217
- // TODO: Determine how to calculate bytecode hash. Circuits just check it isn't zero for now.
218
- // See https://github.com/AztecProtocol/aztec3-packages/issues/378
219
- const bytecodeHash = new Fr(1n);
220
- return Promise.resolve(bytecodeHash);
221
- }
222
- /**
223
- * Calculates the PublicCircuitOutput for this execution result along with its proof,
224
- * and assembles a PublicCallData object from it.
225
- * @param result - The execution result.
226
- * @param preimages - The preimages of the callstack items.
227
- * @param isExecutionRequest - Whether the current callstack item should be considered a public fn execution request.
228
- * @returns A corresponding PublicCallData object.
229
- */
230
- async getPublicCallData(result, isExecutionRequest = false) {
231
- const bytecodeHash = await this.getBytecodeHash(result);
232
- const callStackItem = await this.getPublicCallStackItem(result, isExecutionRequest);
233
- const publicCallRequests = (await this.getPublicCallStackPreimages(result)).map(c => c.toCallRequest(callStackItem.publicInputs.callContext));
234
- const publicCallStack = padArrayEnd(publicCallRequests, CallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
235
- const portalContractAddress = result.execution.callContext.portalContractAddress.toField();
236
- return new PublicCallData(callStackItem, publicCallStack, makeEmptyProof(), portalContractAddress, bytecodeHash);
237
- }
238
- }
239
- function removeRedundantPublicDataWrites(publicInputs, phase) {
240
- const lastWritesMap = new Map();
241
- const patch = (requests) => requests.filter(write => {
242
- const leafSlot = write.leafSlot.toString();
243
- const exists = lastWritesMap.get(leafSlot);
244
- lastWritesMap.set(leafSlot, true);
245
- return !exists;
246
- });
247
- const [prev, curr] = PhaseIsRevertible[phase]
248
- ? [publicInputs.endNonRevertibleData, publicInputs.end]
249
- : [publicInputs.end, publicInputs.endNonRevertibleData];
250
- curr.publicDataUpdateRequests = padArrayEnd(patch(curr.publicDataUpdateRequests.reverse()).reverse(), PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
251
- prev.publicDataUpdateRequests = padArrayEnd(patch(prev.publicDataUpdateRequests.reverse()), PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
252
- }
253
- // HACK(#1622): this is a hack to fix ordering of public state in the call stack. Since the private kernel
254
- // cannot keep track of side effects that happen after or before a nested call, we override the public
255
- // state actions it emits with whatever we got from the simulator. As a sanity check, we at least verify
256
- // that the elements are the same, so we are only tweaking their ordering.
257
- // See yarn-project/end-to-end/src/e2e_ordering.test.ts
258
- // See https://github.com/AztecProtocol/aztec-packages/issues/1616
259
- // TODO(#757): Enforce proper ordering of public state actions
260
- /**
261
- * Patch the ordering of storage actions output from the public kernel.
262
- * @param publicInputs - to be patched here: public inputs to the kernel iteration up to this point
263
- * @param execResult - result of the top/first execution for this enqueued public call
264
- */
265
- function patchPublicStorageActionOrdering(publicInputs, execResult, phase) {
266
- const { publicDataUpdateRequests } = PhaseIsRevertible[phase] ? publicInputs.end : publicInputs.endNonRevertibleData;
267
- const { publicDataReads } = publicInputs.validationRequests;
268
- // Convert ContractStorage* objects to PublicData* objects and sort them in execution order.
269
- // Note, this only pulls simulated reads/writes from the current phase,
270
- // so the returned result will be a subset of the public kernel output.
271
- const simPublicDataReads = collectPublicDataReads(execResult);
272
- // verify that each read is in the kernel output
273
- for (const read of simPublicDataReads) {
274
- if (!publicDataReads.find(item => item.equals(read))) {
275
- throw new Error(`Public data reads from simulator do not match those from public kernel.\nFrom simulator: ${simPublicDataReads
276
- .map(p => p.toFriendlyJSON())
277
- .join(', ')}\nFrom public kernel: ${publicDataReads.map(i => i.toFriendlyJSON()).join(', ')}`);
278
- }
279
- }
280
- const simPublicDataUpdateRequests = collectPublicDataUpdateRequests(execResult);
281
- for (const update of simPublicDataUpdateRequests) {
282
- if (!publicDataUpdateRequests.find(item => item.equals(update))) {
283
- throw new Error(`Public data update requests from simulator do not match those from public kernel.\nFrom simulator: ${simPublicDataUpdateRequests
284
- .map(p => p.toFriendlyJSON())
285
- .join(', ')}\nFrom public kernel revertible: ${publicDataUpdateRequests
286
- .map(i => i.toFriendlyJSON())
287
- .join(', ')}`);
288
- }
289
- }
290
- // We only want to reorder the items from the public inputs of the
291
- // most recently processed top/enqueued call.
292
- const effectSet = PhaseIsRevertible[phase] ? 'end' : 'endNonRevertibleData';
293
- const numReadsInKernel = arrayNonEmptyLength(publicDataReads, f => f.isEmpty());
294
- const numReadsBeforeThisEnqueuedCall = numReadsInKernel - simPublicDataReads.length;
295
- publicInputs.validationRequests.publicDataReads = padArrayEnd([
296
- // do not mess with items from previous top/enqueued calls in kernel output
297
- ...publicInputs.validationRequests.publicDataReads.slice(0, numReadsBeforeThisEnqueuedCall),
298
- ...simPublicDataReads,
299
- ], PublicDataRead.empty(), MAX_PUBLIC_DATA_READS_PER_TX);
300
- const numUpdatesInKernel = arrayNonEmptyLength(publicDataUpdateRequests, f => f.isEmpty());
301
- const numUpdatesBeforeThisEnqueuedCall = numUpdatesInKernel - simPublicDataUpdateRequests.length;
302
- publicInputs[effectSet].publicDataUpdateRequests = padArrayEnd([
303
- ...publicInputs[effectSet].publicDataUpdateRequests.slice(0, numUpdatesBeforeThisEnqueuedCall),
304
- ...simPublicDataUpdateRequests,
305
- ], PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
306
- }
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RfcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvYWJzdHJhY3RfcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFpRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ILE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsRUFBRSxFQUlGLGFBQWEsRUFDYiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQixpREFBaUQsRUFDakQsb0NBQW9DLEVBQ3BDLHFDQUFxQyxFQUNyQyw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBQzVCLHdDQUF3QyxFQUN4QyxzQ0FBc0MsRUFDdEMsaUJBQWlCLEVBR2pCLGNBQWMsRUFFZCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsZ0NBQWdDLEVBRWhDLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsMEJBQTBCLEVBQzFCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUtMLGtCQUFrQixHQUNuQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUUsT0FBTyxFQUlMLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7QUFJMUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9C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
@@ -1,28 +0,0 @@
1
- import { type Tx } from '@aztec/circuit-types';
2
- import { type GlobalVariables, type Header, type Proof, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
3
- import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator';
4
- import { type MerkleTreeOperations } from '@aztec/world-state';
5
- import { type PublicKernelCircuitSimulator } from '../simulator/index.js';
6
- import { type ContractsDataSourcePublicDB } from '../simulator/public_executor.js';
7
- import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
8
- /**
9
- * The phase manager responsible for performing the fee preparation phase.
10
- */
11
- export declare class AppLogicPhaseManager extends AbstractPhaseManager {
12
- protected db: MerkleTreeOperations;
13
- protected publicExecutor: PublicExecutor;
14
- protected publicKernel: PublicKernelCircuitSimulator;
15
- protected globalVariables: GlobalVariables;
16
- protected historicalHeader: Header;
17
- protected publicContractsDB: ContractsDataSourcePublicDB;
18
- protected publicStateDB: PublicStateDB;
19
- phase: PublicKernelPhase;
20
- constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelPhase);
21
- handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
22
- publicKernelOutput: PublicKernelCircuitPublicInputs;
23
- publicKernelProof: Proof;
24
- revertReason: import("@aztec/circuit-types").SimulationError | undefined;
25
- returnValues: import("@aztec/foundation/abi").ProcessReturnValues;
26
- }>;
27
- }
28
- //# sourceMappingURL=app_logic_phase_manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app_logic_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/app_logic_phase_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEtF;;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,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;gBAPrB,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EAC/B,KAAK,GAAE,iBAA+C;IAKhD,MAAM,CACnB,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,yBAAyB,EAAE,KAAK;;;;;;CA2BnC"}
@@ -1,41 +0,0 @@
1
- import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
2
- /**
3
- * The phase manager responsible for performing the fee preparation phase.
4
- */
5
- export class AppLogicPhaseManager extends AbstractPhaseManager {
6
- constructor(db, publicExecutor, publicKernel, globalVariables, historicalHeader, publicContractsDB, publicStateDB, phase = PublicKernelPhase.APP_LOGIC) {
7
- super(db, publicExecutor, publicKernel, globalVariables, historicalHeader, phase);
8
- this.db = db;
9
- this.publicExecutor = publicExecutor;
10
- this.publicKernel = publicKernel;
11
- this.globalVariables = globalVariables;
12
- this.historicalHeader = historicalHeader;
13
- this.publicContractsDB = publicContractsDB;
14
- this.publicStateDB = publicStateDB;
15
- this.phase = phase;
16
- }
17
- async handle(tx, previousPublicKernelOutput, previousPublicKernelProof) {
18
- // add new contracts to the contracts db so that their functions may be found and called
19
- // TODO(#4073): This is catching only private deployments, when we add public ones, we'll
20
- // have to capture contracts emitted in that phase as well.
21
- // TODO(@spalladino): Should we allow emitting contracts in the fee preparation phase?
22
- this.log(`Processing tx ${tx.getTxHash()}`);
23
- await this.publicContractsDB.addNewContracts(tx);
24
- const [publicKernelOutput, publicKernelProof, newUnencryptedFunctionLogs, revertReason, returnValues] = await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof).catch(
25
- // if we throw for any reason other than simulation, we need to rollback and drop the TX
26
- async (err) => {
27
- await this.publicStateDB.rollbackToCommit();
28
- throw err;
29
- });
30
- if (revertReason) {
31
- await this.publicContractsDB.removeNewContracts(tx);
32
- await this.publicStateDB.rollbackToCheckpoint();
33
- }
34
- else {
35
- tx.unencryptedLogs.addFunctionLogs(newUnencryptedFunctionLogs);
36
- await this.publicStateDB.checkpoint();
37
- }
38
- return { publicKernelOutput, publicKernelProof, revertReason, returnValues };
39
- }
40
- }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwX2xvZ2ljX3BoYXNlX21hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL2FwcF9sb2dpY19waGFzZV9tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXRGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG9CQUFvQjtJQUM1RCxZQUNZLEVBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLFlBQTBDLEVBQzFDLGVBQWdDLEVBQ2hDLGdCQUF3QixFQUN4QixpQkFBOEMsRUFDOUMsYUFBNEIsRUFDL0IsUUFBMkIsaUJBQWlCLENBQUMsU0FBUztRQUU3RCxLQUFLLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBVHhFLE9BQUUsR0FBRixFQUFFLENBQXNCO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBOEI7UUFDMUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTZCO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQy9CLFVBQUssR0FBTCxLQUFLLENBQWlEO0lBRy9ELENBQUM7SUFFUSxLQUFLLENBQUMsTUFBTSxDQUNuQixFQUFNLEVBQ04sMEJBQTJELEVBQzNELHlCQUFnQztRQUVoQyx3RkFBd0Y7UUFDeEYseUZBQXlGO1FBQ3pGLDJEQUEyRDtRQUMzRCxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsR0FDbkcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixDQUFDLENBQUMsS0FBSztRQUNwRyx3RkFBd0Y7UUFDeEYsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDNUMsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQ0YsQ0FBQztRQUVKLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDbEQsQ0FBQzthQUFNLENBQUM7WUFDTixFQUFFLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBRUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0NBQ0YifQ==
@@ -1,23 +0,0 @@
1
- import { type Fr, MAX_NEW_NULLIFIERS_PER_TX, type MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, type MAX_NULLIFIER_READ_REQUESTS_PER_TX, MembershipWitness, type PublicDataRead, PublicDataTreeLeafPreimage, type ReadRequestContext, type SideEffectLinkedToNoteHash } from '@aztec/circuits.js';
2
- import { type Tuple } from '@aztec/foundation/serialize';
3
- import { type MerkleTreeOperations } from '@aztec/world-state';
4
- export declare class HintsBuilder {
5
- private db;
6
- constructor(db: MerkleTreeOperations);
7
- getNullifierReadRequestHints(nullifierReadRequests: Tuple<ReadRequestContext, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>, nullifiersNonRevertible: Tuple<SideEffectLinkedToNoteHash, typeof MAX_NEW_NULLIFIERS_PER_TX>, nullifiersRevertible: Tuple<SideEffectLinkedToNoteHash, typeof MAX_NEW_NULLIFIERS_PER_TX>): Promise<import("@aztec/circuits.js").NullifierReadRequestHints>;
8
- getNullifierNonExistentReadRequestHints(nullifierNonExistentReadRequests: Tuple<ReadRequestContext, typeof MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX>, nullifiersNonRevertible: Tuple<SideEffectLinkedToNoteHash, typeof MAX_NEW_NULLIFIERS_PER_TX>, nullifiersRevertible: Tuple<SideEffectLinkedToNoteHash, typeof MAX_NEW_NULLIFIERS_PER_TX>): Promise<import("@aztec/circuits.js").NullifierNonExistentReadRequestHints>;
9
- getNullifierMembershipWitness(nullifier: Fr): Promise<{
10
- membershipWitness: MembershipWitness<20>;
11
- leafPreimage: import("@aztec/foundation/trees").IndexedTreeLeafPreimage;
12
- } | undefined>;
13
- getLowNullifierMembershipWitness(nullifier: Fr): Promise<{
14
- membershipWitness: MembershipWitness<20>;
15
- leafPreimage: import("@aztec/foundation/trees").IndexedTreeLeafPreimage;
16
- }>;
17
- private getNullifierMembershipWitnessWithPreimage;
18
- getPublicDataReadsInfo(publicDataReads: PublicDataRead[]): Promise<{
19
- newPublicDataReadsWitnesses: [MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>, MembershipWitness<40>];
20
- newPublicDataReadsPreimages: [PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage, PublicDataTreeLeafPreimage];
21
- }>;
22
- }
23
- //# sourceMappingURL=hints_builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hints_builder.d.ts","sourceRoot":"","sources":["../../src/sequencer/hints_builder.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EAAE,EACP,yBAAyB,EACzB,KAAK,+CAA+C,EACpD,KAAK,kCAAkC,EAEvC,iBAAiB,EAGjB,KAAK,cAAc,EACnB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAIhC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,qBAAa,YAAY;IACX,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,oBAAoB;IAE5C,4BAA4B,CAC1B,qBAAqB,EAAE,KAAK,CAAC,kBAAkB,EAAE,OAAO,kCAAkC,CAAC,EAC3F,uBAAuB,EAAE,KAAK,CAAC,0BAA0B,EAAE,OAAO,yBAAyB,CAAC,EAC5F,oBAAoB,EAAE,KAAK,CAAC,0BAA0B,EAAE,OAAO,yBAAyB,CAAC;IAS3F,uCAAuC,CACrC,gCAAgC,EAAE,KAAK,CAAC,kBAAkB,EAAE,OAAO,+CAA+C,CAAC,EACnH,uBAAuB,EAAE,KAAK,CAAC,0BAA0B,EAAE,OAAO,yBAAyB,CAAC,EAC5F,oBAAoB,EAAE,KAAK,CAAC,0BAA0B,EAAE,OAAO,yBAAyB,CAAC;IAUrF,6BAA6B,CAAC,SAAS,EAAE,EAAE;;;;IAS3C,gCAAgC,CAAC,SAAS,EAAE,EAAE;;;;YActC,yCAAyC;IAgBjD,sBAAsB,CAAC,eAAe,EAAE,cAAc,EAAE;;;;CA6B/D"}
@@ -1,62 +0,0 @@
1
- import { MerkleTreeId } from '@aztec/circuit-types';
2
- import { MAX_NEW_NULLIFIERS_PER_TX, MAX_PUBLIC_DATA_READS_PER_TX, MembershipWitness, NULLIFIER_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, PublicDataTreeLeafPreimage, buildNullifierNonExistentReadRequestHints, buildNullifierReadRequestHints, mergeAccumulatedData, } from '@aztec/circuits.js';
3
- import { makeTuple } from '@aztec/foundation/array';
4
- export class HintsBuilder {
5
- constructor(db) {
6
- this.db = db;
7
- }
8
- getNullifierReadRequestHints(nullifierReadRequests, nullifiersNonRevertible, nullifiersRevertible) {
9
- return buildNullifierReadRequestHints(this, nullifierReadRequests, mergeAccumulatedData(MAX_NEW_NULLIFIERS_PER_TX, nullifiersNonRevertible, nullifiersRevertible));
10
- }
11
- getNullifierNonExistentReadRequestHints(nullifierNonExistentReadRequests, nullifiersNonRevertible, nullifiersRevertible) {
12
- const pendingNullifiers = mergeAccumulatedData(MAX_NEW_NULLIFIERS_PER_TX, nullifiersNonRevertible, nullifiersRevertible);
13
- return buildNullifierNonExistentReadRequestHints(this, nullifierNonExistentReadRequests, pendingNullifiers);
14
- }
15
- async getNullifierMembershipWitness(nullifier) {
16
- const index = await this.db.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer());
17
- if (index === undefined) {
18
- return;
19
- }
20
- return this.getNullifierMembershipWitnessWithPreimage(index);
21
- }
22
- async getLowNullifierMembershipWitness(nullifier) {
23
- const res = await this.db.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
24
- if (res === undefined) {
25
- throw new Error(`Cannot find the low leaf for nullifier ${nullifier.toBigInt()}.`);
26
- }
27
- const { index, alreadyPresent } = res;
28
- if (alreadyPresent) {
29
- throw new Error(`Nullifier ${nullifier.toBigInt()} already exists in the tree.`);
30
- }
31
- return this.getNullifierMembershipWitnessWithPreimage(index);
32
- }
33
- async getNullifierMembershipWitnessWithPreimage(index) {
34
- const siblingPath = await this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, index);
35
- const membershipWitness = new MembershipWitness(NULLIFIER_TREE_HEIGHT, index, siblingPath.toTuple());
36
- const leafPreimage = await this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, index);
37
- if (!leafPreimage) {
38
- throw new Error(`Cannot find the leaf preimage at index ${index}.`);
39
- }
40
- return { membershipWitness, leafPreimage };
41
- }
42
- async getPublicDataReadsInfo(publicDataReads) {
43
- const newPublicDataReadsWitnesses = makeTuple(MAX_PUBLIC_DATA_READS_PER_TX, () => MembershipWitness.empty(PUBLIC_DATA_TREE_HEIGHT, 0n));
44
- const newPublicDataReadsPreimages = makeTuple(MAX_PUBLIC_DATA_READS_PER_TX, () => PublicDataTreeLeafPreimage.empty());
45
- for (const i in publicDataReads) {
46
- const leafSlot = publicDataReads[i].leafSlot.value;
47
- const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
48
- if (!lowLeafResult) {
49
- throw new Error(`Public data tree should have one initial leaf`);
50
- }
51
- const preimage = await this.db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
52
- const path = await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
53
- newPublicDataReadsWitnesses[i] = new MembershipWitness(PUBLIC_DATA_TREE_HEIGHT, BigInt(lowLeafResult.index), path.toTuple());
54
- newPublicDataReadsPreimages[i] = preimage;
55
- }
56
- return {
57
- newPublicDataReadsWitnesses,
58
- newPublicDataReadsPreimages,
59
- };
60
- }
61
- }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGludHNfYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvaGludHNfYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUVMLHlCQUF5QixFQUd6Qiw0QkFBNEIsRUFDNUIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFFdkIsMEJBQTBCLEVBRzFCLHlDQUF5QyxFQUN6Qyw4QkFBOEIsRUFDOUIsb0JBQW9CLEdBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXBELE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQW9CLEVBQXdCO1FBQXhCLE9BQUUsR0FBRixFQUFFLENBQXNCO0lBQUcsQ0FBQztJQUVoRCw0QkFBNEIsQ0FDMUIscUJBQTJGLEVBQzNGLHVCQUE0RixFQUM1RixvQkFBeUY7UUFFekYsT0FBTyw4QkFBOEIsQ0FDbkMsSUFBSSxFQUNKLHFCQUFxQixFQUNyQixvQkFBb0IsQ0FBQyx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUMvRixDQUFDO0lBQ0osQ0FBQztJQUVELHVDQUF1QyxDQUNyQyxnQ0FBbUgsRUFDbkgsdUJBQTRGLEVBQzVGLG9CQUF5RjtRQUV6RixNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUM1Qyx5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixDQUNyQixDQUFDO1FBQ0YsT0FBTyx5Q0FBeUMsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQsS0FBSyxDQUFDLDZCQUE2QixDQUFDLFNBQWE7UUFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZ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