@aztec/sequencer-client 0.34.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 (98) 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 +4 -3
  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/sequencer/sequencer.d.ts +6 -7
  11. package/dest/sequencer/sequencer.d.ts.map +1 -1
  12. package/dest/sequencer/sequencer.js +10 -11
  13. package/dest/tx_validator/aggregate_tx_validator.d.ts +7 -0
  14. package/dest/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  15. package/dest/tx_validator/aggregate_tx_validator.js +23 -0
  16. package/dest/tx_validator/double_spend_validator.d.ts +11 -0
  17. package/dest/tx_validator/double_spend_validator.d.ts.map +1 -0
  18. package/dest/tx_validator/double_spend_validator.js +50 -0
  19. package/dest/tx_validator/gas_validator.d.ts +12 -0
  20. package/dest/tx_validator/gas_validator.d.ts.map +1 -0
  21. package/dest/tx_validator/gas_validator.js +62 -0
  22. package/dest/tx_validator/metadata_validator.d.ts +8 -0
  23. package/dest/tx_validator/metadata_validator.d.ts.map +1 -0
  24. package/dest/tx_validator/metadata_validator.js +50 -0
  25. package/dest/tx_validator/phases_validator.d.ts +13 -0
  26. package/dest/tx_validator/phases_validator.d.ts.map +1 -0
  27. package/dest/tx_validator/phases_validator.js +73 -0
  28. package/dest/tx_validator/tx_validator_factory.d.ts +13 -0
  29. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -0
  30. package/dest/tx_validator/tx_validator_factory.js +21 -0
  31. package/package.json +14 -13
  32. package/src/client/sequencer-client.ts +2 -3
  33. package/src/config.ts +93 -7
  34. package/src/global_variable_builder/global_builder.ts +3 -2
  35. package/src/index.ts +0 -1
  36. package/src/sequencer/sequencer.ts +27 -20
  37. package/src/tx_validator/aggregate_tx_validator.ts +24 -0
  38. package/src/tx_validator/double_spend_validator.ts +65 -0
  39. package/src/tx_validator/gas_validator.ts +81 -0
  40. package/src/tx_validator/metadata_validator.ts +60 -0
  41. package/src/tx_validator/phases_validator.ts +101 -0
  42. package/src/tx_validator/tx_validator_factory.ts +37 -0
  43. package/dest/sequencer/abstract_phase_manager.d.ts +0 -77
  44. package/dest/sequencer/abstract_phase_manager.d.ts.map +0 -1
  45. package/dest/sequencer/abstract_phase_manager.js +0 -307
  46. package/dest/sequencer/app_logic_phase_manager.d.ts +0 -28
  47. package/dest/sequencer/app_logic_phase_manager.d.ts.map +0 -1
  48. package/dest/sequencer/app_logic_phase_manager.js +0 -41
  49. package/dest/sequencer/hints_builder.d.ts +0 -23
  50. package/dest/sequencer/hints_builder.d.ts.map +0 -1
  51. package/dest/sequencer/hints_builder.js +0 -62
  52. package/dest/sequencer/phase_manager_factory.d.ts +0 -18
  53. package/dest/sequencer/phase_manager_factory.d.ts.map +0 -1
  54. package/dest/sequencer/phase_manager_factory.js +0 -56
  55. package/dest/sequencer/public_processor.d.ts +0 -54
  56. package/dest/sequencer/public_processor.d.ts.map +0 -1
  57. package/dest/sequencer/public_processor.js +0 -142
  58. package/dest/sequencer/setup_phase_manager.d.ts +0 -28
  59. package/dest/sequencer/setup_phase_manager.d.ts.map +0 -1
  60. package/dest/sequencer/setup_phase_manager.js +0 -30
  61. package/dest/sequencer/tail_phase_manager.d.ts +0 -29
  62. package/dest/sequencer/tail_phase_manager.d.ts.map +0 -1
  63. package/dest/sequencer/tail_phase_manager.js +0 -52
  64. package/dest/sequencer/teardown_phase_manager.d.ts +0 -28
  65. package/dest/sequencer/teardown_phase_manager.d.ts.map +0 -1
  66. package/dest/sequencer/teardown_phase_manager.js +0 -30
  67. package/dest/sequencer/tx_validator.d.ts +0 -29
  68. package/dest/sequencer/tx_validator.d.ts.map +0 -1
  69. package/dest/sequencer/tx_validator.js +0 -174
  70. package/dest/sequencer/tx_validator_factory.d.ts +0 -12
  71. package/dest/sequencer/tx_validator_factory.d.ts.map +0 -1
  72. package/dest/sequencer/tx_validator_factory.js +0 -17
  73. package/dest/sequencer/utils.d.ts +0 -8
  74. package/dest/sequencer/utils.d.ts.map +0 -1
  75. package/dest/sequencer/utils.js +0 -29
  76. package/dest/simulator/index.d.ts +0 -31
  77. package/dest/simulator/index.d.ts.map +0 -1
  78. package/dest/simulator/index.js +0 -2
  79. package/dest/simulator/public_executor.d.ts +0 -79
  80. package/dest/simulator/public_executor.d.ts.map +0 -1
  81. package/dest/simulator/public_executor.js +0 -198
  82. package/dest/simulator/public_kernel.d.ts +0 -37
  83. package/dest/simulator/public_kernel.d.ts.map +0 -1
  84. package/dest/simulator/public_kernel.js +0 -97
  85. package/src/sequencer/abstract_phase_manager.ts +0 -549
  86. package/src/sequencer/app_logic_phase_manager.ts +0 -62
  87. package/src/sequencer/hints_builder.ts +0 -119
  88. package/src/sequencer/phase_manager_factory.ts +0 -126
  89. package/src/sequencer/public_processor.ts +0 -209
  90. package/src/sequencer/setup_phase_manager.ts +0 -50
  91. package/src/sequencer/tail_phase_manager.ts +0 -111
  92. package/src/sequencer/teardown_phase_manager.ts +0 -50
  93. package/src/sequencer/tx_validator.ts +0 -265
  94. package/src/sequencer/tx_validator_factory.ts +0 -32
  95. package/src/sequencer/utils.ts +0 -31
  96. package/src/simulator/index.ts +0 -36
  97. package/src/simulator/public_executor.ts +0 -267
  98. package/src/simulator/public_kernel.ts +0 -139
@@ -1,37 +0,0 @@
1
- import { type KernelCircuitPublicInputs, type PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, type PublicKernelTailCircuitPrivateInputs } from '@aztec/circuits.js';
2
- import { type SimulationProvider } from '@aztec/simulator';
3
- import { type PublicKernelCircuitSimulator } from './index.js';
4
- /**
5
- * Implements the PublicKernelCircuitSimulator.
6
- */
7
- export declare class RealPublicKernelCircuitSimulator implements PublicKernelCircuitSimulator {
8
- private simulator;
9
- private log;
10
- private wasmSimulator;
11
- constructor(simulator: SimulationProvider);
12
- /**
13
- * Simulates the public kernel setup circuit from its inputs.
14
- * @param input - Inputs to the circuit.
15
- * @returns The public inputs as outputs of the simulation.
16
- */
17
- publicKernelCircuitSetup(input: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
18
- /**
19
- * Simulates the public kernel app logic circuit from its inputs.
20
- * @param input - Inputs to the circuit.
21
- * @returns The public inputs as outputs of the simulation.
22
- */
23
- publicKernelCircuitAppLogic(input: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
24
- /**
25
- * Simulates the public kernel teardown circuit from its inputs.
26
- * @param input - Inputs to the circuit.
27
- * @returns The public inputs as outputs of the simulation.
28
- */
29
- publicKernelCircuitTeardown(input: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
30
- /**
31
- * Simulates the public kernel tail circuit from its inputs.
32
- * @param input - Inputs to the circuit.
33
- * @returns The public inputs as outputs of the simulation.
34
- */
35
- publicKernelCircuitTail(input: PublicKernelTailCircuitPrivateInputs): Promise<KernelCircuitPublicInputs>;
36
- }
37
- //# sourceMappingURL=public_kernel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public_kernel.d.ts","sourceRoot":"","sources":["../../src/simulator/public_kernel.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,EAC1C,MAAM,oBAAoB,CAAC;AAiB5B,OAAO,EAAE,KAAK,kBAAkB,EAAiB,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,qBAAa,gCAAiC,YAAW,4BAA4B;IAMvE,OAAO,CAAC,SAAS;IAL7B,OAAO,CAAC,GAAG,CAAsD;IAGjE,OAAO,CAAC,aAAa,CAAsC;gBAEvC,SAAS,EAAE,kBAAkB;IAEjD;;;;OAIG;IACU,wBAAwB,CACnC,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,+BAA+B,CAAC;IAmB3C;;;;OAIG;IACU,2BAA2B,CACtC,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,+BAA+B,CAAC;IAmB3C;;;;OAIG;IACU,2BAA2B,CACtC,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,+BAA+B,CAAC;IAmB3C;;;;OAIG;IACU,uBAAuB,CAClC,KAAK,EAAE,oCAAoC,GAC1C,OAAO,CAAC,yBAAyB,CAAC;CAetC"}
@@ -1,97 +0,0 @@
1
- import { createDebugLogger } from '@aztec/foundation/log';
2
- import { elapsed } from '@aztec/foundation/timer';
3
- import { PublicKernelAppLogicArtifact, PublicKernelSetupArtifact, PublicKernelTailArtifact, PublicKernelTeardownArtifact, convertPublicInnerRollupInputsToWitnessMap, convertPublicInnerRollupOutputFromWitnessMap, convertPublicSetupRollupInputsToWitnessMap, convertPublicSetupRollupOutputFromWitnessMap, convertPublicTailInputsToWitnessMap, convertPublicTailOutputFromWitnessMap, convertPublicTeardownRollupInputsToWitnessMap, convertPublicTeardownRollupOutputFromWitnessMap, } from '@aztec/noir-protocol-circuits-types';
4
- import { WASMSimulator } from '@aztec/simulator';
5
- /**
6
- * Implements the PublicKernelCircuitSimulator.
7
- */
8
- export class RealPublicKernelCircuitSimulator {
9
- constructor(simulator) {
10
- this.simulator = simulator;
11
- this.log = createDebugLogger('aztec:public-kernel-simulator');
12
- // Some circuits are so small it is faster to use WASM
13
- this.wasmSimulator = new WASMSimulator();
14
- }
15
- /**
16
- * Simulates the public kernel setup circuit from its inputs.
17
- * @param input - Inputs to the circuit.
18
- * @returns The public inputs as outputs of the simulation.
19
- */
20
- async publicKernelCircuitSetup(input) {
21
- if (!input.previousKernel.publicInputs.needsSetup) {
22
- throw new Error(`Expected previous kernel inputs to need setup`);
23
- }
24
- const inputWitness = convertPublicSetupRollupInputsToWitnessMap(input);
25
- const [duration, witness] = await elapsed(() => this.wasmSimulator.simulateCircuit(inputWitness, PublicKernelSetupArtifact));
26
- const result = convertPublicSetupRollupOutputFromWitnessMap(witness);
27
- this.log.debug(`Simulated public kernel setup circuit`, {
28
- eventName: 'circuit-simulation',
29
- circuitName: 'public-kernel-setup',
30
- duration,
31
- inputSize: input.toBuffer().length,
32
- outputSize: result.toBuffer().length,
33
- });
34
- return result;
35
- }
36
- /**
37
- * Simulates the public kernel app logic circuit from its inputs.
38
- * @param input - Inputs to the circuit.
39
- * @returns The public inputs as outputs of the simulation.
40
- */
41
- async publicKernelCircuitAppLogic(input) {
42
- if (!input.previousKernel.publicInputs.needsAppLogic) {
43
- throw new Error(`Expected previous kernel inputs to need app logic`);
44
- }
45
- const inputWitness = convertPublicInnerRollupInputsToWitnessMap(input);
46
- const [duration, witness] = await elapsed(() => this.wasmSimulator.simulateCircuit(inputWitness, PublicKernelAppLogicArtifact));
47
- const result = convertPublicInnerRollupOutputFromWitnessMap(witness);
48
- this.log.debug(`Simulated public kernel app logic circuit`, {
49
- eventName: 'circuit-simulation',
50
- circuitName: 'public-kernel-app-logic',
51
- duration,
52
- inputSize: input.toBuffer().length,
53
- outputSize: result.toBuffer().length,
54
- });
55
- return result;
56
- }
57
- /**
58
- * Simulates the public kernel teardown circuit from its inputs.
59
- * @param input - Inputs to the circuit.
60
- * @returns The public inputs as outputs of the simulation.
61
- */
62
- async publicKernelCircuitTeardown(input) {
63
- if (!input.previousKernel.publicInputs.needsTeardown) {
64
- throw new Error(`Expected previous kernel inputs to need teardown`);
65
- }
66
- const inputWitness = convertPublicTeardownRollupInputsToWitnessMap(input);
67
- const [duration, witness] = await elapsed(() => this.wasmSimulator.simulateCircuit(inputWitness, PublicKernelTeardownArtifact));
68
- const result = convertPublicTeardownRollupOutputFromWitnessMap(witness);
69
- this.log.debug(`Simulated public kernel teardown circuit`, {
70
- eventName: 'circuit-simulation',
71
- circuitName: 'public-kernel-teardown',
72
- duration,
73
- inputSize: input.toBuffer().length,
74
- outputSize: result.toBuffer().length,
75
- });
76
- return result;
77
- }
78
- /**
79
- * Simulates the public kernel tail circuit from its inputs.
80
- * @param input - Inputs to the circuit.
81
- * @returns The public inputs as outputs of the simulation.
82
- */
83
- async publicKernelCircuitTail(input) {
84
- const inputWitness = convertPublicTailInputsToWitnessMap(input);
85
- const [duration, witness] = await elapsed(() => this.wasmSimulator.simulateCircuit(inputWitness, PublicKernelTailArtifact));
86
- const result = convertPublicTailOutputFromWitnessMap(witness);
87
- this.log.debug(`Simulated public kernel tail circuit`, {
88
- eventName: 'circuit-simulation',
89
- circuitName: 'public-kernel-tail',
90
- duration,
91
- inputSize: input.toBuffer().length,
92
- outputSize: result.toBuffer().length,
93
- });
94
- return result;
95
- }
96
- }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2tlcm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3IvcHVibGljX2tlcm5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUNMLDRCQUE0QixFQUM1Qix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLDRCQUE0QixFQUM1QiwwQ0FBMEMsRUFDMUMsNENBQTRDLEVBQzVDLDBDQUEwQyxFQUMxQyw0Q0FBNEMsRUFDNUMsbUNBQW1DLEVBQ25DLHFDQUFxQyxFQUNyQyw2Q0FBNkMsRUFDN0MsK0NBQStDLEdBQ2hELE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUEyQixhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUkxRTs7R0FFRztBQUNILE1BQU0sT0FBTyxnQ0FBZ0M7SUFNM0MsWUFBb0IsU0FBNkI7UUFBN0IsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFMekMsUUFBRyxHQUFHLGlCQUFpQixDQUFDLCtCQUErQixDQUFDLENBQUM7UUFFakUsc0RBQXNEO1FBQzlDLGtCQUFhLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFFUCxDQUFDO0lBRXJEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsd0JBQXdCLENBQ25DLEtBQXVDO1FBRXZDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLDBDQUEwQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMs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