@aztec/sequencer-client 0.26.5 → 0.26.6

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 (57) hide show
  1. package/dest/block_builder/solo_block_builder.d.ts.map +1 -1
  2. package/dest/block_builder/solo_block_builder.js +8 -5
  3. package/dest/index.d.ts +7 -7
  4. package/dest/index.d.ts.map +1 -1
  5. package/dest/index.js +8 -8
  6. package/dest/sequencer/abstract_phase_manager.d.ts +12 -15
  7. package/dest/sequencer/abstract_phase_manager.d.ts.map +1 -1
  8. package/dest/sequencer/abstract_phase_manager.js +32 -24
  9. package/dest/sequencer/app_logic_phase_manager.d.ts +1 -6
  10. package/dest/sequencer/app_logic_phase_manager.d.ts.map +1 -1
  11. package/dest/sequencer/app_logic_phase_manager.js +11 -8
  12. package/dest/sequencer/hints_builder.d.ts +13 -0
  13. package/dest/sequencer/hints_builder.d.ts.map +1 -0
  14. package/dest/sequencer/hints_builder.js +21 -0
  15. package/dest/sequencer/index.d.ts +1 -1
  16. package/dest/sequencer/index.d.ts.map +1 -1
  17. package/dest/sequencer/index.js +2 -2
  18. package/dest/sequencer/phase_manager_factory.d.ts.map +1 -1
  19. package/dest/sequencer/phase_manager_factory.js +5 -1
  20. package/dest/sequencer/processed_tx.d.ts +37 -2
  21. package/dest/sequencer/processed_tx.d.ts.map +1 -1
  22. package/dest/sequencer/processed_tx.js +67 -9
  23. package/dest/sequencer/public_processor.d.ts.map +1 -1
  24. package/dest/sequencer/public_processor.js +15 -9
  25. package/dest/sequencer/sequencer.d.ts.map +1 -1
  26. package/dest/sequencer/sequencer.js +1 -2
  27. package/dest/sequencer/setup_phase_manager.d.ts +1 -6
  28. package/dest/sequencer/setup_phase_manager.d.ts.map +1 -1
  29. package/dest/sequencer/setup_phase_manager.js +3 -5
  30. package/dest/sequencer/tail_phase_manager.d.ts +28 -0
  31. package/dest/sequencer/tail_phase_manager.d.ts.map +1 -0
  32. package/dest/sequencer/tail_phase_manager.js +32 -0
  33. package/dest/sequencer/teardown_phase_manager.d.ts +1 -6
  34. package/dest/sequencer/teardown_phase_manager.d.ts.map +1 -1
  35. package/dest/sequencer/teardown_phase_manager.js +3 -4
  36. package/dest/simulator/index.d.ts +7 -1
  37. package/dest/simulator/index.d.ts.map +1 -1
  38. package/dest/simulator/index.js +1 -1
  39. package/dest/simulator/public_kernel.d.ts +7 -1
  40. package/dest/simulator/public_kernel.d.ts.map +1 -1
  41. package/dest/simulator/public_kernel.js +22 -4
  42. package/package.json +13 -13
  43. package/src/block_builder/solo_block_builder.ts +6 -32
  44. package/src/index.ts +7 -7
  45. package/src/sequencer/abstract_phase_manager.ts +58 -48
  46. package/src/sequencer/app_logic_phase_manager.ts +12 -22
  47. package/src/sequencer/hints_builder.ts +56 -0
  48. package/src/sequencer/index.ts +1 -1
  49. package/src/sequencer/phase_manager_factory.ts +12 -0
  50. package/src/sequencer/processed_tx.ts +147 -17
  51. package/src/sequencer/public_processor.ts +25 -13
  52. package/src/sequencer/sequencer.ts +0 -1
  53. package/src/sequencer/setup_phase_manager.ts +5 -19
  54. package/src/sequencer/tail_phase_manager.ts +49 -0
  55. package/src/sequencer/teardown_phase_manager.ts +5 -18
  56. package/src/simulator/index.ts +7 -0
  57. package/src/simulator/public_kernel.ts +35 -5
@@ -0,0 +1,28 @@
1
+ import { Tx } from '@aztec/circuit-types';
2
+ import { GlobalVariables, Header, Proof, PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
3
+ import { PublicExecutor, PublicStateDB } from '@aztec/simulator';
4
+ import { MerkleTreeOperations } from '@aztec/world-state';
5
+ import { PublicProver } from '../prover/index.js';
6
+ import { PublicKernelCircuitSimulator } from '../simulator/index.js';
7
+ import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js';
8
+ import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
9
+ import { FailedTx } from './processed_tx.js';
10
+ export declare class TailPhaseManager extends AbstractPhaseManager {
11
+ protected db: MerkleTreeOperations;
12
+ protected publicExecutor: PublicExecutor;
13
+ protected publicKernel: PublicKernelCircuitSimulator;
14
+ protected publicProver: PublicProver;
15
+ protected globalVariables: GlobalVariables;
16
+ protected historicalHeader: Header;
17
+ protected publicContractsDB: ContractsDataSourcePublicDB;
18
+ protected publicStateDB: PublicStateDB;
19
+ readonly phase: PublicKernelPhase;
20
+ constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, 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: undefined;
25
+ }>;
26
+ rollback(tx: Tx, err: unknown): Promise<FailedTx>;
27
+ }
28
+ //# sourceMappingURL=tail_phase_manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/tail_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,qBAAa,gBAAiB,SAAQ,oBAAoB;IAEtD,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;aACtB,KAAK,EAAE,iBAAiB;gBAR9B,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,EACtB,KAAK,GAAE,iBAA0C;IAK7D,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,KAAK;;;;;IAc5G,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAQxD"}
@@ -0,0 +1,32 @@
1
+ import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js';
2
+ export class TailPhaseManager extends AbstractPhaseManager {
3
+ constructor(db, publicExecutor, publicKernel, publicProver, globalVariables, historicalHeader, publicContractsDB, publicStateDB, phase = PublicKernelPhase.TAIL) {
4
+ super(db, publicExecutor, publicKernel, publicProver, globalVariables, historicalHeader, phase);
5
+ this.db = db;
6
+ this.publicExecutor = publicExecutor;
7
+ this.publicKernel = publicKernel;
8
+ this.publicProver = publicProver;
9
+ this.globalVariables = globalVariables;
10
+ this.historicalHeader = historicalHeader;
11
+ this.publicContractsDB = publicContractsDB;
12
+ this.publicStateDB = publicStateDB;
13
+ this.phase = phase;
14
+ }
15
+ async handle(tx, previousPublicKernelOutput, previousPublicKernelProof) {
16
+ this.log(`Processing tx ${tx.getTxHash()}`);
17
+ this.log(`Executing tail circuit for tx ${tx.getTxHash()}`);
18
+ const [publicKernelOutput, publicKernelProof] = await this.runKernelCircuit(previousPublicKernelOutput, previousPublicKernelProof);
19
+ // commit the state updates from this transaction
20
+ await this.publicStateDB.commit();
21
+ return { publicKernelOutput, publicKernelProof, revertReason: undefined };
22
+ }
23
+ async rollback(tx, err) {
24
+ this.log.warn(`Error processing tx ${tx.getTxHash()}: ${err}`);
25
+ await this.publicStateDB.rollback();
26
+ return {
27
+ tx,
28
+ error: err instanceof Error ? err : new Error('Unknown error'),
29
+ };
30
+ }
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpbF9waGFzZV9tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci90YWlsX3BoYXNlX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdEYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLG9CQUFvQjtJQUN4RCxZQUNZLEVBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLFlBQTBDLEVBQzFDLFlBQTBCLEVBQzFCLGVBQWdDLEVBQ2hDLGdCQUF3QixFQUN4QixpQkFBOEMsRUFDOUMsYUFBNEIsRUFDdEIsUUFBMkIsaUJBQWlCLENBQUMsSUFBSTtRQUVqRSxLQUFLLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQVZ0RixPQUFFLEdBQUYsRUFBRSxDQUFzQjtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQThCO1FBQzFDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVE7UUFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE2QjtRQUM5QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUE0QztJQUduRSxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFNLEVBQUUsMEJBQTJELEVBQUUseUJBQWdDO1FBQ2hILElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FDekUsMEJBQTBCLEVBQzFCLHlCQUF5QixDQUMxQixDQUFDO1FBRUYsaURBQWlEO1FBQ2pELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQU0sRUFBRSxHQUFZO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEMsT0FBTztZQUNMLEVBQUU7WUFDRixLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUM7U0FDL0QsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
@@ -22,14 +22,9 @@ export declare class TeardownPhaseManager extends AbstractPhaseManager {
22
22
  phase: PublicKernelPhase;
23
23
  constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, phase?: PublicKernelPhase);
24
24
  handle(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousPublicKernelProof: Proof): Promise<{
25
- /**
26
- * the output of the public kernel circuit for this phase
27
- */
28
25
  publicKernelOutput: PublicKernelCircuitPublicInputs;
29
- /**
30
- * the proof of the public kernel circuit for this phase
31
- */
32
26
  publicKernelProof: Proof;
27
+ revertReason: import("@aztec/circuit-types").SimulationError | undefined;
33
28
  }>;
34
29
  rollback(tx: Tx, err: unknown): Promise<FailedTx>;
35
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"teardown_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/teardown_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,iBAA8C;IAKxD,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;IAgBI,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAQxD"}
1
+ {"version":3,"file":"teardown_phase_manager.d.ts","sourceRoot":"","sources":["../../src/sequencer/teardown_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,iBAA8C;IAK/C,MAAM,CACnB,EAAE,EAAE,EAAE,EACN,0BAA0B,EAAE,+BAA+B,EAC3D,yBAAyB,EAAE,KAAK;;;;;IAa5B,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAQxD"}
@@ -17,12 +17,11 @@ export class TeardownPhaseManager extends AbstractPhaseManager {
17
17
  }
18
18
  async handle(tx, previousPublicKernelOutput, previousPublicKernelProof) {
19
19
  this.log(`Processing tx ${tx.getTxHash()}`);
20
- this.log(`Executing enqueued public calls for tx ${tx.getTxHash()}`);
21
- const [publicKernelOutput, publicKernelProof, newUnencryptedFunctionLogs] = await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof);
20
+ const [publicKernelOutput, publicKernelProof, newUnencryptedFunctionLogs, revertReason] = await this.processEnqueuedPublicCalls(tx, previousPublicKernelOutput, previousPublicKernelProof);
22
21
  tx.unencryptedLogs.addFunctionLogs(newUnencryptedFunctionLogs);
23
22
  // commit the state updates from this transaction
24
23
  await this.publicStateDB.commit();
25
- return { publicKernelOutput, publicKernelProof };
24
+ return { publicKernelOutput, publicKernelProof, revertReason };
26
25
  }
27
26
  async rollback(tx, err) {
28
27
  this.log.warn(`Error processing tx ${tx.getTxHash()}: ${err}`);
@@ -33,4 +32,4 @@ export class TeardownPhaseManager extends AbstractPhaseManager {
33
32
  };
34
33
  }
35
34
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcmRvd25fcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvdGVhcmRvd25fcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd0Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUFDNUQsWUFDWSxFQUF3QixFQUN4QixjQUE4QixFQUM5QixZQUEwQyxFQUMxQyxZQUEwQixFQUMxQixlQUFnQyxFQUNoQyxnQkFBd0IsRUFDeEIsaUJBQThDLEVBQzlDLGFBQTRCLEVBQy9CLFFBQTJCLGlCQUFpQixDQUFDLFFBQVE7UUFFNUQsS0FBSyxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFWdEYsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUE4QjtRQUMxQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFDOUMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0Q7SUFHOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQ1YsRUFBTSxFQUNOLDBCQUEyRCxFQUMzRCx5QkFBZ0M7UUFXaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUMvRyxFQUFFLEVBQ0YsMEJBQTBCLEVBQzFCLHlCQUF5QixDQUMxQixDQUFDO1FBQ0YsRUFBRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUUvRCxpREFBaUQ7UUFDakQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWxDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQU0sRUFBRSxHQUFZO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEMsT0FBTztZQUNMLEVBQUU7WUFDRixLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUM7U0FDL0QsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcmRvd25fcGhhc2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvdGVhcmRvd25fcGhhc2VfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd0Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUFDNUQsWUFDWSxFQUF3QixFQUN4QixjQUE4QixFQUM5QixZQUEwQyxFQUMxQyxZQUEwQixFQUMxQixlQUFnQyxFQUNoQyxnQkFBd0IsRUFDeEIsaUJBQThDLEVBQzlDLGFBQTRCLEVBQy9CLFFBQTJCLGlCQUFpQixDQUFDLFFBQVE7UUFFNUQsS0FBSyxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFWdEYsT0FBRSxHQUFGLEVBQUUsQ0FBc0I7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUE4QjtRQUMxQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFDOUMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0Q7SUFHOUQsQ0FBQztJQUVRLEtBQUssQ0FBQyxNQUFNLENBQ25CLEVBQU0sRUFDTiwwQkFBMkQsRUFDM0QseUJBQWdDO1FBRWhDLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLFlBQVksQ0FBQyxHQUNyRixNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUNuRyxFQUFFLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRS9ELGlEQUFpRDtRQUNqRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFbEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQU0sRUFBRSxHQUFZO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEMsT0FBTztZQUNMLEVBQUU7WUFDRixLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUM7U0FDL0QsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
@@ -1,4 +1,4 @@
1
- import { BaseOrMergeRollupPublicInputs, BaseRollupInputs, MergeRollupInputs, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, RootRollupInputs, RootRollupPublicInputs } from '@aztec/circuits.js';
1
+ import { BaseOrMergeRollupPublicInputs, BaseRollupInputs, MergeRollupInputs, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, PublicKernelTailCircuitPrivateInputs, RootRollupInputs, RootRollupPublicInputs } from '@aztec/circuits.js';
2
2
  /**
3
3
  * Circuit simulator for the rollup circuits.
4
4
  */
@@ -44,6 +44,12 @@ export interface PublicKernelCircuitSimulator {
44
44
  * @returns The public inputs as outputs of the simulation.
45
45
  */
46
46
  publicKernelCircuitTeardown(inputs: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
47
+ /**
48
+ * Simulates the public kernel tail circuit from its inputs.
49
+ * @param inputs - Inputs to the circuit.
50
+ * @returns The public inputs as outputs of the simulation.
51
+ */
52
+ publicKernelCircuitTail(inputs: PublicKernelTailCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
47
53
  }
48
54
  export * from './acvm_wasm.js';
49
55
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simulator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,gCAAgC,EAChC,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACnF;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACrF;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,wBAAwB,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC7G;;;;OAIG;IACH,2BAA2B,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAChH;;;;OAIG;IACH,2BAA2B,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;CACjH;AACD,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simulator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,gCAAgC,EAChC,+BAA+B,EAC/B,oCAAoC,EACpC,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACnF;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACrF;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,wBAAwB,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC7G;;;;OAIG;IACH,2BAA2B,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAChH;;;;OAIG;IACH,2BAA2B,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAChH;;;;OAIG;IACH,uBAAuB,CAAC,MAAM,EAAE,oCAAoC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;CACjH;AACD,cAAc,gBAAgB,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export * from './acvm_wasm.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2ltdWxhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlEQSxjQUFjLGdCQUFnQixDQUFDIn0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2ltdWxhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdFQSxjQUFjLGdCQUFnQixDQUFDIn0=
@@ -1,4 +1,4 @@
1
- import { PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
1
+ import { PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, PublicKernelTailCircuitPrivateInputs } from '@aztec/circuits.js';
2
2
  import { PublicKernelCircuitSimulator } from './index.js';
3
3
  import { SimulationProvider } from './simulation_provider.js';
4
4
  /**
@@ -27,5 +27,11 @@ export declare class RealPublicKernelCircuitSimulator implements PublicKernelCir
27
27
  * @returns The public inputs as outputs of the simulation.
28
28
  */
29
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<PublicKernelCircuitPublicInputs>;
30
36
  }
31
37
  //# sourceMappingURL=public_kernel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public_kernel.d.ts","sourceRoot":"","sources":["../../src/simulator/public_kernel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAevG,OAAO,EAAE,4BAA4B,EAAiB,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;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;CAkB5C"}
1
+ {"version":3,"file":"public_kernel.d.ts","sourceRoot":"","sources":["../../src/simulator/public_kernel.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,oCAAoC,EACrC,MAAM,oBAAoB,CAAC;AAkB5B,OAAO,EAAE,4BAA4B,EAAiB,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;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,+BAA+B,CAAC;CAe5C"}
@@ -1,6 +1,6 @@
1
1
  import { createDebugLogger } from '@aztec/foundation/log';
2
2
  import { elapsed } from '@aztec/foundation/timer';
3
- import { PublicKernelAppLogicArtifact, PublicKernelSetupArtifact, PublicKernelTeardownArtifact, convertPublicInnerRollupInputsToWitnessMap, convertPublicInnerRollupOutputFromWitnessMap, convertPublicSetupRollupInputsToWitnessMap, convertPublicSetupRollupOutputFromWitnessMap, convertPublicTailRollupInputsToWitnessMap, convertPublicTailRollupOutputFromWitnessMap, } from '@aztec/noir-protocol-circuits-types';
3
+ import { PublicKernelAppLogicArtifact, PublicKernelSetupArtifact, PublicKernelTailArtifact, PublicKernelTeardownArtifact, convertPublicInnerRollupInputsToWitnessMap, convertPublicInnerRollupOutputFromWitnessMap, convertPublicSetupRollupInputsToWitnessMap, convertPublicSetupRollupOutputFromWitnessMap, convertPublicTailInputsToWitnessMap, convertPublicTailOutputFromWitnessMap, convertPublicTeardownRollupInputsToWitnessMap, convertPublicTeardownRollupOutputFromWitnessMap, } from '@aztec/noir-protocol-circuits-types';
4
4
  import { WASMSimulator } from './index.js';
5
5
  /**
6
6
  * Implements the PublicKernelCircuitSimulator.
@@ -63,9 +63,9 @@ export class RealPublicKernelCircuitSimulator {
63
63
  if (!input.previousKernel.publicInputs.needsTeardown) {
64
64
  throw new Error(`Expected previous kernel inputs to need teardown`);
65
65
  }
66
- const inputWitness = convertPublicTailRollupInputsToWitnessMap(input);
66
+ const inputWitness = convertPublicTeardownRollupInputsToWitnessMap(input);
67
67
  const [duration, witness] = await elapsed(() => this.wasmSimulator.simulateCircuit(inputWitness, PublicKernelTeardownArtifact));
68
- const result = convertPublicTailRollupOutputFromWitnessMap(witness);
68
+ const result = convertPublicTeardownRollupOutputFromWitnessMap(witness);
69
69
  this.log(`Simulated public kernel teardown circuit`, {
70
70
  eventName: 'circuit-simulation',
71
71
  circuitName: 'public-kernel-teardown',
@@ -75,5 +75,23 @@ export class RealPublicKernelCircuitSimulator {
75
75
  });
76
76
  return result;
77
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(`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
+ }
78
96
  }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2tlcm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3IvcHVibGljX2tlcm5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUNMLDRCQUE0QixFQUM1Qix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzVCLDBDQUEwQyxFQUMxQyw0Q0FBNEMsRUFDNUMsMENBQTBDLEVBQzFDLDRDQUE0QyxFQUM1Qyx5Q0FBeUMsRUFDekMsMkNBQTJDLEdBQzVDLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUFnQyxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHekU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0NBQWdDO0lBTTNDLFlBQW9CLFNBQTZCO1FBQTdCLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBTHpDLFFBQUcsR0FBRyxpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBRWpFLHNEQUFzRDtRQUM5QyxrQkFBYSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO0lBRVAsQ0FBQztJQUVyRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLHdCQUF3QixDQUNuQyxLQUF1QztRQUV2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRywwQ0FBMEMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FDNUUsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLDRDQUE0QyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUU7WUFDaEQsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixXQUFXLEVBQUUscUJBQXFCO1lBQ2xDLFFBQVE7WUFDUixTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07WUFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1NBQ0osQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLDJCQUEyQixDQUN0QyxLQUF1QztRQUV2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRywwQ0FBMEMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsNEJBQTRCLENBQUMsQ0FDL0UsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLDRDQUE0QyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsMkNBQTJDLEVBQUU7WUFDcEQsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixXQUFXLEVBQUUseUJBQXlCO1lBQ3RDLFFBQVE7WUFDUixTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07WUFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1NBQ0osQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLDJCQUEyQixDQUN0QyxLQUF1QztRQUV2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyx5Q0FBeUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsNEJBQTRCLENBQUMsQ0FDL0UsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLDJDQUEyQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsMENBQTBDLEVBQUU7WUFDbkQsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixXQUFXLEVBQUUsd0JBQXdCO1lBQ3JDLFFBQVE7WUFDUixTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07WUFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1NBQ0osQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiJ9
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2tlcm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3IvcHVibGljX2tlcm5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUNMLDRCQUE0QixFQUM1Qix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLDRCQUE0QixFQUM1QiwwQ0FBMEMsRUFDMUMsNENBQTRDLEVBQzVDLDBDQUEwQyxFQUMxQyw0Q0FBNEMsRUFDNUMsbUNBQW1DLEVBQ25DLHFDQUFxQyxFQUNyQyw2Q0FBNkMsRUFDN0MsK0NBQStDLEdBQ2hELE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUFnQyxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHekU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0NBQWdDO0lBTTNDLFlBQW9CLFNBQTZCO1FBQTdCLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBTHpDLFFBQUcsR0FBRyxpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBRWpFLHNEQUFzRDtRQUM5QyxrQkFBYSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO0lBRVAsQ0FBQztJQUVyRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLHdCQUF3QixDQUNuQyxLQUF1QztRQUV2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRywwQ0FBMEMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "0.26.5",
3
+ "version": "0.26.6",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "typedocOptions": {
@@ -21,18 +21,18 @@
21
21
  "test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
22
22
  },
23
23
  "dependencies": {
24
- "@aztec/circuit-types": "0.26.5",
25
- "@aztec/circuits.js": "0.26.5",
26
- "@aztec/ethereum": "0.26.5",
27
- "@aztec/foundation": "0.26.5",
28
- "@aztec/l1-artifacts": "0.26.5",
29
- "@aztec/merkle-tree": "0.26.5",
30
- "@aztec/noir-protocol-circuits-types": "0.26.5",
31
- "@aztec/p2p": "0.26.5",
32
- "@aztec/protocol-contracts": "0.26.5",
33
- "@aztec/simulator": "0.26.5",
34
- "@aztec/types": "0.26.5",
35
- "@aztec/world-state": "0.26.5",
24
+ "@aztec/circuit-types": "0.26.6",
25
+ "@aztec/circuits.js": "0.26.6",
26
+ "@aztec/ethereum": "0.26.6",
27
+ "@aztec/foundation": "0.26.6",
28
+ "@aztec/l1-artifacts": "0.26.6",
29
+ "@aztec/merkle-tree": "0.26.6",
30
+ "@aztec/noir-protocol-circuits-types": "0.26.6",
31
+ "@aztec/p2p": "0.26.6",
32
+ "@aztec/protocol-contracts": "0.26.6",
33
+ "@aztec/simulator": "0.26.6",
34
+ "@aztec/types": "0.26.6",
35
+ "@aztec/world-state": "0.26.6",
36
36
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
37
37
  "@noir-lang/types": "portal:../../noir/packages/types",
38
38
  "lodash.chunk": "^4.2.0",
@@ -1,4 +1,4 @@
1
- import { Body, ContractData, L2Block, MerkleTreeId, PublicDataWrite, TxEffect, TxL2Logs } from '@aztec/circuit-types';
1
+ import { Body, L2Block, MerkleTreeId, TxEffect } from '@aztec/circuit-types';
2
2
  import { CircuitSimulationStats } from '@aztec/circuit-types/stats';
3
3
  import {
4
4
  ARCHIVE_HEIGHT,
@@ -7,13 +7,10 @@ import {
7
7
  BaseRollupInputs,
8
8
  CONTRACT_SUBTREE_HEIGHT,
9
9
  CONTRACT_SUBTREE_SIBLING_PATH_LENGTH,
10
- CombinedAccumulatedData,
11
10
  ConstantRollupData,
12
11
  GlobalVariables,
13
12
  L1_TO_L2_MSG_SUBTREE_HEIGHT,
14
13
  L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH,
15
- MAX_NEW_CONTRACTS_PER_TX,
16
- MAX_NEW_NOTE_HASHES_PER_TX,
17
14
  MAX_NEW_NULLIFIERS_PER_TX,
18
15
  MAX_PUBLIC_DATA_READS_PER_TX,
19
16
  MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
@@ -40,8 +37,6 @@ import {
40
37
  RollupTypes,
41
38
  RootRollupInputs,
42
39
  RootRollupPublicInputs,
43
- SideEffect,
44
- SideEffectLinkedToNoteHash,
45
40
  StateDiffHints,
46
41
  StateReference,
47
42
  VK_TREE_HEIGHT,
@@ -57,10 +52,11 @@ import { elapsed } from '@aztec/foundation/timer';
57
52
  import { MerkleTreeOperations } from '@aztec/world-state';
58
53
 
59
54
  import chunk from 'lodash.chunk';
55
+ import { inspect } from 'util';
60
56
 
61
57
  import { VerificationKeys } from '../mocks/verification_keys.js';
62
58
  import { RollupProver } from '../prover/index.js';
63
- import { ProcessedTx } from '../sequencer/processed_tx.js';
59
+ import { ProcessedTx, toTxEffect } from '../sequencer/processed_tx.js';
64
60
  import { RollupSimulator } from '../simulator/index.js';
65
61
  import { BlockBuilder } from './index.js';
66
62
  import { TreeNames } from './types.js';
@@ -107,30 +103,7 @@ export class SoloBlockBuilder implements BlockBuilder {
107
103
  const [circuitsOutput, proof] = await this.runCircuits(globalVariables, txs, newL1ToL2Messages);
108
104
 
109
105
  // Collect all new nullifiers, commitments, and contracts from all txs in this block
110
- const txEffects: TxEffect[] = txs.map(
111
- tx =>
112
- new TxEffect(
113
- tx.data.combinedData.newNoteHashes.map((c: SideEffect) => c.value) as Tuple<
114
- Fr,
115
- typeof MAX_NEW_NOTE_HASHES_PER_TX
116
- >,
117
- tx.data.combinedData.newNullifiers.map((n: SideEffectLinkedToNoteHash) => n.value) as Tuple<
118
- Fr,
119
- typeof MAX_NEW_NULLIFIERS_PER_TX
120
- >,
121
- tx.data.combinedData.newL2ToL1Msgs,
122
- tx.data.combinedData.publicDataUpdateRequests.map(t => new PublicDataWrite(t.leafSlot, t.newValue)) as Tuple<
123
- PublicDataWrite,
124
- typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
125
- >,
126
- tx.data.combinedData.newContracts.map(cd => cd.hash()) as Tuple<Fr, typeof MAX_NEW_CONTRACTS_PER_TX>,
127
- tx.data.combinedData.newContracts.map(
128
- cd => new ContractData(cd.contractAddress, cd.portalContractAddress),
129
- ) as Tuple<ContractData, typeof MAX_NEW_CONTRACTS_PER_TX>,
130
- tx.encryptedLogs || new TxL2Logs([]),
131
- tx.unencryptedLogs || new TxL2Logs([]),
132
- ),
133
- );
106
+ const txEffects: TxEffect[] = txs.map(tx => toTxEffect(tx));
134
107
 
135
108
  const blockBody = new Body(padArrayEnd(newL1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP), txEffects);
136
109
 
@@ -141,6 +114,7 @@ export class SoloBlockBuilder implements BlockBuilder {
141
114
  });
142
115
 
143
116
  if (!l2Block.body.getTxsEffectsHash().equals(circuitsOutput.header.contentCommitment.txsEffectsHash)) {
117
+ this.debug(inspect(blockBody));
144
118
  throw new Error(
145
119
  `Txs effects hash mismatch, ${l2Block.body
146
120
  .getTxsEffectsHash()
@@ -479,7 +453,7 @@ export class SoloBlockBuilder implements BlockBuilder {
479
453
  protected getKernelDataFor(tx: ProcessedTx): RollupKernelData {
480
454
  const inputs = new RollupKernelCircuitPublicInputs(
481
455
  tx.data.aggregationObject,
482
- CombinedAccumulatedData.recombine(tx.data.endNonRevertibleData, tx.data.end),
456
+ tx.data.combinedData,
483
457
  tx.data.constants,
484
458
  );
485
459
  return new RollupKernelData(
package/src/index.ts CHANGED
@@ -1,17 +1,17 @@
1
- export * from './sequencer/index.js';
2
- export * from './config.js';
3
- export * from './publisher/index.js';
4
1
  export * from './client/index.js';
2
+ export * from './config.js';
5
3
  export * from './mocks/verification_keys.js';
4
+ export * from './publisher/index.js';
5
+ export * from './sequencer/index.js';
6
6
 
7
7
  // Used by the node to simulate public parts of transactions. Should these be moved to a shared library?
8
- export * from './sequencer/public_processor.js';
9
8
  export * from './global_variable_builder/index.js';
9
+ export * from './sequencer/public_processor.js';
10
10
 
11
11
  // Used by publisher test in e2e
12
- export { RealRollupCircuitSimulator } from './simulator/rollup.js';
13
- export { EmptyRollupProver } from './prover/empty.js';
14
12
  export { SoloBlockBuilder } from './block_builder/solo_block_builder.js';
13
+ export { EmptyRollupProver } from './prover/empty.js';
14
+ export { makeEmptyProcessedTx, makeProcessedTx, partitionReverts } from './sequencer/processed_tx.js';
15
15
  export { WASMSimulator } from './simulator/acvm_wasm.js';
16
+ export { RealRollupCircuitSimulator } from './simulator/rollup.js';
16
17
  export { SimulationProvider } from './simulator/simulation_provider.js';
17
- export { makeProcessedTx, makeEmptyProcessedTx } from './sequencer/processed_tx.js';
@@ -1,4 +1,4 @@
1
- import { FunctionL2Logs, MerkleTreeId, Tx } from '@aztec/circuit-types';
1
+ import { FunctionL2Logs, MerkleTreeId, SimulationError, Tx } from '@aztec/circuit-types';
2
2
  import {
3
3
  AztecAddress,
4
4
  CallRequest,
@@ -13,6 +13,7 @@ import {
13
13
  MAX_NEW_NULLIFIERS_PER_CALL,
14
14
  MAX_NON_REVERTIBLE_PUBLIC_DATA_READS_PER_TX,
15
15
  MAX_NON_REVERTIBLE_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
16
+ MAX_NULLIFIER_READ_REQUESTS_PER_CALL,
16
17
  MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,
17
18
  MAX_PUBLIC_DATA_READS_PER_CALL,
18
19
  MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,
@@ -21,8 +22,6 @@ import {
21
22
  MembershipWitness,
22
23
  PrivateKernelTailCircuitPublicInputs,
23
24
  Proof,
24
- PublicAccumulatedNonRevertibleData,
25
- PublicAccumulatedRevertibleData,
26
25
  PublicCallData,
27
26
  PublicCallRequest,
28
27
  PublicCallStackItem,
@@ -32,7 +31,9 @@ import {
32
31
  PublicKernelCircuitPrivateInputs,
33
32
  PublicKernelCircuitPublicInputs,
34
33
  PublicKernelData,
34
+ PublicKernelTailCircuitPrivateInputs,
35
35
  RETURN_VALUES_LENGTH,
36
+ ReadRequest,
36
37
  SideEffect,
37
38
  SideEffectLinkedToNoteHash,
38
39
  VK_TREE_HEIGHT,
@@ -56,21 +57,25 @@ import { env } from 'process';
56
57
  import { getVerificationKeys } from '../mocks/verification_keys.js';
57
58
  import { PublicProver } from '../prover/index.js';
58
59
  import { PublicKernelCircuitSimulator } from '../simulator/index.js';
60
+ import { HintsBuilder } from './hints_builder.js';
59
61
  import { FailedTx } from './processed_tx.js';
60
62
 
61
63
  export enum PublicKernelPhase {
62
64
  SETUP = 'setup',
63
65
  APP_LOGIC = 'app-logic',
64
66
  TEARDOWN = 'teardown',
67
+ TAIL = 'tail',
65
68
  }
66
69
 
67
70
  export const PhaseIsRevertible: Record<PublicKernelPhase, boolean> = {
68
71
  [PublicKernelPhase.SETUP]: false,
69
72
  [PublicKernelPhase.APP_LOGIC]: true,
70
73
  [PublicKernelPhase.TEARDOWN]: false,
74
+ [PublicKernelPhase.TAIL]: false,
71
75
  };
72
76
 
73
77
  export abstract class AbstractPhaseManager {
78
+ protected hintsBuilder: HintsBuilder;
74
79
  protected log: DebugLogger;
75
80
  constructor(
76
81
  protected db: MerkleTreeOperations,
@@ -81,6 +86,7 @@ export abstract class AbstractPhaseManager {
81
86
  protected historicalHeader: Header,
82
87
  public phase: PublicKernelPhase,
83
88
  ) {
89
+ this.hintsBuilder = new HintsBuilder(db);
84
90
  this.log = createDebugLogger(`aztec:sequencer:${phase}`);
85
91
  }
86
92
  /**
@@ -102,6 +108,10 @@ export abstract class AbstractPhaseManager {
102
108
  * the proof of the public kernel circuit for this phase
103
109
  */
104
110
  publicKernelProof: Proof;
111
+ /**
112
+ * revert reason, if any
113
+ */
114
+ revertReason: SimulationError | undefined;
105
115
  }>;
106
116
  abstract rollback(tx: Tx, err: unknown): Promise<FailedTx>;
107
117
 
@@ -127,6 +137,7 @@ export abstract class AbstractPhaseManager {
127
137
  [PublicKernelPhase.SETUP]: [],
128
138
  [PublicKernelPhase.APP_LOGIC]: [],
129
139
  [PublicKernelPhase.TEARDOWN]: [],
140
+ [PublicKernelPhase.TAIL]: [],
130
141
  };
131
142
  }
132
143
 
@@ -140,12 +151,14 @@ export abstract class AbstractPhaseManager {
140
151
  [PublicKernelPhase.SETUP]: [],
141
152
  [PublicKernelPhase.APP_LOGIC]: publicCallsStack,
142
153
  [PublicKernelPhase.TEARDOWN]: [],
154
+ [PublicKernelPhase.TAIL]: [],
143
155
  };
144
156
  } else {
145
157
  return {
146
158
  [PublicKernelPhase.SETUP]: publicCallsStack.slice(0, firstRevertibleCallIndex - 1),
147
159
  [PublicKernelPhase.APP_LOGIC]: publicCallsStack.slice(firstRevertibleCallIndex),
148
160
  [PublicKernelPhase.TEARDOWN]: [publicCallsStack[firstRevertibleCallIndex - 1]],
161
+ [PublicKernelPhase.TAIL]: [],
149
162
  };
150
163
  }
151
164
  }
@@ -158,55 +171,18 @@ export abstract class AbstractPhaseManager {
158
171
  return calls;
159
172
  }
160
173
 
161
- public static getKernelOutputAndProof(
162
- tx: Tx,
163
- publicKernelPublicInput?: PublicKernelCircuitPublicInputs,
164
- previousPublicKernelProof?: Proof,
165
- ): {
166
- /**
167
- * the output of the public kernel circuit for this phase
168
- */
169
- publicKernelPublicInput: PublicKernelCircuitPublicInputs;
170
- /**
171
- * the proof of the public kernel circuit for this phase
172
- */
173
- publicKernelProof: Proof;
174
- } {
175
- if (publicKernelPublicInput && previousPublicKernelProof) {
176
- return {
177
- publicKernelPublicInput: publicKernelPublicInput,
178
- publicKernelProof: previousPublicKernelProof,
179
- };
180
- } else {
181
- const publicKernelPublicInput = new PublicKernelCircuitPublicInputs(
182
- tx.data.aggregationObject,
183
- PublicAccumulatedNonRevertibleData.fromPrivateAccumulatedNonRevertibleData(tx.data.endNonRevertibleData),
184
- PublicAccumulatedRevertibleData.fromPrivateAccumulatedRevertibleData(tx.data.end),
185
- tx.data.constants,
186
- tx.data.needsSetup,
187
- tx.data.needsAppLogic,
188
- tx.data.needsTeardown,
189
- );
190
- const publicKernelProof = previousPublicKernelProof || tx.proof;
191
- return {
192
- publicKernelPublicInput,
193
- publicKernelProof,
194
- };
195
- }
196
- }
197
-
198
174
  protected async processEnqueuedPublicCalls(
199
175
  tx: Tx,
200
176
  previousPublicKernelOutput: PublicKernelCircuitPublicInputs,
201
177
  previousPublicKernelProof: Proof,
202
- ): Promise<[PublicKernelCircuitPublicInputs, Proof, FunctionL2Logs[]]> {
178
+ ): Promise<[PublicKernelCircuitPublicInputs, Proof, FunctionL2Logs[], SimulationError | undefined]> {
203
179
  let kernelOutput = previousPublicKernelOutput;
204
180
  let kernelProof = previousPublicKernelProof;
205
181
 
206
182
  const enqueuedCalls = this.extractEnqueuedPublicCalls(tx);
207
183
 
208
184
  if (!enqueuedCalls || !enqueuedCalls.length) {
209
- return [kernelOutput, kernelProof, []];
185
+ return [kernelOutput, kernelProof, [], undefined];
210
186
  }
211
187
 
212
188
  const newUnencryptedFunctionLogs: FunctionL2Logs[] = [];
@@ -241,7 +217,18 @@ export abstract class AbstractPhaseManager {
241
217
  executionStack.push(...result.nestedExecutions);
242
218
  const callData = await this.getPublicCallData(result, isExecutionRequest);
243
219
 
244
- [kernelOutput, kernelProof] = await this.runKernelCircuit(callData, kernelOutput, kernelProof);
220
+ [kernelOutput, kernelProof] = await this.runKernelCircuit(kernelOutput, kernelProof, callData);
221
+
222
+ if (kernelOutput.reverted && this.phase === PublicKernelPhase.APP_LOGIC) {
223
+ this.log.debug(
224
+ `Reverting on ${result.execution.contractAddress.toString()}:${functionSelector} with reason: ${
225
+ result.revertReason
226
+ }`,
227
+ );
228
+ // halt immediately if the public kernel circuit has reverted.
229
+ // return no logs, as they should not go on-chain.
230
+ return [kernelOutput, kernelProof, [], result.revertReason];
231
+ }
245
232
 
246
233
  if (!enqueuedExecutionResult) {
247
234
  enqueuedExecutionResult = result;
@@ -255,25 +242,42 @@ export abstract class AbstractPhaseManager {
255
242
  // TODO(#3675): This should be done in a public kernel circuit
256
243
  removeRedundantPublicDataWrites(kernelOutput);
257
244
 
258
- return [kernelOutput, kernelProof, newUnencryptedFunctionLogs];
245
+ return [kernelOutput, kernelProof, newUnencryptedFunctionLogs, undefined];
259
246
  }
260
247
 
261
248
  protected async runKernelCircuit(
262
- callData: PublicCallData,
263
249
  previousOutput: PublicKernelCircuitPublicInputs,
264
250
  previousProof: Proof,
251
+ callData?: PublicCallData,
265
252
  ): Promise<[PublicKernelCircuitPublicInputs, Proof]> {
266
- const output = await this.getKernelCircuitOutput(callData, previousOutput, previousProof);
253
+ const output = await this.getKernelCircuitOutput(previousOutput, previousProof, callData);
267
254
  const proof = await this.publicProver.getPublicKernelCircuitProof(output);
268
255
  return [output, proof];
269
256
  }
270
257
 
271
- protected getKernelCircuitOutput(
272
- callData: PublicCallData,
258
+ protected async getKernelCircuitOutput(
273
259
  previousOutput: PublicKernelCircuitPublicInputs,
274
260
  previousProof: Proof,
261
+ callData?: PublicCallData,
275
262
  ): Promise<PublicKernelCircuitPublicInputs> {
276
263
  const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
264
+
265
+ if (this.phase === PublicKernelPhase.TAIL) {
266
+ const { endNonRevertibleData, end } = previousOutput;
267
+ const nullifierReadRequestResetHints = await this.hintsBuilder.getNullifierReadRequestResetHints(
268
+ endNonRevertibleData.nullifierReadRequests,
269
+ end.nullifierReadRequests,
270
+ endNonRevertibleData.newNullifiers,
271
+ end.newNullifiers,
272
+ );
273
+ const inputs = new PublicKernelTailCircuitPrivateInputs(previousKernel, nullifierReadRequestResetHints);
274
+ return this.publicKernel.publicKernelCircuitTail(inputs);
275
+ }
276
+
277
+ if (!callData) {
278
+ throw new Error(`Cannot run public kernel circuit without call data for phase '${this.phase}'.`);
279
+ }
280
+
277
281
  const inputs = new PublicKernelCircuitPrivateInputs(previousKernel, callData);
278
282
  switch (this.phase) {
279
283
  case PublicKernelPhase.SETUP:
@@ -320,6 +324,11 @@ export abstract class AbstractPhaseManager {
320
324
  newNullifiers: padArrayEnd(result.newNullifiers, SideEffectLinkedToNoteHash.empty(), MAX_NEW_NULLIFIERS_PER_CALL),
321
325
  newL2ToL1Msgs: padArrayEnd(result.newL2ToL1Messages, L2ToL1Message.empty(), MAX_NEW_L2_TO_L1_MSGS_PER_CALL),
322
326
  returnValues: padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH),
327
+ nullifierReadRequests: padArrayEnd(
328
+ result.nullifierReadRequests,
329
+ ReadRequest.empty(),
330
+ MAX_NULLIFIER_READ_REQUESTS_PER_CALL,
331
+ ),
323
332
  contractStorageReads: padArrayEnd(
324
333
  result.contractStorageReads,
325
334
  ContractStorageRead.empty(),
@@ -334,6 +343,7 @@ export abstract class AbstractPhaseManager {
334
343
  unencryptedLogsHash,
335
344
  unencryptedLogPreimagesLength,
336
345
  historicalHeader: this.historicalHeader,
346
+ reverted: result.reverted,
337
347
  });
338
348
  }
339
349