@aztec/prover-client 0.0.1-commit.b655e406 → 0.0.1-commit.d3ec352c

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 (104) hide show
  1. package/dest/block-factory/index.d.ts +1 -1
  2. package/dest/block-factory/light.d.ts +7 -7
  3. package/dest/block-factory/light.d.ts.map +1 -1
  4. package/dest/block-factory/light.js +36 -22
  5. package/dest/config.d.ts +1 -1
  6. package/dest/index.d.ts +1 -1
  7. package/dest/light/lightweight_checkpoint_builder.d.ts +29 -0
  8. package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
  9. package/dest/light/lightweight_checkpoint_builder.js +107 -0
  10. package/dest/mocks/fixtures.d.ts +1 -4
  11. package/dest/mocks/fixtures.d.ts.map +1 -1
  12. package/dest/mocks/fixtures.js +5 -15
  13. package/dest/mocks/test_context.d.ts +26 -45
  14. package/dest/mocks/test_context.d.ts.map +1 -1
  15. package/dest/mocks/test_context.js +99 -112
  16. package/dest/orchestrator/block-building-helpers.d.ts +15 -17
  17. package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
  18. package/dest/orchestrator/block-building-helpers.js +85 -110
  19. package/dest/orchestrator/block-proving-state.d.ts +16 -10
  20. package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
  21. package/dest/orchestrator/block-proving-state.js +81 -20
  22. package/dest/orchestrator/checkpoint-proving-state.d.ts +7 -7
  23. package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -1
  24. package/dest/orchestrator/checkpoint-proving-state.js +13 -15
  25. package/dest/orchestrator/epoch-proving-state.d.ts +8 -7
  26. package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
  27. package/dest/orchestrator/epoch-proving-state.js +3 -3
  28. package/dest/orchestrator/index.d.ts +1 -1
  29. package/dest/orchestrator/orchestrator.d.ts +7 -7
  30. package/dest/orchestrator/orchestrator.d.ts.map +1 -1
  31. package/dest/orchestrator/orchestrator.js +24 -30
  32. package/dest/orchestrator/orchestrator_metrics.d.ts +1 -1
  33. package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
  34. package/dest/orchestrator/tx-proving-state.d.ts +1 -1
  35. package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
  36. package/dest/orchestrator/tx-proving-state.js +2 -11
  37. package/dest/prover-client/factory.d.ts +1 -1
  38. package/dest/prover-client/index.d.ts +1 -1
  39. package/dest/prover-client/prover-client.d.ts +1 -1
  40. package/dest/prover-client/prover-client.d.ts.map +1 -1
  41. package/dest/prover-client/server-epoch-prover.d.ts +7 -6
  42. package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
  43. package/dest/prover-client/server-epoch-prover.js +2 -2
  44. package/dest/proving_broker/broker_prover_facade.d.ts +20 -20
  45. package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
  46. package/dest/proving_broker/broker_prover_facade.js +3 -2
  47. package/dest/proving_broker/config.d.ts +11 -7
  48. package/dest/proving_broker/config.d.ts.map +1 -1
  49. package/dest/proving_broker/config.js +7 -1
  50. package/dest/proving_broker/factory.d.ts +1 -1
  51. package/dest/proving_broker/fixtures.d.ts +3 -2
  52. package/dest/proving_broker/fixtures.d.ts.map +1 -1
  53. package/dest/proving_broker/fixtures.js +2 -1
  54. package/dest/proving_broker/index.d.ts +1 -1
  55. package/dest/proving_broker/proof_store/factory.d.ts +2 -2
  56. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +1 -1
  57. package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -1
  58. package/dest/proving_broker/proof_store/index.d.ts +1 -1
  59. package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
  60. package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
  61. package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
  62. package/dest/proving_broker/proving_agent.d.ts +1 -1
  63. package/dest/proving_broker/proving_agent.d.ts.map +1 -1
  64. package/dest/proving_broker/proving_agent_instrumentation.d.ts +1 -1
  65. package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +1 -1
  66. package/dest/proving_broker/proving_broker.d.ts +2 -2
  67. package/dest/proving_broker/proving_broker.d.ts.map +1 -1
  68. package/dest/proving_broker/proving_broker.js +2 -1
  69. package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
  70. package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
  71. package/dest/proving_broker/proving_broker_database/persisted.d.ts +3 -2
  72. package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
  73. package/dest/proving_broker/proving_broker_database/persisted.js +3 -2
  74. package/dest/proving_broker/proving_broker_database.d.ts +3 -2
  75. package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
  76. package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
  77. package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
  78. package/dest/proving_broker/proving_job_controller.d.ts +3 -2
  79. package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
  80. package/dest/proving_broker/rpc.d.ts +4 -4
  81. package/dest/test/mock_proof_store.d.ts +3 -3
  82. package/dest/test/mock_proof_store.d.ts.map +1 -1
  83. package/dest/test/mock_prover.d.ts +3 -4
  84. package/dest/test/mock_prover.d.ts.map +1 -1
  85. package/package.json +18 -17
  86. package/src/block-factory/light.ts +39 -42
  87. package/src/light/lightweight_checkpoint_builder.ts +143 -0
  88. package/src/mocks/fixtures.ts +5 -28
  89. package/src/mocks/test_context.ts +143 -174
  90. package/src/orchestrator/block-building-helpers.ts +124 -204
  91. package/src/orchestrator/block-proving-state.ts +102 -24
  92. package/src/orchestrator/checkpoint-proving-state.ts +22 -19
  93. package/src/orchestrator/epoch-proving-state.ts +8 -6
  94. package/src/orchestrator/orchestrator.ts +31 -38
  95. package/src/orchestrator/tx-proving-state.ts +3 -16
  96. package/src/prover-client/server-epoch-prover.ts +5 -6
  97. package/src/proving_broker/broker_prover_facade.ts +21 -20
  98. package/src/proving_broker/config.ts +7 -0
  99. package/src/proving_broker/fixtures.ts +7 -2
  100. package/src/proving_broker/proving_broker.ts +2 -1
  101. package/src/proving_broker/proving_broker_database/memory.ts +2 -1
  102. package/src/proving_broker/proving_broker_database/persisted.ts +5 -4
  103. package/src/proving_broker/proving_broker_database.ts +2 -1
  104. package/src/proving_broker/proving_job_controller.ts +2 -1
@@ -1,68 +1,61 @@
1
1
  import { TestCircuitProver } from '@aztec/bb-prover';
2
- import { SpongeBlob } from '@aztec/blob-lib';
3
2
  import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
4
- import { padArrayEnd, times, timesParallel } from '@aztec/foundation/collection';
3
+ import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
4
+ import { padArrayEnd, times, timesAsync } from '@aztec/foundation/collection';
5
5
  import { Fr } from '@aztec/foundation/fields';
6
- import { TestDateProvider } from '@aztec/foundation/timer';
7
6
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
8
7
  import { ProtocolContractsList } from '@aztec/protocol-contracts';
9
8
  import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
10
- import { SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
11
- import { PublicProcessorFactory } from '@aztec/simulator/server';
12
9
  import { PublicDataWrite } from '@aztec/stdlib/avm';
13
10
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
14
11
  import { EthAddress } from '@aztec/stdlib/block';
15
- import { getCheckpointBlobFields } from '@aztec/stdlib/checkpoint';
16
- import { makeBloatedProcessedTx } from '@aztec/stdlib/testing';
12
+ import { mockProcessedTx } from '@aztec/stdlib/testing';
17
13
  import { MerkleTreeId, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
18
14
  import { TreeSnapshots } from '@aztec/stdlib/tx';
19
15
  import { NativeWorldStateService } from '@aztec/world-state/native';
20
16
  import { promises as fs } from 'fs';
21
- import { buildBlockWithCleanDB } from '../block-factory/light.js';
22
- import { getTreeSnapshot } from '../orchestrator/block-building-helpers.js';
17
+ import { LightweightCheckpointBuilder } from '../light/lightweight_checkpoint_builder.js';
18
+ import { buildFinalBlobChallenges, getTreeSnapshot, insertSideEffects } from '../orchestrator/block-building-helpers.js';
23
19
  import { ProvingOrchestrator } from '../orchestrator/index.js';
24
20
  import { BrokerCircuitProverFacade } from '../proving_broker/broker_prover_facade.js';
25
21
  import { TestBroker } from '../test/mock_prover.js';
26
- import { getEnvironmentConfig, getSimulator, makeCheckpointConstants, makeGlobals, updateExpectedTreesFromTxs } from './fixtures.js';
22
+ import { getEnvironmentConfig, getSimulator, makeCheckpointConstants, makeGlobals } from './fixtures.js';
27
23
  export class TestContext {
28
24
  worldState;
29
- firstCheckpointNumber;
30
- globalVariables;
31
25
  prover;
32
26
  broker;
33
27
  brokerProverFacade;
34
28
  orchestrator;
35
- blockNumber;
36
29
  feePayer;
37
30
  directoriesToCleanup;
38
31
  logger;
39
32
  headers;
33
+ checkpoints;
34
+ nextCheckpointIndex;
35
+ nextBlockNumber;
36
+ epochNumber;
40
37
  feePayerBalance;
41
- constructor(worldState, firstCheckpointNumber, globalVariables, prover, broker, brokerProverFacade, orchestrator, blockNumber, feePayer, initialFeePayerBalance, directoriesToCleanup, logger){
38
+ constructor(worldState, prover, broker, brokerProverFacade, orchestrator, feePayer, initialFeePayerBalance, directoriesToCleanup, logger){
42
39
  this.worldState = worldState;
43
- this.firstCheckpointNumber = firstCheckpointNumber;
44
- this.globalVariables = globalVariables;
45
40
  this.prover = prover;
46
41
  this.broker = broker;
47
42
  this.brokerProverFacade = brokerProverFacade;
48
43
  this.orchestrator = orchestrator;
49
- this.blockNumber = blockNumber;
50
44
  this.feePayer = feePayer;
51
45
  this.directoriesToCleanup = directoriesToCleanup;
52
46
  this.logger = logger;
53
47
  this.headers = new Map();
48
+ this.checkpoints = [];
49
+ this.nextCheckpointIndex = 0;
50
+ this.nextBlockNumber = 1;
51
+ this.epochNumber = 1;
54
52
  this.feePayerBalance = initialFeePayerBalance;
55
53
  }
56
54
  get epochProver() {
57
55
  return this.orchestrator;
58
56
  }
59
- getCheckpointConstants(checkpointIndex = 0) {
60
- return makeCheckpointConstants(this.firstCheckpointNumber.toNumber() + checkpointIndex);
61
- }
62
- static async new(logger, { proverCount = 4, createProver = async (bbConfig)=>new TestCircuitProver(await getSimulator(bbConfig, logger)), slotNumber = 1, blockNumber = 1 } = {}) {
57
+ static async new(logger, { proverCount = 4, createProver = async (bbConfig)=>new TestCircuitProver(await getSimulator(bbConfig, logger)) } = {}) {
63
58
  const directoriesToCleanup = [];
64
- const firstCheckpointNumber = new Fr(slotNumber);
65
- const globalVariables = makeGlobals(blockNumber, slotNumber);
66
59
  const feePayer = AztecAddress.fromNumber(42222);
67
60
  const initialFeePayerBalance = new Fr(10n ** 20n);
68
61
  const feePayerSlot = await computeFeePayerBalanceLeafSlot(feePayer);
@@ -95,17 +88,11 @@ export class TestContext {
95
88
  const orchestrator = new TestProvingOrchestrator(ws, facade, EthAddress.ZERO);
96
89
  await broker.start();
97
90
  facade.start();
98
- return new this(ws, firstCheckpointNumber, globalVariables, localProver, broker, facade, orchestrator, blockNumber, feePayer, initialFeePayerBalance, directoriesToCleanup, logger);
91
+ return new this(ws, localProver, broker, facade, orchestrator, feePayer, initialFeePayerBalance, directoriesToCleanup, logger);
99
92
  }
100
93
  getFork() {
101
94
  return this.worldState.fork();
102
95
  }
103
- getBlockHeader(blockNumber = 0) {
104
- return blockNumber === 0 ? this.worldState.getCommitted().getInitialHeader() : this.headers.get(blockNumber);
105
- }
106
- getPreviousBlockHeader(currentBlockNumber = this.blockNumber) {
107
- return this.getBlockHeader(currentBlockNumber - 1);
108
- }
109
96
  async cleanup() {
110
97
  await this.brokerProverFacade.stop();
111
98
  await this.broker.stop();
@@ -121,125 +108,125 @@ export class TestContext {
121
108
  }
122
109
  }
123
110
  }
124
- async makeProcessedTx(opts) {
125
- const globalVariables = opts?.globalVariables ?? this.globalVariables;
126
- const blockNumber = globalVariables.blockNumber;
127
- const header = opts?.header ?? this.getBlockHeader(blockNumber - 1);
128
- const tx = await makeBloatedProcessedTx({
129
- header,
130
- vkTreeRoot: getVKTreeRoot(),
131
- protocolContracts: ProtocolContractsList,
132
- globalVariables,
133
- feePayer: this.feePayer,
134
- ...opts
135
- });
136
- this.feePayerBalance = new Fr(this.feePayerBalance.toBigInt() - tx.txEffect.transactionFee.toBigInt());
137
- if (opts?.privateOnly) {
138
- const feePayerSlot = await computeFeePayerBalanceLeafSlot(this.feePayer);
139
- tx.txEffect.publicDataWrites[0] = new PublicDataWrite(feePayerSlot, this.feePayerBalance);
140
- }
141
- return tx;
111
+ startNewEpoch() {
112
+ this.checkpoints = [];
113
+ this.nextCheckpointIndex = 0;
114
+ this.epochNumber++;
142
115
  }
143
- /** Creates a block with the given number of txs and adds it to world-state */ async makePendingBlock(numTxs, { checkpointIndex = 0, numL1ToL2Messages = 0, blockNumber = this.blockNumber, makeProcessedTxOpts = ()=>({}) } = {}) {
144
- const slotNumber = this.firstCheckpointNumber.toNumber() + checkpointIndex;
145
- const globalVariables = makeGlobals(blockNumber, slotNumber);
146
- const blockNum = globalVariables.blockNumber;
147
- const db = await this.worldState.fork();
148
- const l1ToL2Messages = times(numL1ToL2Messages, (i)=>new Fr(blockNum * 100 + i));
149
- const merkleTrees = await this.worldState.fork();
150
- await merkleTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
151
- const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, merkleTrees);
152
- const txs = await timesParallel(numTxs, (i)=>this.makeProcessedTx({
153
- seed: i + blockNum * 1000,
154
- globalVariables,
155
- newL1ToL2Snapshot,
156
- ...makeProcessedTxOpts(i)
157
- }));
158
- await this.setTreeRoots(txs);
159
- const block = await buildBlockWithCleanDB(txs, globalVariables, l1ToL2Messages, db);
160
- this.headers.set(blockNum, block.getBlockHeader());
161
- await this.worldState.handleL2BlockAndMessages(block, l1ToL2Messages);
162
- return {
163
- block,
164
- txs,
165
- l1ToL2Messages
166
- };
116
+ // Return blob fields of all checkpoints in the epoch.
117
+ getBlobFields() {
118
+ return this.checkpoints.map((checkpoint)=>checkpoint.toBlobFields());
167
119
  }
168
- async makePendingBlocksInCheckpoint(numBlocks, { checkpointIndex = 0, numTxsPerBlock = 1, numL1ToL2Messages = 0, firstBlockNumber = this.blockNumber + checkpointIndex * numBlocks, makeGlobalVariablesOpts = ()=>({}), makeProcessedTxOpts = ()=>({}) } = {}) {
169
- const slotNumber = this.firstCheckpointNumber.toNumber() + checkpointIndex;
120
+ async getFinalBlobChallenges() {
121
+ const blobFields = this.getBlobFields();
122
+ return await buildFinalBlobChallenges(blobFields);
123
+ }
124
+ async makeCheckpoint(numBlocks, { numTxsPerBlock = 0, numL1ToL2Messages = 0, makeProcessedTxOpts = ()=>({}), ...constantOpts } = {}) {
125
+ if (numBlocks === 0) {
126
+ throw new Error('Cannot make a checkpoint with 0 blocks. Crate an empty block (numTxsPerBlock = 0) if there are no txs.');
127
+ }
128
+ const checkpointIndex = this.nextCheckpointIndex++;
129
+ const checkpointNumber = CheckpointNumber(checkpointIndex + 1);
130
+ const slotNumber = checkpointNumber * 15; // times an arbitrary number to make it different to the checkpoint number
131
+ const constants = makeCheckpointConstants(slotNumber, constantOpts);
132
+ const fork = await this.worldState.fork();
133
+ // Build l1 to l2 messages.
170
134
  const l1ToL2Messages = times(numL1ToL2Messages, (i)=>new Fr(slotNumber * 100 + i));
171
- const merkleTrees = await this.worldState.fork();
172
- await merkleTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
173
- const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, merkleTrees);
174
- const blockGlobalVariables = times(numBlocks, (i)=>makeGlobals(firstBlockNumber + i, slotNumber, makeGlobalVariablesOpts(firstBlockNumber + i, checkpointIndex)));
135
+ await fork.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
136
+ const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, fork);
137
+ const startBlockNumber = this.nextBlockNumber;
138
+ const previousBlockHeader = this.getBlockHeader(BlockNumber(startBlockNumber - 1));
139
+ // Build global variables.
140
+ const blockGlobalVariables = times(numBlocks, (i)=>makeGlobals(startBlockNumber + i, slotNumber, {
141
+ coinbase: constants.coinbase,
142
+ feeRecipient: constants.feeRecipient,
143
+ gasFees: constants.gasFees
144
+ }));
145
+ this.nextBlockNumber += numBlocks;
146
+ // Build txs.
175
147
  let totalTxs = 0;
176
- const blockTxs = await timesParallel(numBlocks, (blockIndex)=>{
148
+ const blockEndStates = [];
149
+ const blockTxs = await timesAsync(numBlocks, async (blockIndex)=>{
177
150
  const txIndexOffset = totalTxs;
178
151
  const numTxs = typeof numTxsPerBlock === 'number' ? numTxsPerBlock : numTxsPerBlock[blockIndex];
179
152
  totalTxs += numTxs;
180
- return timesParallel(numTxs, (txIndex)=>this.makeProcessedTx({
181
- seed: (txIndexOffset + txIndex + 1) * 321 + (checkpointIndex + 1) * 123456,
153
+ const txs = await timesAsync(numTxs, (txIndex)=>this.makeProcessedTx({
154
+ seed: (txIndexOffset + txIndex + 1) * 321 + (checkpointIndex + 1) * 123456 + this.epochNumber * 0x99999,
182
155
  globalVariables: blockGlobalVariables[blockIndex],
183
- header: this.getBlockHeader(firstBlockNumber - 1),
156
+ anchorBlockHeader: previousBlockHeader,
184
157
  newL1ToL2Snapshot,
185
158
  ...makeProcessedTxOpts(blockGlobalVariables[blockIndex], txIndexOffset + txIndex)
186
159
  }));
160
+ // Insert side effects into the trees.
161
+ const endState = await this.updateTrees(txs, fork);
162
+ blockEndStates.push(endState);
163
+ return txs;
187
164
  });
188
- const blobFields = getCheckpointBlobFields(blockTxs.map((txs)=>txs.map((tx)=>tx.txEffect)));
189
- const spongeBlobState = await SpongeBlob.init(blobFields.length);
165
+ const cleanFork = await this.worldState.fork();
166
+ const builder = await LightweightCheckpointBuilder.startNewCheckpoint(checkpointNumber, constants, l1ToL2Messages, cleanFork);
167
+ // Add tx effects to db and build block headers.
190
168
  const blocks = [];
191
169
  for(let i = 0; i < numBlocks; i++){
192
170
  const isFirstBlock = i === 0;
193
- const blockNumber = firstBlockNumber + i;
194
- const globalVariables = blockGlobalVariables[i];
195
171
  const txs = blockTxs[i];
196
- await this.setTreeRoots(txs);
197
- const fork = await this.worldState.fork();
172
+ const state = blockEndStates[i];
173
+ const block = await builder.addBlock(blockGlobalVariables[i], state, txs);
174
+ const header = block.header;
175
+ this.headers.set(block.number, header);
198
176
  const blockMsgs = isFirstBlock ? l1ToL2Messages : [];
199
- const block = await buildBlockWithCleanDB(txs, globalVariables, blockMsgs, fork, spongeBlobState, isFirstBlock);
200
- const header = block.getBlockHeader();
201
- this.headers.set(blockNumber, header);
202
177
  await this.worldState.handleL2BlockAndMessages(block, blockMsgs, isFirstBlock);
203
- const blockBlobFields = block.body.toBlobFields();
204
- await spongeBlobState.absorb(blockBlobFields);
205
178
  blocks.push({
206
179
  header,
207
180
  txs
208
181
  });
209
182
  }
183
+ const checkpoint = await builder.completeCheckpoint();
184
+ this.checkpoints.push(checkpoint);
210
185
  return {
186
+ constants,
187
+ header: checkpoint.header,
211
188
  blocks,
212
189
  l1ToL2Messages,
213
- blobFields
190
+ previousBlockHeader
214
191
  };
215
192
  }
216
- async processPublicFunctions(txs, { maxTransactions = txs.length, numL1ToL2Messages = 0, contractDataSource } = {}) {
217
- const l1ToL2Messages = times(numL1ToL2Messages, (i)=>new Fr(this.blockNumber * 100 + i));
218
- const merkleTrees = await this.worldState.fork();
219
- await merkleTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
220
- const processorFactory = new PublicProcessorFactory(contractDataSource ?? new SimpleContractDataSource(), new TestDateProvider());
221
- const publicProcessor = processorFactory.create(merkleTrees, this.globalVariables, {
222
- skipFeeEnforcement: false,
223
- clientInitiatedSimulation: false
224
- });
225
- return await publicProcessor.process(txs, {
226
- maxTransactions
193
+ async makeProcessedTx(opts = {}) {
194
+ const tx = await mockProcessedTx({
195
+ vkTreeRoot: getVKTreeRoot(),
196
+ protocolContracts: ProtocolContractsList,
197
+ feePayer: this.feePayer,
198
+ ...opts
227
199
  });
200
+ this.feePayerBalance = new Fr(this.feePayerBalance.toBigInt() - tx.txEffect.transactionFee.toBigInt());
201
+ const feePayerSlot = await computeFeePayerBalanceLeafSlot(this.feePayer);
202
+ const feePaymentPublicDataWrite = new PublicDataWrite(feePayerSlot, this.feePayerBalance);
203
+ tx.txEffect.publicDataWrites[0] = feePaymentPublicDataWrite;
204
+ if (tx.avmProvingRequest) {
205
+ tx.avmProvingRequest.inputs.publicInputs.accumulatedData.publicDataWrites[0] = feePaymentPublicDataWrite;
206
+ }
207
+ return tx;
208
+ }
209
+ getBlockHeader(blockNumber) {
210
+ if (Number(blockNumber) > 0 && Number(blockNumber) >= this.nextBlockNumber) {
211
+ throw new Error(`Block header not built for block number ${blockNumber}.`);
212
+ }
213
+ return Number(blockNumber) === 0 ? this.worldState.getCommitted().getInitialHeader() : this.headers.get(Number(blockNumber));
228
214
  }
229
- async setTreeRoots(txs) {
230
- const db = await this.worldState.fork();
215
+ async updateTrees(txs, fork) {
216
+ let startStateReference = await fork.getStateReference();
217
+ let endStateReference = startStateReference;
231
218
  for (const tx of txs){
232
- const startStateReference = await db.getStateReference();
233
- await updateExpectedTreesFromTxs(db, [
234
- tx
235
- ]);
236
- const endStateReference = await db.getStateReference();
219
+ await insertSideEffects(tx, fork);
220
+ endStateReference = await fork.getStateReference();
237
221
  if (tx.avmProvingRequest) {
222
+ // Update the trees in the avm public inputs so that the proof won't fail.
238
223
  const l1ToL2MessageTree = tx.avmProvingRequest.inputs.publicInputs.startTreeSnapshots.l1ToL2MessageTree;
239
224
  tx.avmProvingRequest.inputs.publicInputs.startTreeSnapshots = new TreeSnapshots(l1ToL2MessageTree, startStateReference.partial.noteHashTree, startStateReference.partial.nullifierTree, startStateReference.partial.publicDataTree);
240
225
  tx.avmProvingRequest.inputs.publicInputs.endTreeSnapshots = new TreeSnapshots(l1ToL2MessageTree, endStateReference.partial.noteHashTree, endStateReference.partial.nullifierTree, endStateReference.partial.publicDataTree);
241
226
  }
227
+ startStateReference = endStateReference;
242
228
  }
229
+ return endStateReference;
243
230
  }
244
231
  }
245
232
  class TestProvingOrchestrator extends ProvingOrchestrator {
@@ -1,13 +1,13 @@
1
1
  import { BatchedBlobAccumulator, SpongeBlob } from '@aztec/blob-lib';
2
2
  import { Fr } from '@aztec/foundation/fields';
3
- import { type Bufferable, type Tuple } from '@aztec/foundation/serialize';
3
+ import { type Bufferable } from '@aztec/foundation/serialize';
4
4
  import { MembershipWitness } from '@aztec/foundation/trees';
5
- import { Body, L2BlockHeader } from '@aztec/stdlib/block';
5
+ import { Body } from '@aztec/stdlib/block';
6
6
  import type { MerkleTreeWriteOperations, PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
7
7
  import { ProofData, RecursiveProof } from '@aztec/stdlib/proofs';
8
8
  import { BlockRollupPublicInputs, PrivateBaseRollupHints, PublicBaseRollupHints, PublicChonkVerifierPrivateInputs } from '@aztec/stdlib/rollup';
9
9
  import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
10
- import { BlockHeader, GlobalVariables, PartialStateReference, type ProcessedTx, Tx } from '@aztec/stdlib/tx';
10
+ import { BlockHeader, GlobalVariables, PartialStateReference, type ProcessedTx, StateReference, Tx } from '@aztec/stdlib/tx';
11
11
  import type { MerkleTreeReadOperations } from '@aztec/world-state';
12
12
  /**
13
13
  * Type representing the names of the trees for the base rollup.
@@ -17,36 +17,34 @@ type BaseTreeNames = 'NoteHashTree' | 'ContractTree' | 'NullifierTree' | 'Public
17
17
  * Type representing the names of the trees.
18
18
  */
19
19
  export type TreeNames = BaseTreeNames | 'L1ToL2MessageTree' | 'Archive';
20
- export declare const insertSideEffectsAndBuildBaseRollupHints: (tx: ProcessedTx, lastArchive: AppendOnlyTreeSnapshot, newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, startSpongeBlob: SpongeBlob, proverId: Fr, db: MerkleTreeWriteOperations) => Promise<PublicBaseRollupHints | PrivateBaseRollupHints>;
21
- export declare function getChonkProofFromTx(tx: Tx | ProcessedTx): RecursiveProof<2084>;
20
+ export declare const insertSideEffectsAndBuildBaseRollupHints: (tx: ProcessedTx, lastArchive: AppendOnlyTreeSnapshot, newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, startSpongeBlob: SpongeBlob, proverId: Fr, db: MerkleTreeWriteOperations) => Promise<PrivateBaseRollupHints | PublicBaseRollupHints>;
21
+ export declare const insertSideEffects: (tx: ProcessedTx, db: MerkleTreeWriteOperations) => Promise<{
22
+ nullifierInsertionResult: import("@aztec/stdlib/trees").BatchInsertionResult<number, number>;
23
+ publicDataInsertionResult: import("@aztec/stdlib/trees").SequentialInsertionResult<number>;
24
+ }>;
25
+ export declare function getChonkProofFromTx(tx: Tx | ProcessedTx): RecursiveProof<1963>;
22
26
  export declare function getPublicChonkVerifierPrivateInputsFromTx(tx: Tx | ProcessedTx, proverId: Fr): PublicChonkVerifierPrivateInputs;
23
27
  export declare const buildBlobHints: (blobFields: Fr[]) => {
24
28
  blobCommitments: import("@aztec/foundation/fields").BLS12Point[];
25
29
  blobs: import("@aztec/blob-lib").Blob[];
26
30
  blobsHash: Fr;
27
31
  };
28
- export declare const buildBlobDataFromTxs: (txsPerCheckpoint: ProcessedTx[][]) => Promise<{
29
- blobFieldsLengths: number[];
30
- finalBlobChallenges: import("@aztec/blob-lib").FinalBlobBatchingChallenges;
31
- }>;
32
32
  export declare const buildFinalBlobChallenges: (blobFieldsPerCheckpoint: Fr[][]) => Promise<import("@aztec/blob-lib").FinalBlobBatchingChallenges>;
33
33
  export declare const accumulateBlobs: (blobFields: Fr[], startBlobAccumulator: BatchedBlobAccumulator) => Promise<BatchedBlobAccumulator>;
34
34
  export declare const buildHeaderFromCircuitOutputs: (blockRootRollupOutput: BlockRollupPublicInputs) => Promise<BlockHeader>;
35
- export declare const buildHeaderAndBodyFromTxs: (txs: ProcessedTx[], globalVariables: GlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeReadOperations, startSpongeBlob?: SpongeBlob | undefined) => Promise<{
36
- header: L2BlockHeader;
35
+ export declare const buildHeaderAndBodyFromTxs: (txs: ProcessedTx[], lastArchive: AppendOnlyTreeSnapshot, endState: StateReference, globalVariables: GlobalVariables, startSpongeBlob: SpongeBlob, isFirstBlock: boolean) => Promise<{
36
+ header: BlockHeader;
37
37
  body: Body;
38
+ blockBlobFields: Fr[];
38
39
  }>;
39
- export declare const buildBlockHeaderFromTxs: (txs: ProcessedTx[], globalVariables: GlobalVariables, startSpongeBlob: SpongeBlob, db: MerkleTreeReadOperations) => Promise<BlockHeader>;
40
- /** Computes the inHash for a block's ContentCommitment given its l1 to l2 messages. */
41
- export declare function computeInHashFromL1ToL2Messages(unpaddedL1ToL2Messages: Fr[]): Promise<Fr>;
42
- export declare function getLastSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<Tuple<Fr, {
40
+ export declare function getLastSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<import("@aztec/foundation/serialize").Tuple<Fr, {
43
41
  readonly 1: 42;
44
42
  readonly 4: 30;
45
43
  readonly 3: 36;
46
44
  readonly 0: 42;
47
45
  readonly 2: 40;
48
46
  }[TID]>>;
49
- export declare function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<Tuple<Fr, {
47
+ export declare function getRootTreeSiblingPath<TID extends MerkleTreeId>(treeId: TID, db: MerkleTreeReadOperations): Promise<import("@aztec/foundation/serialize").Tuple<Fr, {
50
48
  readonly 1: 42;
51
49
  readonly 4: 30;
52
50
  readonly 3: 36;
@@ -61,4 +59,4 @@ export declare function validatePartialState(partialState: PartialStateReference
61
59
  export declare function validateTx(tx: ProcessedTx): void;
62
60
  export declare function toProofData<T extends Bufferable, PROOF_LENGTH extends number>({ inputs, proof, verificationKey }: PublicInputsAndRecursiveProof<T, PROOF_LENGTH>, vkIndex?: number): ProofData<T, PROOF_LENGTH>;
63
61
  export {};
64
- //# sourceMappingURL=block-building-helpers.d.ts.map
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYnVpbGRpbmctaGVscGVycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9ibG9jay1idWlsZGluZy1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUtYLE1BQU0saUJBQWlCLENBQUM7QUFpQnpCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQWdDLE1BQU0sNkJBQTZCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJNUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFaEgsT0FBTyxFQUFTLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsZ0NBQWdDLEVBRWpDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixZQUFZLEVBSWIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsS0FBSyxXQUFXLEVBQ2hCLGNBQWMsRUFDZCxFQUFFLEVBQ0gsTUFBTSxrQkFBa0IsQ0FBQztBQUcxQixPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5FOztHQUVHO0FBQ0gsS0FBSyxhQUFhLEdBQUcsY0FBYyxHQUFHLGNBQWMsR0FBRyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7QUFDMUY7O0dBRUc7QUFDSCxNQUFNLE1BQU0sU0FBUyxHQUFHLGFBQWEsR0FBRyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFHeEUsZUFBTyxNQUFNLHdDQUF3QyxtUEEwSHBELENBQUM7QUFFRixlQUFPLE1BQU0saUJBQWlCOzs7RUFvQzdCLENBQUM7QUFFRix3QkFBZ0IsbUJBQW1CLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLHdCQVF2RDtBQUVELHdCQUFnQix5Q0FBeUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFBRSxvQ0FPM0Y7QUFLRCxlQUFPLE1BQU0sY0FBYzs7OztDQUsxQixDQUFDO0FBRUYsZUFBTyxNQUFNLHdCQUF3QixxR0FFcEMsQ0FBQztBQUVGLGVBQU8sTUFBTSxlQUFlLHFHQU8zQixDQUFDO0FBRUYsZUFBTyxNQUFNLDZCQUE2QiwwRUEyQnpDLENBQUM7QUFFRixlQUFPLE1BQU0seUJBQXlCOzs7O0VBMERyQyxDQUFDO0FBRUYsd0JBQXNCLGtCQUFrQixDQUFDLEdBQUcsU0FBUyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsd0JBQXdCOzs7Ozs7U0FJM0c7QUFFRCx3QkFBc0Isc0JBQXNCLENBQUMsR0FBRyxTQUFTLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSx3QkFBd0I7Ozs7OztTQUkvRztBQUVELHdCQUFzQixlQUFlLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBR3JIO0FBRUQsd0JBQWdCLDBCQUEwQixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsd0JBTXJFO0FBRUQsd0JBQXNCLHFCQUFxQixDQUN6QyxNQUFNLEVBQUUsWUFBWSxFQUNwQixhQUFhLEVBQUUsTUFBTSxFQUNyQixFQUFFLEVBQUUsd0JBQXdCLEdBQzNCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQU1mO0FBR0Qsd0JBQXNCLHVCQUF1QixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQzVELEtBQUssRUFBRSxFQUFFLEVBQ1QsTUFBTSxFQUFFLFlBQVksRUFDcEIsTUFBTSxFQUFFLENBQUMsRUFDVCxFQUFFLEVBQUUsd0JBQXdCLEdBQzNCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQVkvQjtBQUVELHdCQUFnQixvQkFBb0IsQ0FDbEMsWUFBWSxFQUFFLHFCQUFxQixFQUNuQyxhQUFhLEVBQUUsR0FBRyxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxRQVN6RDtBQXFCRCx3QkFBZ0IsVUFBVSxDQUFDLEVBQUUsRUFBRSxXQUFXLFFBY3pDO0FBRUQsd0JBQWdCLFdBQVcsQ0FBQyxDQUFDLFNBQVMsVUFBVSxFQUFFLFlBQVksU0FBUyxNQUFNLEVBQzNFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQ2xGLE9BQU8sQ0FBQyxFQUFFLE1BQU0sOEJBS2pCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"block-building-helpers.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-building-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,UAAU,EAKX,MAAM,iBAAiB,CAAC;AAiBzB,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,UAAU,EAAgC,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAI5D,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAEhH,OAAO,EAAS,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAEL,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,gCAAgC,EAEjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,YAAY,EAIb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,KAAK,WAAW,EAChB,cAAc,EACd,EAAE,EACH,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEnE;;GAEG;AACH,KAAK,aAAa,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAC1F;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAGxE,eAAO,MAAM,wCAAwC,mPA0HpD,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;EAoC7B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,GAAG,WAAW,wBAQvD;AAED,wBAAgB,yCAAyC,CAAC,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,EAAE,oCAO3F;AAKD,eAAO,MAAM,cAAc;;;;CAK1B,CAAC;AAEF,eAAO,MAAM,wBAAwB,qGAEpC,CAAC;AAEF,eAAO,MAAM,eAAe,qGAO3B,CAAC;AAEF,eAAO,MAAM,6BAA6B,0EA2BzC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;EA0DrC,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,wBAAwB;;;;;;SAI3G;AAED,wBAAsB,sBAAsB,CAAC,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,wBAAwB;;;;;;SAI/G;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,wBAAwB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAGrH;AAED,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,wBAMrE;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,wBAAwB,GAC3B,OAAO,CAAC,EAAE,EAAE,CAAC,CAMf;AAGD,wBAAsB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAC5D,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,CAAC,EACT,EAAE,EAAE,wBAAwB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAY/B;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,qBAAqB,EACnC,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC,QASzD;AAqBD,wBAAgB,UAAU,CAAC,EAAE,EAAE,WAAW,QAczC;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,EAAE,YAAY,SAAS,MAAM,EAC3E,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,6BAA6B,CAAC,CAAC,EAAE,YAAY,CAAC,EAClF,OAAO,CAAC,EAAE,MAAM,8BAKjB"}