@aztec/prover-client 0.69.1 → 0.71.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 (130) hide show
  1. package/dest/bin/get-proof-inputs.d.ts +2 -0
  2. package/dest/bin/get-proof-inputs.d.ts.map +1 -0
  3. package/dest/bin/get-proof-inputs.js +50 -0
  4. package/dest/block_builder/light.d.ts +3 -5
  5. package/dest/block_builder/light.d.ts.map +1 -1
  6. package/dest/block_builder/light.js +9 -22
  7. package/dest/config.d.ts +2 -1
  8. package/dest/config.d.ts.map +1 -1
  9. package/dest/config.js +3 -2
  10. package/dest/mocks/fixtures.d.ts +1 -1
  11. package/dest/mocks/fixtures.d.ts.map +1 -1
  12. package/dest/mocks/fixtures.js +2 -2
  13. package/dest/mocks/test_context.d.ts +1 -1
  14. package/dest/mocks/test_context.d.ts.map +1 -1
  15. package/dest/mocks/test_context.js +11 -12
  16. package/dest/orchestrator/block-building-helpers.d.ts +15 -29
  17. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  18. package/dest/orchestrator/block-building-helpers.js +51 -58
  19. package/dest/orchestrator/block-proving-state.d.ts +40 -44
  20. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  21. package/dest/orchestrator/block-proving-state.js +149 -85
  22. package/dest/orchestrator/epoch-proving-state.d.ts +23 -30
  23. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  24. package/dest/orchestrator/epoch-proving-state.js +92 -65
  25. package/dest/orchestrator/orchestrator.d.ts +17 -48
  26. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  27. package/dest/orchestrator/orchestrator.js +208 -351
  28. package/dest/orchestrator/tx-proving-state.d.ts +10 -6
  29. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  30. package/dest/orchestrator/tx-proving-state.js +57 -46
  31. package/dest/prover-agent/memory-proving-queue.d.ts +4 -4
  32. package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
  33. package/dest/prover-agent/memory-proving-queue.js +5 -5
  34. package/dest/prover-agent/prover-agent.d.ts +0 -2
  35. package/dest/prover-agent/prover-agent.d.ts.map +1 -1
  36. package/dest/prover-agent/prover-agent.js +7 -9
  37. package/dest/prover-client/factory.d.ts.map +1 -1
  38. package/dest/prover-client/factory.js +3 -3
  39. package/dest/prover-client/prover-client.d.ts +4 -2
  40. package/dest/prover-client/prover-client.d.ts.map +1 -1
  41. package/dest/prover-client/prover-client.js +16 -15
  42. package/dest/prover-client/server-epoch-prover.d.ts +25 -0
  43. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
  44. package/dest/prover-client/server-epoch-prover.js +40 -0
  45. package/dest/proving_broker/broker_prover_facade.d.ts +19 -7
  46. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  47. package/dest/proving_broker/broker_prover_facade.js +271 -49
  48. package/dest/proving_broker/config.d.ts +61 -0
  49. package/dest/proving_broker/config.d.ts.map +1 -0
  50. package/dest/proving_broker/config.js +83 -0
  51. package/dest/proving_broker/factory.d.ts +1 -1
  52. package/dest/proving_broker/factory.d.ts.map +1 -1
  53. package/dest/proving_broker/factory.js +4 -7
  54. package/dest/proving_broker/fixtures.d.ts +5 -0
  55. package/dest/proving_broker/fixtures.d.ts.map +1 -0
  56. package/dest/proving_broker/fixtures.js +12 -0
  57. package/dest/proving_broker/index.d.ts +2 -1
  58. package/dest/proving_broker/index.d.ts.map +1 -1
  59. package/dest/proving_broker/index.js +3 -2
  60. package/dest/proving_broker/proof_store/factory.d.ts +6 -0
  61. package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
  62. package/dest/proving_broker/proof_store/factory.js +39 -0
  63. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +13 -0
  64. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -0
  65. package/dest/proving_broker/proof_store/gcs_proof_store.js +46 -0
  66. package/dest/proving_broker/proof_store/index.d.ts +4 -0
  67. package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
  68. package/dest/proving_broker/proof_store/index.js +4 -0
  69. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +14 -0
  70. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
  71. package/dest/proving_broker/proof_store/inline_proof_store.js +37 -0
  72. package/dest/proving_broker/{proof_store.d.ts → proof_store/proof_store.d.ts} +1 -12
  73. package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
  74. package/dest/proving_broker/proof_store/proof_store.js +2 -0
  75. package/dest/proving_broker/proving_agent.d.ts +4 -4
  76. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  77. package/dest/proving_broker/proving_agent.js +5 -5
  78. package/dest/proving_broker/proving_broker.d.ts +16 -12
  79. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  80. package/dest/proving_broker/proving_broker.js +307 -274
  81. package/dest/proving_broker/proving_broker_database/memory.d.ts +4 -2
  82. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  83. package/dest/proving_broker/proving_broker_database/memory.js +17 -4
  84. package/dest/proving_broker/proving_broker_database/persisted.d.ts +10 -6
  85. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  86. package/dest/proving_broker/proving_broker_database/persisted.js +106 -14
  87. package/dest/proving_broker/proving_broker_database.d.ts +7 -3
  88. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  89. package/dest/proving_broker/proving_job_controller.js +4 -4
  90. package/dest/proving_broker/rpc.d.ts.map +1 -1
  91. package/dest/proving_broker/rpc.js +4 -4
  92. package/dest/test/mock_prover.d.ts +8 -8
  93. package/dest/test/mock_prover.d.ts.map +1 -1
  94. package/dest/test/mock_prover.js +9 -10
  95. package/package.json +14 -12
  96. package/src/bin/get-proof-inputs.ts +60 -0
  97. package/src/block_builder/light.ts +7 -31
  98. package/src/config.ts +4 -4
  99. package/src/mocks/fixtures.ts +1 -1
  100. package/src/mocks/test_context.ts +9 -11
  101. package/src/orchestrator/block-building-helpers.ts +360 -402
  102. package/src/orchestrator/block-proving-state.ts +251 -121
  103. package/src/orchestrator/epoch-proving-state.ts +159 -88
  104. package/src/orchestrator/orchestrator.ts +262 -542
  105. package/src/orchestrator/tx-proving-state.ts +30 -18
  106. package/src/prover-agent/memory-proving-queue.ts +12 -16
  107. package/src/prover-agent/prover-agent.ts +14 -8
  108. package/src/prover-client/factory.ts +2 -3
  109. package/src/prover-client/prover-client.ts +17 -20
  110. package/src/prover-client/server-epoch-prover.ts +44 -0
  111. package/src/proving_broker/broker_prover_facade.ts +347 -67
  112. package/src/proving_broker/config.ts +93 -0
  113. package/src/proving_broker/factory.ts +11 -10
  114. package/src/proving_broker/fixtures.ts +14 -0
  115. package/src/proving_broker/index.ts +2 -1
  116. package/src/proving_broker/proof_store/factory.ts +42 -0
  117. package/src/proving_broker/proof_store/gcs_proof_store.ts +72 -0
  118. package/src/proving_broker/proof_store/index.ts +3 -0
  119. package/src/proving_broker/{proof_store.ts → proof_store/inline_proof_store.ts} +1 -44
  120. package/src/proving_broker/proof_store/proof_store.ts +54 -0
  121. package/src/proving_broker/proving_agent.ts +11 -5
  122. package/src/proving_broker/proving_broker.ts +122 -73
  123. package/src/proving_broker/proving_broker_database/memory.ts +24 -4
  124. package/src/proving_broker/proving_broker_database/persisted.ts +142 -20
  125. package/src/proving_broker/proving_broker_database.ts +8 -3
  126. package/src/proving_broker/proving_job_controller.ts +5 -5
  127. package/src/proving_broker/rpc.ts +2 -3
  128. package/src/test/mock_prover.ts +12 -18
  129. package/dest/proving_broker/proof_store.d.ts.map +0 -1
  130. package/dest/proving_broker/proof_store.js +0 -37
@@ -1,5 +1,12 @@
1
- import { Fr, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, } from '@aztec/circuits.js';
1
+ var _EpochProvingState_instances, _EpochProvingState_getChildProofsForRoot, _EpochProvingState_getPreviousRollupData;
2
+ import { __classPrivateFieldGet } from "tslib";
3
+ import { ARCHIVE_HEIGHT, AppendOnlyTreeSnapshot, Fr, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, MembershipWitness, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, VK_TREE_HEIGHT, } from '@aztec/circuits.js';
4
+ import { BlockMergeRollupInputs, ConstantRollupData, EmptyBlockRootRollupInputs, PreviousRollupBlockData, RootRollupInputs, } from '@aztec/circuits.js/rollup';
5
+ import { makeTuple } from '@aztec/foundation/array';
2
6
  import { padArrayEnd } from '@aztec/foundation/collection';
7
+ import { UnbalancedTreeStore } from '@aztec/foundation/trees';
8
+ import { getVKIndex, getVKSiblingPath, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
9
+ import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
3
10
  import { BlockProvingState } from './block-proving-state.js';
4
11
  var PROVING_STATE_LIFECYCLE;
5
12
  (function (PROVING_STATE_LIFECYCLE) {
@@ -16,52 +23,23 @@ var PROVING_STATE_LIFECYCLE;
16
23
  */
17
24
  export class EpochProvingState {
18
25
  constructor(epochNumber, firstBlockNumber, totalNumBlocks, completionCallback, rejectionCallback) {
26
+ _EpochProvingState_instances.add(this);
19
27
  this.epochNumber = epochNumber;
20
28
  this.firstBlockNumber = firstBlockNumber;
21
29
  this.totalNumBlocks = totalNumBlocks;
22
30
  this.completionCallback = completionCallback;
23
31
  this.rejectionCallback = rejectionCallback;
24
32
  this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED;
25
- this.mergeRollupInputs = [];
33
+ // Map from tx hash to tube proof promise. Used when kickstarting tube proofs before tx processing.
34
+ this.cachedTubeProofs = new Map();
26
35
  this.blocks = [];
27
- }
28
- // Returns the number of levels of merge rollups
29
- get numMergeLevels() {
30
- const totalLeaves = Math.max(2, this.totalNumBlocks);
31
- return BigInt(Math.ceil(Math.log2(totalLeaves)) - 1);
32
- }
33
- // Calculates the index and level of the parent rollup circuit
34
- // Based on tree implementation in unbalanced_tree.ts -> batchInsert()
35
- // REFACTOR: This is repeated from the block orchestrator
36
- findMergeLevel(currentLevel, currentIndex) {
37
- const totalLeaves = Math.max(2, this.totalNumBlocks);
38
- const moveUpMergeLevel = (levelSize, index, nodeToShift) => {
39
- levelSize /= 2;
40
- if (levelSize & 1) {
41
- [levelSize, nodeToShift] = nodeToShift ? [levelSize + 1, false] : [levelSize - 1, true];
42
- }
43
- index >>= 1n;
44
- return { thisLevelSize: levelSize, thisIndex: index, shiftUp: nodeToShift };
45
- };
46
- let [thisLevelSize, shiftUp] = totalLeaves & 1 ? [totalLeaves - 1, true] : [totalLeaves, false];
47
- const maxLevel = this.numMergeLevels + 1n;
48
- let placeholder = currentIndex;
49
- for (let i = 0; i < maxLevel - currentLevel; i++) {
50
- ({ thisLevelSize, thisIndex: placeholder, shiftUp } = moveUpMergeLevel(thisLevelSize, placeholder, shiftUp));
51
- }
52
- let thisIndex = currentIndex;
53
- let mergeLevel = currentLevel;
54
- while (thisIndex >= thisLevelSize && mergeLevel != 0n) {
55
- mergeLevel -= 1n;
56
- ({ thisLevelSize, thisIndex, shiftUp } = moveUpMergeLevel(thisLevelSize, thisIndex, shiftUp));
57
- }
58
- return [mergeLevel - 1n, thisIndex >> 1n, thisIndex & 1n];
36
+ this.blockRootOrMergeProvingOutputs = new UnbalancedTreeStore(totalNumBlocks);
59
37
  }
60
38
  // Adds a block to the proving state, returns its index
61
39
  // Will update the proving life cycle if this is the last block
62
- startNewBlock(globalVariables, l1ToL2Messages, messageTreeSnapshot, messageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, archiveTreeSnapshot, archiveTreeRootSiblingPath, previousBlockHash) {
40
+ startNewBlock(globalVariables, l1ToL2Messages, messageTreeSnapshot, messageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, archiveTreeSnapshot, archiveTreeRootSiblingPath, previousBlockHeader, previousBlockHash) {
63
41
  const index = globalVariables.blockNumber.toNumber() - this.firstBlockNumber;
64
- const block = new BlockProvingState(index, globalVariables, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP), messageTreeSnapshot, messageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, archiveTreeSnapshot, archiveTreeRootSiblingPath, previousBlockHash, this);
42
+ const block = new BlockProvingState(index, globalVariables, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP), messageTreeSnapshot, messageTreeRootSiblingPath, messageTreeSnapshotAfterInsertion, archiveTreeSnapshot, archiveTreeRootSiblingPath, previousBlockHeader, previousBlockHash, this);
65
43
  this.blocks[index] = block;
66
44
  if (this.blocks.filter(b => !!b).length === this.totalNumBlocks) {
67
45
  this.provingStateLifecycle = PROVING_STATE_LIFECYCLE.PROVING_STATE_FULL;
@@ -77,43 +55,82 @@ export class EpochProvingState {
77
55
  isAcceptingBlocks() {
78
56
  return this.provingStateLifecycle === PROVING_STATE_LIFECYCLE.PROVING_STATE_CREATED;
79
57
  }
80
- /**
81
- * Stores the inputs to a merge circuit and determines if the circuit is ready to be executed
82
- * @param mergeInputs - The inputs to store
83
- * @param indexWithinMerge - The index in the set of inputs to this merge circuit
84
- * @param indexOfMerge - The global index of this merge circuit
85
- * @returns True if the merge circuit is ready to be executed, false otherwise
86
- */
87
- storeMergeInputs(mergeInputs, indexWithinMerge, indexOfMerge) {
88
- if (!this.mergeRollupInputs[indexOfMerge]) {
89
- const mergeInputData = {
90
- inputs: [undefined, undefined],
91
- proofs: [undefined, undefined],
92
- verificationKeys: [undefined, undefined],
93
- };
94
- mergeInputData.inputs[indexWithinMerge] = mergeInputs[0];
95
- mergeInputData.proofs[indexWithinMerge] = mergeInputs[1];
96
- mergeInputData.verificationKeys[indexWithinMerge] = mergeInputs[2];
97
- this.mergeRollupInputs[indexOfMerge] = mergeInputData;
98
- return false;
58
+ setBlockRootRollupProof(blockIndex, proof) {
59
+ return this.blockRootOrMergeProvingOutputs.setLeaf(blockIndex, proof);
60
+ }
61
+ setBlockMergeRollupProof(location, proof) {
62
+ this.blockRootOrMergeProvingOutputs.setNode(location, proof);
63
+ }
64
+ setRootRollupProof(proof) {
65
+ this.rootRollupProvingOutput = proof;
66
+ }
67
+ setPaddingBlockRootProof(proof) {
68
+ this.paddingBlockRootProvingOutput = proof;
69
+ }
70
+ getParentLocation(location) {
71
+ return this.blockRootOrMergeProvingOutputs.getParentLocation(location);
72
+ }
73
+ getBlockMergeRollupInputs(mergeLocation) {
74
+ const [left, right] = this.blockRootOrMergeProvingOutputs.getChildren(mergeLocation);
75
+ if (!left || !right) {
76
+ throw new Error('At lease one child is not ready.');
77
+ }
78
+ return new BlockMergeRollupInputs([__classPrivateFieldGet(this, _EpochProvingState_instances, "m", _EpochProvingState_getPreviousRollupData).call(this, left), __classPrivateFieldGet(this, _EpochProvingState_instances, "m", _EpochProvingState_getPreviousRollupData).call(this, right)]);
79
+ }
80
+ getRootRollupInputs(proverId) {
81
+ const [left, right] = __classPrivateFieldGet(this, _EpochProvingState_instances, "m", _EpochProvingState_getChildProofsForRoot).call(this);
82
+ if (!left || !right) {
83
+ throw new Error('At lease one child is not ready.');
84
+ }
85
+ return RootRollupInputs.from({
86
+ previousRollupData: [__classPrivateFieldGet(this, _EpochProvingState_instances, "m", _EpochProvingState_getPreviousRollupData).call(this, left), __classPrivateFieldGet(this, _EpochProvingState_instances, "m", _EpochProvingState_getPreviousRollupData).call(this, right)],
87
+ proverId,
88
+ });
89
+ }
90
+ getPaddingBlockRootInputs(proverId) {
91
+ const { block } = this.blocks[0] ?? {};
92
+ const l1ToL2Roots = this.blocks[0]?.getL1ToL2Roots();
93
+ if (!block || !l1ToL2Roots) {
94
+ throw new Error('Epoch needs one completed block in order to be padded.');
99
95
  }
100
- const mergeInputData = this.mergeRollupInputs[indexOfMerge];
101
- mergeInputData.inputs[indexWithinMerge] = mergeInputs[0];
102
- mergeInputData.proofs[indexWithinMerge] = mergeInputs[1];
103
- mergeInputData.verificationKeys[indexWithinMerge] = mergeInputs[2];
104
- return true;
96
+ const constants = ConstantRollupData.from({
97
+ lastArchive: block.archive,
98
+ globalVariables: block.header.globalVariables,
99
+ vkTreeRoot: getVKTreeRoot(),
100
+ protocolContractTreeRoot,
101
+ });
102
+ return EmptyBlockRootRollupInputs.from({
103
+ l1ToL2Roots,
104
+ newL1ToL2MessageTreeRootSiblingPath: makeTuple(L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, Fr.zero),
105
+ startL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot.zero(),
106
+ newArchiveSiblingPath: makeTuple(ARCHIVE_HEIGHT, Fr.zero),
107
+ previousBlockHash: block.header.hash(),
108
+ previousPartialState: block.header.state.partial,
109
+ constants,
110
+ proverId,
111
+ isPadding: true,
112
+ });
105
113
  }
106
114
  // Returns a specific transaction proving state
107
115
  getBlockProvingStateByBlockNumber(blockNumber) {
108
116
  return this.blocks.find(block => block?.blockNumber === blockNumber);
109
117
  }
110
- // Returns a set of merge rollup inputs
111
- getMergeInputs(indexOfMerge) {
112
- return this.mergeRollupInputs[indexOfMerge];
118
+ getEpochProofResult() {
119
+ if (!this.rootRollupProvingOutput) {
120
+ throw new Error('Unable to get epoch proof result. Root rollup is not ready.');
121
+ }
122
+ return {
123
+ proof: this.rootRollupProvingOutput.proof.binaryProof,
124
+ publicInputs: this.rootRollupProvingOutput.inputs,
125
+ };
126
+ }
127
+ isReadyForBlockMerge(location) {
128
+ return this.blockRootOrMergeProvingOutputs.getSibling(location) !== undefined;
113
129
  }
114
130
  // Returns true if we have sufficient inputs to execute the block root rollup
115
131
  isReadyForRootRollup() {
116
- return !(this.mergeRollupInputs[0] === undefined || this.mergeRollupInputs[0].inputs.findIndex(p => !p) !== -1);
132
+ const childProofs = __classPrivateFieldGet(this, _EpochProvingState_instances, "m", _EpochProvingState_getChildProofsForRoot).call(this);
133
+ return childProofs.every(p => !!p);
117
134
  }
118
135
  // Attempts to reject the proving state promise with a reason of 'cancelled'
119
136
  cancel() {
@@ -138,4 +155,14 @@ export class EpochProvingState {
138
155
  this.completionCallback(result);
139
156
  }
140
157
  }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvZXBvY2gtcHJvdmluZy1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBR0wsRUFBRSxFQUlGLG1DQUFtQyxHQUlwQyxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUk3RCxJQUFLLHVCQUtKO0FBTEQsV0FBSyx1QkFBdUI7SUFDMUIsdUdBQXFCLENBQUE7SUFDckIsaUdBQWtCLENBQUE7SUFDbEIseUdBQXNCLENBQUE7SUFDdEIseUdBQXNCLENBQUE7QUFDeEIsQ0FBQyxFQUxJLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFLM0I7QUFhRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFRNUIsWUFDa0IsV0FBbUIsRUFDbkIsZ0JBQXdCLEVBQ3hCLGNBQXNCLEVBQzlCLGtCQUFtRCxFQUNuRCxpQkFBMkM7UUFKbkMsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBaUM7UUFDbkQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtRQVo3QywwQkFBcUIsR0FBRyx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQztRQUV0RSxzQkFBaUIsR0FBZ0MsRUFBRSxDQUFDO1FBR3JELFdBQU0sR0FBc0MsRUFBRSxDQUFDO0lBUW5ELENBQUM7SUFFSixnREFBZ0Q7SUFDaEQsSUFBVyxjQUFjO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FB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
158
+ _EpochProvingState_instances = new WeakSet(), _EpochProvingState_getChildProofsForRoot = function _EpochProvingState_getChildProofsForRoot() {
159
+ const rootLocation = { level: 0, index: 0 };
160
+ // If there's only 1 block, its block root proof will be stored at the root.
161
+ return this.totalNumBlocks === 1
162
+ ? [this.blockRootOrMergeProvingOutputs.getNode(rootLocation), this.paddingBlockRootProvingOutput]
163
+ : this.blockRootOrMergeProvingOutputs.getChildren(rootLocation);
164
+ }, _EpochProvingState_getPreviousRollupData = function _EpochProvingState_getPreviousRollupData({ inputs, proof, verificationKey, }) {
165
+ const leafIndex = getVKIndex(verificationKey.keyAsFields);
166
+ return new PreviousRollupBlockData(inputs, proof, verificationKey.keyAsFields, new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), getVKSiblingPath(leafIndex)));
167
+ };
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvZXBvY2gtcHJvdmluZy1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBRXRCLEVBQUUsRUFFRix3Q0FBd0MsRUFDeEMsaUJBQWlCLEVBRWpCLG1DQUFtQyxFQUVuQyxjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsc0JBQXNCLEVBRXRCLGtCQUFrQixFQUNsQiwwQkFBMEIsRUFDMUIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUVqQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFM0QsT0FBTyxFQUF5QixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJN0QsSUFBSyx1QkFLSjtBQUxELFdBQUssdUJBQXVCO0lBQzFCLHVHQUFxQixDQUFBO0lBQ3JCLGlHQUFrQixDQUFBO0lBQ2xCLHlHQUFzQixDQUFBO0lBQ3RCLHlHQUFzQixDQUFBO0FBQ3hCLENBQUMsRUFMSSx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBSzNCO0FBSUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBZTVCLFlBQ2tCLFdBQW1CLEVBQ25CLGdCQUF3QixFQUN4QixjQUFzQixFQUM5QixrQkFBbUQsRUFDbkQsaUJBQTJDOztR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
@@ -1,6 +1,6 @@
1
- import { L2Block, type ProcessedTx, type ServerCircuitProver } from '@aztec/circuit-types';
1
+ import { L2Block, type ProcessedTx, type ServerCircuitProver, type Tx } from '@aztec/circuit-types';
2
2
  import { type EpochProver, type ForkMerkleTreeOperations } from '@aztec/circuit-types/interfaces';
3
- import { type AppendOnlyTreeSnapshot, type BlockHeader, Fr, type GlobalVariables } from '@aztec/circuits.js';
3
+ import { type AppendOnlyTreeSnapshot, BlockHeader, Fr, GlobalVariables } from '@aztec/circuits.js';
4
4
  import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
5
5
  /**
6
6
  * Implements an event driven proving scheduler to build the recursive proof tree. The idea being:
@@ -21,17 +21,13 @@ export declare class ProvingOrchestrator implements EpochProver {
21
21
  private readonly proverId;
22
22
  private provingState;
23
23
  private pendingProvingJobs;
24
- private paddingTxProof?;
25
24
  private provingPromise;
26
25
  private metrics;
27
26
  private dbs;
28
- constructor(dbProvider: ForkMerkleTreeOperations, prover: ServerCircuitProver, telemetryClient: TelemetryClient, proverId?: Fr);
27
+ constructor(dbProvider: ForkMerkleTreeOperations, prover: ServerCircuitProver, proverId?: Fr, telemetryClient?: TelemetryClient);
29
28
  get tracer(): Tracer;
30
29
  getProverId(): Fr;
31
- /**
32
- * Resets the orchestrator's cached padding tx.
33
- */
34
- reset(): void;
30
+ stop(): Promise<void>;
35
31
  startNewEpoch(epochNumber: number, firstBlockNumber: number, totalNumBlocks: number): void;
36
32
  /**
37
33
  * Starts off a new block
@@ -41,43 +37,28 @@ export declare class ProvingOrchestrator implements EpochProver {
41
37
  */
42
38
  startNewBlock(globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<void>;
43
39
  /**
44
- * The interface to add simulated transactions to the scheduler
40
+ * The interface to add simulated transactions to the scheduler. This can only be called once per block.
45
41
  * @param txs - The transactions to be proven
46
42
  */
47
43
  addTxs(txs: ProcessedTx[]): Promise<void>;
48
44
  /**
49
- * Marks the block as full and pads it if required, no more transactions will be accepted.
45
+ * Kickstarts tube circuits for the specified txs. These will be used during epoch proving.
46
+ * Note that if the tube circuits are not started this way, they will be started nontheless after processing.
47
+ */
48
+ startTubeCircuits(txs: Tx[]): void;
49
+ /**
50
+ * Marks the block as completed.
50
51
  * Computes the block header and updates the archive tree.
51
52
  */
52
53
  setBlockCompleted(blockNumber: number, expectedHeader?: BlockHeader): Promise<L2Block>;
53
54
  /** Returns the block as built for a given index. */
54
55
  getBlock(index: number): L2Block;
55
- private padEpoch;
56
56
  private buildBlock;
57
57
  protected verifyBuiltBlockAgainstSyncedState(l2Block: L2Block, newArchive: AppendOnlyTreeSnapshot): Promise<void>;
58
- private enqueuePaddingTxs;
59
- /**
60
- * Prepares the cached sets of base rollup inputs for padding transactions and proves them
61
- * @param txInputs - The base rollup inputs, start and end hash paths etc
62
- * @param paddingTx - The padding tx, contains the header and public inputs used in the proof
63
- * @param proofAndVk - The proof and vk of the paddingTx.
64
- * @param provingState - The block proving state
65
- */
66
- private provePaddingTransactions;
67
58
  /**
68
59
  * Cancel any further proving
69
60
  */
70
61
  cancel(): void;
71
- /**
72
- * Extract the block header from public inputs.
73
- * @returns The header of this proving state's block.
74
- */
75
- private extractBlockHeaderFromPublicInputs;
76
- /**
77
- * Collect all new nullifiers, commitments, and contracts from all txs in a block
78
- * @returns The array of non empty tx effects.
79
- */
80
- private extractTxEffects;
81
62
  /**
82
63
  * Returns the proof for the current epoch.
83
64
  */
@@ -91,7 +72,6 @@ export declare class ProvingOrchestrator implements EpochProver {
91
72
  * @param provingState - The proving state being worked on
92
73
  */
93
74
  private prepareTransaction;
94
- private enqueueFirstProofs;
95
75
  /**
96
76
  * Enqueue a job to be scheduled
97
77
  * @param provingState - The proving state object being operated on
@@ -101,31 +81,20 @@ export declare class ProvingOrchestrator implements EpochProver {
101
81
  private deferredProving;
102
82
  private prepareBaseRollupInputs;
103
83
  private enqueueBaseRollup;
104
- private enqueueTube;
84
+ private getOrEnqueueTube;
85
+ private doEnqueueTube;
105
86
  private enqueueMergeRollup;
106
87
  private enqueueBlockRootRollup;
107
88
  private enqueueBaseParityCircuit;
89
+ private checkAndEnqueueRootParityCircuit;
108
90
  private enqueueRootParityCircuit;
109
91
  private enqueueBlockMergeRollup;
92
+ private enqueueEpochPadding;
110
93
  private enqueueRootRollup;
94
+ private checkAndEnqueueNextMergeRollup;
111
95
  private checkAndEnqueueBlockRootRollup;
96
+ private checkAndEnqueueNextBlockMergeRollup;
112
97
  private checkAndEnqueueRootRollup;
113
- /**
114
- * Stores the inputs to a merge/root circuit and enqueues the circuit if ready
115
- * @param provingState - The proving state being operated on
116
- * @param currentLevel - The level of the merge/root circuit
117
- * @param currentIndex - The index of the merge/root circuit
118
- * @param mergeInputData - The inputs to be stored
119
- */
120
- private storeAndExecuteNextMergeLevel;
121
- /**
122
- * Stores the inputs to a block merge/root circuit and enqueues the circuit if ready
123
- * @param provingState - The proving state being operated on
124
- * @param currentLevel - The level of the merge/root circuit
125
- * @param currentIndex - The index of the merge/root circuit
126
- * @param mergeInputData - The inputs to be stored
127
- */
128
- private storeAndExecuteNextBlockMergeLevel;
129
98
  /**
130
99
  * Executes the VM circuit for a public function, will enqueue the corresponding kernel if the
131
100
  * previous kernel is ready
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAGzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAG9B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAGL,KAAK,sBAAsB,EAG3B,KAAK,WAAW,EAEhB,EAAE,EACF,KAAK,eAAe,EAcrB,MAAM,oBAAoB,CAAC;AAqB5B,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,MAAM,EAAiC,MAAM,yBAAyB,CAAC;AA8BvH;;;;;;;;;GASG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IAUnD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAZ3B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,cAAc,CAAC,CAA4E;IAEnG,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,GAAG,CAAqD;gBAGtD,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,mBAAmB,EACnC,eAAe,EAAE,eAAe,EACf,QAAQ,GAAE,EAAY;IAKzC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEM,WAAW,IAAI,EAAE;IAIxB;;OAEG;IACI,KAAK;IAIL,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAW1F;;;;;OAKG;IAIU,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE;IAyEjF;;;OAGG;IAIU,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CtD;;;OAGG;IAIU,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA6DnG,oDAAoD;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAiBvC,OAAO,CAAC,QAAQ;YAuDF,UAAU;cAmCR,kCAAkC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,sBAAsB;IAavG,OAAO,CAAC,iBAAiB;IA6CzB;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;OAEG;IACI,MAAM;IAQb;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAmB1C;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACU,aAAa;;;;IAwB1B;;;;OAIG;YACW,kBAAkB;IAShC,OAAO,CAAC,kBAAkB;IAe1B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;YA4DT,uBAAuB;IAqCrC,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,WAAW;IAkCnB,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,sBAAsB;IAmG9B,OAAO,CAAC,wBAAwB;IAmChC,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,uBAAuB;IAiC/B,OAAO,CAAC,iBAAiB;IAuCzB,OAAO,CAAC,8BAA8B;IAyBtC,OAAO,CAAC,yBAAyB;IAQjC;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IA+BrC;;;;;;OAMG;IACH,OAAO,CAAC,kCAAkC;IAqC1C;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IA8CjB,OAAO,CAAC,4BAA4B;CAWrC"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,EAAE,EAER,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAG9B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAGL,KAAK,sBAAsB,EAE3B,WAAW,EAEX,EAAE,EACF,eAAe,EAUhB,MAAM,oBAAoB,CAAC;AAkB5B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAoBjC;;;;;;;;;GASG;AAEH;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IASnD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAV3B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,kBAAkB,CAAyB;IAEnD,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,GAAG,CAAqD;gBAGtD,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,mBAAmB,EAClB,QAAQ,GAAE,EAAY,EACvC,eAAe,GAAE,eAAsC;IAKzD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEM,WAAW,IAAI,EAAE;IAIjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAW1F;;;;;OAKG;IAIU,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE;IA0FjF;;;OAGG;IAIU,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDtD;;;OAGG;IAEI,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE;IAclC;;;OAGG;IAIU,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBnG,oDAAoD;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;YAQzB,UAAU;cAmCR,kCAAkC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,sBAAsB;IAWvG;;OAEG;IACI,MAAM;IAQb;;OAEG;IACU,aAAa;;;;IAoB1B;;;;OAIG;YACW,kBAAkB;IAShC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;YA4DT,uBAAuB;IAmCrC,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,sBAAsB;IA2D9B,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,gCAAgC;IAUxC,OAAO,CAAC,wBAAwB;IA4BhC,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,mBAAmB;IA8B3B,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,8BAA8B;IAatC,OAAO,CAAC,8BAA8B;IAyBtC,OAAO,CAAC,mCAAmC;IAa3C,OAAO,CAAC,yBAAyB;IASjC;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IA8CjB,OAAO,CAAC,4BAA4B;CAWrC"}