@aztec/prover-node 0.69.1 → 0.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -2
- package/dest/factory.d.ts +2 -0
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +5 -3
- package/dest/job/epoch-proving-job.d.ts +8 -3
- package/dest/job/epoch-proving-job.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.js +65 -11
- package/dest/metrics.d.ts +2 -2
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +9 -4
- package/dest/prover-node.d.ts +16 -15
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +28 -8
- package/dest/test/index.d.ts +10 -0
- package/dest/test/index.d.ts.map +1 -0
- package/dest/test/index.js +4 -0
- package/package.json +20 -18
- package/src/config.ts +6 -6
- package/src/factory.ts +5 -2
- package/src/job/epoch-proving-job.ts +78 -13
- package/src/metrics.ts +9 -4
- package/src/prover-node.ts +40 -17
- package/src/test/index.ts +11 -0
package/dest/config.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type ArchiverConfig } from '@aztec/archiver/config';
|
|
2
2
|
import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover/config';
|
|
3
|
-
import { type ProverAgentConfig, type ProverBrokerConfig } from '@aztec/circuit-types/config';
|
|
4
3
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
5
4
|
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
6
5
|
import { type P2PConfig } from '@aztec/p2p/config';
|
|
6
|
+
import { type ProverAgentConfig, type ProverBrokerConfig } from '@aztec/prover-client/broker';
|
|
7
7
|
import { type ProverClientConfig } from '@aztec/prover-client/config';
|
|
8
8
|
import { type PublisherConfig, type TxSenderConfig } from '@aztec/sequencer-client/config';
|
|
9
9
|
import { type WorldStateConfig } from '@aztec/world-state/config';
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAoD,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAoD,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAA4C,MAAM,wBAAwB,CAAC;AACxG,OAAO,EAAE,KAAK,SAAS,EAA0C,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAKpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAAwD,MAAM,2BAA2B,CAAC;AAExH,OAAO,EAAE,KAAK,uBAAuB,EAAmC,MAAM,kBAAkB,CAAC;AACjG,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,kBAAkB,GAClB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,wBAAwB,GACxB,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,CAAC;AAE3B,KAAK,wBAAwB,GAAG;IAC9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8BAA8B,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,0BAA0B,EAAE,MAAM,CAAC;IACnC,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAqDF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAYzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAc7D;AAED,wBAAgB,gCAAgC,IAAI,kBAAkB,CAIrE;AAED,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAK3F"}
|
package/dest/config.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { archiverConfigMappings, getArchiverConfigFromEnv } from '@aztec/archiver/config';
|
|
2
|
-
import { proverAgentConfigMappings, proverBrokerConfigMappings, } from '@aztec/circuit-types/config';
|
|
3
2
|
import { bigintConfigHelper, getConfigFromMappings, numberConfigHelper, } from '@aztec/foundation/config';
|
|
4
3
|
import { dataConfigMappings, getDataConfigFromEnv } from '@aztec/kv-store/config';
|
|
5
4
|
import { getP2PConfigFromEnv, p2pConfigMappings } from '@aztec/p2p/config';
|
|
5
|
+
import { proverAgentConfigMappings, proverBrokerConfigMappings, } from '@aztec/prover-client/broker';
|
|
6
6
|
import { bbConfigMappings, getProverEnvVars, proverClientConfigMappings, } from '@aztec/prover-client/config';
|
|
7
7
|
import { getPublisherConfigFromEnv, getPublisherConfigMappings, getTxSenderConfigFromEnv, getTxSenderConfigMappings, } from '@aztec/sequencer-client/config';
|
|
8
8
|
import { getWorldStateConfigFromEnv, worldStateConfigMappings } from '@aztec/world-state/config';
|
|
@@ -95,4 +95,4 @@ export function getProverNodeAgentConfigFromEnv() {
|
|
|
95
95
|
...getConfigFromMappings(bbConfigMappings),
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFL0csT0FBTyxFQUVMLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsa0JBQWtCLEdBQ25CLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUF3QixrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hHLE9BQU8sRUFBa0IsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRixPQUFPLEVBR0wseUJBQXlCLEVBQ3pCLDBCQUEwQixHQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLDBCQUEwQixHQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFHTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4Qix5QkFBeUIsR0FDMUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQXlCLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEgsT0FBTyxFQUFnQywrQkFBK0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pHLE9BQU8sRUFFTCwwQkFBMEIsRUFDMUIsZ0NBQWdDLEdBQ2pDLE1BQU0saUNBQWlDLENBQUM7QUE2QnpDLE1BQU0sZ0NBQWdDLEdBQWlEO0lBQ3JGLHdCQUF3QixFQUFFO1FBQ3hCLEdBQUcsRUFBRSw4QkFBOEI7UUFDbkMsV0FBVyxFQUFFLHdEQUF3RDtRQUNyRSxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztLQUMxQjtJQUNELDJCQUEyQixFQUFFO1FBQzNCLEdBQUcsRUFBRSxpQ0FBaUM7UUFDdEMsV0FBVyxFQUFFLG1EQUFtRDtRQUNoRSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQztLQUM1QjtJQUNELG1DQUFtQyxFQUFFO1FBQ25DLEdBQUcsRUFBRSwyQ0FBMkM7UUFDaEQsV0FBVyxFQUFFLDRFQUE0RTtRQUN6RixHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztLQUMxQjtJQUNELG9CQUFvQixFQUFFO1FBQ3BCLEdBQUcsRUFBRSxxQ0FBcUM7UUFDMUMsV0FBVyxFQUFFLGdFQUFnRTtRQUM3RSxHQUFHLGtCQUFrQixDQUFDLEtBQU0sQ0FBQztLQUM5QjtJQUNELHFCQUFxQixFQUFFO1FBQ3JCLEdBQUcsRUFBRSxzQ0FBc0M7UUFDM0MsV0FBVyxFQUFFLDhDQUE4QztRQUMzRCxHQUFHLGtCQUFrQixDQUFDLElBQUssQ0FBQztLQUM3QjtJQUNELDhCQUE4QixFQUFFO1FBQzlCLEdBQUcsRUFBRSxnREFBZ0Q7UUFDckQsV0FBVyxFQUFFLGdDQUFnQztRQUM3QyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztLQUMzQjtDQUNGLENBQUM7QUFFRixNQUFNLDJCQUEyQixHQUE0QztJQUMzRSwwQkFBMEIsRUFBRTtRQUMxQixHQUFHLEVBQUUsZ0NBQWdDO1FBQ3JDLFdBQVcsRUFBRSxvREFBb0Q7UUFDakUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7S0FDM0I7SUFDRCx1QkFBdUIsRUFBRTtRQUN2QixHQUFHLEVBQUUsNEJBQTRCO1FBQ2pDLFdBQVcsRUFBRSxnREFBZ0Q7UUFDN0QsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7S0FDN0I7SUFDRCxnQkFBZ0IsRUFBRTtRQUNoQixHQUFHLEVBQUUsb0JBQW9CO1FBQ3pCLFdBQVcsRUFDVCxnSEFBZ0g7S0FDbkg7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXlDO0lBQzVFLEdBQUcsa0JBQWtCO0lBQ3JCLEdBQUcsc0JBQXNCO0lBQ3pCLEdBQUcsMEJBQTBCO0lBQzdCLEdBQUcsaUJBQWlCO0lBQ3BCLEdBQUcsd0JBQXdCO0lBQzNCLEdBQUcsMEJBQTBCLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLEdBQUcseUJBQXlCLENBQUMsUUFBUSxDQUFDO0lBQ3RDLEdBQUcsZ0NBQWdDO0lBQ25DLEdBQUcsMkJBQTJCO0lBQzlCLEdBQUcsK0JBQStCO0lBQ2xDLEdBQUcsZ0NBQWdDO0NBQ3BDLENBQUM7QUFFRixNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE9BQU87UUFDTCxHQUFHLG9CQUFvQixFQUFFO1FBQ3pCLEdBQUcsd0JBQXdCLEVBQUU7UUFDN0IsR0FBRyxnQkFBZ0IsRUFBRTtRQUNyQixHQUFHLG1CQUFtQixFQUFFO1FBQ3hCLEdBQUcsMEJBQTBCLEVBQUU7UUFDL0IsR0FBRyx5QkFBeUIsQ0FBQyxRQUFRLENBQUM7UUFDdEMsR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLENBQUM7UUFDckMsR0FBRywwQkFBMEIsRUFBRTtRQUMvQixHQUFHLHFCQUFxQixDQUFDLDJCQUEyQixDQUFDO1FBQ3JELEdBQUcscUJBQXFCLENBQUMsZ0NBQWdDLENBQUM7UUFDMUQsR0FBRyxxQkFBcUIsQ0FBQywrQkFBK0IsQ0FBQztLQUMxRCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxnQ0FBZ0M7SUFDOUMsT0FBTztRQUNMLEdBQUcscUJBQXFCLENBQUMsMEJBQTBCLENBQUM7S0FDckQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsK0JBQStCO0lBQzdDLE9BQU87UUFDTCxHQUFHLHFCQUFxQixDQUFDLHlCQUF5QixDQUFDO1FBQ25ELEdBQUcscUJBQXFCLENBQUMsZ0JBQWdCLENBQUM7S0FDM0MsQ0FBQztBQUNKLENBQUMifQ==
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Archiver } from '@aztec/archiver';
|
|
2
|
+
import { type BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
2
3
|
import { type ProverCoordination, type ProvingJobBroker } from '@aztec/circuit-types';
|
|
3
4
|
import { type Logger } from '@aztec/foundation/log';
|
|
4
5
|
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
@@ -13,6 +14,7 @@ export declare function createProverNode(config: ProverNodeConfig & DataStoreCon
|
|
|
13
14
|
aztecNodeTxProvider?: ProverCoordination;
|
|
14
15
|
archiver?: Archiver;
|
|
15
16
|
publisher?: L1Publisher;
|
|
17
|
+
blobSinkClient?: BlobSinkClientInterface;
|
|
16
18
|
broker?: ProvingJobBroker;
|
|
17
19
|
}): Promise<ProverNode>;
|
|
18
20
|
//# sourceMappingURL=factory.d.ts.map
|
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,EAAE,KAAK,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAItF,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO/D,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,aAAa,CAAC;AAI9E,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AAKtE,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACtB,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,KAAK,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAItF,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO/D,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,aAAa,CAAC;AAI9E,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AAKtE,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAC1C,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACtB,uBAiEP"}
|
package/dest/factory.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createArchiver } from '@aztec/archiver';
|
|
2
|
+
import { createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
2
3
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
3
4
|
import { createEthereumChain } from '@aztec/ethereum';
|
|
4
5
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
@@ -21,8 +22,9 @@ import { QuoteSigner } from './quote-signer.js';
|
|
|
21
22
|
/** Creates a new prover node given a config. */
|
|
22
23
|
export async function createProverNode(config, deps = {}) {
|
|
23
24
|
const telemetry = deps.telemetry ?? new NoopTelemetryClient();
|
|
25
|
+
const blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config.blobSinkUrl);
|
|
24
26
|
const log = deps.log ?? createLogger('prover-node');
|
|
25
|
-
const archiver = deps.archiver ?? (await createArchiver(config, telemetry, { blockUntilSync: true }));
|
|
27
|
+
const archiver = deps.archiver ?? (await createArchiver(config, blobSinkClient, telemetry, { blockUntilSync: true }));
|
|
26
28
|
log.verbose(`Created archiver and synced to block ${await archiver.getBlockNumber()}`);
|
|
27
29
|
const worldStateConfig = { ...config, worldStateProvenBlocksOnly: false };
|
|
28
30
|
const worldStateSynchronizer = await createWorldStateSynchronizer(worldStateConfig, archiver, telemetry);
|
|
@@ -30,7 +32,7 @@ export async function createProverNode(config, deps = {}) {
|
|
|
30
32
|
const broker = deps.broker ?? (await createAndStartProvingBroker(config, telemetry));
|
|
31
33
|
const prover = await createProverClient(config, worldStateSynchronizer, broker, telemetry);
|
|
32
34
|
// REFACTOR: Move publisher out of sequencer package and into an L1-related package
|
|
33
|
-
const publisher = deps.publisher ?? new L1Publisher(config, telemetry);
|
|
35
|
+
const publisher = deps.publisher ?? new L1Publisher(config, { telemetry, blobSinkClient });
|
|
34
36
|
const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config);
|
|
35
37
|
// If config.p2pEnabled is true, createProverCoordination will create a p2p client where quotes will be shared and tx's requested
|
|
36
38
|
// If config.p2pEnabled is false, createProverCoordination request information from the AztecNode
|
|
@@ -73,4 +75,4 @@ function createQuoteSigner(config) {
|
|
|
73
75
|
const privateKey = config.publisherPrivateKey;
|
|
74
76
|
return QuoteSigner.new(Buffer32.fromString(privateKey), rollupContract);
|
|
75
77
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFnQyxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVB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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type EpochProver, type EpochProvingJobState, type ForkMerkleTreeOperations, type L1ToL2MessageSource, type L2Block, type L2BlockSource, type Tx } from '@aztec/circuit-types';
|
|
2
2
|
import { type L1Publisher } from '@aztec/sequencer-client';
|
|
3
|
-
import { type PublicProcessorFactory } from '@aztec/simulator';
|
|
3
|
+
import { type PublicProcessorFactory } from '@aztec/simulator/server';
|
|
4
4
|
import { type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
5
5
|
import { type ProverNodeMetrics } from '../metrics.js';
|
|
6
6
|
/**
|
|
@@ -19,14 +19,16 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
19
19
|
private l2BlockSource;
|
|
20
20
|
private l1ToL2MessageSource;
|
|
21
21
|
private metrics;
|
|
22
|
+
private deadline;
|
|
22
23
|
private config;
|
|
23
24
|
private cleanUp;
|
|
24
25
|
private state;
|
|
25
26
|
private log;
|
|
26
27
|
private uuid;
|
|
27
28
|
private runPromise;
|
|
29
|
+
private deadlineTimeoutHandler;
|
|
28
30
|
readonly tracer: Tracer;
|
|
29
|
-
constructor(dbProvider: ForkMerkleTreeOperations, epochNumber: bigint, blocks: L2Block[], txs: Tx[], prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: L1Publisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, metrics: ProverNodeMetrics, config?: {
|
|
31
|
+
constructor(dbProvider: ForkMerkleTreeOperations, epochNumber: bigint, blocks: L2Block[], txs: Tx[], prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: L1Publisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, metrics: ProverNodeMetrics, deadline: Date | undefined, config?: {
|
|
30
32
|
parallelBlockLimit: number;
|
|
31
33
|
}, cleanUp?: (job: EpochProvingJob) => Promise<void>);
|
|
32
34
|
getId(): string;
|
|
@@ -35,7 +37,10 @@ export declare class EpochProvingJob implements Traceable {
|
|
|
35
37
|
* Proves the given epoch and submits the proof to L1.
|
|
36
38
|
*/
|
|
37
39
|
run(): Promise<void>;
|
|
38
|
-
|
|
40
|
+
private progressState;
|
|
41
|
+
private checkState;
|
|
42
|
+
stop(state?: EpochProvingJobState): Promise<void>;
|
|
43
|
+
private scheduleDeadlineStop;
|
|
39
44
|
private getBlockHeader;
|
|
40
45
|
private getTxs;
|
|
41
46
|
private getL1ToL2Messages;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EAEzB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,aAAa,EAElB,KAAK,EAAE,EACR,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAW7C,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IAtBjB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,UAAU,EAAE,wBAAwB,EACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,EAAE,EACjB,GAAG,EAAE,EAAE,EAAE,EACT,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,GAAE;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAA+B,EACnE,OAAO,GAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAA2B;IAM7E,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIvC;;OAEG;IAIU,GAAG;IA6FhB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,oBAAgC;IASzD,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAgBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { EpochProvingJobTerminalState, } from '@aztec/circuit-types';
|
|
2
3
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
3
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
5
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
@@ -15,7 +16,7 @@ let EpochProvingJob = (() => {
|
|
|
15
16
|
let _instanceExtraInitializers = [];
|
|
16
17
|
let _run_decorators;
|
|
17
18
|
return _a = class EpochProvingJob {
|
|
18
|
-
constructor(dbProvider, epochNumber, blocks, txs, prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource, metrics, config = { parallelBlockLimit: 32 }, cleanUp = () => Promise.resolve()) {
|
|
19
|
+
constructor(dbProvider, epochNumber, blocks, txs, prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource, metrics, deadline, config = { parallelBlockLimit: 32 }, cleanUp = () => Promise.resolve()) {
|
|
19
20
|
this.dbProvider = (__runInitializers(this, _instanceExtraInitializers), dbProvider);
|
|
20
21
|
this.epochNumber = epochNumber;
|
|
21
22
|
this.blocks = blocks;
|
|
@@ -26,6 +27,7 @@ let EpochProvingJob = (() => {
|
|
|
26
27
|
this.l2BlockSource = l2BlockSource;
|
|
27
28
|
this.l1ToL2MessageSource = l1ToL2MessageSource;
|
|
28
29
|
this.metrics = metrics;
|
|
30
|
+
this.deadline = deadline;
|
|
29
31
|
this.config = config;
|
|
30
32
|
this.cleanUp = cleanUp;
|
|
31
33
|
this.state = 'initialized';
|
|
@@ -43,9 +45,10 @@ let EpochProvingJob = (() => {
|
|
|
43
45
|
* Proves the given epoch and submits the proof to L1.
|
|
44
46
|
*/
|
|
45
47
|
async run() {
|
|
48
|
+
this.scheduleDeadlineStop();
|
|
46
49
|
const epochNumber = Number(this.epochNumber);
|
|
47
50
|
const epochSizeBlocks = this.blocks.length;
|
|
48
|
-
const epochSizeTxs = this.blocks.reduce((total, current) => total + current.body.
|
|
51
|
+
const epochSizeTxs = this.blocks.reduce((total, current) => total + current.body.txEffects.length, 0);
|
|
49
52
|
const [fromBlock, toBlock] = [this.blocks[0].number, this.blocks.at(-1).number];
|
|
50
53
|
this.log.info(`Starting epoch ${epochNumber} proving job with blocks ${fromBlock} to ${toBlock}`, {
|
|
51
54
|
fromBlock,
|
|
@@ -54,13 +57,15 @@ let EpochProvingJob = (() => {
|
|
|
54
57
|
epochNumber,
|
|
55
58
|
uuid: this.uuid,
|
|
56
59
|
});
|
|
57
|
-
this.
|
|
60
|
+
this.progressState('processing');
|
|
58
61
|
const timer = new Timer();
|
|
59
62
|
const { promise, resolve } = promiseWithResolvers();
|
|
60
63
|
this.runPromise = promise;
|
|
61
64
|
try {
|
|
62
65
|
this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks);
|
|
66
|
+
this.prover.startTubeCircuits(this.txs);
|
|
63
67
|
await asyncPool(this.config.parallelBlockLimit, this.blocks, async (block) => {
|
|
68
|
+
this.checkState();
|
|
64
69
|
const globalVariables = block.header.globalVariables;
|
|
65
70
|
const txs = this.getTxs(block);
|
|
66
71
|
const l1ToL2Messages = await this.getL1ToL2Messages(block);
|
|
@@ -92,30 +97,69 @@ let EpochProvingJob = (() => {
|
|
|
92
97
|
// Mark block as completed to pad it
|
|
93
98
|
await this.prover.setBlockCompleted(block.number, block.header);
|
|
94
99
|
});
|
|
95
|
-
|
|
100
|
+
const executionTime = timer.ms();
|
|
101
|
+
this.progressState('awaiting-prover');
|
|
96
102
|
const { publicInputs, proof } = await this.prover.finaliseEpoch();
|
|
97
103
|
this.log.info(`Finalised proof for epoch ${epochNumber}`, { epochNumber, uuid: this.uuid, duration: timer.ms() });
|
|
98
|
-
this.
|
|
99
|
-
await this.publisher.submitEpochProof({ fromBlock, toBlock, epochNumber, publicInputs, proof });
|
|
104
|
+
this.progressState('publishing-proof');
|
|
105
|
+
const success = await this.publisher.submitEpochProof({ fromBlock, toBlock, epochNumber, publicInputs, proof });
|
|
106
|
+
if (!success) {
|
|
107
|
+
throw new Error('Failed to submit epoch proof to L1');
|
|
108
|
+
}
|
|
100
109
|
this.log.info(`Submitted proof for epoch`, { epochNumber, uuid: this.uuid });
|
|
101
110
|
this.state = 'completed';
|
|
102
|
-
this.metrics.recordProvingJob(timer, epochSizeBlocks, epochSizeTxs);
|
|
111
|
+
this.metrics.recordProvingJob(executionTime, timer.ms(), epochSizeBlocks, epochSizeTxs);
|
|
103
112
|
}
|
|
104
113
|
catch (err) {
|
|
114
|
+
if (err && err.name === 'HaltExecutionError') {
|
|
115
|
+
this.log.warn(`Halted execution of epoch ${epochNumber} prover job`, { uuid: this.uuid, epochNumber });
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
105
118
|
this.log.error(`Error running epoch ${epochNumber} prover job`, err, { uuid: this.uuid, epochNumber });
|
|
106
119
|
this.state = 'failed';
|
|
107
120
|
}
|
|
108
121
|
finally {
|
|
122
|
+
clearTimeout(this.deadlineTimeoutHandler);
|
|
109
123
|
await this.cleanUp(this);
|
|
124
|
+
await this.prover.stop();
|
|
110
125
|
resolve();
|
|
111
126
|
}
|
|
112
127
|
}
|
|
113
|
-
|
|
128
|
+
progressState(state) {
|
|
129
|
+
this.checkState();
|
|
130
|
+
this.state = state;
|
|
131
|
+
}
|
|
132
|
+
checkState() {
|
|
133
|
+
if (this.state === 'timed-out' || this.state === 'stopped' || this.state === 'failed') {
|
|
134
|
+
throw new HaltExecutionError(this.state);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async stop(state = 'stopped') {
|
|
138
|
+
this.state = state;
|
|
114
139
|
this.prover.cancel();
|
|
140
|
+
// TODO(palla/prover): Stop the publisher as well
|
|
115
141
|
if (this.runPromise) {
|
|
116
142
|
await this.runPromise;
|
|
117
143
|
}
|
|
118
144
|
}
|
|
145
|
+
scheduleDeadlineStop() {
|
|
146
|
+
const deadline = this.deadline;
|
|
147
|
+
if (deadline) {
|
|
148
|
+
const timeout = deadline.getTime() - Date.now();
|
|
149
|
+
if (timeout <= 0) {
|
|
150
|
+
throw new Error('Cannot start job with deadline in the past');
|
|
151
|
+
}
|
|
152
|
+
this.deadlineTimeoutHandler = setTimeout(() => {
|
|
153
|
+
if (EpochProvingJobTerminalState.includes(this.state)) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
this.log.warn('Stopping job due to deadline hit', { uuid: this.uuid, epochNumber: this.epochNumber });
|
|
157
|
+
this.stop('timed-out').catch(err => {
|
|
158
|
+
this.log.error('Error stopping job', err, { uuid: this.uuid, epochNumber: this.epochNumber });
|
|
159
|
+
});
|
|
160
|
+
}, timeout);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
119
163
|
/* Returns the header for the given block number, or undefined for block zero. */
|
|
120
164
|
getBlockHeader(blockNumber) {
|
|
121
165
|
if (blockNumber === 0) {
|
|
@@ -131,9 +175,13 @@ let EpochProvingJob = (() => {
|
|
|
131
175
|
return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
|
|
132
176
|
}
|
|
133
177
|
async processTxs(publicProcessor, txs) {
|
|
134
|
-
const
|
|
178
|
+
const { deadline } = this;
|
|
179
|
+
const [processedTxs, failedTxs] = await publicProcessor.process(txs, { deadline });
|
|
135
180
|
if (failedTxs.length) {
|
|
136
|
-
throw new Error(`
|
|
181
|
+
throw new Error(`Txs failed processing: ${failedTxs.map(({ tx, error }) => `${tx.getTxHash()} (${error})`).join(', ')}`);
|
|
182
|
+
}
|
|
183
|
+
if (processedTxs.length !== txs.length) {
|
|
184
|
+
throw new Error(`Failed to process all txs: processed ${processedTxs.length} out of ${txs.length}`);
|
|
137
185
|
}
|
|
138
186
|
return processedTxs;
|
|
139
187
|
}
|
|
@@ -149,4 +197,10 @@ let EpochProvingJob = (() => {
|
|
|
149
197
|
_a;
|
|
150
198
|
})();
|
|
151
199
|
export { EpochProvingJob };
|
|
152
|
-
|
|
200
|
+
class HaltExecutionError extends Error {
|
|
201
|
+
constructor(state) {
|
|
202
|
+
super(`Halted execution due to state ${state}`);
|
|
203
|
+
this.name = 'HaltExecutionError';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtcHJvdmluZy1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvam9iL2Vwb2NoLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBR0wsNEJBQTRCLEdBTzdCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHaEQsT0FBTyxFQUFFLFVBQVUsRUFBK0IsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0YsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFJdEM7Ozs7R0FJRztJQUNVLGVBQWU7Ozs7c0JBQWYsZUFBZTtZQVUxQixZQUNVLFVBQW9DLEVBQ3BDLFdBQW1CLEVBQ25CLE1BQWlCLEVBQ2pCLEdBQVMsRUFDVCxNQUFtQixFQUNuQixzQkFBOEMsRUFDOUMsU0FBc0IsRUFDdEIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLE9BQTBCLEVBQzFCLFFBQTBCLEVBQzFCLFNBQXlDLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLEVBQ25FLFVBQW1ELEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBWjFFLGVBQVUsSUFYVCxtREFBZSxFQVdoQixVQUFVLEVBQTBCO2dCQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtnQkFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBVztnQkFDakIsUUFBRyxHQUFILEdBQUcsQ0FBTTtnQkFDVCxXQUFNLEdBQU4sTUFBTSxDQUFhO2dCQUNuQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO2dCQUM5QyxjQUFTLEdBQVQs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
|
package/dest/metrics.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type Timer } from '@aztec/foundation/timer';
|
|
2
1
|
import { type Histogram, type TelemetryClient } from '@aztec/telemetry-client';
|
|
3
2
|
export declare class ProverNodeMetrics {
|
|
4
3
|
readonly client: TelemetryClient;
|
|
4
|
+
proverEpochExecutionDuration: Histogram;
|
|
5
5
|
provingJobDuration: Histogram;
|
|
6
6
|
provingJobBlocks: Histogram;
|
|
7
7
|
provingJobTransactions: Histogram;
|
|
8
8
|
constructor(client: TelemetryClient, name?: string);
|
|
9
|
-
recordProvingJob(
|
|
9
|
+
recordProvingJob(executionTimeMs: number, totalTimeMs: number, numBlocks: number, numTxs: number): void;
|
|
10
10
|
}
|
|
11
11
|
//# sourceMappingURL=metrics.d.ts.map
|
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,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAW,KAAK,eAAe,EAAa,MAAM,yBAAyB,CAAC;AAEnG,qBAAa,iBAAiB;aAMA,MAAM,EAAE,eAAe;IALnD,4BAA4B,EAAE,SAAS,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,gBAAgB,EAAE,SAAS,CAAC;IAC5B,sBAAsB,EAAE,SAAS,CAAC;gBAEN,MAAM,EAAE,eAAe,EAAE,IAAI,SAAe;IAsBjE,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMxG"}
|
package/dest/metrics.js
CHANGED
|
@@ -3,6 +3,11 @@ export class ProverNodeMetrics {
|
|
|
3
3
|
constructor(client, name = 'ProverNode') {
|
|
4
4
|
this.client = client;
|
|
5
5
|
const meter = client.getMeter(name);
|
|
6
|
+
this.proverEpochExecutionDuration = meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION, {
|
|
7
|
+
description: 'Duration of execution of an epoch by the prover',
|
|
8
|
+
unit: 'ms',
|
|
9
|
+
valueType: ValueType.INT,
|
|
10
|
+
});
|
|
6
11
|
this.provingJobDuration = meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION, {
|
|
7
12
|
description: 'Duration of proving job',
|
|
8
13
|
unit: 'ms',
|
|
@@ -17,11 +22,11 @@ export class ProverNodeMetrics {
|
|
|
17
22
|
valueType: ValueType.INT,
|
|
18
23
|
});
|
|
19
24
|
}
|
|
20
|
-
recordProvingJob(
|
|
21
|
-
|
|
22
|
-
this.provingJobDuration.record(
|
|
25
|
+
recordProvingJob(executionTimeMs, totalTimeMs, numBlocks, numTxs) {
|
|
26
|
+
this.proverEpochExecutionDuration.record(Math.ceil(executionTimeMs));
|
|
27
|
+
this.provingJobDuration.record(Math.ceil(totalTimeMs));
|
|
23
28
|
this.provingJobBlocks.record(Math.floor(numBlocks));
|
|
24
29
|
this.provingJobTransactions.record(Math.floor(numTxs));
|
|
25
30
|
}
|
|
26
31
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsT0FBTyxFQUF3QixTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRyxNQUFNLE9BQU8saUJBQWlCO0lBTTVCLFlBQTRCLE1BQXVCLEVBQUUsSUFBSSxHQUFHLFlBQVk7UUFBNUMsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDakQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsOEJBQThCLEVBQUU7WUFDaEcsV0FBVyxFQUFFLGlEQUFpRDtZQUM5RCxJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUU7WUFDaEYsV0FBVyxFQUFFLHlCQUF5QjtZQUN0QyxJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUU7WUFDNUUsV0FBVyxFQUFFLG9DQUFvQztZQUNqRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFO1lBQ3hGLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxlQUF1QixFQUFFLFdBQW1CLEVBQUUsU0FBaUIsRUFBRSxNQUFjO1FBQ3JHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRiJ9
|
package/dest/prover-node.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { type ContractDataSource } from '@aztec/circuits.js';
|
|
|
3
3
|
import { type Maybe } from '@aztec/foundation/types';
|
|
4
4
|
import { type P2P } from '@aztec/p2p';
|
|
5
5
|
import { type L1Publisher } from '@aztec/sequencer-client';
|
|
6
|
-
import { PublicProcessorFactory } from '@aztec/simulator';
|
|
6
|
+
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
7
7
|
import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
8
8
|
import { type BondManager } from './bond/bond-manager.js';
|
|
9
9
|
import { EpochProvingJob, type EpochProvingJobState } from './job/epoch-proving-job.js';
|
|
@@ -26,19 +26,19 @@ export type ProverNodeOptions = {
|
|
|
26
26
|
* proof for the epoch, and submits it to L1.
|
|
27
27
|
*/
|
|
28
28
|
export declare class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, ProverNodeApi, Traceable {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
29
|
+
protected readonly prover: EpochProverManager;
|
|
30
|
+
protected readonly publisher: L1Publisher;
|
|
31
|
+
protected readonly l2BlockSource: L2BlockSource & Maybe<Service>;
|
|
32
|
+
protected readonly l1ToL2MessageSource: L1ToL2MessageSource;
|
|
33
|
+
protected readonly contractDataSource: ContractDataSource;
|
|
34
|
+
protected readonly worldState: WorldStateSynchronizer;
|
|
35
|
+
protected readonly coordination: ProverCoordination & Maybe<Service>;
|
|
36
|
+
protected readonly quoteProvider: QuoteProvider;
|
|
37
|
+
protected readonly quoteSigner: QuoteSigner;
|
|
38
|
+
protected readonly claimsMonitor: ClaimsMonitor;
|
|
39
|
+
protected readonly epochsMonitor: EpochMonitor;
|
|
40
|
+
protected readonly bondManager: BondManager;
|
|
41
|
+
protected readonly telemetryClient: TelemetryClient;
|
|
42
42
|
private log;
|
|
43
43
|
private dateProvider;
|
|
44
44
|
private latestEpochWeAreProving;
|
|
@@ -95,11 +95,12 @@ export declare class ProverNode implements ClaimsMonitorHandler, EpochMonitorHan
|
|
|
95
95
|
}[]>;
|
|
96
96
|
private checkMaximumPendingJobs;
|
|
97
97
|
private createProvingJob;
|
|
98
|
+
private getL1Constants;
|
|
98
99
|
private gatherEpochData;
|
|
99
100
|
private gatherBlocks;
|
|
100
101
|
private gatherTxs;
|
|
101
102
|
/** Extracted for testing purposes. */
|
|
102
|
-
protected doCreateEpochProvingJob(epochNumber: bigint, blocks: L2Block[], txs: Tx[], publicProcessorFactory: PublicProcessorFactory, cleanUp: () => Promise<void>): EpochProvingJob;
|
|
103
|
+
protected doCreateEpochProvingJob(epochNumber: bigint, deadline: Date | undefined, blocks: L2Block[], txs: Tx[], publicProcessorFactory: PublicProcessorFactory, cleanUp: () => Promise<void>): EpochProvingJob;
|
|
103
104
|
/** Extracted for testing purposes. */
|
|
104
105
|
protected triggerMonitors(): Promise<void>;
|
|
105
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,EAAE,EAEP,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,EAAE,EAEP,KAAK,sBAAsB,EAG5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAQ7D,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAEnH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAExF,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,MAAM,CAAC;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8BAA8B,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,oBAAoB,EAAE,mBAAmB,EAAE,aAAa,EAAE,SAAS;IAalG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB;IAC7C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW;IACzC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;IAChE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB;IAC3D,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;IACzD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,sBAAsB;IACrD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC;IACpE,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAC/C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW;IAC3C,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAC/C,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY;IAC9C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW;IAC3C,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe;IAxBrD,OAAO,CAAC,GAAG,CAA+B;IAC1C,OAAO,CAAC,YAAY,CAAsB;IAE1C,OAAO,CAAC,uBAAuB,CAAqB;IACpD,OAAO,CAAC,IAAI,CAA2C;IACvD,OAAO,CAAC,eAAe,CAAgF;IACvG,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;IAEnC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGV,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,EAC7C,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,EACjD,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,YAAY,EAC3B,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EACnD,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAgBnC,MAAM;IAQP,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B7D;;;;OAIG;IACG,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhE;;;OAGG;IACG,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC9D;;;;OAIG;IACG,KAAK;IAOX;;OAEG;IACG,IAAI;IAcV,qDAAqD;IAC9C,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE,OAAO,CAAC,qBAAqB;IAI7B;;OAEG;IACU,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAK/C;;OAEG;IACU,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAKpD;;OAEG;IACI,SAAS;IAIhB;;OAEG;IACI,OAAO,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,oBAAoB,CAAA;KAAE,EAAE,CAAC;IAI3E,OAAO,CAAC,uBAAuB;YAMjB,gBAAgB;IAqC9B,OAAO,CAAC,cAAc;YAKR,eAAe;YAQf,YAAY;YAQZ,SAAS;IAiEvB,sCAAsC;IACtC,SAAS,CAAC,uBAAuB,CAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE,OAAO,EAAE,EACjB,GAAG,EAAE,EAAE,EAAE,EACT,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAmB9B,sCAAsC;cACtB,eAAe;CAIhC"}
|
package/dest/prover-node.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { EpochProofQuotePayload, tryStop, } from '@aztec/circuit-types';
|
|
2
|
+
import { EpochProofQuotePayload, getTimestampRangeForEpoch, tryStop, } from '@aztec/circuit-types';
|
|
3
3
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
4
4
|
import { compact } from '@aztec/foundation/collection';
|
|
5
|
+
import { memoize } from '@aztec/foundation/decorators';
|
|
5
6
|
import { TimeoutError } from '@aztec/foundation/error';
|
|
6
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
8
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
8
9
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
9
|
-
import { PublicProcessorFactory } from '@aztec/simulator';
|
|
10
|
+
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
10
11
|
import { Attributes, trackSpan } from '@aztec/telemetry-client';
|
|
11
12
|
import { EpochProvingJob } from './job/epoch-proving-job.js';
|
|
12
13
|
import { ProverNodeMetrics } from './metrics.js';
|
|
@@ -20,6 +21,7 @@ let ProverNode = (() => {
|
|
|
20
21
|
var _a;
|
|
21
22
|
let _instanceExtraInitializers = [];
|
|
22
23
|
let _createProvingJob_decorators;
|
|
24
|
+
let _getL1Constants_decorators;
|
|
23
25
|
let _gatherEpochData_decorators;
|
|
24
26
|
return _a = class ProverNode {
|
|
25
27
|
constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, coordination, quoteProvider, quoteSigner, claimsMonitor, epochsMonitor, bondManager, telemetryClient, options = {}) {
|
|
@@ -132,7 +134,12 @@ let ProverNode = (() => {
|
|
|
132
134
|
await this.doSendEpochProofQuote(signed);
|
|
133
135
|
}
|
|
134
136
|
catch (err) {
|
|
135
|
-
|
|
137
|
+
if (err instanceof EmptyEpochError) {
|
|
138
|
+
this.log.info(`Not producing quote for ${epochNumber} since no blocks were found`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
this.log.error(`Error handling epoch completed`, err);
|
|
142
|
+
}
|
|
136
143
|
}
|
|
137
144
|
}
|
|
138
145
|
/**
|
|
@@ -218,10 +225,15 @@ let ProverNode = (() => {
|
|
|
218
225
|
this.jobs.delete(job.getId());
|
|
219
226
|
return Promise.resolve();
|
|
220
227
|
};
|
|
221
|
-
const
|
|
228
|
+
const [_, endTimestamp] = getTimestampRangeForEpoch(epochNumber + 1n, await this.getL1Constants());
|
|
229
|
+
const deadline = new Date(Number(endTimestamp) * 1000);
|
|
230
|
+
const job = this.doCreateEpochProvingJob(epochNumber, deadline, blocks, txs, publicProcessorFactory, cleanUp);
|
|
222
231
|
this.jobs.set(job.getId(), job);
|
|
223
232
|
return job;
|
|
224
233
|
}
|
|
234
|
+
getL1Constants() {
|
|
235
|
+
return this.l2BlockSource.getL1Constants();
|
|
236
|
+
}
|
|
225
237
|
async gatherEpochData(epochNumber) {
|
|
226
238
|
// Gather blocks for this epoch and their txs
|
|
227
239
|
const blocks = await this.gatherBlocks(epochNumber);
|
|
@@ -231,7 +243,7 @@ let ProverNode = (() => {
|
|
|
231
243
|
async gatherBlocks(epochNumber) {
|
|
232
244
|
const blocks = await this.l2BlockSource.getBlocksForEpoch(epochNumber);
|
|
233
245
|
if (blocks.length === 0) {
|
|
234
|
-
throw new
|
|
246
|
+
throw new EmptyEpochError(epochNumber);
|
|
235
247
|
}
|
|
236
248
|
return blocks;
|
|
237
249
|
}
|
|
@@ -286,8 +298,8 @@ let ProverNode = (() => {
|
|
|
286
298
|
return Array.from(results.values());
|
|
287
299
|
}
|
|
288
300
|
/** Extracted for testing purposes. */
|
|
289
|
-
doCreateEpochProvingJob(epochNumber, blocks, txs, publicProcessorFactory, cleanUp) {
|
|
290
|
-
return new EpochProvingJob(this.worldState, epochNumber, blocks, txs, this.prover.createEpochProver(), publicProcessorFactory, this.publisher, this.l2BlockSource, this.l1ToL2MessageSource, this.metrics, { parallelBlockLimit: this.options.maxParallelBlocksPerEpoch }, cleanUp);
|
|
301
|
+
doCreateEpochProvingJob(epochNumber, deadline, blocks, txs, publicProcessorFactory, cleanUp) {
|
|
302
|
+
return new EpochProvingJob(this.worldState, epochNumber, blocks, txs, this.prover.createEpochProver(), publicProcessorFactory, this.publisher, this.l2BlockSource, this.l1ToL2MessageSource, this.metrics, deadline, { parallelBlockLimit: this.options.maxParallelBlocksPerEpoch }, cleanUp);
|
|
291
303
|
}
|
|
292
304
|
/** Extracted for testing purposes. */
|
|
293
305
|
async triggerMonitors() {
|
|
@@ -298,12 +310,20 @@ let ProverNode = (() => {
|
|
|
298
310
|
(() => {
|
|
299
311
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
300
312
|
_createProvingJob_decorators = [trackSpan('ProverNode.createProvingJob', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))];
|
|
313
|
+
_getL1Constants_decorators = [memoize];
|
|
301
314
|
_gatherEpochData_decorators = [trackSpan('ProverNode.gatherEpochData', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))];
|
|
302
315
|
__esDecorate(_a, null, _createProvingJob_decorators, { kind: "method", name: "createProvingJob", static: false, private: false, access: { has: obj => "createProvingJob" in obj, get: obj => obj.createProvingJob }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
316
|
+
__esDecorate(_a, null, _getL1Constants_decorators, { kind: "method", name: "getL1Constants", static: false, private: false, access: { has: obj => "getL1Constants" in obj, get: obj => obj.getL1Constants }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
303
317
|
__esDecorate(_a, null, _gatherEpochData_decorators, { kind: "method", name: "gatherEpochData", static: false, private: false, access: { has: obj => "gatherEpochData" in obj, get: obj => obj.gatherEpochData }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
304
318
|
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
305
319
|
})(),
|
|
306
320
|
_a;
|
|
307
321
|
})();
|
|
308
322
|
export { ProverNode };
|
|
309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxzQkFBc0IsRUFZdEIsT0FBTyxHQUNSLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBcUQsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkgsT0FBTyxFQUFFLGVBQWUsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFlakQ7Ozs7O0dBS0c7SUFDVSxVQUFVOzs7OztzQkFBVixVQUFVO1lBWXJCLFlBQ21CLE1BQTBCLEVBQzFCLFNBQXNCLEVBQ3RCLGFBQTZDLEVBQzdDLG1CQUF3QyxFQUN4QyxrQkFBc0MsRUFDdEMsVUFBa0MsRUFDbEMsWUFBaUQsRUFDakQsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsYUFBMkIsRUFDM0IsV0FBd0IsRUFDeEIsZUFBZ0MsRUFDakQsVUFBc0MsRUFBRTtnQkFidkIsV0FBTSxJQWJkLG1EQUFVLEVBYUYsTUFBTSxFQUFvQjtnQkFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBYTtn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
|
|
323
|
+
class EmptyEpochError extends Error {
|
|
324
|
+
constructor(epochNumber) {
|
|
325
|
+
super(`No blocks found for epoch ${epochNumber}`);
|
|
326
|
+
this.name = 'EmptyEpochError';
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxzQkFBc0IsRUFZdEIseUJBQXlCLEVBQ3pCLE9BQU8sR0FDUixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUl2RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFxRCxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUduSCxPQUFPLEVBQUUsZUFBZSxFQUE2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWVqRDs7Ozs7R0FLRztJQUNVLFVBQVU7Ozs7OztzQkFBVixVQUFVO1lBWXJCLFlBQ3FCLE1BQTBCLEVBQzFCLFNBQXNCLEVBQ3RCLGFBQTZDLEVBQzdDLG1CQUF3QyxFQUN4QyxrQkFBc0MsRUFDdEMsVUFBa0MsRUFDbEMsWUFBaUQsRUFDakQsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsYUFBMkIsRUFDM0IsV0FBd0IsRUFDeEIsZUFBZ0MsRUFDbkQsVUFBc0MsRUFBRTtnQkFickIsV0FB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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type EpochProverManager } from '@aztec/circuit-types';
|
|
2
|
+
import { type L1Publisher } from '@aztec/sequencer-client';
|
|
3
|
+
import { ProverNode } from '../prover-node.js';
|
|
4
|
+
declare class TestProverNode_ extends ProverNode {
|
|
5
|
+
prover: EpochProverManager;
|
|
6
|
+
publisher: L1Publisher;
|
|
7
|
+
}
|
|
8
|
+
export type TestProverNode = TestProverNode_;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,cAAM,eAAgB,SAAQ,UAAU;IACtB,MAAM,EAAG,kBAAkB,CAAC;IAC5B,SAAS,EAAG,WAAW,CAAC;CACzC;AAED,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ProverNode } from '../prover-node.js';
|
|
2
|
+
class TestProverNode_ extends ProverNode {
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFL0MsTUFBTSxlQUFnQixTQUFRLFVBQVU7Q0FHdkMifQ==
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
-
"./config": "./dest/config.js"
|
|
7
|
+
"./config": "./dest/config.js",
|
|
8
|
+
"./test": "./dest/test/index.js"
|
|
8
9
|
},
|
|
9
10
|
"inherits": [
|
|
10
11
|
"../package.common.json"
|
|
@@ -52,22 +53,23 @@
|
|
|
52
53
|
]
|
|
53
54
|
},
|
|
54
55
|
"dependencies": {
|
|
55
|
-
"@aztec/archiver": "0.
|
|
56
|
-
"@aztec/bb-prover": "0.
|
|
57
|
-
"@aztec/
|
|
58
|
-
"@aztec/
|
|
59
|
-
"@aztec/
|
|
60
|
-
"@aztec/
|
|
61
|
-
"@aztec/
|
|
62
|
-
"@aztec/
|
|
63
|
-
"@aztec/
|
|
64
|
-
"@aztec/
|
|
65
|
-
"@aztec/
|
|
66
|
-
"@aztec/
|
|
67
|
-
"@aztec/
|
|
68
|
-
"@aztec/
|
|
69
|
-
"@aztec/
|
|
70
|
-
"@aztec/
|
|
56
|
+
"@aztec/archiver": "0.70.0",
|
|
57
|
+
"@aztec/bb-prover": "0.70.0",
|
|
58
|
+
"@aztec/blob-sink": "0.70.0",
|
|
59
|
+
"@aztec/circuit-types": "0.70.0",
|
|
60
|
+
"@aztec/circuits.js": "0.70.0",
|
|
61
|
+
"@aztec/epoch-cache": "0.70.0",
|
|
62
|
+
"@aztec/ethereum": "0.70.0",
|
|
63
|
+
"@aztec/foundation": "0.70.0",
|
|
64
|
+
"@aztec/kv-store": "0.70.0",
|
|
65
|
+
"@aztec/l1-artifacts": "0.70.0",
|
|
66
|
+
"@aztec/p2p": "0.70.0",
|
|
67
|
+
"@aztec/prover-client": "0.70.0",
|
|
68
|
+
"@aztec/sequencer-client": "0.70.0",
|
|
69
|
+
"@aztec/simulator": "0.70.0",
|
|
70
|
+
"@aztec/telemetry-client": "0.70.0",
|
|
71
|
+
"@aztec/types": "0.70.0",
|
|
72
|
+
"@aztec/world-state": "0.70.0",
|
|
71
73
|
"source-map-support": "^0.5.21",
|
|
72
74
|
"tslib": "^2.4.0",
|
|
73
75
|
"viem": "^2.7.15"
|
package/src/config.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { type ArchiverConfig, archiverConfigMappings, getArchiverConfigFromEnv } from '@aztec/archiver/config';
|
|
2
2
|
import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover/config';
|
|
3
|
-
import {
|
|
4
|
-
type ProverAgentConfig,
|
|
5
|
-
type ProverBrokerConfig,
|
|
6
|
-
proverAgentConfigMappings,
|
|
7
|
-
proverBrokerConfigMappings,
|
|
8
|
-
} from '@aztec/circuit-types/config';
|
|
9
3
|
import {
|
|
10
4
|
type ConfigMappingsType,
|
|
11
5
|
bigintConfigHelper,
|
|
@@ -14,6 +8,12 @@ import {
|
|
|
14
8
|
} from '@aztec/foundation/config';
|
|
15
9
|
import { type DataStoreConfig, dataConfigMappings, getDataConfigFromEnv } from '@aztec/kv-store/config';
|
|
16
10
|
import { type P2PConfig, getP2PConfigFromEnv, p2pConfigMappings } from '@aztec/p2p/config';
|
|
11
|
+
import {
|
|
12
|
+
type ProverAgentConfig,
|
|
13
|
+
type ProverBrokerConfig,
|
|
14
|
+
proverAgentConfigMappings,
|
|
15
|
+
proverBrokerConfigMappings,
|
|
16
|
+
} from '@aztec/prover-client/broker';
|
|
17
17
|
import {
|
|
18
18
|
type ProverClientConfig,
|
|
19
19
|
bbConfigMappings,
|
package/src/factory.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Archiver, createArchiver } from '@aztec/archiver';
|
|
2
|
+
import { type BlobSinkClientInterface, createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
2
3
|
import { type ProverCoordination, type ProvingJobBroker } from '@aztec/circuit-types';
|
|
3
4
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
4
5
|
import { createEthereumChain } from '@aztec/ethereum';
|
|
@@ -34,12 +35,14 @@ export async function createProverNode(
|
|
|
34
35
|
aztecNodeTxProvider?: ProverCoordination;
|
|
35
36
|
archiver?: Archiver;
|
|
36
37
|
publisher?: L1Publisher;
|
|
38
|
+
blobSinkClient?: BlobSinkClientInterface;
|
|
37
39
|
broker?: ProvingJobBroker;
|
|
38
40
|
} = {},
|
|
39
41
|
) {
|
|
40
42
|
const telemetry = deps.telemetry ?? new NoopTelemetryClient();
|
|
43
|
+
const blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config.blobSinkUrl);
|
|
41
44
|
const log = deps.log ?? createLogger('prover-node');
|
|
42
|
-
const archiver = deps.archiver ?? (await createArchiver(config, telemetry, { blockUntilSync: true }));
|
|
45
|
+
const archiver = deps.archiver ?? (await createArchiver(config, blobSinkClient, telemetry, { blockUntilSync: true }));
|
|
43
46
|
log.verbose(`Created archiver and synced to block ${await archiver.getBlockNumber()}`);
|
|
44
47
|
|
|
45
48
|
const worldStateConfig = { ...config, worldStateProvenBlocksOnly: false };
|
|
@@ -50,7 +53,7 @@ export async function createProverNode(
|
|
|
50
53
|
const prover = await createProverClient(config, worldStateSynchronizer, broker, telemetry);
|
|
51
54
|
|
|
52
55
|
// REFACTOR: Move publisher out of sequencer package and into an L1-related package
|
|
53
|
-
const publisher = deps.publisher ?? new L1Publisher(config, telemetry);
|
|
56
|
+
const publisher = deps.publisher ?? new L1Publisher(config, { telemetry, blobSinkClient });
|
|
54
57
|
|
|
55
58
|
const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config);
|
|
56
59
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type EpochProver,
|
|
3
3
|
type EpochProvingJobState,
|
|
4
|
+
EpochProvingJobTerminalState,
|
|
4
5
|
type ForkMerkleTreeOperations,
|
|
5
6
|
type L1ToL2MessageSource,
|
|
6
7
|
type L2Block,
|
|
@@ -13,7 +14,7 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
13
14
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
14
15
|
import { Timer } from '@aztec/foundation/timer';
|
|
15
16
|
import { type L1Publisher } from '@aztec/sequencer-client';
|
|
16
|
-
import { type PublicProcessor, type PublicProcessorFactory } from '@aztec/simulator';
|
|
17
|
+
import { type PublicProcessor, type PublicProcessorFactory } from '@aztec/simulator/server';
|
|
17
18
|
import { Attributes, type Traceable, type Tracer, trackSpan } from '@aztec/telemetry-client';
|
|
18
19
|
|
|
19
20
|
import * as crypto from 'node:crypto';
|
|
@@ -31,6 +32,7 @@ export class EpochProvingJob implements Traceable {
|
|
|
31
32
|
private uuid: string;
|
|
32
33
|
|
|
33
34
|
private runPromise: Promise<void> | undefined;
|
|
35
|
+
private deadlineTimeoutHandler: NodeJS.Timeout | undefined;
|
|
34
36
|
|
|
35
37
|
public readonly tracer: Tracer;
|
|
36
38
|
|
|
@@ -45,6 +47,7 @@ export class EpochProvingJob implements Traceable {
|
|
|
45
47
|
private l2BlockSource: L2BlockSource,
|
|
46
48
|
private l1ToL2MessageSource: L1ToL2MessageSource,
|
|
47
49
|
private metrics: ProverNodeMetrics,
|
|
50
|
+
private deadline: Date | undefined,
|
|
48
51
|
private config: { parallelBlockLimit: number } = { parallelBlockLimit: 32 },
|
|
49
52
|
private cleanUp: (job: EpochProvingJob) => Promise<void> = () => Promise.resolve(),
|
|
50
53
|
) {
|
|
@@ -67,9 +70,11 @@ export class EpochProvingJob implements Traceable {
|
|
|
67
70
|
return { [Attributes.EPOCH_NUMBER]: Number(this.epochNumber) };
|
|
68
71
|
})
|
|
69
72
|
public async run() {
|
|
73
|
+
this.scheduleDeadlineStop();
|
|
74
|
+
|
|
70
75
|
const epochNumber = Number(this.epochNumber);
|
|
71
76
|
const epochSizeBlocks = this.blocks.length;
|
|
72
|
-
const epochSizeTxs = this.blocks.reduce((total, current) => total + current.body.
|
|
77
|
+
const epochSizeTxs = this.blocks.reduce((total, current) => total + current.body.txEffects.length, 0);
|
|
73
78
|
const [fromBlock, toBlock] = [this.blocks[0].number, this.blocks.at(-1)!.number];
|
|
74
79
|
this.log.info(`Starting epoch ${epochNumber} proving job with blocks ${fromBlock} to ${toBlock}`, {
|
|
75
80
|
fromBlock,
|
|
@@ -78,16 +83,19 @@ export class EpochProvingJob implements Traceable {
|
|
|
78
83
|
epochNumber,
|
|
79
84
|
uuid: this.uuid,
|
|
80
85
|
});
|
|
81
|
-
this.state = 'processing';
|
|
82
|
-
const timer = new Timer();
|
|
83
86
|
|
|
87
|
+
this.progressState('processing');
|
|
88
|
+
const timer = new Timer();
|
|
84
89
|
const { promise, resolve } = promiseWithResolvers<void>();
|
|
85
90
|
this.runPromise = promise;
|
|
86
91
|
|
|
87
92
|
try {
|
|
88
93
|
this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks);
|
|
94
|
+
this.prover.startTubeCircuits(this.txs);
|
|
89
95
|
|
|
90
96
|
await asyncPool(this.config.parallelBlockLimit, this.blocks, async block => {
|
|
97
|
+
this.checkState();
|
|
98
|
+
|
|
91
99
|
const globalVariables = block.header.globalVariables;
|
|
92
100
|
const txs = this.getTxs(block);
|
|
93
101
|
const l1ToL2Messages = await this.getL1ToL2Messages(block);
|
|
@@ -104,6 +112,7 @@ export class EpochProvingJob implements Traceable {
|
|
|
104
112
|
uuid: this.uuid,
|
|
105
113
|
...globalVariables,
|
|
106
114
|
});
|
|
115
|
+
|
|
107
116
|
// Start block proving
|
|
108
117
|
await this.prover.startNewBlock(globalVariables, l1ToL2Messages);
|
|
109
118
|
|
|
@@ -123,32 +132,76 @@ export class EpochProvingJob implements Traceable {
|
|
|
123
132
|
await this.prover.setBlockCompleted(block.number, block.header);
|
|
124
133
|
});
|
|
125
134
|
|
|
126
|
-
|
|
135
|
+
const executionTime = timer.ms();
|
|
136
|
+
|
|
137
|
+
this.progressState('awaiting-prover');
|
|
127
138
|
const { publicInputs, proof } = await this.prover.finaliseEpoch();
|
|
128
139
|
this.log.info(`Finalised proof for epoch ${epochNumber}`, { epochNumber, uuid: this.uuid, duration: timer.ms() });
|
|
129
140
|
|
|
130
|
-
this.
|
|
131
|
-
await this.publisher.submitEpochProof({ fromBlock, toBlock, epochNumber, publicInputs, proof });
|
|
132
|
-
|
|
141
|
+
this.progressState('publishing-proof');
|
|
142
|
+
const success = await this.publisher.submitEpochProof({ fromBlock, toBlock, epochNumber, publicInputs, proof });
|
|
143
|
+
if (!success) {
|
|
144
|
+
throw new Error('Failed to submit epoch proof to L1');
|
|
145
|
+
}
|
|
133
146
|
|
|
147
|
+
this.log.info(`Submitted proof for epoch`, { epochNumber, uuid: this.uuid });
|
|
134
148
|
this.state = 'completed';
|
|
135
|
-
this.metrics.recordProvingJob(timer, epochSizeBlocks, epochSizeTxs);
|
|
136
|
-
} catch (err) {
|
|
149
|
+
this.metrics.recordProvingJob(executionTime, timer.ms(), epochSizeBlocks, epochSizeTxs);
|
|
150
|
+
} catch (err: any) {
|
|
151
|
+
if (err && err.name === 'HaltExecutionError') {
|
|
152
|
+
this.log.warn(`Halted execution of epoch ${epochNumber} prover job`, { uuid: this.uuid, epochNumber });
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
137
155
|
this.log.error(`Error running epoch ${epochNumber} prover job`, err, { uuid: this.uuid, epochNumber });
|
|
138
156
|
this.state = 'failed';
|
|
139
157
|
} finally {
|
|
158
|
+
clearTimeout(this.deadlineTimeoutHandler);
|
|
140
159
|
await this.cleanUp(this);
|
|
160
|
+
await this.prover.stop();
|
|
141
161
|
resolve();
|
|
142
162
|
}
|
|
143
163
|
}
|
|
144
164
|
|
|
145
|
-
|
|
165
|
+
private progressState(state: EpochProvingJobState) {
|
|
166
|
+
this.checkState();
|
|
167
|
+
this.state = state;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private checkState() {
|
|
171
|
+
if (this.state === 'timed-out' || this.state === 'stopped' || this.state === 'failed') {
|
|
172
|
+
throw new HaltExecutionError(this.state);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
public async stop(state: EpochProvingJobState = 'stopped') {
|
|
177
|
+
this.state = state;
|
|
146
178
|
this.prover.cancel();
|
|
179
|
+
// TODO(palla/prover): Stop the publisher as well
|
|
147
180
|
if (this.runPromise) {
|
|
148
181
|
await this.runPromise;
|
|
149
182
|
}
|
|
150
183
|
}
|
|
151
184
|
|
|
185
|
+
private scheduleDeadlineStop() {
|
|
186
|
+
const deadline = this.deadline;
|
|
187
|
+
if (deadline) {
|
|
188
|
+
const timeout = deadline.getTime() - Date.now();
|
|
189
|
+
if (timeout <= 0) {
|
|
190
|
+
throw new Error('Cannot start job with deadline in the past');
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
this.deadlineTimeoutHandler = setTimeout(() => {
|
|
194
|
+
if (EpochProvingJobTerminalState.includes(this.state)) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
this.log.warn('Stopping job due to deadline hit', { uuid: this.uuid, epochNumber: this.epochNumber });
|
|
198
|
+
this.stop('timed-out').catch(err => {
|
|
199
|
+
this.log.error('Error stopping job', err, { uuid: this.uuid, epochNumber: this.epochNumber });
|
|
200
|
+
});
|
|
201
|
+
}, timeout);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
152
205
|
/* Returns the header for the given block number, or undefined for block zero. */
|
|
153
206
|
private getBlockHeader(blockNumber: number) {
|
|
154
207
|
if (blockNumber === 0) {
|
|
@@ -167,16 +220,28 @@ export class EpochProvingJob implements Traceable {
|
|
|
167
220
|
}
|
|
168
221
|
|
|
169
222
|
private async processTxs(publicProcessor: PublicProcessor, txs: Tx[]): Promise<ProcessedTx[]> {
|
|
170
|
-
const
|
|
223
|
+
const { deadline } = this;
|
|
224
|
+
const [processedTxs, failedTxs] = await publicProcessor.process(txs, { deadline });
|
|
171
225
|
|
|
172
226
|
if (failedTxs.length) {
|
|
173
227
|
throw new Error(
|
|
174
|
-
`
|
|
228
|
+
`Txs failed processing: ${failedTxs.map(({ tx, error }) => `${tx.getTxHash()} (${error})`).join(', ')}`,
|
|
175
229
|
);
|
|
176
230
|
}
|
|
177
231
|
|
|
232
|
+
if (processedTxs.length !== txs.length) {
|
|
233
|
+
throw new Error(`Failed to process all txs: processed ${processedTxs.length} out of ${txs.length}`);
|
|
234
|
+
}
|
|
235
|
+
|
|
178
236
|
return processedTxs;
|
|
179
237
|
}
|
|
180
238
|
}
|
|
181
239
|
|
|
240
|
+
class HaltExecutionError extends Error {
|
|
241
|
+
constructor(state: EpochProvingJobState) {
|
|
242
|
+
super(`Halted execution due to state ${state}`);
|
|
243
|
+
this.name = 'HaltExecutionError';
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
182
247
|
export { type EpochProvingJobState };
|
package/src/metrics.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import { type Timer } from '@aztec/foundation/timer';
|
|
2
1
|
import { type Histogram, Metrics, type TelemetryClient, ValueType } from '@aztec/telemetry-client';
|
|
3
2
|
|
|
4
3
|
export class ProverNodeMetrics {
|
|
4
|
+
proverEpochExecutionDuration: Histogram;
|
|
5
5
|
provingJobDuration: Histogram;
|
|
6
6
|
provingJobBlocks: Histogram;
|
|
7
7
|
provingJobTransactions: Histogram;
|
|
8
8
|
|
|
9
9
|
constructor(public readonly client: TelemetryClient, name = 'ProverNode') {
|
|
10
10
|
const meter = client.getMeter(name);
|
|
11
|
+
this.proverEpochExecutionDuration = meter.createHistogram(Metrics.PROVER_NODE_EXECUTION_DURATION, {
|
|
12
|
+
description: 'Duration of execution of an epoch by the prover',
|
|
13
|
+
unit: 'ms',
|
|
14
|
+
valueType: ValueType.INT,
|
|
15
|
+
});
|
|
11
16
|
this.provingJobDuration = meter.createHistogram(Metrics.PROVER_NODE_JOB_DURATION, {
|
|
12
17
|
description: 'Duration of proving job',
|
|
13
18
|
unit: 'ms',
|
|
@@ -23,9 +28,9 @@ export class ProverNodeMetrics {
|
|
|
23
28
|
});
|
|
24
29
|
}
|
|
25
30
|
|
|
26
|
-
public recordProvingJob(
|
|
27
|
-
|
|
28
|
-
this.provingJobDuration.record(
|
|
31
|
+
public recordProvingJob(executionTimeMs: number, totalTimeMs: number, numBlocks: number, numTxs: number) {
|
|
32
|
+
this.proverEpochExecutionDuration.record(Math.ceil(executionTimeMs));
|
|
33
|
+
this.provingJobDuration.record(Math.ceil(totalTimeMs));
|
|
29
34
|
this.provingJobBlocks.record(Math.floor(numBlocks));
|
|
30
35
|
this.provingJobTransactions.record(Math.floor(numTxs));
|
|
31
36
|
}
|
package/src/prover-node.ts
CHANGED
|
@@ -13,11 +13,13 @@ import {
|
|
|
13
13
|
type Tx,
|
|
14
14
|
type TxHash,
|
|
15
15
|
type WorldStateSynchronizer,
|
|
16
|
+
getTimestampRangeForEpoch,
|
|
16
17
|
tryStop,
|
|
17
18
|
} from '@aztec/circuit-types';
|
|
18
19
|
import { type ContractDataSource } from '@aztec/circuits.js';
|
|
19
20
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
20
21
|
import { compact } from '@aztec/foundation/collection';
|
|
22
|
+
import { memoize } from '@aztec/foundation/decorators';
|
|
21
23
|
import { TimeoutError } from '@aztec/foundation/error';
|
|
22
24
|
import { createLogger } from '@aztec/foundation/log';
|
|
23
25
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
@@ -25,7 +27,7 @@ import { DateProvider } from '@aztec/foundation/timer';
|
|
|
25
27
|
import { type Maybe } from '@aztec/foundation/types';
|
|
26
28
|
import { type P2P } from '@aztec/p2p';
|
|
27
29
|
import { type L1Publisher } from '@aztec/sequencer-client';
|
|
28
|
-
import { PublicProcessorFactory } from '@aztec/simulator';
|
|
30
|
+
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
29
31
|
import { Attributes, type TelemetryClient, type Traceable, type Tracer, trackSpan } from '@aztec/telemetry-client';
|
|
30
32
|
|
|
31
33
|
import { type BondManager } from './bond/bond-manager.js';
|
|
@@ -64,19 +66,19 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
64
66
|
public readonly tracer: Tracer;
|
|
65
67
|
|
|
66
68
|
constructor(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
69
|
+
protected readonly prover: EpochProverManager,
|
|
70
|
+
protected readonly publisher: L1Publisher,
|
|
71
|
+
protected readonly l2BlockSource: L2BlockSource & Maybe<Service>,
|
|
72
|
+
protected readonly l1ToL2MessageSource: L1ToL2MessageSource,
|
|
73
|
+
protected readonly contractDataSource: ContractDataSource,
|
|
74
|
+
protected readonly worldState: WorldStateSynchronizer,
|
|
75
|
+
protected readonly coordination: ProverCoordination & Maybe<Service>,
|
|
76
|
+
protected readonly quoteProvider: QuoteProvider,
|
|
77
|
+
protected readonly quoteSigner: QuoteSigner,
|
|
78
|
+
protected readonly claimsMonitor: ClaimsMonitor,
|
|
79
|
+
protected readonly epochsMonitor: EpochMonitor,
|
|
80
|
+
protected readonly bondManager: BondManager,
|
|
81
|
+
protected readonly telemetryClient: TelemetryClient,
|
|
80
82
|
options: Partial<ProverNodeOptions> = {},
|
|
81
83
|
) {
|
|
82
84
|
this.options = {
|
|
@@ -182,7 +184,11 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
182
184
|
);
|
|
183
185
|
await this.doSendEpochProofQuote(signed);
|
|
184
186
|
} catch (err) {
|
|
185
|
-
|
|
187
|
+
if (err instanceof EmptyEpochError) {
|
|
188
|
+
this.log.info(`Not producing quote for ${epochNumber} since no blocks were found`);
|
|
189
|
+
} else {
|
|
190
|
+
this.log.error(`Error handling epoch completed`, err);
|
|
191
|
+
}
|
|
186
192
|
}
|
|
187
193
|
}
|
|
188
194
|
|
|
@@ -289,11 +295,19 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
289
295
|
return Promise.resolve();
|
|
290
296
|
};
|
|
291
297
|
|
|
292
|
-
const
|
|
298
|
+
const [_, endTimestamp] = getTimestampRangeForEpoch(epochNumber + 1n, await this.getL1Constants());
|
|
299
|
+
const deadline = new Date(Number(endTimestamp) * 1000);
|
|
300
|
+
|
|
301
|
+
const job = this.doCreateEpochProvingJob(epochNumber, deadline, blocks, txs, publicProcessorFactory, cleanUp);
|
|
293
302
|
this.jobs.set(job.getId(), job);
|
|
294
303
|
return job;
|
|
295
304
|
}
|
|
296
305
|
|
|
306
|
+
@memoize
|
|
307
|
+
private getL1Constants() {
|
|
308
|
+
return this.l2BlockSource.getL1Constants();
|
|
309
|
+
}
|
|
310
|
+
|
|
297
311
|
@trackSpan('ProverNode.gatherEpochData', epochNumber => ({ [Attributes.EPOCH_NUMBER]: Number(epochNumber) }))
|
|
298
312
|
private async gatherEpochData(epochNumber: bigint) {
|
|
299
313
|
// Gather blocks for this epoch and their txs
|
|
@@ -306,7 +320,7 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
306
320
|
private async gatherBlocks(epochNumber: bigint) {
|
|
307
321
|
const blocks = await this.l2BlockSource.getBlocksForEpoch(epochNumber);
|
|
308
322
|
if (blocks.length === 0) {
|
|
309
|
-
throw new
|
|
323
|
+
throw new EmptyEpochError(epochNumber);
|
|
310
324
|
}
|
|
311
325
|
return blocks;
|
|
312
326
|
}
|
|
@@ -379,6 +393,7 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
379
393
|
/** Extracted for testing purposes. */
|
|
380
394
|
protected doCreateEpochProvingJob(
|
|
381
395
|
epochNumber: bigint,
|
|
396
|
+
deadline: Date | undefined,
|
|
382
397
|
blocks: L2Block[],
|
|
383
398
|
txs: Tx[],
|
|
384
399
|
publicProcessorFactory: PublicProcessorFactory,
|
|
@@ -395,6 +410,7 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
395
410
|
this.l2BlockSource,
|
|
396
411
|
this.l1ToL2MessageSource,
|
|
397
412
|
this.metrics,
|
|
413
|
+
deadline,
|
|
398
414
|
{ parallelBlockLimit: this.options.maxParallelBlocksPerEpoch },
|
|
399
415
|
cleanUp,
|
|
400
416
|
);
|
|
@@ -406,3 +422,10 @@ export class ProverNode implements ClaimsMonitorHandler, EpochMonitorHandler, Pr
|
|
|
406
422
|
await this.claimsMonitor.work();
|
|
407
423
|
}
|
|
408
424
|
}
|
|
425
|
+
|
|
426
|
+
class EmptyEpochError extends Error {
|
|
427
|
+
constructor(epochNumber: bigint) {
|
|
428
|
+
super(`No blocks found for epoch ${epochNumber}`);
|
|
429
|
+
this.name = 'EmptyEpochError';
|
|
430
|
+
}
|
|
431
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type EpochProverManager } from '@aztec/circuit-types';
|
|
2
|
+
import { type L1Publisher } from '@aztec/sequencer-client';
|
|
3
|
+
|
|
4
|
+
import { ProverNode } from '../prover-node.js';
|
|
5
|
+
|
|
6
|
+
class TestProverNode_ extends ProverNode {
|
|
7
|
+
public override prover!: EpochProverManager;
|
|
8
|
+
public override publisher!: L1Publisher;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type TestProverNode = TestProverNode_;
|