@aztec/prover-node 3.0.0-nightly.20250917 → 3.0.0-nightly.20250918
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAA+B,MAAM,6BAA6B,CAAC;AAEpG;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAnBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAClD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACxD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAOpE,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIhC,cAAc,IAAI,MAAM;IAIxB,WAAW,IAAI,IAAI,GAAG,SAAS;IAI/B,cAAc,IAAI,mBAAmB;IAI5C,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IAIU,GAAG;IAoJhB;;;OAGG;YACW,UAAU;IAgBxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC;IASjE,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;YACW,kBAAkB;IAiChC,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
|
|
@@ -4,7 +4,6 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
4
4
|
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
}
|
|
7
|
-
import { BatchedBlob, Blob } from '@aztec/blob-lib';
|
|
8
7
|
import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
9
8
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
10
9
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
@@ -12,7 +11,11 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
12
11
|
import { createLogger } from '@aztec/foundation/log';
|
|
13
12
|
import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
14
13
|
import { Timer } from '@aztec/foundation/timer';
|
|
14
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
15
|
+
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
16
|
+
import { buildFinalBlobChallenges } from '@aztec/prover-client/helpers';
|
|
15
17
|
import { EpochProvingJobTerminalState } from '@aztec/stdlib/interfaces/server';
|
|
18
|
+
import { CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
16
19
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
17
20
|
import { Attributes, trackSpan } from '@aztec/telemetry-client';
|
|
18
21
|
import * as crypto from 'node:crypto';
|
|
@@ -108,9 +111,13 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
|
|
|
108
111
|
const { promise, resolve } = promiseWithResolvers();
|
|
109
112
|
this.runPromise = promise;
|
|
110
113
|
try {
|
|
111
|
-
const
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
+
const firstCheckpointNumber = this.blocks[0].header.globalVariables.slotNumber;
|
|
115
|
+
const blobFieldsPerCheckpoint = this.blocks.map((block)=>block.body.toBlobFields());
|
|
116
|
+
const finalBlobBatchingChallenges = await buildFinalBlobChallenges(blobFieldsPerCheckpoint);
|
|
117
|
+
// TODO(#17027): Enable multiple blocks per checkpoint.
|
|
118
|
+
// Total number of checkpoints equals number of blocks because we currently build a checkpoint with only one block.
|
|
119
|
+
const totalNumCheckpoints = epochSizeBlocks;
|
|
120
|
+
this.prover.startNewEpoch(epochNumber, firstCheckpointNumber, totalNumCheckpoints, finalBlobBatchingChallenges);
|
|
114
121
|
await this.prover.startTubeCircuits(Array.from(this.txs.values()));
|
|
115
122
|
await asyncPool(this.config.parallelBlockLimit ?? 32, this.blocks, async (block)=>{
|
|
116
123
|
this.checkState();
|
|
@@ -129,8 +136,24 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
|
|
|
129
136
|
uuid: this.uuid,
|
|
130
137
|
...globalVariables
|
|
131
138
|
});
|
|
139
|
+
const checkpointConstants = CheckpointConstantData.from({
|
|
140
|
+
chainId: globalVariables.chainId,
|
|
141
|
+
version: globalVariables.version,
|
|
142
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
143
|
+
protocolContractTreeRoot: protocolContractTreeRoot,
|
|
144
|
+
proverId: this.prover.getProverId().toField(),
|
|
145
|
+
slotNumber: globalVariables.slotNumber,
|
|
146
|
+
coinbase: globalVariables.coinbase,
|
|
147
|
+
feeRecipient: globalVariables.feeRecipient,
|
|
148
|
+
gasFees: globalVariables.gasFees
|
|
149
|
+
});
|
|
150
|
+
// TODO(#17027): Enable multiple blocks per checkpoint.
|
|
151
|
+
// Each checkpoint has only one block.
|
|
152
|
+
const totalNumBlocks = 1;
|
|
153
|
+
const checkpointIndex = block.number - fromBlock;
|
|
154
|
+
await this.prover.startNewCheckpoint(checkpointConstants, l1ToL2Messages, totalNumBlocks, blobFieldsPerCheckpoint[checkpointIndex].length, previousHeader);
|
|
132
155
|
// Start block proving
|
|
133
|
-
await this.prover.startNewBlock(
|
|
156
|
+
await this.prover.startNewBlock(block.number, globalVariables.timestamp, txs.length);
|
|
134
157
|
// Process public fns
|
|
135
158
|
const db = await this.createFork(block.number - 1, l1ToL2Messages);
|
|
136
159
|
const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, true);
|
|
@@ -143,7 +166,8 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
|
|
|
143
166
|
uuid: this.uuid
|
|
144
167
|
});
|
|
145
168
|
// Mark block as completed to pad it
|
|
146
|
-
|
|
169
|
+
const expectedBlockHeader = block.getBlockHeader();
|
|
170
|
+
await this.prover.setBlockCompleted(block.number, expectedBlockHeader);
|
|
147
171
|
});
|
|
148
172
|
const executionTime = timer.ms();
|
|
149
173
|
this.progressState('awaiting-prover');
|
|
@@ -278,7 +302,7 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
|
|
|
278
302
|
/* Returns the header for the given block number based on the epoch proving job data. */ getBlockHeader(blockNumber) {
|
|
279
303
|
const block = this.blocks.find((b)=>b.number === blockNumber);
|
|
280
304
|
if (block) {
|
|
281
|
-
return block.
|
|
305
|
+
return block.getBlockHeader();
|
|
282
306
|
}
|
|
283
307
|
if (blockNumber === Number(this.data.previousBlockHeader.getBlockNumber())) {
|
|
284
308
|
return this.data.previousBlockHeader;
|
|
@@ -172,7 +172,7 @@ export class ProverNodePublisher {
|
|
|
172
172
|
{
|
|
173
173
|
previousArchive: args.publicInputs.previousArchiveRoot.toString(),
|
|
174
174
|
endArchive: args.publicInputs.endArchiveRoot.toString(),
|
|
175
|
-
proverId: EthAddress.fromField(args.publicInputs.proverId).toString()
|
|
175
|
+
proverId: EthAddress.fromField(args.publicInputs.constants.proverId).toString()
|
|
176
176
|
} /*_args*/ ,
|
|
177
177
|
makeTuple(AZTEC_MAX_EPOCH_DURATION * 2, (i)=>i % 2 === 0 ? args.publicInputs.fees[i / 2].recipient.toField().toString() : args.publicInputs.fees[(i - 1) / 2].value.toString()),
|
|
178
178
|
args.batchedBlobInputs.getEthBlobEvaluationInputs()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-node",
|
|
3
|
-
"version": "3.0.0-nightly.
|
|
3
|
+
"version": "3.0.0-nightly.20250918",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -56,27 +56,27 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@aztec/archiver": "3.0.0-nightly.
|
|
60
|
-
"@aztec/bb-prover": "3.0.0-nightly.
|
|
61
|
-
"@aztec/blob-lib": "3.0.0-nightly.
|
|
62
|
-
"@aztec/blob-sink": "3.0.0-nightly.
|
|
63
|
-
"@aztec/constants": "3.0.0-nightly.
|
|
64
|
-
"@aztec/epoch-cache": "3.0.0-nightly.
|
|
65
|
-
"@aztec/ethereum": "3.0.0-nightly.
|
|
66
|
-
"@aztec/foundation": "3.0.0-nightly.
|
|
67
|
-
"@aztec/kv-store": "3.0.0-nightly.
|
|
68
|
-
"@aztec/l1-artifacts": "3.0.0-nightly.
|
|
69
|
-
"@aztec/node-keystore": "3.0.0-nightly.
|
|
70
|
-
"@aztec/node-lib": "3.0.0-nightly.
|
|
71
|
-
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.
|
|
72
|
-
"@aztec/p2p": "3.0.0-nightly.
|
|
73
|
-
"@aztec/protocol-contracts": "3.0.0-nightly.
|
|
74
|
-
"@aztec/prover-client": "3.0.0-nightly.
|
|
75
|
-
"@aztec/sequencer-client": "3.0.0-nightly.
|
|
76
|
-
"@aztec/simulator": "3.0.0-nightly.
|
|
77
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
78
|
-
"@aztec/telemetry-client": "3.0.0-nightly.
|
|
79
|
-
"@aztec/world-state": "3.0.0-nightly.
|
|
59
|
+
"@aztec/archiver": "3.0.0-nightly.20250918",
|
|
60
|
+
"@aztec/bb-prover": "3.0.0-nightly.20250918",
|
|
61
|
+
"@aztec/blob-lib": "3.0.0-nightly.20250918",
|
|
62
|
+
"@aztec/blob-sink": "3.0.0-nightly.20250918",
|
|
63
|
+
"@aztec/constants": "3.0.0-nightly.20250918",
|
|
64
|
+
"@aztec/epoch-cache": "3.0.0-nightly.20250918",
|
|
65
|
+
"@aztec/ethereum": "3.0.0-nightly.20250918",
|
|
66
|
+
"@aztec/foundation": "3.0.0-nightly.20250918",
|
|
67
|
+
"@aztec/kv-store": "3.0.0-nightly.20250918",
|
|
68
|
+
"@aztec/l1-artifacts": "3.0.0-nightly.20250918",
|
|
69
|
+
"@aztec/node-keystore": "3.0.0-nightly.20250918",
|
|
70
|
+
"@aztec/node-lib": "3.0.0-nightly.20250918",
|
|
71
|
+
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20250918",
|
|
72
|
+
"@aztec/p2p": "3.0.0-nightly.20250918",
|
|
73
|
+
"@aztec/protocol-contracts": "3.0.0-nightly.20250918",
|
|
74
|
+
"@aztec/prover-client": "3.0.0-nightly.20250918",
|
|
75
|
+
"@aztec/sequencer-client": "3.0.0-nightly.20250918",
|
|
76
|
+
"@aztec/simulator": "3.0.0-nightly.20250918",
|
|
77
|
+
"@aztec/stdlib": "3.0.0-nightly.20250918",
|
|
78
|
+
"@aztec/telemetry-client": "3.0.0-nightly.20250918",
|
|
79
|
+
"@aztec/world-state": "3.0.0-nightly.20250918",
|
|
80
80
|
"source-map-support": "^0.5.21",
|
|
81
81
|
"tslib": "^2.4.0",
|
|
82
82
|
"viem": "2.23.7"
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BatchedBlob, Blob } from '@aztec/blob-lib';
|
|
2
1
|
import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
3
2
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
4
3
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
@@ -6,6 +5,9 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
6
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
6
|
import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
8
7
|
import { Timer } from '@aztec/foundation/timer';
|
|
8
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
9
|
+
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
10
|
+
import { buildFinalBlobChallenges } from '@aztec/prover-client/helpers';
|
|
9
11
|
import type { PublicProcessor, PublicProcessorFactory } from '@aztec/simulator/server';
|
|
10
12
|
import type { L2Block, L2BlockSource } from '@aztec/stdlib/block';
|
|
11
13
|
import {
|
|
@@ -14,6 +16,7 @@ import {
|
|
|
14
16
|
EpochProvingJobTerminalState,
|
|
15
17
|
type ForkMerkleTreeOperations,
|
|
16
18
|
} from '@aztec/stdlib/interfaces/server';
|
|
19
|
+
import { CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
17
20
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
18
21
|
import type { ProcessedTx, Tx } from '@aztec/stdlib/tx';
|
|
19
22
|
import { Attributes, type Traceable, type Tracer, trackSpan } from '@aztec/telemetry-client';
|
|
@@ -123,12 +126,15 @@ export class EpochProvingJob implements Traceable {
|
|
|
123
126
|
this.runPromise = promise;
|
|
124
127
|
|
|
125
128
|
try {
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
+
const firstCheckpointNumber = this.blocks[0].header.globalVariables.slotNumber;
|
|
130
|
+
const blobFieldsPerCheckpoint = this.blocks.map(block => block.body.toBlobFields());
|
|
131
|
+
const finalBlobBatchingChallenges = await buildFinalBlobChallenges(blobFieldsPerCheckpoint);
|
|
129
132
|
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
// TODO(#17027): Enable multiple blocks per checkpoint.
|
|
134
|
+
// Total number of checkpoints equals number of blocks because we currently build a checkpoint with only one block.
|
|
135
|
+
const totalNumCheckpoints = epochSizeBlocks;
|
|
136
|
+
|
|
137
|
+
this.prover.startNewEpoch(epochNumber, firstCheckpointNumber, totalNumCheckpoints, finalBlobBatchingChallenges);
|
|
132
138
|
await this.prover.startTubeCircuits(Array.from(this.txs.values()));
|
|
133
139
|
|
|
134
140
|
await asyncPool(this.config.parallelBlockLimit ?? 32, this.blocks, async block => {
|
|
@@ -151,8 +157,32 @@ export class EpochProvingJob implements Traceable {
|
|
|
151
157
|
...globalVariables,
|
|
152
158
|
});
|
|
153
159
|
|
|
160
|
+
const checkpointConstants = CheckpointConstantData.from({
|
|
161
|
+
chainId: globalVariables.chainId,
|
|
162
|
+
version: globalVariables.version,
|
|
163
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
164
|
+
protocolContractTreeRoot: protocolContractTreeRoot,
|
|
165
|
+
proverId: this.prover.getProverId().toField(),
|
|
166
|
+
slotNumber: globalVariables.slotNumber,
|
|
167
|
+
coinbase: globalVariables.coinbase,
|
|
168
|
+
feeRecipient: globalVariables.feeRecipient,
|
|
169
|
+
gasFees: globalVariables.gasFees,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// TODO(#17027): Enable multiple blocks per checkpoint.
|
|
173
|
+
// Each checkpoint has only one block.
|
|
174
|
+
const totalNumBlocks = 1;
|
|
175
|
+
const checkpointIndex = block.number - fromBlock;
|
|
176
|
+
await this.prover.startNewCheckpoint(
|
|
177
|
+
checkpointConstants,
|
|
178
|
+
l1ToL2Messages,
|
|
179
|
+
totalNumBlocks,
|
|
180
|
+
blobFieldsPerCheckpoint[checkpointIndex].length,
|
|
181
|
+
previousHeader,
|
|
182
|
+
);
|
|
183
|
+
|
|
154
184
|
// Start block proving
|
|
155
|
-
await this.prover.startNewBlock(
|
|
185
|
+
await this.prover.startNewBlock(block.number, globalVariables.timestamp, txs.length);
|
|
156
186
|
|
|
157
187
|
// Process public fns
|
|
158
188
|
const db = await this.createFork(block.number - 1, l1ToL2Messages);
|
|
@@ -167,7 +197,8 @@ export class EpochProvingJob implements Traceable {
|
|
|
167
197
|
});
|
|
168
198
|
|
|
169
199
|
// Mark block as completed to pad it
|
|
170
|
-
|
|
200
|
+
const expectedBlockHeader = block.getBlockHeader();
|
|
201
|
+
await this.prover.setBlockCompleted(block.number, expectedBlockHeader);
|
|
171
202
|
});
|
|
172
203
|
|
|
173
204
|
const executionTime = timer.ms();
|
|
@@ -318,7 +349,7 @@ export class EpochProvingJob implements Traceable {
|
|
|
318
349
|
private getBlockHeader(blockNumber: number) {
|
|
319
350
|
const block = this.blocks.find(b => b.number === blockNumber);
|
|
320
351
|
if (block) {
|
|
321
|
-
return block.
|
|
352
|
+
return block.getBlockHeader();
|
|
322
353
|
}
|
|
323
354
|
|
|
324
355
|
if (blockNumber === Number(this.data.previousBlockHeader.getBlockNumber())) {
|
|
@@ -259,7 +259,7 @@ export class ProverNodePublisher {
|
|
|
259
259
|
{
|
|
260
260
|
previousArchive: args.publicInputs.previousArchiveRoot.toString(),
|
|
261
261
|
endArchive: args.publicInputs.endArchiveRoot.toString(),
|
|
262
|
-
proverId: EthAddress.fromField(args.publicInputs.proverId).toString(),
|
|
262
|
+
proverId: EthAddress.fromField(args.publicInputs.constants.proverId).toString(),
|
|
263
263
|
} /*_args*/,
|
|
264
264
|
makeTuple(AZTEC_MAX_EPOCH_DURATION * 2, i =>
|
|
265
265
|
i % 2 === 0
|