@aztec/prover-node 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +518 -0
  2. package/dest/actions/download-epoch-proving-job.js +1 -1
  3. package/dest/actions/rerun-epoch-proving-job.d.ts +6 -4
  4. package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
  5. package/dest/actions/rerun-epoch-proving-job.js +191 -28
  6. package/dest/actions/upload-epoch-proof-failure.d.ts +2 -2
  7. package/dest/actions/upload-epoch-proof-failure.d.ts.map +1 -1
  8. package/dest/bin/run-failed-epoch.js +6 -5
  9. package/dest/checkpoint-store.d.ts +87 -0
  10. package/dest/checkpoint-store.d.ts.map +1 -0
  11. package/dest/checkpoint-store.js +186 -0
  12. package/dest/config.d.ts +7 -8
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +24 -20
  15. package/dest/factory.d.ts +22 -13
  16. package/dest/factory.d.ts.map +1 -1
  17. package/dest/factory.js +41 -69
  18. package/dest/index.d.ts +2 -1
  19. package/dest/index.d.ts.map +1 -1
  20. package/dest/index.js +1 -0
  21. package/dest/job/checkpoint-prover.d.ts +134 -0
  22. package/dest/job/checkpoint-prover.d.ts.map +1 -0
  23. package/dest/job/checkpoint-prover.js +353 -0
  24. package/dest/job/epoch-session.d.ts +146 -0
  25. package/dest/job/epoch-session.d.ts.map +1 -0
  26. package/dest/job/{epoch-proving-job.js → epoch-session.js} +277 -295
  27. package/dest/job/top-tree-job.d.ts +82 -0
  28. package/dest/job/top-tree-job.d.ts.map +1 -0
  29. package/dest/job/top-tree-job.js +152 -0
  30. package/dest/metrics.d.ts +40 -3
  31. package/dest/metrics.d.ts.map +1 -1
  32. package/dest/metrics.js +112 -7
  33. package/dest/monitors/epoch-monitor.d.ts +1 -1
  34. package/dest/monitors/epoch-monitor.d.ts.map +1 -1
  35. package/dest/monitors/epoch-monitor.js +11 -9
  36. package/dest/proof-publishing-service.d.ts +161 -0
  37. package/dest/proof-publishing-service.d.ts.map +1 -0
  38. package/dest/proof-publishing-service.js +335 -0
  39. package/dest/prover-node-publisher.d.ts +28 -17
  40. package/dest/prover-node-publisher.d.ts.map +1 -1
  41. package/dest/prover-node-publisher.js +205 -65
  42. package/dest/prover-node.d.ts +120 -70
  43. package/dest/prover-node.d.ts.map +1 -1
  44. package/dest/prover-node.js +491 -226
  45. package/dest/prover-publisher-factory.d.ts +9 -5
  46. package/dest/prover-publisher-factory.d.ts.map +1 -1
  47. package/dest/prover-publisher-factory.js +8 -5
  48. package/dest/session-manager.d.ts +158 -0
  49. package/dest/session-manager.d.ts.map +1 -0
  50. package/dest/session-manager.js +452 -0
  51. package/dest/test/index.d.ts +7 -6
  52. package/dest/test/index.d.ts.map +1 -1
  53. package/package.json +24 -22
  54. package/src/actions/download-epoch-proving-job.ts +1 -1
  55. package/src/actions/rerun-epoch-proving-job.ts +120 -30
  56. package/src/actions/upload-epoch-proof-failure.ts +1 -1
  57. package/src/bin/run-failed-epoch.ts +5 -3
  58. package/src/checkpoint-store.ts +218 -0
  59. package/src/config.ts +35 -32
  60. package/src/factory.ts +73 -112
  61. package/src/index.ts +1 -0
  62. package/src/job/checkpoint-prover.ts +468 -0
  63. package/src/job/epoch-session.ts +436 -0
  64. package/src/job/top-tree-job.ts +227 -0
  65. package/src/metrics.ts +129 -12
  66. package/src/monitors/epoch-monitor.ts +5 -6
  67. package/src/proof-publishing-service.ts +427 -0
  68. package/src/prover-node-publisher.ts +241 -81
  69. package/src/prover-node.ts +566 -255
  70. package/src/prover-publisher-factory.ts +19 -10
  71. package/src/session-manager.ts +552 -0
  72. package/src/test/index.ts +6 -6
  73. package/dest/job/epoch-proving-job.d.ts +0 -62
  74. package/dest/job/epoch-proving-job.d.ts.map +0 -1
  75. package/src/job/epoch-proving-job.ts +0 -427
package/dest/config.js CHANGED
@@ -1,16 +1,13 @@
1
- import { archiverConfigMappings } from '@aztec/archiver/config';
2
- import { genesisStateConfigMappings } from '@aztec/ethereum/config';
3
- import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
4
- import { dataConfigMappings } from '@aztec/kv-store/config';
1
+ import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper, pickConfigMappings } from '@aztec/foundation/config';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
5
3
  import { keyStoreConfigMappings } from '@aztec/node-keystore/config';
6
4
  import { ethPrivateKeySchema } from '@aztec/node-keystore/schemas';
7
5
  import { sharedNodeConfigMappings } from '@aztec/node-lib/config';
8
- import { p2pConfigMappings } from '@aztec/p2p/config';
9
6
  import { proverAgentConfigMappings, proverBrokerConfigMappings } from '@aztec/prover-client/broker/config';
10
7
  import { bbConfigMappings, proverClientConfigMappings } from '@aztec/prover-client/config';
11
- import { getPublisherConfigMappings, getTxSenderConfigMappings } from '@aztec/sequencer-client/config';
12
- import { worldStateConfigMappings } from '@aztec/world-state/config';
13
- const specificProverNodeConfigMappings = {
8
+ import { proverPublisherConfigMappings, proverTxSenderConfigMappings } from '@aztec/sequencer-client/config';
9
+ import { dataConfigMappings } from '@aztec/stdlib/kv-store';
10
+ export const specificProverNodeConfigMappings = {
14
11
  proverNodeMaxPendingJobs: {
15
12
  env: 'PROVER_NODE_MAX_PENDING_JOBS',
16
13
  description: 'The maximum number of pending jobs for the prover node',
@@ -24,7 +21,7 @@ const specificProverNodeConfigMappings = {
24
21
  proverNodeMaxParallelBlocksPerEpoch: {
25
22
  env: 'PROVER_NODE_MAX_PARALLEL_BLOCKS_PER_EPOCH',
26
23
  description: 'The Maximum number of blocks to process in parallel while proving an epoch',
27
- ...numberConfigHelper(32)
24
+ ...numberConfigHelper(0)
28
25
  },
29
26
  proverNodeFailedEpochStore: {
30
27
  env: 'PROVER_NODE_FAILED_EPOCH_STORE',
@@ -32,7 +29,7 @@ const specificProverNodeConfigMappings = {
32
29
  defaultValue: undefined
33
30
  },
34
31
  proverNodeEpochProvingDelayMs: {
35
- description: 'Optional delay in milliseconds to wait before proving a new epoch',
32
+ description: 'Optional delay in milliseconds to wait for late-arriving events (e.g. reorgs) to settle before starting top-tree proving for an epoch',
36
33
  defaultValue: undefined
37
34
  },
38
35
  txGatheringIntervalMs: {
@@ -59,20 +56,24 @@ const specificProverNodeConfigMappings = {
59
56
  env: 'PROVER_NODE_DISABLE_PROOF_PUBLISH',
60
57
  description: 'Whether the prover node skips publishing proofs to L1',
61
58
  ...booleanConfigHelper(false)
59
+ },
60
+ proofSubmissionTargetAddress: {
61
+ env: 'PROVER_NODE_PROOF_SUBMISSION_TARGET_ADDRESS',
62
+ description: 'Optional L1 address the submitEpochRootProof tx is sent to. Must expose the identical submitEpochRootProof ABI ' + 'and forward to the rollup. Defaults to the rollup address.',
63
+ parseEnv: (val)=>EthAddress.fromString(val),
64
+ defaultValue: undefined
62
65
  }
63
66
  };
64
67
  export const proverNodeConfigMappings = {
65
68
  ...dataConfigMappings,
66
69
  ...keyStoreConfigMappings,
67
- ...archiverConfigMappings,
68
70
  ...proverClientConfigMappings,
69
- ...p2pConfigMappings,
70
- ...worldStateConfigMappings,
71
- ...getPublisherConfigMappings('PROVER'),
72
- ...getTxSenderConfigMappings('PROVER'),
71
+ ...proverPublisherConfigMappings,
72
+ ...proverTxSenderConfigMappings,
73
73
  ...specificProverNodeConfigMappings,
74
- ...genesisStateConfigMappings,
75
- ...sharedNodeConfigMappings
74
+ ...pickConfigMappings(sharedNodeConfigMappings, [
75
+ 'web3SignerUrl'
76
+ ])
76
77
  };
77
78
  export function getProverNodeConfigFromEnv() {
78
79
  return getConfigFromMappings(proverNodeConfigMappings);
@@ -94,7 +95,7 @@ function createKeyStoreFromWeb3Signer(config) {
94
95
  return undefined;
95
96
  }
96
97
  // Also, we need at least one publisher address.
97
- const publishers = config.publisherAddresses ?? [];
98
+ const publishers = config.proverPublisherAddresses ?? [];
98
99
  if (publishers.length === 0) {
99
100
  return undefined;
100
101
  }
@@ -112,7 +113,7 @@ function createKeyStoreFromWeb3Signer(config) {
112
113
  }
113
114
  function createKeyStoreFromPublisherKeys(config) {
114
115
  // Extract the publisher keys from the provided config.
115
- const publisherKeys = config.publisherPrivateKeys ? config.publisherPrivateKeys.map((k)=>ethPrivateKeySchema.parse(k.getValue())) : [];
116
+ const publisherKeys = config.proverPublisherPrivateKeys ? config.proverPublisherPrivateKeys.map((k)=>ethPrivateKeySchema.parse(k.getValue())) : [];
116
117
  // There must be at least 1.
117
118
  if (publisherKeys.length === 0) {
118
119
  return undefined;
@@ -133,7 +134,10 @@ function createKeyStoreFromPublisherKeys(config) {
133
134
  }
134
135
  export function createKeyStoreForProver(config) {
135
136
  if (config.web3SignerUrl !== undefined && config.web3SignerUrl.length > 0) {
136
- return createKeyStoreFromWeb3Signer(config);
137
+ const keyStore = createKeyStoreFromWeb3Signer(config);
138
+ if (keyStore) {
139
+ return keyStore;
140
+ }
137
141
  }
138
142
  return createKeyStoreFromPublisherKeys(config);
139
143
  }
package/dest/factory.d.ts CHANGED
@@ -1,27 +1,36 @@
1
- import { type Archiver } from '@aztec/archiver';
1
+ import type { Archiver } from '@aztec/archiver';
2
+ import type { BlobClientInterface } from '@aztec/blob-client/client';
3
+ import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
4
  import { L1TxUtils } from '@aztec/ethereum/l1-tx-utils';
3
5
  import { type Logger } from '@aztec/foundation/log';
4
6
  import { DateProvider } from '@aztec/foundation/timer';
5
- import type { DataStoreConfig } from '@aztec/kv-store/config';
6
- import { type KeyStoreConfig } from '@aztec/node-keystore';
7
- import type { AztecNode, ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
8
- import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
7
+ import { KeystoreManager } from '@aztec/node-keystore';
8
+ import { type ProverClientUserConfig } from '@aztec/prover-client';
9
+ import { type ProverPublisherConfig, type ProverTxSenderConfig } from '@aztec/sequencer-client';
10
+ import type { AvmSimulator } from '@aztec/simulator/server';
11
+ import type { ITxProvider, ProverConfig, ProvingJobBroker, Service, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
12
  import { type TelemetryClient } from '@aztec/telemetry-client';
10
- import { type ProverNodeConfig } from './config.js';
13
+ import type { SpecificProverNodeConfig } from './config.js';
11
14
  import { ProverNode } from './prover-node.js';
12
15
  import { ProverPublisherFactory } from './prover-publisher-factory.js';
13
16
  export type ProverNodeDeps = {
14
17
  telemetry?: TelemetryClient;
15
18
  log?: Logger;
16
- aztecNodeTxProvider?: Pick<AztecNode, 'getTxsByHash'>;
17
- archiver?: Archiver;
19
+ archiver: Archiver;
18
20
  publisherFactory?: ProverPublisherFactory;
19
21
  broker?: ProvingJobBroker;
20
22
  l1TxUtils?: L1TxUtils;
21
23
  dateProvider?: DateProvider;
24
+ worldStateSynchronizer: WorldStateSynchronizer;
25
+ p2pClient: {
26
+ getTxProvider(): ITxProvider;
27
+ } & Partial<Service>;
28
+ epochCache: EpochCacheInterface;
29
+ blobClient: BlobClientInterface;
30
+ keyStoreManager?: KeystoreManager;
31
+ /** AVM execution backend (simulator pool + CDB server) for public simulation. */
32
+ avmSimulator: AvmSimulator;
22
33
  };
23
- /** Creates a new prover node given a config. */
24
- export declare function createProverNode(userConfig: ProverNodeConfig & DataStoreConfig & KeyStoreConfig, deps?: ProverNodeDeps, options?: {
25
- prefilledPublicData?: PublicDataTreeLeaf[];
26
- }): Promise<ProverNode>;
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBTWhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBa0QsTUFBTSxzQkFBc0IsQ0FBQztBQVMzRyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sRUFBYSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUs5RixPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBMkIsTUFBTSxhQUFhLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZFLE1BQU0sTUFBTSxjQUFjLEdBQUc7SUFDM0IsU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNiLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN0RCxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDcEIsZ0JBQWdCLENBQUMsRUFBRSxzQkFBc0IsQ0FBQztJQUMxQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztJQUMxQixTQUFTLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDdEIsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDO0NBQzdCLENBQUM7QUFFRixnREFBZ0Q7QUFDaEQsd0JBQXNCLGdCQUFnQixDQUNwQyxVQUFVLEVBQUUsZ0JBQWdCLEdBQUcsZUFBZSxHQUFHLGNBQWMsRUFDL0QsSUFBSSxHQUFFLGNBQW1CLEVBQ3pCLE9BQU8sR0FBRTtJQUNQLG1CQUFtQixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztDQUN2Qyx1QkFrTFAifQ==
34
+ /** Creates a new prover node subsystem given a config and dependencies */
35
+ export declare function createProverNode(userConfig: SpecificProverNodeConfig & ProverConfig & ProverClientUserConfig & ProverPublisherConfig & ProverTxSenderConfig, deps: ProverNodeDeps): Promise<ProverNode>;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQTJCLEtBQUssc0JBQXNCLEVBQXNCLE1BQU0sc0JBQXNCLENBQUM7QUFFaEgsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssb0JBQW9CLEVBRTFCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBYSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUk5RixPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkUsTUFBTSxNQUFNLGNBQWMsR0FBRztJQUMzQixTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2IsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNuQixnQkFBZ0IsQ0FBQyxFQUFFLHNCQUFzQixDQUFDO0lBQzFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQzFCLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUN0QixZQUFZLENBQUMsRUFBRSxZQUFZLENBQUM7SUFDNUIsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7SUFDL0MsU0FBUyxFQUFFO1FBQUUsYUFBYSxJQUFJLFdBQVcsQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztJQUNoQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDaEMsZUFBZSxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQ2xDLGlGQUFpRjtJQUNqRixZQUFZLEVBQUUsWUFBWSxDQUFDO0NBQzVCLENBQUM7QUFFRiwwRUFBMEU7QUFDMUUsd0JBQXNCLGdCQUFnQixDQUNwQyxVQUFVLEVBQUUsd0JBQXdCLEdBQ2xDLFlBQVksR0FDWixzQkFBc0IsR0FDdEIscUJBQXFCLEdBQ3JCLG9CQUFvQixFQUN0QixJQUFJLEVBQUUsY0FBYyx1QkFrSXJCIn0=
@@ -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;AAMhE,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,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,cAAc,EAAkD,MAAM,sBAAsB,CAAC;AAS3G,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAa,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAK9F,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,aAAa,CAAC;AAE7E,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,mBAAmB,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,gBAAgB,GAAG,eAAe,GAAG,cAAc,EAC/D,IAAI,GAAE,cAAmB,EACzB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACvC,uBAkLP"}
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,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,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;AAC5D,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;IAClC,iFAAiF;IACjF,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,wBAAwB,GAClC,YAAY,GACZ,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,EACtB,IAAI,EAAE,cAAc,uBAkIrB"}
package/dest/factory.js CHANGED
@@ -1,57 +1,34 @@
1
- import { createArchiver } from '@aztec/archiver';
2
- import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
3
- import { createBlobClientWithFileStores } from '@aztec/blob-client/client';
4
- import { EpochCache } from '@aztec/epoch-cache';
1
+ import { Blob } from '@aztec/blob-lib';
5
2
  import { createEthereumChain } from '@aztec/ethereum/chain';
3
+ import { makeL1HttpTransport } from '@aztec/ethereum/client';
6
4
  import { RollupContract } from '@aztec/ethereum/contracts';
7
5
  import { PublisherManager } from '@aztec/ethereum/publisher-manager';
8
6
  import { pick } from '@aztec/foundation/collection';
9
7
  import { createLogger } from '@aztec/foundation/log';
10
8
  import { DateProvider } from '@aztec/foundation/timer';
11
- import { KeystoreManager, loadKeystores, mergeKeystores } from '@aztec/node-keystore';
12
- import { trySnapshotSync } from '@aztec/node-lib/actions';
13
- import { createForwarderL1TxUtilsFromEthSigner, createL1TxUtilsFromEthSignerWithStore } from '@aztec/node-lib/factories';
14
- import { NodeRpcTxSource, createP2PClient } from '@aztec/p2p';
9
+ import { createForwarderL1TxUtilsFromSigners, createL1TxUtilsFromSigners } from '@aztec/node-lib/factories';
15
10
  import { createProverClient } from '@aztec/prover-client';
16
11
  import { createAndStartProvingBroker } from '@aztec/prover-client/broker';
17
- import { P2PClientType } from '@aztec/stdlib/p2p';
18
- import { getPackageVersion } from '@aztec/stdlib/update-checker';
12
+ import { getPublisherConfigFromProverConfig } from '@aztec/sequencer-client';
19
13
  import { L1Metrics, getTelemetryClient } from '@aztec/telemetry-client';
20
- import { createWorldStateSynchronizer } from '@aztec/world-state';
21
- import { createPublicClient, fallback, http } from 'viem';
22
- import { createKeyStoreForProver } from './config.js';
23
- import { EpochMonitor } from './monitors/epoch-monitor.js';
14
+ import { createPublicClient } from 'viem';
24
15
  import { ProverNode } from './prover-node.js';
25
16
  import { ProverPublisherFactory } from './prover-publisher-factory.js';
26
- /** Creates a new prover node given a config. */ export async function createProverNode(userConfig, deps = {}, options = {}) {
17
+ /** Creates a new prover node subsystem given a config and dependencies */ export async function createProverNode(userConfig, deps) {
27
18
  const config = {
28
19
  ...userConfig
29
20
  };
30
21
  const telemetry = deps.telemetry ?? getTelemetryClient();
31
22
  const dateProvider = deps.dateProvider ?? new DateProvider();
32
- const blobClient = await createBlobClientWithFileStores(config, createLogger('prover-node:blob-client:client'));
33
- const log = deps.log ?? createLogger('prover-node');
34
- // Build a key store from file if given or from environment otherwise
35
- let keyStoreManager;
36
- const keyStoreProvided = config.keyStoreDirectory !== undefined && config.keyStoreDirectory.length > 0;
37
- if (keyStoreProvided) {
38
- const keyStores = loadKeystores(config.keyStoreDirectory);
39
- keyStoreManager = new KeystoreManager(mergeKeystores(keyStores));
40
- } else {
41
- const keyStore = createKeyStoreForProver(config);
42
- if (keyStore) {
43
- keyStoreManager = new KeystoreManager(keyStore);
44
- }
45
- }
46
- await keyStoreManager?.validateSigners();
23
+ const log = deps.log ?? createLogger('prover');
24
+ const { p2pClient, archiver, keyStoreManager, worldStateSynchronizer } = deps;
47
25
  // Extract the prover signers from the key store and verify that we have one.
26
+ await keyStoreManager?.validateSigners();
48
27
  const proverSigners = keyStoreManager?.createProverSigners();
49
28
  if (proverSigners === undefined) {
50
29
  throw new Error('Failed to create prover key store configuration');
51
30
  } else if (proverSigners.signers.length === 0) {
52
31
  throw new Error('No prover signers found in the key store');
53
- } else if (!keyStoreProvided) {
54
- log.warn('KEY STORE CREATED FROM ENVIRONMENT, IT IS RECOMMENDED TO USE A FILE-BASED KEY STORE IN PRODUCTION ENVIRONMENTS');
55
32
  }
56
33
  log.info(`Creating prover with publishers ${proverSigners.signers.map((signer)=>signer.address.toString()).join()}`);
57
34
  // Only consider user provided config if it is valid
@@ -63,45 +40,29 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
63
40
  ...config,
64
41
  proverId
65
42
  };
66
- await trySnapshotSync(config, log);
67
- const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config);
68
- const archiver = deps.archiver ?? await createArchiver(config, {
69
- blobClient,
70
- epochCache,
71
- telemetry,
72
- dateProvider
73
- }, {
74
- blockUntilSync: true
75
- });
76
- log.verbose(`Created archiver and synced to block ${await archiver.getBlockNumber()}`);
77
- const worldStateConfig = {
78
- ...config,
79
- worldStateProvenBlocksOnly: false
80
- };
81
- const worldStateSynchronizer = await createWorldStateSynchronizer(worldStateConfig, archiver, options.prefilledPublicData, telemetry);
82
- await worldStateSynchronizer.start();
83
43
  const broker = deps.broker ?? await createAndStartProvingBroker(config, telemetry);
84
44
  const prover = await createProverClient(proverClientConfig, worldStateSynchronizer, broker, telemetry);
85
45
  const { l1RpcUrls: rpcUrls, l1ChainId: chainId } = config;
86
46
  const chain = createEthereumChain(rpcUrls, chainId);
87
47
  const publicClient = createPublicClient({
88
48
  chain: chain.chainInfo,
89
- transport: fallback(config.l1RpcUrls.map((url)=>http(url, {
90
- batch: false
91
- }))),
49
+ transport: makeL1HttpTransport(config.l1RpcUrls, {
50
+ timeout: config.l1HttpTimeoutMS
51
+ }),
92
52
  pollingInterval: config.viemPollingIntervalMS
93
53
  });
94
- const rollupContract = new RollupContract(publicClient, config.l1Contracts.rollupAddress.toString());
54
+ const rollupContract = new RollupContract(publicClient, config.rollupAddress.toString());
95
55
  const l1TxUtils = deps.l1TxUtils ? [
96
56
  deps.l1TxUtils
97
- ] : config.publisherForwarderAddress ? await createForwarderL1TxUtilsFromEthSigner(publicClient, proverSigners.signers, config.publisherForwarderAddress, {
57
+ ] : config.proverPublisherForwarderAddress ? await createForwarderL1TxUtilsFromSigners(publicClient, proverSigners.signers, config.proverPublisherForwarderAddress, {
98
58
  ...config,
99
59
  scope: 'prover'
100
60
  }, {
101
61
  telemetry,
102
62
  logger: log.createChild('l1-tx-utils'),
103
- dateProvider
104
- }) : await createL1TxUtilsFromEthSignerWithStore(publicClient, proverSigners.signers, {
63
+ dateProvider,
64
+ kzg: Blob.getViemKzgInstance()
65
+ }) : await createL1TxUtilsFromSigners(publicClient, proverSigners.signers, {
105
66
  ...config,
106
67
  scope: 'prover'
107
68
  }, {
@@ -109,25 +70,36 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
109
70
  logger: log.createChild('l1-tx-utils'),
110
71
  dateProvider
111
72
  });
73
+ // Create a funder L1TxUtils from the keystore funding account (if configured)
74
+ const fundingSigner = keyStoreManager?.createFundingSigner();
75
+ let funderL1TxUtils;
76
+ if (fundingSigner) {
77
+ const [funder] = await createL1TxUtilsFromSigners(publicClient, [
78
+ fundingSigner
79
+ ], {
80
+ ...config,
81
+ scope: 'prover'
82
+ }, {
83
+ telemetry,
84
+ logger: log.createChild('l1-tx-utils:funder'),
85
+ dateProvider
86
+ });
87
+ funderL1TxUtils = funder;
88
+ }
112
89
  const publisherFactory = deps.publisherFactory ?? new ProverPublisherFactory(config, {
113
90
  rollupContract,
114
- publisherManager: new PublisherManager(l1TxUtils, config),
91
+ proofSubmissionTarget: config.proofSubmissionTargetAddress,
92
+ publisherManager: new PublisherManager(l1TxUtils, getPublisherConfigFromProverConfig(config), {
93
+ bindings: log.getBindings(),
94
+ funder: funderL1TxUtils
95
+ }),
115
96
  telemetry
116
97
  });
117
- const proofVerifier = new QueuedIVCVerifier(config, config.realProofs || config.debugForceTxProofVerification ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier(config.proverTestVerificationDelayMs));
118
- const p2pClient = await createP2PClient(P2PClientType.Prover, config, archiver, proofVerifier, worldStateSynchronizer, epochCache, getPackageVersion() ?? '', dateProvider, telemetry, {
119
- txCollectionNodeSources: deps.aztecNodeTxProvider ? [
120
- new NodeRpcTxSource(deps.aztecNodeTxProvider, 'TestNode')
121
- ] : []
122
- });
123
- await p2pClient.start();
124
98
  const proverNodeConfig = {
125
99
  ...pick(config, 'proverNodeMaxPendingJobs', 'proverNodeMaxParallelBlocksPerEpoch', 'proverNodePollingIntervalMs', 'proverNodeEpochProvingDelayMs', 'txGatheringMaxParallelRequests', 'txGatheringIntervalMs', 'txGatheringTimeoutMs', 'proverNodeFailedEpochStore', 'proverNodeDisableProofPublish', 'dataDirectory', 'l1ChainId', 'rollupVersion')
126
100
  };
127
- const epochMonitor = await EpochMonitor.create(archiver, {
128
- pollingIntervalMs: config.proverNodePollingIntervalMs,
129
- provingDelayMs: config.proverNodeEpochProvingDelayMs
130
- }, telemetry);
131
101
  const l1Metrics = new L1Metrics(telemetry.getMeter('ProverNodeL1Metrics'), publicClient, l1TxUtils.map((utils)=>utils.getSenderAddress()));
132
- return new ProverNode(prover, publisherFactory, archiver, archiver, archiver, worldStateSynchronizer, p2pClient, epochMonitor, rollupContract, l1Metrics, proverNodeConfig, telemetry);
102
+ // Extract the shared delayer from the first L1TxUtils instance (all instances share the same delayer)
103
+ const delayer = l1TxUtils[0]?.delayer;
104
+ return new ProverNode(prover, publisherFactory, archiver, archiver, archiver, worldStateSynchronizer, p2pClient, rollupContract, l1Metrics, deps.avmSimulator, proverNodeConfig, telemetry, delayer, dateProvider);
133
105
  }
package/dest/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export * from './actions/index.js';
2
2
  export * from './config.js';
3
3
  export * from './factory.js';
4
4
  export * from './monitors/index.js';
5
+ export * from './proof-publishing-service.js';
5
6
  export * from './prover-node-publisher.js';
6
7
  export * from './prover-node.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtCQUFrQixDQUFDIn0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsa0JBQWtCLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
package/dest/index.js CHANGED
@@ -2,5 +2,6 @@ export * from './actions/index.js';
2
2
  export * from './config.js';
3
3
  export * from './factory.js';
4
4
  export * from './monitors/index.js';
5
+ export * from './proof-publishing-service.js';
5
6
  export * from './prover-node-publisher.js';
6
7
  export * from './prover-node.js';
@@ -0,0 +1,134 @@
1
+ import { type ARCHIVE_HEIGHT } from '@aztec/constants';
2
+ import { type EpochNumber, type SlotNumber } from '@aztec/foundation/branded-types';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
4
+ import type { EthAddress } from '@aztec/foundation/eth-address';
5
+ import type { Logger } from '@aztec/foundation/log';
6
+ import type { Tuple } from '@aztec/foundation/serialize';
7
+ import { type DateProvider } from '@aztec/foundation/timer';
8
+ import type { EpochProverFactory } from '@aztec/prover-client';
9
+ import type { ChonkCache, SubTreeResult } from '@aztec/prover-client/orchestrator';
10
+ import type { PublicProcessorFactory } from '@aztec/simulator/server';
11
+ import type { CommitteeAttestation } from '@aztec/stdlib/block';
12
+ import type { Checkpoint } from '@aztec/stdlib/checkpoint';
13
+ import type { ForkMerkleTreeOperations, ITxProvider } from '@aztec/stdlib/interfaces/server';
14
+ import type { BlockHeader, Tx } from '@aztec/stdlib/tx';
15
+ import type { ProverNodeJobMetrics } from '../metrics.js';
16
+ /** Dependencies a `CheckpointProver` needs at construction. */
17
+ export type CheckpointProverDeps = {
18
+ proverFactory: EpochProverFactory;
19
+ /** Shared chonk-verifier cache. Survives across all sessions / epochs. */
20
+ chonkCache: ChonkCache;
21
+ publicProcessorFactory: PublicProcessorFactory;
22
+ dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>;
23
+ txProvider: ITxProvider;
24
+ /** Clock the prover-node operates against — e2e fixtures inject a cheat-controlled one. */
25
+ dateProvider: DateProvider;
26
+ proverId: EthAddress;
27
+ metrics: ProverNodeJobMetrics;
28
+ /** Tx gathering deadline. */
29
+ txGatheringTimeoutMs: number;
30
+ /** Public processor deadline. */
31
+ deadline: Date | undefined;
32
+ log: Logger;
33
+ };
34
+ /** Inputs that fully describe a checkpoint at register time. */
35
+ export type CheckpointProverArgs = {
36
+ checkpoint: Checkpoint;
37
+ /** Epoch the checkpoint belongs to (derivable from slot + L1 constants; cached at register time). */
38
+ epochNumber: EpochNumber;
39
+ attestations: CommitteeAttestation[];
40
+ previousBlockHeader: BlockHeader;
41
+ l1ToL2Messages: Fr[];
42
+ previousArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>;
43
+ };
44
+ /**
45
+ * Self-contained per-checkpoint prover, content-addressed by
46
+ * `(checkpoint number, slot number, checkpoint archive root)`.
47
+ *
48
+ * The store creates a CheckpointProver once per content-key. Keying on the checkpoint's
49
+ * own archive root (its post-state) means two checkpoints are "the same" iff they
50
+ * produce the same archive — so a reorg branch, or a replacement built on the same
51
+ * predecessor but with different content, keys to a distinct prover; an identical
52
+ * re-add keys to the same one and reuses its in-flight sub-tree work.
53
+ *
54
+ * The prover eagerly starts its own tx gather and sub-tree work in the constructor, so
55
+ * callers only need to call `whenBlockProofsReady()` to obtain the resulting block-rollup
56
+ * proofs.
57
+ *
58
+ * The prover survives prune/re-add cycles via `markPruned()` / `markCanonical()` —
59
+ * sub-tree proving keeps running underneath, so a checkpoint that is re-added after
60
+ * a brief reorg can be re-consumed with no re-proving.
61
+ *
62
+ * `cancel()` is idempotent. It aborts the gather + sub-tree, rejects the block-proof
63
+ * promise, and exposes a `whenDone()` that resolves once teardown has unwound.
64
+ */
65
+ export declare class CheckpointProver {
66
+ private readonly deps;
67
+ readonly id: string;
68
+ readonly checkpoint: Checkpoint;
69
+ readonly epochNumber: EpochNumber;
70
+ readonly slotNumber: SlotNumber;
71
+ readonly attestations: CommitteeAttestation[];
72
+ readonly previousBlockHeader: BlockHeader;
73
+ readonly l1ToL2Messages: Fr[];
74
+ readonly previousArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>;
75
+ /** Per-prover tx map — populated by the internal gather. Empty until then. */
76
+ readonly txs: Map<string, Tx>;
77
+ /** Resolved by the sub-tree on success, rejected on cancel/failure. */
78
+ private readonly blockProofs;
79
+ private cancelled;
80
+ private subTree?;
81
+ private completed;
82
+ /** Pruned in the canonical chain but not yet reaped — sub-tree continues running. */
83
+ private pruned;
84
+ private readonly abortController;
85
+ /** Tracks the eager gather+execute task so `cancel()` and `whenDone()` can await its unwind. */
86
+ private readonly runPromise;
87
+ /** Tracks the cancel-driven teardown so `whenDone()` can await it. */
88
+ private cancelPromise?;
89
+ constructor(args: CheckpointProverArgs, deps: CheckpointProverDeps);
90
+ /**
91
+ * Stable content-addressed identifier: `${checkpoint number}:${slot}:${archive root}`.
92
+ * The archive root is the checkpoint's post-state, so it distinguishes any two
93
+ * checkpoints that differ in history or content while collapsing identical re-adds.
94
+ */
95
+ static idFor(checkpoint: Checkpoint): string;
96
+ isCancelled(): boolean;
97
+ /** True once block-level proving has been fully *enqueued* (sub-tree completion may still be pending). */
98
+ isCompleted(): boolean;
99
+ isPruned(): boolean;
100
+ /**
101
+ * Mark this prover as no longer present in the canonical chain. Sub-tree proving keeps
102
+ * running so the work survives if the checkpoint is re-added. Idempotent.
103
+ */
104
+ markPruned(): void;
105
+ /** Mark this prover as part of the canonical chain again after a re-add. Idempotent. */
106
+ markCanonical(): void;
107
+ /** AbortSignal that fires on cancel — for callers that want to wire their own tasks. */
108
+ getAbortSignal(): AbortSignal;
109
+ /** Promise that resolves with the block-rollup proofs for this checkpoint (or rejects on cancel/failure). */
110
+ whenBlockProofsReady(): Promise<SubTreeResult['blockProofOutputs']>;
111
+ /** Resolves when all in-flight work for this prover has fully unwound. */
112
+ whenDone(): Promise<void>;
113
+ private gatherAndExecute;
114
+ private gatherTxs;
115
+ private executeCheckpoint;
116
+ /**
117
+ * Mark cancelled. Idempotent. Aborts in-flight work, rejects the block-proof promise,
118
+ * and kicks off a background teardown of the sub-tree. The teardown promise is exposed
119
+ * via `whenDone()`.
120
+ *
121
+ * `routine` distinguishes a post-finalize teardown (sub-tree already proven, fires
122
+ * once at prover exit) from a real abort (reorg, prune, deadline). Behaviour is
123
+ * identical either way; the flag only adjusts log verbosity.
124
+ */
125
+ cancel({ routine }?: {
126
+ routine?: boolean;
127
+ }): void;
128
+ private runCancel;
129
+ private teardownSubTree;
130
+ private getTxsForBlock;
131
+ private processTxs;
132
+ private createFork;
133
+ }
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1wcm92ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qb2IvY2hlY2twb2ludC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUF1QyxNQUFNLGtCQUFrQixDQUFDO0FBQzVGLE9BQU8sRUFBZSxLQUFLLFdBQVcsRUFBRSxLQUFLLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUduRSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFpQyxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEgsT0FBTyxLQUFLLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkYsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQVcsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc3RixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQWUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-prover.d.ts","sourceRoot":"","sources":["../../src/job/checkpoint-prover.ts"],"names":[],"mappings":"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"}