@aztec/prover-node 5.0.0-private.20260319 → 6.0.0-nightly.20260603
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.
- package/dest/actions/download-epoch-proving-job.js +1 -1
- package/dest/actions/rerun-epoch-proving-job.d.ts +3 -2
- package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
- package/dest/actions/rerun-epoch-proving-job.js +8 -6
- package/dest/bin/run-failed-epoch.js +1 -3
- package/dest/factory.d.ts +1 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +21 -2
- package/dest/job/epoch-proving-job.d.ts +6 -2
- package/dest/job/epoch-proving-job.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.js +186 -36
- package/dest/metrics.d.ts +11 -1
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +22 -0
- package/dest/monitors/epoch-monitor.js +6 -2
- package/dest/prover-node-publisher.d.ts +20 -1
- package/dest/prover-node-publisher.d.ts.map +1 -1
- package/dest/prover-node-publisher.js +200 -5
- package/dest/prover-node.d.ts +1 -2
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +16 -16
- package/dest/prover-publisher-factory.d.ts +2 -2
- package/dest/prover-publisher-factory.d.ts.map +1 -1
- package/dest/prover-publisher-factory.js +3 -3
- package/package.json +23 -23
- package/src/actions/download-epoch-proving-job.ts +1 -1
- package/src/actions/rerun-epoch-proving-job.ts +16 -5
- package/src/bin/run-failed-epoch.ts +1 -2
- package/src/factory.ts +18 -2
- package/src/job/epoch-proving-job.ts +102 -36
- package/src/metrics.ts +37 -0
- package/src/monitors/epoch-monitor.ts +2 -2
- package/src/prover-node-publisher.ts +232 -9
- package/src/prover-node.ts +12 -20
- package/src/prover-publisher-factory.ts +3 -3
|
@@ -25,7 +25,7 @@ import { deserializeEpochProvingJobData } from '../job/epoch-proving-job-data.js
|
|
|
25
25
|
}, log, {
|
|
26
26
|
...config,
|
|
27
27
|
...metadata,
|
|
28
|
-
|
|
28
|
+
fileStore
|
|
29
29
|
});
|
|
30
30
|
const dataPath = urlJoin(location, 'data.bin');
|
|
31
31
|
const localPath = config.jobDataDownloadPath;
|
|
@@ -3,10 +3,11 @@ import type { Logger } from '@aztec/foundation/log';
|
|
|
3
3
|
import { type ProverClientConfig } from '@aztec/prover-client';
|
|
4
4
|
import { ProverBrokerConfig } from '@aztec/prover-client/broker';
|
|
5
5
|
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
6
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
6
7
|
/**
|
|
7
8
|
* Given a local folder where `downloadEpochProvingJob` was called, creates a new archiver and world state
|
|
8
9
|
* using the state snapshots, and creates a new epoch proving job to prove the downloaded proving job.
|
|
9
10
|
* Proving is done with a local proving broker and agents as specified by the config.
|
|
10
11
|
*/
|
|
11
|
-
export declare function rerunEpochProvingJob(localPath: string, log: Logger, config: DataStoreConfig & ProverBrokerConfig & ProverClientConfig & Pick<L1ContractsConfig, 'aztecEpochDuration'
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
export declare function rerunEpochProvingJob(localPath: string, log: Logger, config: DataStoreConfig & ProverBrokerConfig & ProverClientConfig & Pick<L1ContractsConfig, 'aztecEpochDuration'>, genesis?: GenesisData): Promise<"awaiting-prover" | "completed" | "failed" | "initialized" | "processing" | "publishing-proof" | "reorg" | "stopped" | "timed-out">;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVydW4tZXBvY2gtcHJvdmluZy1qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL3JlcnVuLWVwb2NoLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQXNCLE1BQU0sc0JBQXNCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUErQixNQUFNLDZCQUE2QixDQUFDO0FBRTlGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBVTdEOzs7O0dBSUc7QUFDSCx3QkFBc0Isb0JBQW9CLENBQ3hDLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLEdBQUcsRUFBRSxNQUFNLEVBQ1gsTUFBTSxFQUFFLGVBQWUsR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsRUFDakgsT0FBTyxDQUFDLEVBQUUsV0FBVywrSUErQ3RCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rerun-epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/actions/rerun-epoch-proving-job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAA+B,MAAM,6BAA6B,CAAC;AAE9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"rerun-epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/actions/rerun-epoch-proving-job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAA+B,MAAM,6BAA6B,CAAC;AAE9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAU7D;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,EACjH,OAAO,CAAC,EAAE,WAAW,+IA+CtB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createArchiverStore } from '@aztec/archiver';
|
|
1
|
+
import { createArchiverStore, createContractDataSource } from '@aztec/archiver';
|
|
2
2
|
import { createProverClient } from '@aztec/prover-client';
|
|
3
3
|
import { createAndStartProvingBroker } from '@aztec/prover-client/broker';
|
|
4
4
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
@@ -12,16 +12,18 @@ import { ProverNodeJobMetrics } from '../metrics.js';
|
|
|
12
12
|
* Given a local folder where `downloadEpochProvingJob` was called, creates a new archiver and world state
|
|
13
13
|
* using the state snapshots, and creates a new epoch proving job to prove the downloaded proving job.
|
|
14
14
|
* Proving is done with a local proving broker and agents as specified by the config.
|
|
15
|
-
*/ export async function rerunEpochProvingJob(localPath, log, config) {
|
|
15
|
+
*/ export async function rerunEpochProvingJob(localPath, log, config, genesis) {
|
|
16
16
|
const jobData = deserializeEpochProvingJobData(readFileSync(localPath));
|
|
17
17
|
log.info(`Loaded proving job data for epoch ${jobData.epochNumber}`);
|
|
18
18
|
const telemetry = getTelemetryClient();
|
|
19
19
|
const metrics = new ProverNodeJobMetrics(telemetry.getMeter('prover-job'), telemetry.getTracer('prover-job'));
|
|
20
|
-
const worldState = await createWorldState(config);
|
|
21
|
-
const
|
|
22
|
-
const
|
|
20
|
+
const worldState = await createWorldState(config, genesis);
|
|
21
|
+
const initialBlockHash = await worldState.getInitialHeader().hash();
|
|
22
|
+
const archiver = await createArchiverStore(config, initialBlockHash);
|
|
23
|
+
const publicProcessorFactory = new PublicProcessorFactory(createContractDataSource(archiver), undefined, undefined, log.getBindings());
|
|
23
24
|
const publisher = {
|
|
24
|
-
submitEpochProof: ()=>Promise.resolve(true)
|
|
25
|
+
submitEpochProof: ()=>Promise.resolve(true),
|
|
26
|
+
analyzeEpochProofSubmission: ()=>Promise.resolve()
|
|
25
27
|
};
|
|
26
28
|
const l2BlockSourceForReorgDetection = undefined;
|
|
27
29
|
const deadline = undefined;
|
|
@@ -41,9 +41,7 @@ async function rerunFailedEpoch(provingJobUrl, baseLocalDir) {
|
|
|
41
41
|
logger.info(`Rerunning proving job from ${jobPath} with state from ${dataDir}`, metadata);
|
|
42
42
|
const result = await rerunEpochProvingJob(jobPath, logger, {
|
|
43
43
|
...config,
|
|
44
|
-
|
|
45
|
-
rollupAddress: metadata.rollupAddress
|
|
46
|
-
},
|
|
44
|
+
rollupAddress: metadata.rollupAddress,
|
|
47
45
|
rollupVersion: metadata.rollupVersion
|
|
48
46
|
});
|
|
49
47
|
console.error(`Epoch proving job complete with result ${result}`);
|
package/dest/factory.d.ts
CHANGED
|
@@ -30,4 +30,4 @@ export type ProverNodeDeps = {
|
|
|
30
30
|
};
|
|
31
31
|
/** Creates a new prover node subsystem given a config and dependencies */
|
|
32
32
|
export declare function createProverNode(userConfig: SpecificProverNodeConfig & ProverConfig & ProverClientUserConfig & ProverPublisherConfig & ProverTxSenderConfig, deps: ProverNodeDeps): Promise<ProverNode>;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQTJCLEtBQUssc0JBQXNCLEVBQXNCLE1BQU0sc0JBQXNCLENBQUM7QUFFaEgsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssb0JBQW9CLEVBRTFCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxLQUFLLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBYSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUk5RixPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkUsTUFBTSxNQUFNLGNBQWMsR0FBRztJQUMzQixTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2IsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNuQixnQkFBZ0IsQ0FBQyxFQUFFLHNCQUFzQixDQUFDO0lBQzFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQzFCLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUN0QixZQUFZLENBQUMsRUFBRSxZQUFZLENBQUM7SUFDNUIsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7SUFDL0MsU0FBUyxFQUFFO1FBQUUsYUFBYSxJQUFJLFdBQVcsQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztJQUNoQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDaEMsZUFBZSxDQUFDLEVBQUUsZUFBZSxDQUFDO0NBQ25DLENBQUM7QUFFRiwwRUFBMEU7QUFDMUUsd0JBQXNCLGdCQUFnQixDQUNwQyxVQUFVLEVBQUUsd0JBQXdCLEdBQ2xDLFlBQVksR0FDWixzQkFBc0IsR0FDdEIscUJBQXFCLEdBQ3JCLG9CQUFvQixFQUN0QixJQUFJLEVBQUUsY0FBYyx1QkF1SXJCIn0=
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAA2B,KAAK,sBAAsB,EAAsB,MAAM,sBAAsB,CAAC;AAEhH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAE1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAa,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAI9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE;QAAE,aAAa,IAAI,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,wBAAwB,GAClC,YAAY,GACZ,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,EACtB,IAAI,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAA2B,KAAK,sBAAsB,EAAsB,MAAM,sBAAsB,CAAC;AAEhH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAE1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAa,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAI9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE;QAAE,aAAa,IAAI,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,wBAAwB,GAClC,YAAY,GACZ,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,EACtB,IAAI,EAAE,cAAc,uBAuIrB"}
|
package/dest/factory.js
CHANGED
|
@@ -52,7 +52,7 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
|
52
52
|
}),
|
|
53
53
|
pollingInterval: config.viemPollingIntervalMS
|
|
54
54
|
});
|
|
55
|
-
const rollupContract = new RollupContract(publicClient, config.
|
|
55
|
+
const rollupContract = new RollupContract(publicClient, config.rollupAddress.toString());
|
|
56
56
|
const l1TxUtils = deps.l1TxUtils ? [
|
|
57
57
|
deps.l1TxUtils
|
|
58
58
|
] : config.proverPublisherForwarderAddress ? await createForwarderL1TxUtilsFromSigners(publicClient, proverSigners.signers, config.proverPublisherForwarderAddress, {
|
|
@@ -71,9 +71,28 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
|
71
71
|
logger: log.createChild('l1-tx-utils'),
|
|
72
72
|
dateProvider
|
|
73
73
|
});
|
|
74
|
+
// Create a funder L1TxUtils from the keystore funding account (if configured)
|
|
75
|
+
const fundingSigner = keyStoreManager?.createFundingSigner();
|
|
76
|
+
let funderL1TxUtils;
|
|
77
|
+
if (fundingSigner) {
|
|
78
|
+
const [funder] = await createL1TxUtilsFromSigners(publicClient, [
|
|
79
|
+
fundingSigner
|
|
80
|
+
], {
|
|
81
|
+
...config,
|
|
82
|
+
scope: 'prover'
|
|
83
|
+
}, {
|
|
84
|
+
telemetry,
|
|
85
|
+
logger: log.createChild('l1-tx-utils:funder'),
|
|
86
|
+
dateProvider
|
|
87
|
+
});
|
|
88
|
+
funderL1TxUtils = funder;
|
|
89
|
+
}
|
|
74
90
|
const publisherFactory = deps.publisherFactory ?? new ProverPublisherFactory(config, {
|
|
75
91
|
rollupContract,
|
|
76
|
-
publisherManager: new PublisherManager(l1TxUtils, getPublisherConfigFromProverConfig(config),
|
|
92
|
+
publisherManager: new PublisherManager(l1TxUtils, getPublisherConfigFromProverConfig(config), {
|
|
93
|
+
bindings: log.getBindings(),
|
|
94
|
+
funder: funderL1TxUtils
|
|
95
|
+
}),
|
|
77
96
|
telemetry
|
|
78
97
|
});
|
|
79
98
|
const proverNodeConfig = {
|
|
@@ -31,10 +31,11 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
31
31
|
private log;
|
|
32
32
|
private uuid;
|
|
33
33
|
private runPromise;
|
|
34
|
+
private abortController;
|
|
34
35
|
private epochCheckPromise;
|
|
35
36
|
private deadlineTimeoutHandler;
|
|
36
37
|
readonly tracer: Tracer;
|
|
37
|
-
constructor(data: EpochProvingJobData, dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>, prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: Pick<ProverNodePublisher, 'submitEpochProof'>, l2BlockSource: L2BlockSource | undefined, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config: EpochProvingJobOptions, bindings?: LoggerBindings);
|
|
38
|
+
constructor(data: EpochProvingJobData, dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>, prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: Pick<ProverNodePublisher, 'submitEpochProof' | 'analyzeEpochProofSubmission'>, l2BlockSource: L2BlockSource | undefined, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config: EpochProvingJobOptions, bindings?: LoggerBindings);
|
|
38
39
|
getId(): string;
|
|
39
40
|
getState(): EpochProvingJobState;
|
|
40
41
|
getEpochNumber(): EpochNumber;
|
|
@@ -49,9 +50,12 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
49
50
|
*/
|
|
50
51
|
run(): Promise<void>;
|
|
51
52
|
private createFork;
|
|
53
|
+
private processCheckpoints;
|
|
52
54
|
private progressState;
|
|
53
55
|
private checkState;
|
|
54
56
|
stop(state?: EpochProvingJobTerminalState): Promise<void>;
|
|
57
|
+
private failProcessing;
|
|
58
|
+
private interruptProcessing;
|
|
55
59
|
private scheduleDeadlineStop;
|
|
56
60
|
private scheduleEpochCheck;
|
|
57
61
|
private gatherPreviousBlockHeaders;
|
|
@@ -60,4 +64,4 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
60
64
|
private processTxs;
|
|
61
65
|
}
|
|
62
66
|
export { type EpochProvingJobState };
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1qb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qb2IvZXBvY2gtcHJvdmluZy1qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTNFLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQU92RixPQUFPLEtBQUssRUFBbUIsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBVyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRSxPQUFPLEVBQ0wsS0FBSyxXQUFXLEVBQ2hCLEtBQUssb0JBQW9CLEVBQ3pCLDRCQUE0QixFQUM1QixLQUFLLHdCQUF3QixFQUM5QixNQUFNLGlDQUFpQyxDQUFDO0FBSXpDLE9BQU8sRUFBYyxLQUFLLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBYSxNQUFNLHlCQUF5QixDQUFDO0FBSTdGLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQStCLE1BQU0sNkJBQTZCLENBQUM7QUFFcEcsTUFBTSxNQUFNLHNCQUFzQixHQUFHO0lBQ25DLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQzVCLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN6QixlQUFlLENBQUMsRUFBRSxPQUFPLENBQUM7Q0FDM0IsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxxQkFBYSxlQUFnQixZQUFXLFNBQVM7SUFhN0MsT0FBTyxDQUFDLElBQUk7SUFDWixPQUFPLENBQUMsVUFBVTtJQUNsQixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxzQkFBc0I7SUFDOUIsT0FBTyxDQUFDLFNBQVM7SUFDakIsT0FBTyxDQUFDLGFBQWE7SUFDckIsT0FBTyxDQUFDLE9BQU87SUFDZixPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsTUFBTTtJQXBCaEIsT0FBTyxDQUFDLEtBQUssQ0FBdUM7SUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBUztJQUNwQixPQUFPLENBQUMsSUFBSSxDQUFTO0lBRXJCLE9BQU8sQ0FBQyxVQUFVLENBQTRCO0lBQzlDLE9BQU8sQ0FBQyxlQUFlLENBQXlCO0lBQ2hELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBNkI7SUFDdEQsT0FBTyxDQUFDLHNCQUFzQixDQUE2QjtJQUUzRCxTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLFlBQ1UsSUFBSSxFQUFFLG1CQUFtQixFQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxFQUNsRCxNQUFNLEVBQUUsV0FBVyxFQUNuQixzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsR0FBRyw2QkFBNkIsQ0FBQyxFQUN4RixhQUFhLEVBQUUsYUFBYSxHQUFHLFNBQVMsRUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUM3QixRQUFRLEVBQUUsSUFBSSxHQUFHLFNBQVMsRUFDMUIsTUFBTSxFQUFFLHNCQUFzQixFQUN0QyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBUzFCO0lBRU0sS0FBSyxJQUFJLE1BQU0sQ0FFckI7SUFFTSxRQUFRLElBQUksb0JBQW9CLENBRXRDO0lBRU0sY0FBYyxJQUFJLFdBQVcsQ0FFbkM7SUFFTSxXQUFXLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FFckM7SUFFTSxjQUFjLElBQUksbUJBQW1CLENBRTNDO0lBRUQsT0FBTyxLQUFLLFdBQVcsR0FFdEI7SUFFRCxPQUFPLEtBQUssV0FBVyxHQUV0QjtJQUVELE9BQU8sS0FBSyxHQUFHLEdBRWQ7SUFFRCxPQUFPLEtBQUssWUFBWSxHQUV2QjtJQUVEOztPQUVHO0lBSVUsR0FBRyxrQkF5TmY7WUFRYSxVQUFVO1lBbUJWLGtCQUFrQjtJQWlDaEMsT0FBTyxDQUFDLGFBQWE7SUFLckIsT0FBTyxDQUFDLFVBQVU7SUFNTCxJQUFJLENBQUMsS0FBSyxHQUFFLDRCQUF3QyxpQkFNaEU7SUFFRCxPQUFPLENBQUMsY0FBYztJQU90QixPQUFPLENBQUMsbUJBQW1CO0lBSzNCLE9BQU8sQ0FBQyxvQkFBb0I7WUF3QmQsa0JBQWtCO0lBb0NoQyxPQUFPLENBQUMsMEJBQTBCO0lBS2xDLE9BQU8sQ0FBQyxNQUFNO0lBSWQsT0FBTyxDQUFDLGlCQUFpQjtZQUlYLFVBQVU7Q0F1QnpCO0FBU0QsT0FBTyxFQUFFLEtBQUssb0JBQW9CLEVBQUUsQ0FBQyJ9
|
|
@@ -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":"AACA,OAAO,EAAe,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAOvF,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElE,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,MAAM,MAAM,sBAAsB,GAAG;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAa7C,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;IApBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACU,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,GAAG,6BAA6B,CAAC,EACxF,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE,sBAAsB,EACtC,QAAQ,CAAC,EAAE,cAAc,EAS1B;IAEM,KAAK,IAAI,MAAM,CAErB;IAEM,QAAQ,IAAI,oBAAoB,CAEtC;IAEM,cAAc,IAAI,WAAW,CAEnC;IAEM,WAAW,IAAI,IAAI,GAAG,SAAS,CAErC;IAEM,cAAc,IAAI,mBAAmB,CAE3C;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IAIU,GAAG,kBAyNf;YAQa,UAAU;YAmBV,kBAAkB;IAiChC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC,iBAMhE;IAED,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,oBAAoB;YAwBd,kBAAkB;IAoChC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAuBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
|
|
@@ -1,3 +1,68 @@
|
|
|
1
|
+
function _ts_add_disposable_resource(env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() {
|
|
16
|
+
try {
|
|
17
|
+
inner.call(this);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return Promise.reject(e);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
env.stack.push({
|
|
23
|
+
value: value,
|
|
24
|
+
dispose: dispose,
|
|
25
|
+
async: async
|
|
26
|
+
});
|
|
27
|
+
} else if (async) {
|
|
28
|
+
env.stack.push({
|
|
29
|
+
async: true
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function _ts_dispose_resources(env) {
|
|
35
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
36
|
+
var e = new Error(message);
|
|
37
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
38
|
+
};
|
|
39
|
+
return (_ts_dispose_resources = function _ts_dispose_resources(env) {
|
|
40
|
+
function fail(e) {
|
|
41
|
+
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
42
|
+
env.hasError = true;
|
|
43
|
+
}
|
|
44
|
+
var r, s = 0;
|
|
45
|
+
function next() {
|
|
46
|
+
while(r = env.stack.pop()){
|
|
47
|
+
try {
|
|
48
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
49
|
+
if (r.dispose) {
|
|
50
|
+
var result = r.dispose.call(r.value);
|
|
51
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
52
|
+
fail(e);
|
|
53
|
+
return next();
|
|
54
|
+
});
|
|
55
|
+
} else s |= 1;
|
|
56
|
+
} catch (e) {
|
|
57
|
+
fail(e);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
61
|
+
if (env.hasError) throw env.error;
|
|
62
|
+
}
|
|
63
|
+
return next();
|
|
64
|
+
})(env);
|
|
65
|
+
}
|
|
1
66
|
function applyDecs2203RFactory() {
|
|
2
67
|
function createAddInitializerMethod(initializers, decoratorFinishedRef) {
|
|
3
68
|
return function addInitializer(initializer) {
|
|
@@ -371,11 +436,8 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
|
371
436
|
return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
|
|
372
437
|
}
|
|
373
438
|
var _dec, _initProto;
|
|
374
|
-
import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
375
439
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
376
440
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
377
|
-
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
378
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
379
441
|
import { createLogger } from '@aztec/foundation/log';
|
|
380
442
|
import { RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
381
443
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -385,8 +447,8 @@ import { protocolContractsHash } from '@aztec/protocol-contracts';
|
|
|
385
447
|
import { buildFinalBlobChallenges } from '@aztec/prover-client/helpers';
|
|
386
448
|
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
387
449
|
import { EpochProvingJobTerminalState } from '@aztec/stdlib/interfaces/server';
|
|
450
|
+
import { appendL1ToL2MessagesToTree } from '@aztec/stdlib/messaging';
|
|
388
451
|
import { CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
389
|
-
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
390
452
|
import { Attributes, trackSpan } from '@aztec/telemetry-client';
|
|
391
453
|
import * as crypto from 'node:crypto';
|
|
392
454
|
import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
|
|
@@ -422,6 +484,7 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
422
484
|
log;
|
|
423
485
|
uuid;
|
|
424
486
|
runPromise;
|
|
487
|
+
abortController;
|
|
425
488
|
epochCheckPromise;
|
|
426
489
|
deadlineTimeoutHandler;
|
|
427
490
|
tracer;
|
|
@@ -436,6 +499,7 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
436
499
|
this.deadline = deadline;
|
|
437
500
|
this.config = config;
|
|
438
501
|
this.state = (_initProto(this), 'initialized');
|
|
502
|
+
this.abortController = new AbortController();
|
|
439
503
|
validateEpochProvingJobData(data);
|
|
440
504
|
this.uuid = crypto.randomUUID();
|
|
441
505
|
this.log = createLogger('prover-node:epoch-proving-job', {
|
|
@@ -512,7 +576,7 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
512
576
|
const previousBlockHeaders = this.gatherPreviousBlockHeaders();
|
|
513
577
|
const allCheckpointsTimer = new Timer();
|
|
514
578
|
const parallelism = this.config.parallelBlockLimit ? this.config.parallelBlockLimit : AVM_MAX_CONCURRENT_SIMULATIONS > 0 ? AVM_MAX_CONCURRENT_SIMULATIONS : this.checkpoints.length;
|
|
515
|
-
await
|
|
579
|
+
await this.processCheckpoints(parallelism, async (checkpoint)=>{
|
|
516
580
|
this.checkState();
|
|
517
581
|
const checkpointTimer = new Timer();
|
|
518
582
|
const checkpointIndex = checkpoint.number - fromCheckpoint;
|
|
@@ -529,11 +593,12 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
529
593
|
});
|
|
530
594
|
const previousHeader = previousBlockHeaders[checkpointIndex];
|
|
531
595
|
const l1ToL2Messages = this.getL1ToL2Messages(checkpoint);
|
|
532
|
-
this.log.
|
|
596
|
+
this.log.debug(`Starting processing checkpoint ${checkpoint.number}`, {
|
|
533
597
|
number: checkpoint.number,
|
|
534
598
|
checkpointHash: checkpoint.hash().toString(),
|
|
535
|
-
|
|
536
|
-
|
|
599
|
+
headerHash: checkpoint.header.hash().toString(),
|
|
600
|
+
numL1ToL2Messages: l1ToL2Messages.length,
|
|
601
|
+
previousBlockNumber: previousHeader.globalVariables.blockNumber,
|
|
537
602
|
uuid: this.uuid
|
|
538
603
|
});
|
|
539
604
|
await this.prover.startNewCheckpoint(checkpointIndex, checkpointConstants, l1ToL2Messages, checkpoint.blocks.length, previousHeader);
|
|
@@ -556,19 +621,36 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
556
621
|
await this.prover.startNewBlock(block.number, globalVariables.timestamp, txs.length);
|
|
557
622
|
// Process public fns. L1 to L2 messages are only inserted for the first block of a checkpoint,
|
|
558
623
|
// as the fork for subsequent blocks already includes them from the previous block's synced state.
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
624
|
+
{
|
|
625
|
+
const env = {
|
|
626
|
+
stack: [],
|
|
627
|
+
error: void 0,
|
|
628
|
+
hasError: false
|
|
629
|
+
};
|
|
630
|
+
try {
|
|
631
|
+
const db = _ts_add_disposable_resource(env, await this.createFork(BlockNumber(block.number - 1), blockIndex === 0 ? l1ToL2Messages : undefined), true);
|
|
632
|
+
this.checkState();
|
|
633
|
+
const config = PublicSimulatorConfig.from({
|
|
634
|
+
proverId: this.prover.getProverId().toField(),
|
|
635
|
+
skipFeeEnforcement: false,
|
|
636
|
+
collectDebugLogs: false,
|
|
637
|
+
collectHints: true,
|
|
638
|
+
collectPublicInputs: true,
|
|
639
|
+
collectStatistics: false
|
|
640
|
+
});
|
|
641
|
+
const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, config);
|
|
642
|
+
const processed = await this.processTxs(publicProcessor, txs);
|
|
643
|
+
this.checkState();
|
|
644
|
+
await this.prover.addTxs(processed);
|
|
645
|
+
} catch (e) {
|
|
646
|
+
env.error = e;
|
|
647
|
+
env.hasError = true;
|
|
648
|
+
} finally{
|
|
649
|
+
const result = _ts_dispose_resources(env);
|
|
650
|
+
if (result) await result;
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
this.checkState();
|
|
572
654
|
this.log.verbose(`Processed all ${txs.length} txs for block ${block.number}`, {
|
|
573
655
|
blockNumber: block.number,
|
|
574
656
|
blockHash: (await block.hash()).toString(),
|
|
@@ -592,7 +674,20 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
592
674
|
});
|
|
593
675
|
this.progressState('publishing-proof');
|
|
594
676
|
if (this.config.skipSubmitProof) {
|
|
595
|
-
this.log.info(`Proof publishing is disabled.
|
|
677
|
+
this.log.info(`Proof publishing is disabled. Analyzing estimated L1 fees for epoch ${epochNumber} (checkpoints ${fromCheckpoint} to ${toCheckpoint})`);
|
|
678
|
+
try {
|
|
679
|
+
await this.publisher.analyzeEpochProofSubmission({
|
|
680
|
+
fromCheckpoint,
|
|
681
|
+
toCheckpoint,
|
|
682
|
+
epochNumber,
|
|
683
|
+
publicInputs,
|
|
684
|
+
proof,
|
|
685
|
+
batchedBlobInputs,
|
|
686
|
+
attestations
|
|
687
|
+
});
|
|
688
|
+
} catch (err) {
|
|
689
|
+
this.log.warn(`Failed to analyze estimated L1 fees for epoch ${epochNumber}`, err);
|
|
690
|
+
}
|
|
596
691
|
this.state = 'completed';
|
|
597
692
|
this.metrics.recordProvingJob(executionTime, timer.ms(), epochSizeCheckpoints, epochSizeBlocks, epochSizeTxs);
|
|
598
693
|
return;
|
|
@@ -644,19 +739,59 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
644
739
|
* as subsequent blocks' synced state already includes them.
|
|
645
740
|
* REFACTOR: The prover already spawns a db fork of its own for each block, so we may be able to do away with just one fork.
|
|
646
741
|
*/ async createFork(blockNumber, l1ToL2Messages) {
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
742
|
+
const env = {
|
|
743
|
+
stack: [],
|
|
744
|
+
error: void 0,
|
|
745
|
+
hasError: false
|
|
746
|
+
};
|
|
747
|
+
try {
|
|
748
|
+
this.log.verbose(`Creating fork at ${blockNumber}`, {
|
|
749
|
+
blockNumber
|
|
655
750
|
});
|
|
656
|
-
const
|
|
657
|
-
|
|
751
|
+
const cleanup = _ts_add_disposable_resource(env, new AsyncDisposableStack(), true);
|
|
752
|
+
const db = cleanup.use(await this.dbProvider.fork(blockNumber));
|
|
753
|
+
if (l1ToL2Messages !== undefined) {
|
|
754
|
+
this.log.verbose(`Inserting ${l1ToL2Messages.length} L1 to L2 messages in fork`, {
|
|
755
|
+
blockNumber,
|
|
756
|
+
l1ToL2Messages: l1ToL2Messages.map((m)=>m.toString())
|
|
757
|
+
});
|
|
758
|
+
await appendL1ToL2MessagesToTree(db, l1ToL2Messages);
|
|
759
|
+
}
|
|
760
|
+
// everything run succesfully so we can release this stack and give control of the fork's lifetime to the caller
|
|
761
|
+
cleanup.move();
|
|
762
|
+
return db;
|
|
763
|
+
} catch (e) {
|
|
764
|
+
env.error = e;
|
|
765
|
+
env.hasError = true;
|
|
766
|
+
} finally{
|
|
767
|
+
const result = _ts_dispose_resources(env);
|
|
768
|
+
if (result) await result;
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
async processCheckpoints(parallelism, processCheckpoint) {
|
|
772
|
+
let hasError = false;
|
|
773
|
+
let firstError;
|
|
774
|
+
await asyncPool(Math.max(parallelism, 1), this.checkpoints, async (checkpoint)=>{
|
|
775
|
+
if (hasError || this.abortController.signal.aborted) {
|
|
776
|
+
return;
|
|
777
|
+
}
|
|
778
|
+
try {
|
|
779
|
+
this.checkState();
|
|
780
|
+
await processCheckpoint(checkpoint);
|
|
781
|
+
} catch (err) {
|
|
782
|
+
if (!hasError) {
|
|
783
|
+
hasError = true;
|
|
784
|
+
firstError = err;
|
|
785
|
+
this.failProcessing();
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
});
|
|
789
|
+
if (hasError) {
|
|
790
|
+
throw firstError;
|
|
791
|
+
}
|
|
792
|
+
if (this.abortController.signal.aborted) {
|
|
793
|
+
this.checkState();
|
|
658
794
|
}
|
|
659
|
-
return db;
|
|
660
795
|
}
|
|
661
796
|
progressState(state) {
|
|
662
797
|
this.checkState();
|
|
@@ -669,11 +804,21 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
669
804
|
}
|
|
670
805
|
async stop(state = 'stopped') {
|
|
671
806
|
this.state = state;
|
|
672
|
-
this.
|
|
807
|
+
this.interruptProcessing();
|
|
673
808
|
if (this.runPromise) {
|
|
674
809
|
await this.runPromise;
|
|
675
810
|
}
|
|
676
811
|
}
|
|
812
|
+
failProcessing() {
|
|
813
|
+
if (!EpochProvingJobTerminalState.includes(this.state)) {
|
|
814
|
+
this.state = 'failed';
|
|
815
|
+
}
|
|
816
|
+
this.interruptProcessing();
|
|
817
|
+
}
|
|
818
|
+
interruptProcessing() {
|
|
819
|
+
this.abortController.abort();
|
|
820
|
+
this.prover.cancel();
|
|
821
|
+
}
|
|
677
822
|
scheduleDeadlineStop() {
|
|
678
823
|
const deadline = this.deadline;
|
|
679
824
|
if (deadline) {
|
|
@@ -709,7 +854,10 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
709
854
|
}
|
|
710
855
|
const intervalMs = Math.ceil((await l2BlockSource.getL1Constants()).ethereumSlotDuration / 2) * 1000;
|
|
711
856
|
this.epochCheckPromise = new RunningPromise(async ()=>{
|
|
712
|
-
const blockHeaders = await l2BlockSource.
|
|
857
|
+
const blockHeaders = (await l2BlockSource.getBlocksData({
|
|
858
|
+
epoch: this.epochNumber,
|
|
859
|
+
onlyCheckpointed: true
|
|
860
|
+
})).map((d)=>d.header);
|
|
713
861
|
const blockHashes = await Promise.all(blockHeaders.map((header)=>header.hash()));
|
|
714
862
|
const thisBlocks = this.checkpoints.flatMap((checkpoint)=>checkpoint.blocks);
|
|
715
863
|
const thisBlockHashes = await Promise.all(thisBlocks.map((block)=>block.hash()));
|
|
@@ -741,8 +889,10 @@ _dec = trackSpan('EpochProvingJob.run', function() {
|
|
|
741
889
|
async processTxs(publicProcessor, txs) {
|
|
742
890
|
const { deadline } = this;
|
|
743
891
|
const [processedTxs, failedTxs] = await publicProcessor.process(txs, {
|
|
744
|
-
deadline
|
|
892
|
+
deadline,
|
|
893
|
+
signal: this.abortController.signal
|
|
745
894
|
});
|
|
895
|
+
this.checkState();
|
|
746
896
|
if (failedTxs.length) {
|
|
747
897
|
const failedTxHashes = await Promise.all(failedTxs.map(({ tx })=>tx.getTxHash()));
|
|
748
898
|
throw new Error(`Txs failed processing: ${failedTxs.map(({ error }, index)=>`${failedTxHashes[index]} (${error})`).join(', ')}`);
|
package/dest/metrics.d.ts
CHANGED
|
@@ -38,6 +38,12 @@ export declare class ProverNodeRewardsMetrics {
|
|
|
38
38
|
stop(): void;
|
|
39
39
|
private observe;
|
|
40
40
|
}
|
|
41
|
+
export type EstimatedSubmitProofStats = {
|
|
42
|
+
gasLimit: bigint;
|
|
43
|
+
baseFeePerGas: bigint;
|
|
44
|
+
maxPriorityFeePerGas: bigint;
|
|
45
|
+
estimatedTotalFee: bigint;
|
|
46
|
+
};
|
|
41
47
|
export declare class ProverNodePublisherMetrics {
|
|
42
48
|
readonly client: TelemetryClient;
|
|
43
49
|
private logger;
|
|
@@ -50,12 +56,16 @@ export declare class ProverNodePublisherMetrics {
|
|
|
50
56
|
txBlobDataGasUsed: Histogram;
|
|
51
57
|
txBlobDataGasCost: Histogram;
|
|
52
58
|
txTotalFee: Histogram;
|
|
59
|
+
private txGasEstimated;
|
|
60
|
+
private gasPriceEstimated;
|
|
61
|
+
private txTotalFeeEstimated;
|
|
53
62
|
private senderBalance;
|
|
54
63
|
private meter;
|
|
55
64
|
constructor(client: TelemetryClient, name?: string, logger?: import("@aztec/foundation/log").Logger);
|
|
56
65
|
recordFailedTx(): void;
|
|
57
66
|
recordSubmitProof(durationMs: number, stats: L1PublishProofStats): void;
|
|
67
|
+
recordEstimatedSubmitProof(stats: EstimatedSubmitProofStats): void;
|
|
58
68
|
recordSenderBalance(wei: bigint, senderAddress: string): void;
|
|
59
69
|
private recordTx;
|
|
60
70
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUdMLEtBQUssS0FBSyxFQUNWLEtBQUssU0FBUyxFQUNkLEtBQUssS0FBSyxFQUdWLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFDWCxLQUFLLGFBQWEsRUFFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxxQkFBYSxvQkFBb0I7SUFjN0IsT0FBTyxDQUFDLEtBQUs7YUFDRyxNQUFNLEVBQUUsTUFBTTtJQUM5QixPQUFPLENBQUMsTUFBTTtJQWZoQiw0QkFBNEIsRUFBRSxTQUFTLENBQUM7SUFDeEMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDO0lBQzlCLHFCQUFxQixFQUFFLEtBQUssQ0FBQztJQUM3QixnQkFBZ0IsRUFBRSxLQUFLLENBQUM7SUFDeEIsc0JBQXNCLEVBQUUsS0FBSyxDQUFDO0lBRTlCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBUTtJQUN0QyxPQUFPLENBQUMscUJBQXFCLENBQVE7SUFDckMsT0FBTyxDQUFDLHVCQUF1QixDQUFZO0lBQzNDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBWTtJQUNoRCxPQUFPLENBQUMsZ0NBQWdDLENBQVE7SUFFaEQsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNKLE1BQU0sRUFBRSxNQUFNLEVBQ3RCLE1BQU0seUNBQWdELEVBZS9EO0lBRU0sZ0JBQWdCLENBQ3JCLGVBQWUsRUFBRSxNQUFNLEVBQ3ZCLFdBQVcsRUFBRSxNQUFNLEVBQ25CLGNBQWMsRUFBRSxNQUFNLEVBQ3RCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLE1BQU0sRUFBRSxNQUFNLFFBT2Y7SUFFTSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQUU3QztJQUVNLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxNQUFNLFFBRTVDO0lBRU0scUJBQXFCLENBQUMsVUFBVSxFQUFFLE1BQU0sUUFFOUM7SUFFTSwwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQUVuRDtJQUVNLDhCQUE4QixDQUFDLFVBQVUsRUFBRSxNQUFNLFFBRXZEO0NBQ0Y7QUFFRCxxQkFBYSx3QkFBd0I7SUFPakMsT0FBTyxDQUFDLEtBQUs7SUFDYixPQUFPLENBQUMsUUFBUTtJQUNoQixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxNQUFNO0lBVGhCLE9BQU8sQ0FBQyxPQUFPLENBQWtCO0lBQ2pDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBZ0I7SUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBTztJQUN4QixPQUFPLENBQUMscUJBQXFCLENBQUs7SUFFbEMsWUFDVSxLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLE1BQU0sRUFBRSxjQUFjLEVBQ3RCLE1BQU0seUNBQWdELEVBSy9EO0lBRVksS0FBSyxrQkFJakI7SUFFTSxJQUFJLFNBRVY7SUFFRCxPQUFPLENBQUMsT0FBTyxDQXdCYjtDQUNIO0FBRUQsTUFBTSxNQUFNLHlCQUF5QixHQUFHO0lBQ3RDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0NBQzNCLENBQUM7QUFFRixxQkFBYSwwQkFBMEI7YUFtQm5CLE1BQU0sRUFBRSxlQUFlO0lBRXZDLE9BQU8sQ0FBQyxNQUFNO0lBcEJoQixRQUFRLEVBQUUsU0FBUyxDQUFDO0lBQ3BCLE9BQU8sRUFBRSxhQUFhLENBQUM7SUFDdkIsVUFBVSxFQUFFLFNBQVMsQ0FBQztJQUN0QixLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ2pCLGNBQWMsRUFBRSxTQUFTLENBQUM7SUFDMUIsYUFBYSxFQUFFLFNBQVMsQ0FBQztJQUN6QixpQkFBaUIsRUFBRSxTQUFTLENBQUM7SUFDN0IsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0lBQzdCLFVBQVUsRUFBRSxTQUFTLENBQUM7SUFFdEIsT0FBTyxDQUFDLGNBQWMsQ0FBWTtJQUNsQyxPQUFPLENBQUMsaUJBQWlCLENBQVk7SUFDckMsT0FBTyxDQUFDLG1CQUFtQixDQUFZO0lBRXZDLE9BQU8sQ0FBQyxhQUFhLENBQVE7SUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBUTtJQUVyQixZQUNrQixNQUFNLEVBQUUsZUFBZSxFQUN2QyxJQUFJLFNBQWUsRUFDWCxNQUFNLHlDQUFnRCxFQWdDL0Q7SUFFRCxjQUFjLFNBS2I7SUFFRCxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsUUFFL0Q7SUFFTSwwQkFBMEIsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLFFBa0JqRTtJQUVNLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFLNUQ7SUFFRCxPQUFPLENBQUMsUUFBUTtDQXVDakIifQ==
|
package/dest/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,KAAK,EAGV,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,oBAAoB;IAc7B,OAAO,CAAC,KAAK;aACG,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,MAAM;IAfhB,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,qBAAqB,EAAE,KAAK,CAAC;IAC7B,gBAAgB,EAAE,KAAK,CAAC;IACxB,sBAAsB,EAAE,KAAK,CAAC;IAE9B,OAAO,CAAC,sBAAsB,CAAQ;IACtC,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,uBAAuB,CAAY;IAC3C,OAAO,CAAC,4BAA4B,CAAY;IAChD,OAAO,CAAC,gCAAgC,CAAQ;IAEhD,YACU,KAAK,EAAE,KAAK,EACJ,MAAM,EAAE,MAAM,EACtB,MAAM,yCAAgD,EAe/D;IAEM,gBAAgB,CACrB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,QAOf;IAEM,oBAAoB,CAAC,UAAU,EAAE,MAAM,QAE7C;IAEM,mBAAmB,CAAC,UAAU,EAAE,MAAM,QAE5C;IAEM,qBAAqB,CAAC,UAAU,EAAE,MAAM,QAE9C;IAEM,0BAA0B,CAAC,UAAU,EAAE,MAAM,QAEnD;IAEM,8BAA8B,CAAC,UAAU,EAAE,MAAM,QAEvD;CACF;AAED,qBAAa,wBAAwB;IAOjC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,qBAAqB,CAAK;IAElC,YACU,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,yCAAgD,EAK/D;IAEY,KAAK,kBAIjB;IAEM,IAAI,SAEV;IAED,OAAO,CAAC,OAAO,CAwBb;CACH;AAED,qBAAa,0BAA0B;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
package/dest/metrics.js
CHANGED
|
@@ -119,6 +119,9 @@ export class ProverNodePublisherMetrics {
|
|
|
119
119
|
txBlobDataGasUsed;
|
|
120
120
|
txBlobDataGasCost;
|
|
121
121
|
txTotalFee;
|
|
122
|
+
txGasEstimated;
|
|
123
|
+
gasPriceEstimated;
|
|
124
|
+
txTotalFeeEstimated;
|
|
122
125
|
senderBalance;
|
|
123
126
|
meter;
|
|
124
127
|
constructor(client, name = 'ProverNode', logger = createLogger('prover-node:publisher:metrics')){
|
|
@@ -142,6 +145,9 @@ export class ProverNodePublisherMetrics {
|
|
|
142
145
|
this.txBlobDataGasUsed = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_USED);
|
|
143
146
|
this.txBlobDataGasCost = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_BLOBDATA_GAS_COST);
|
|
144
147
|
this.txTotalFee = this.meter.createHistogram(Metrics.L1_PUBLISHER_TX_TOTAL_FEE);
|
|
148
|
+
this.txGasEstimated = this.meter.createHistogram(Metrics.PROVER_NODE_ESTIMATED_SUBMISSION_GAS);
|
|
149
|
+
this.gasPriceEstimated = this.meter.createHistogram(Metrics.PROVER_NODE_ESTIMATED_SUBMISSION_GAS_PRICE);
|
|
150
|
+
this.txTotalFeeEstimated = this.meter.createHistogram(Metrics.PROVER_NODE_ESTIMATED_SUBMISSION_TOTAL_FEE);
|
|
145
151
|
this.senderBalance = this.meter.createGauge(Metrics.L1_PUBLISHER_BALANCE);
|
|
146
152
|
}
|
|
147
153
|
recordFailedTx() {
|
|
@@ -153,6 +159,22 @@ export class ProverNodePublisherMetrics {
|
|
|
153
159
|
recordSubmitProof(durationMs, stats) {
|
|
154
160
|
this.recordTx(durationMs, stats);
|
|
155
161
|
}
|
|
162
|
+
recordEstimatedSubmitProof(stats) {
|
|
163
|
+
const attributes = {
|
|
164
|
+
[Attributes.L1_TX_TYPE]: 'submitProof'
|
|
165
|
+
};
|
|
166
|
+
this.txGasEstimated.record(Number(stats.gasLimit), attributes);
|
|
167
|
+
try {
|
|
168
|
+
this.gasPriceEstimated.record(parseInt(formatEther(stats.baseFeePerGas + stats.maxPriorityFeePerGas, 'gwei'), 10));
|
|
169
|
+
} catch {
|
|
170
|
+
// ignore
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
this.txTotalFeeEstimated.record(parseFloat(formatEther(stats.estimatedTotalFee)));
|
|
174
|
+
} catch {
|
|
175
|
+
// ignore
|
|
176
|
+
}
|
|
177
|
+
}
|
|
156
178
|
recordSenderBalance(wei, senderAddress) {
|
|
157
179
|
const eth = parseFloat(formatEther(wei, 'wei'));
|
|
158
180
|
this.senderBalance.record(eth, {
|
|
@@ -87,9 +87,13 @@ import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
async getEpochNumberToProve() {
|
|
90
|
-
const lastBlockProven = await this.l2BlockSource.
|
|
90
|
+
const lastBlockProven = await this.l2BlockSource.getBlockNumber({
|
|
91
|
+
tag: 'proven'
|
|
92
|
+
}) ?? BlockNumber.ZERO;
|
|
91
93
|
const firstBlockToProve = BlockNumber(lastBlockProven + 1);
|
|
92
|
-
const firstBlockHeaderToProve = await this.l2BlockSource.
|
|
94
|
+
const firstBlockHeaderToProve = (await this.l2BlockSource.getBlockData({
|
|
95
|
+
number: firstBlockToProve
|
|
96
|
+
}))?.header;
|
|
93
97
|
if (!firstBlockHeaderToProve) {
|
|
94
98
|
return {
|
|
95
99
|
epochToProve: undefined,
|