@aztec/prover-node 1.2.0 → 2.0.0-nightly.20250813

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 (41) hide show
  1. package/dest/config.d.ts +2 -2
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +5 -2
  4. package/dest/factory.d.ts +8 -6
  5. package/dest/factory.d.ts.map +1 -1
  6. package/dest/factory.js +22 -14
  7. package/dest/job/epoch-proving-job-data.d.ts +3 -2
  8. package/dest/job/epoch-proving-job-data.d.ts.map +1 -1
  9. package/dest/job/epoch-proving-job-data.js +12 -5
  10. package/dest/job/epoch-proving-job.d.ts +1 -0
  11. package/dest/job/epoch-proving-job.d.ts.map +1 -1
  12. package/dest/job/epoch-proving-job.js +10 -10
  13. package/dest/prover-node-publisher.d.ts +2 -4
  14. package/dest/prover-node-publisher.d.ts.map +1 -1
  15. package/dest/prover-node-publisher.js +4 -2
  16. package/dest/prover-node.d.ts +6 -8
  17. package/dest/prover-node.d.ts.map +1 -1
  18. package/dest/prover-node.js +24 -35
  19. package/package.json +21 -21
  20. package/src/config.ts +6 -4
  21. package/src/factory.ts +46 -23
  22. package/src/job/epoch-proving-job-data.ts +13 -5
  23. package/src/job/epoch-proving-job.ts +11 -8
  24. package/src/prover-node-publisher.ts +14 -6
  25. package/src/prover-node.ts +19 -40
  26. package/dest/prover-coordination/combined-prover-coordination.d.ts +0 -22
  27. package/dest/prover-coordination/combined-prover-coordination.d.ts.map +0 -1
  28. package/dest/prover-coordination/combined-prover-coordination.js +0 -140
  29. package/dest/prover-coordination/config.d.ts +0 -7
  30. package/dest/prover-coordination/config.d.ts.map +0 -1
  31. package/dest/prover-coordination/config.js +0 -12
  32. package/dest/prover-coordination/factory.d.ts +0 -23
  33. package/dest/prover-coordination/factory.d.ts.map +0 -1
  34. package/dest/prover-coordination/factory.js +0 -52
  35. package/dest/prover-coordination/index.d.ts +0 -3
  36. package/dest/prover-coordination/index.d.ts.map +0 -1
  37. package/dest/prover-coordination/index.js +0 -2
  38. package/src/prover-coordination/combined-prover-coordination.ts +0 -164
  39. package/src/prover-coordination/config.ts +0 -18
  40. package/src/prover-coordination/factory.ts +0 -86
  41. package/src/prover-coordination/index.ts +0 -2
package/dest/config.d.ts CHANGED
@@ -9,13 +9,13 @@ import { type ProverAgentConfig, type ProverBrokerConfig } from '@aztec/prover-c
9
9
  import { type ProverClientConfig, type ProverClientUserConfig } from '@aztec/prover-client/config';
10
10
  import { type PublisherConfig, type TxSenderConfig } from '@aztec/sequencer-client/config';
11
11
  import { type WorldStateConfig } from '@aztec/world-state/config';
12
- import { type ProverCoordinationConfig } from './prover-coordination/config.js';
13
- export type ProverNodeConfig = ArchiverConfig & ProverClientUserConfig & P2PConfig & WorldStateConfig & PublisherConfig & TxSenderConfig & DataStoreConfig & ProverCoordinationConfig & SharedNodeConfig & SpecificProverNodeConfig & GenesisStateConfig;
12
+ export type ProverNodeConfig = ArchiverConfig & ProverClientUserConfig & P2PConfig & WorldStateConfig & PublisherConfig & TxSenderConfig & DataStoreConfig & SharedNodeConfig & SpecificProverNodeConfig & GenesisStateConfig;
14
13
  export type SpecificProverNodeConfig = {
15
14
  proverNodeMaxPendingJobs: number;
16
15
  proverNodePollingIntervalMs: number;
17
16
  proverNodeMaxParallelBlocksPerEpoch: number;
18
17
  proverNodeFailedEpochStore: string | undefined;
18
+ txGatheringTimeoutMs: number;
19
19
  txGatheringIntervalMs: number;
20
20
  txGatheringBatchSize: number;
21
21
  txGatheringMaxParallelRequestsPerNode: number;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,KAAK,kBAAkB,EAAwD,MAAM,iBAAiB,CAAC;AAChH,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAE9G,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAG5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EAAE,KAAK,wBAAwB,EAAoC,MAAM,iCAAiC,CAAC;AAElH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,sBAAsB,GACtB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,wBAAwB,GACxB,gBAAgB,GAChB,wBAAwB,GACxB,kBAAkB,CAAC;AAErB,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,0BAA0B,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AAwCF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAYzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D;AAED,wBAAgB,gCAAgC,IAAI,kBAAkB,CAIrE;AAED,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAK3F;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,kBAAkB,CAMjG"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,KAAK,kBAAkB,EAAwD,MAAM,iBAAiB,CAAC;AAChH,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAE9G,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAG5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAE5F,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,sBAAsB,GACtB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,wBAAwB,GACxB,kBAAkB,CAAC;AAErB,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,0BAA0B,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AA6CF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAWzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D;AAED,wBAAgB,gCAAgC,IAAI,kBAAkB,CAIrE;AAED,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAK3F;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,kBAAkB,CAMjG"}
package/dest/config.js CHANGED
@@ -9,7 +9,6 @@ import { proverAgentConfigMappings, proverBrokerConfigMappings } from '@aztec/pr
9
9
  import { bbConfigMappings, proverClientConfigMappings } from '@aztec/prover-client/config';
10
10
  import { getPublisherConfigMappings, getTxSenderConfigMappings } from '@aztec/sequencer-client/config';
11
11
  import { worldStateConfigMappings } from '@aztec/world-state/config';
12
- import { proverCoordinationConfigMappings } from './prover-coordination/config.js';
13
12
  const specificProverNodeConfigMappings = {
14
13
  proverNodeMaxPendingJobs: {
15
14
  env: 'PROVER_NODE_MAX_PENDING_JOBS',
@@ -45,6 +44,11 @@ const specificProverNodeConfigMappings = {
45
44
  env: 'PROVER_NODE_TX_GATHERING_MAX_PARALLEL_REQUESTS_PER_NODE',
46
45
  description: 'How many tx requests to make in parallel to each node',
47
46
  ...numberConfigHelper(100)
47
+ },
48
+ txGatheringTimeoutMs: {
49
+ env: 'PROVER_NODE_TX_GATHERING_TIMEOUT_MS',
50
+ description: 'How long to wait for tx data to be available before giving up',
51
+ ...numberConfigHelper(120_000)
48
52
  }
49
53
  };
50
54
  export const proverNodeConfigMappings = {
@@ -55,7 +59,6 @@ export const proverNodeConfigMappings = {
55
59
  ...worldStateConfigMappings,
56
60
  ...getPublisherConfigMappings('PROVER'),
57
61
  ...getTxSenderConfigMappings('PROVER'),
58
- ...proverCoordinationConfigMappings,
59
62
  ...specificProverNodeConfigMappings,
60
63
  ...genesisStateConfigMappings,
61
64
  ...sharedNodeConfigMappings
package/dest/factory.d.ts CHANGED
@@ -2,25 +2,27 @@ import { type Archiver } from '@aztec/archiver';
2
2
  import { type BlobSinkClientInterface } from '@aztec/blob-sink/client';
3
3
  import { L1TxUtils } from '@aztec/ethereum';
4
4
  import { type Logger } from '@aztec/foundation/log';
5
+ import { DateProvider } from '@aztec/foundation/timer';
5
6
  import type { DataStoreConfig } from '@aztec/kv-store/config';
6
- import type { ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
7
+ import type { AztecNode, ProvingJobBroker } from '@aztec/stdlib/interfaces/server';
7
8
  import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
8
9
  import { type TelemetryClient } from '@aztec/telemetry-client';
9
10
  import { type ProverNodeConfig } from './config.js';
10
- import type { TxSource } from './prover-coordination/combined-prover-coordination.js';
11
11
  import { ProverNodePublisher } from './prover-node-publisher.js';
12
12
  import { ProverNode } from './prover-node.js';
13
- /** Creates a new prover node given a config. */
14
- export declare function createProverNode(userConfig: ProverNodeConfig & DataStoreConfig, deps?: {
13
+ export type ProverNodeDeps = {
15
14
  telemetry?: TelemetryClient;
16
15
  log?: Logger;
17
- aztecNodeTxProvider?: TxSource;
16
+ aztecNodeTxProvider?: Pick<AztecNode, 'getTxsByHash'>;
18
17
  archiver?: Archiver;
19
18
  publisher?: ProverNodePublisher;
20
19
  blobSinkClient?: BlobSinkClientInterface;
21
20
  broker?: ProvingJobBroker;
22
21
  l1TxUtils?: L1TxUtils;
23
- }, options?: {
22
+ dateProvider?: DateProvider;
23
+ };
24
+ /** Creates a new prover node given a config. */
25
+ export declare function createProverNode(userConfig: ProverNodeConfig & DataStoreConfig, deps?: ProverNodeDeps, options?: {
24
26
  prefilledPublicData?: PublicDataTreeLeaf[];
25
27
  }): Promise<ProverNode>;
26
28
  //# sourceMappingURL=factory.d.ts.map
@@ -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,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,SAAS,EAA+D,MAAM,iBAAiB,CAAC;AAEzG,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uDAAuD,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,gBAAgB,GAAG,eAAe,EAC9C,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;CAClB,EACN,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACvC,uBAgFP"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,KAAK,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,SAAS,EAA+D,MAAM,iBAAiB,CAAC;AAEzG,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;AAK9D,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,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,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,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,EAC9C,IAAI,GAAE,cAAmB,EACzB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACvC,uBAiGP"}
package/dest/factory.js CHANGED
@@ -1,30 +1,41 @@
1
1
  import { createArchiver } from '@aztec/archiver';
2
+ import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
2
3
  import { createBlobSinkClient } from '@aztec/blob-sink/client';
3
4
  import { EpochCache } from '@aztec/epoch-cache';
4
5
  import { L1TxUtils, RollupContract, createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
5
6
  import { pick } from '@aztec/foundation/collection';
6
7
  import { createLogger } from '@aztec/foundation/log';
8
+ import { DateProvider } from '@aztec/foundation/timer';
7
9
  import { trySnapshotSync } from '@aztec/node-lib/actions';
10
+ import { NodeRpcTxSource, createP2PClient } from '@aztec/p2p';
8
11
  import { createProverClient } from '@aztec/prover-client';
9
12
  import { createAndStartProvingBroker } from '@aztec/prover-client/broker';
13
+ import { P2PClientType } from '@aztec/stdlib/p2p';
14
+ import { getPackageVersion } from '@aztec/stdlib/update-checker';
10
15
  import { getTelemetryClient } from '@aztec/telemetry-client';
11
16
  import { createWorldStateSynchronizer } from '@aztec/world-state';
12
17
  import { resolveConfig } from './config.js';
13
18
  import { EpochMonitor } from './monitors/epoch-monitor.js';
14
- import { createProverCoordination } from './prover-coordination/factory.js';
15
19
  import { ProverNodePublisher } from './prover-node-publisher.js';
16
20
  import { ProverNode } from './prover-node.js';
17
21
  /** Creates a new prover node given a config. */ export async function createProverNode(userConfig, deps = {}, options = {}) {
18
22
  const config = resolveConfig(userConfig);
19
23
  const telemetry = deps.telemetry ?? getTelemetryClient();
24
+ const dateProvider = deps.dateProvider ?? new DateProvider();
20
25
  const blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config, {
21
26
  logger: createLogger('prover-node:blob-sink:client')
22
27
  });
23
28
  const log = deps.log ?? createLogger('prover-node');
24
29
  await trySnapshotSync(config, log);
25
- const archiver = deps.archiver ?? await createArchiver(config, blobSinkClient, {
30
+ const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config);
31
+ const archiver = deps.archiver ?? await createArchiver(config, {
32
+ blobSinkClient,
33
+ epochCache,
34
+ telemetry,
35
+ dateProvider
36
+ }, {
26
37
  blockUntilSync: true
27
- }, telemetry);
38
+ });
28
39
  log.verbose(`Created archiver and synced to block ${await archiver.getBlockNumber()}`);
29
40
  const worldStateConfig = {
30
41
  ...config,
@@ -38,27 +49,24 @@ import { ProverNode } from './prover-node.js';
38
49
  const chain = createEthereumChain(rpcUrls, chainId);
39
50
  const l1Client = createExtendedL1Client(rpcUrls, publisherPrivateKey.getValue(), chain.chainInfo);
40
51
  const rollupContract = new RollupContract(l1Client, config.l1Contracts.rollupAddress.toString());
41
- const l1TxUtils = deps.l1TxUtils ?? new L1TxUtils(l1Client, log, config);
52
+ const l1TxUtils = deps.l1TxUtils ?? new L1TxUtils(l1Client, log, deps.dateProvider, config);
42
53
  const publisher = deps.publisher ?? new ProverNodePublisher(config, {
43
54
  telemetry,
44
55
  rollupContract,
45
56
  l1TxUtils
46
57
  });
47
- const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config);
48
- // If config.p2pEnabled is true, createProverCoordination will create a p2p client where txs are requested
49
- // If config.proverCoordinationNodeUrls is not empty, createProverCoordination will create set of aztec node clients from which txs are requested
50
- const proverCoordination = await createProverCoordination(config, {
51
- aztecNodeTxProvider: deps.aztecNodeTxProvider,
52
- worldStateSynchronizer,
53
- archiver,
54
- epochCache,
55
- telemetry
58
+ const proofVerifier = new QueuedIVCVerifier(config, config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier());
59
+ const p2pClient = await createP2PClient(P2PClientType.Prover, config, archiver, proofVerifier, worldStateSynchronizer, epochCache, getPackageVersion() ?? '', dateProvider, telemetry, {
60
+ txCollectionNodeSources: deps.aztecNodeTxProvider ? [
61
+ new NodeRpcTxSource(deps.aztecNodeTxProvider, 'TestNode')
62
+ ] : []
56
63
  });
64
+ await p2pClient.start();
57
65
  const proverNodeConfig = {
58
66
  ...pick(config, 'proverNodeMaxPendingJobs', 'proverNodeMaxParallelBlocksPerEpoch', 'proverNodePollingIntervalMs', 'txGatheringMaxParallelRequests', 'txGatheringIntervalMs', 'txGatheringTimeoutMs', 'proverNodeFailedEpochStore', 'dataDirectory', 'l1ChainId', 'rollupVersion')
59
67
  };
60
68
  const epochMonitor = await EpochMonitor.create(archiver, {
61
69
  pollingIntervalMs: config.proverNodePollingIntervalMs
62
70
  }, telemetry);
63
- return new ProverNode(prover, publisher, archiver, archiver, archiver, worldStateSynchronizer, proverCoordination, epochMonitor, proverNodeConfig, telemetry);
71
+ return new ProverNode(prover, publisher, archiver, archiver, archiver, worldStateSynchronizer, p2pClient, epochMonitor, proverNodeConfig, telemetry);
64
72
  }
@@ -1,13 +1,14 @@
1
1
  import { Fr } from '@aztec/foundation/fields';
2
- import { L2Block } from '@aztec/stdlib/block';
2
+ import { CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
3
3
  import { BlockHeader, Tx } from '@aztec/stdlib/tx';
4
4
  /** All data from an epoch used in proving. */
5
5
  export type EpochProvingJobData = {
6
6
  epochNumber: bigint;
7
7
  blocks: L2Block[];
8
- txs: Tx[];
8
+ txs: Map<string, Tx>;
9
9
  l1ToL2Messages: Record<number, Fr[]>;
10
10
  previousBlockHeader: BlockHeader;
11
+ attestations: CommitteeAttestation[];
11
12
  };
12
13
  export declare function validateEpochProvingJobData(data: EpochProvingJobData): void;
13
14
  export declare function serializeEpochProvingJobData(data: EpochProvingJobData): Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"epoch-proving-job-data.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEnD,8CAA8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,GAAG,EAAE,EAAE,EAAE,CAAC;IACV,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,mBAAmB,EAAE,WAAW,CAAC;CAClC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,mBAAmB,QAcpE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAmB9E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAgB/E"}
1
+ {"version":3,"file":"epoch-proving-job-data.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEnD,8CAA8C;AAC9C,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,mBAAmB,EAAE,WAAW,CAAC;IACjC,YAAY,EAAE,oBAAoB,EAAE,CAAC;CACtC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,mBAAmB,QAcpE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAsB9E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAoB/E"}
@@ -1,6 +1,6 @@
1
1
  import { Fr } from '@aztec/foundation/fields';
2
2
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
- import { L2Block } from '@aztec/stdlib/block';
3
+ import { CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
4
4
  import { BlockHeader, Tx } from '@aztec/stdlib/tx';
5
5
  export function validateEpochProvingJobData(data) {
6
6
  if (data.blocks.length > 0 && data.previousBlockHeader.getBlockNumber() + 1 !== data.blocks[0].number) {
@@ -14,20 +14,21 @@ export function validateEpochProvingJobData(data) {
14
14
  }
15
15
  export function serializeEpochProvingJobData(data) {
16
16
  const blocks = data.blocks.map((block)=>block.toBuffer());
17
- const txs = data.txs.map((tx)=>tx.toBuffer());
17
+ const txs = Array.from(data.txs.values()).map((tx)=>tx.toBuffer());
18
18
  const l1ToL2Messages = Object.entries(data.l1ToL2Messages).map(([blockNumber, messages])=>[
19
19
  Number(blockNumber),
20
20
  messages.length,
21
21
  ...messages
22
22
  ]);
23
- return serializeToBuffer(Number(data.epochNumber), data.previousBlockHeader, blocks.length, ...blocks, txs.length, ...txs, l1ToL2Messages.length, ...l1ToL2Messages);
23
+ const attestations = data.attestations.map((attestation)=>attestation.toBuffer());
24
+ return serializeToBuffer(Number(data.epochNumber), data.previousBlockHeader, blocks.length, ...blocks, txs.length, ...txs, l1ToL2Messages.length, ...l1ToL2Messages, attestations.length, ...attestations);
24
25
  }
25
26
  export function deserializeEpochProvingJobData(buf) {
26
27
  const reader = BufferReader.asReader(buf);
27
28
  const epochNumber = BigInt(reader.readNumber());
28
29
  const previousBlockHeader = reader.readObject(BlockHeader);
29
30
  const blocks = reader.readVector(L2Block);
30
- const txs = reader.readVector(Tx);
31
+ const txArray = reader.readVector(Tx);
31
32
  const l1ToL2MessageBlockCount = reader.readNumber();
32
33
  const l1ToL2Messages = {};
33
34
  for(let i = 0; i < l1ToL2MessageBlockCount; i++){
@@ -35,11 +36,17 @@ export function deserializeEpochProvingJobData(buf) {
35
36
  const messages = reader.readVector(Fr);
36
37
  l1ToL2Messages[blockNumber] = messages;
37
38
  }
39
+ const attestations = reader.readVector(CommitteeAttestation);
40
+ const txs = new Map(txArray.map((tx)=>[
41
+ tx.getTxHash().toString(),
42
+ tx
43
+ ]));
38
44
  return {
39
45
  epochNumber,
40
46
  previousBlockHeader,
41
47
  blocks,
42
48
  txs,
43
- l1ToL2Messages
49
+ l1ToL2Messages,
50
+ attestations
44
51
  };
45
52
  }
@@ -39,6 +39,7 @@ export declare class EpochProvingJob implements Traceable {
39
39
  private get epochNumber();
40
40
  private get blocks();
41
41
  private get txs();
42
+ private get attestations();
42
43
  /**
43
44
  * Proves the given epoch and submits the proof to L1.
44
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAA+B,MAAM,6BAA6B,CAAC;AAEpG;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAnBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAClD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACxD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAOpE,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIhC,cAAc,IAAI,MAAM;IAIxB,WAAW,IAAI,IAAI,GAAG,SAAS;IAI/B,cAAc,IAAI,mBAAmB;IAI5C,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,GAAG,GAEd;IAED;;OAEG;IAIU,GAAG;IAmHhB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC;IASjE,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;YACW,kBAAkB;IAiChC,OAAO,CAAC,cAAc;YAiBR,MAAM;IAQpB,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAA+B,MAAM,6BAA6B,CAAC;AAEpG;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAnBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAClD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACxD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAOpE,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIhC,cAAc,IAAI,MAAM;IAIxB,WAAW,IAAI,IAAI,GAAG,SAAS;IAI/B,cAAc,IAAI,mBAAmB;IAI5C,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IAIU,GAAG;IAsHhB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC;IASjE,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;YACW,kBAAkB;IAiChC,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
@@ -74,6 +74,9 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
74
74
  get txs() {
75
75
  return this.data.txs;
76
76
  }
77
+ get attestations() {
78
+ return this.data.attestations;
79
+ }
77
80
  /**
78
81
  * Proves the given epoch and submits the proof to L1.
79
82
  */ async run() {
@@ -81,6 +84,7 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
81
84
  if (!this.config.skipEpochCheck) {
82
85
  await this.scheduleEpochCheck();
83
86
  }
87
+ const attestations = this.attestations.map((attestation)=>attestation.toViem());
84
88
  const epochNumber = Number(this.epochNumber);
85
89
  const epochSizeBlocks = this.blocks.length;
86
90
  const epochSizeTxs = this.blocks.reduce((total, current)=>total + current.body.txEffects.length, 0);
@@ -103,11 +107,11 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
103
107
  const allBlobs = (await Promise.all(this.blocks.map(async (block)=>await Blob.getBlobsPerBlock(block.body.toBlobFields())))).flat();
104
108
  const finalBlobBatchingChallenges = await BatchedBlob.precomputeBatchedBlobChallenges(allBlobs);
105
109
  this.prover.startNewEpoch(epochNumber, fromBlock, epochSizeBlocks, finalBlobBatchingChallenges);
106
- await this.prover.startTubeCircuits(this.txs);
110
+ await this.prover.startTubeCircuits(Array.from(this.txs.values()));
107
111
  await asyncPool(this.config.parallelBlockLimit ?? 32, this.blocks, async (block)=>{
108
112
  this.checkState();
109
113
  const globalVariables = block.header.globalVariables;
110
- const txs = await this.getTxs(block);
114
+ const txs = this.getTxs(block);
111
115
  const l1ToL2Messages = this.getL1ToL2Messages(block);
112
116
  const previousHeader = this.getBlockHeader(block.number - 1);
113
117
  this.log.verbose(`Starting processing block ${block.number}`, {
@@ -152,7 +156,8 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
152
156
  epochNumber,
153
157
  publicInputs,
154
158
  proof,
155
- batchedBlobInputs
159
+ batchedBlobInputs,
160
+ attestations
156
161
  });
157
162
  if (!success) {
158
163
  throw new Error('Failed to submit epoch proof to L1');
@@ -261,13 +266,8 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
261
266
  }
262
267
  throw new Error(`Block header not found for block number ${blockNumber} (got ${this.blocks.map((b)=>b.number).join(', ')} and previous header ${this.data.previousBlockHeader.getBlockNumber()})`);
263
268
  }
264
- async getTxs(block) {
265
- const txHashes = block.body.txEffects.map((tx)=>tx.txHash.toBigInt());
266
- const txsAndHashes = await Promise.all(this.txs.map(async (tx)=>({
267
- tx,
268
- hash: await tx.getTxHash()
269
- })));
270
- return txsAndHashes.filter((txAndHash)=>txHashes.includes(txAndHash.hash.toBigInt())).map((txAndHash)=>txAndHash.tx);
269
+ getTxs(block) {
270
+ return block.body.txEffects.map((txEffect)=>this.txs.get(txEffect.txHash.toString()));
271
271
  }
272
272
  getL1ToL2Messages(block) {
273
273
  return this.data.l1ToL2Messages[block.number];
@@ -1,6 +1,6 @@
1
1
  import { type BatchedBlob } from '@aztec/blob-lib';
2
2
  import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants';
3
- import type { L1TxUtils, RollupContract } from '@aztec/ethereum';
3
+ import { type L1TxUtils, type RollupContract, type ViemCommitteeAttestation } from '@aztec/ethereum';
4
4
  import { EthAddress } from '@aztec/foundation/eth-address';
5
5
  import { Fr } from '@aztec/foundation/fields';
6
6
  import type { Tuple } from '@aztec/foundation/serialize';
@@ -8,9 +8,6 @@ import type { PublisherConfig, TxSenderConfig } from '@aztec/sequencer-client';
8
8
  import type { Proof } from '@aztec/stdlib/proofs';
9
9
  import type { FeeRecipient, RootRollupPublicInputs } from '@aztec/stdlib/rollup';
10
10
  import { type TelemetryClient } from '@aztec/telemetry-client';
11
- /**
12
- * Stats for a sent transaction.
13
- */
14
11
  /** Arguments to the submitEpochProof method of the rollup contract */
15
12
  export type L1SubmitEpochProofArgs = {
16
13
  epochSize: number;
@@ -53,6 +50,7 @@ export declare class ProverNodePublisher {
53
50
  publicInputs: RootRollupPublicInputs;
54
51
  proof: Proof;
55
52
  batchedBlobInputs: BatchedBlob;
53
+ attestations: ViemCommitteeAttestation[];
56
54
  }): Promise<boolean>;
57
55
  private validateEpochProofSubmission;
58
56
  private sendSubmitEpochProofTx;
@@ -1 +1 @@
1
- {"version":3,"file":"prover-node-publisher.d.ts","sourceRoot":"","sources":["../src/prover-node-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAoC,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAOnF;;GAEG;AACH,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,EAAE,CAAC;IACf,YAAY,EAAE,EAAE,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,wBAAwB,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAE5C,SAAS,CAAC,GAAG,yCAA+C;IAE5D,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAEzC,SAAgB,SAAS,EAAE,SAAS,CAAC;gBAGnC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE;QACJ,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B;IAYI,iBAAiB;IAIxB;;;;;OAKG;IACI,SAAS;IAKhB,wDAAwD;IACjD,OAAO;IAIP,gBAAgB;IAIV,gBAAgB,CAAC,IAAI,EAAE;QAClC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,sBAAsB,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC;QACb,iBAAiB,EAAE,WAAW,CAAC;KAChC,GAAG,OAAO,CAAC,OAAO,CAAC;YA+CN,4BAA4B;YAyD5B,sBAAsB;IAwCpC,OAAO,CAAC,6BAA6B;IAwBrC,OAAO,CAAC,uBAAuB;cAoBf,kBAAkB;CAGnC"}
1
+ {"version":3,"file":"prover-node-publisher.d.ts","sourceRoot":"","sources":["../src/prover-node-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAoC,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC9B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAOnF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,EAAE,CAAC;IACf,YAAY,EAAE,EAAE,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,wBAAwB,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAE5C,SAAS,CAAC,GAAG,yCAA+C;IAE5D,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAEzC,SAAgB,SAAS,EAAE,SAAS,CAAC;gBAGnC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE;QACJ,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B;IAYI,iBAAiB;IAIxB;;;;;OAKG;IACI,SAAS;IAKhB,wDAAwD;IACjD,OAAO;IAIP,gBAAgB;IAIV,gBAAgB,CAAC,IAAI,EAAE;QAClC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,sBAAsB,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC;QACb,iBAAiB,EAAE,WAAW,CAAC;QAC/B,YAAY,EAAE,wBAAwB,EAAE,CAAC;KAC1C,GAAG,OAAO,CAAC,OAAO,CAAC;YA+CN,4BAA4B;YA0D5B,sBAAsB;IAyCpC,OAAO,CAAC,6BAA6B;IAyBrC,OAAO,CAAC,uBAAuB;cAsBf,kBAAkB;CAGnC"}
@@ -1,5 +1,6 @@
1
1
  import { FinalBlobAccumulatorPublicInputs } from '@aztec/blob-lib';
2
2
  import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants';
3
+ import { RollupContract as RollupContractClass } from '@aztec/ethereum';
3
4
  import { makeTuple } from '@aztec/foundation/array';
4
5
  import { areArraysEqual } from '@aztec/foundation/collection';
5
6
  import { EthAddress } from '@aztec/foundation/eth-address';
@@ -87,10 +88,10 @@ export class ProverNodePublisher {
87
88
  return true;
88
89
  }
89
90
  this.metrics.recordFailedTx();
90
- this.log.error(`Rollup.submitEpochProof tx status failed: ${txReceipt.transactionHash}`, ctx);
91
+ this.log.error(`Rollup.submitEpochProof tx status failed ${txReceipt.transactionHash}`, undefined, ctx);
91
92
  await this.sleepOrInterrupted();
92
93
  }
93
- this.log.verbose('L2 block data syncing interrupted while processing blocks.', ctx);
94
+ this.log.verbose('L2 block data syncing interrupted', ctx);
94
95
  return false;
95
96
  }
96
97
  async validateEpochProofSubmission(args) {
@@ -182,6 +183,7 @@ export class ProverNodePublisher {
182
183
  end: argsArray[1],
183
184
  args: argsArray[2],
184
185
  fees: argsArray[3],
186
+ attestations: RollupContractClass.packAttestations(args.attestations),
185
187
  blobInputs: argsArray[4],
186
188
  proof: proofHex
187
189
  };
@@ -1,11 +1,13 @@
1
1
  import type { Fr } from '@aztec/foundation/fields';
2
2
  import type { DataStoreConfig } from '@aztec/kv-store/config';
3
+ import type { P2PClient } from '@aztec/p2p';
3
4
  import { PublicProcessorFactory } from '@aztec/simulator/server';
4
5
  import type { L2BlockSource } from '@aztec/stdlib/block';
5
6
  import type { ChainConfig } from '@aztec/stdlib/config';
6
7
  import type { ContractDataSource } from '@aztec/stdlib/contract';
7
- import { type EpochProverManager, type ProverCoordination, type ProverNodeApi, type Service, type WorldStateSyncStatus, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
8
+ import { type EpochProverManager, type ProverNodeApi, type Service, type WorldStateSyncStatus, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
8
9
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
10
+ import type { P2PClientType } from '@aztec/stdlib/p2p';
9
11
  import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
10
12
  import type { SpecificProverNodeConfig } from './config.js';
11
13
  import type { EpochProvingJobData } from './job/epoch-proving-job-data.js';
@@ -26,7 +28,7 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
26
28
  protected readonly l1ToL2MessageSource: L1ToL2MessageSource;
27
29
  protected readonly contractDataSource: ContractDataSource;
28
30
  protected readonly worldState: WorldStateSynchronizer;
29
- protected readonly coordination: ProverCoordination & Partial<Service>;
31
+ protected readonly p2pClient: Pick<P2PClient<P2PClientType.Prover>, 'getTxProvider'> & Partial<Service>;
30
32
  protected readonly epochsMonitor: EpochMonitor;
31
33
  protected readonly telemetryClient: TelemetryClient;
32
34
  private log;
@@ -36,12 +38,10 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
36
38
  private jobMetrics;
37
39
  private rewardsMetrics;
38
40
  private l1Metrics;
39
- private txFetcher;
40
- private lastBlockNumber;
41
41
  readonly tracer: Tracer;
42
- constructor(prover: EpochProverManager, publisher: ProverNodePublisher, l2BlockSource: L2BlockSource & Partial<Service>, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, coordination: ProverCoordination & Partial<Service>, epochsMonitor: EpochMonitor, config?: Partial<ProverNodeOptions>, telemetryClient?: TelemetryClient);
42
+ constructor(prover: EpochProverManager, publisher: ProverNodePublisher, l2BlockSource: L2BlockSource & Partial<Service>, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, p2pClient: Pick<P2PClient<P2PClientType.Prover>, 'getTxProvider'> & Partial<Service>, epochsMonitor: EpochMonitor, config?: Partial<ProverNodeOptions>, telemetryClient?: TelemetryClient);
43
43
  getProverId(): Fr;
44
- getP2P(): import("@aztec/stdlib/interfaces/server").P2PClient | undefined;
44
+ getP2P(): Pick<P2PClient<P2PClientType.Prover>, "getTxProvider"> & Partial<Service>;
45
45
  /**
46
46
  * Handles an epoch being completed by starting a proof for it if there are no active jobs for it.
47
47
  * @param epochNumber - The epoch number that was just completed.
@@ -86,8 +86,6 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
86
86
  private checkMaximumPendingJobs;
87
87
  private createProvingJob;
88
88
  private getL1Constants;
89
- /** Monitors for new blocks and requests their txs from the p2p layer to ensure they are available for proving. */
90
- private checkForTxs;
91
89
  private gatherEpochData;
92
90
  private gatherBlocks;
93
91
  private gatherTxs;
@@ -1 +1 @@
1
- {"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,6 @@ import { assertRequired, compact, pick, sum } from '@aztec/foundation/collection
8
8
  import { memoize } from '@aztec/foundation/decorators';
9
9
  import { EthAddress } from '@aztec/foundation/eth-address';
10
10
  import { createLogger } from '@aztec/foundation/log';
11
- import { RunningPromise } from '@aztec/foundation/running-promise';
12
11
  import { DateProvider } from '@aztec/foundation/timer';
13
12
  import { PublicProcessorFactory } from '@aztec/simulator/server';
14
13
  import { getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
@@ -28,7 +27,7 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
28
27
  l1ToL2MessageSource;
29
28
  contractDataSource;
30
29
  worldState;
31
- coordination;
30
+ p2pClient;
32
31
  epochsMonitor;
33
32
  telemetryClient;
34
33
  log;
@@ -38,17 +37,15 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
38
37
  jobMetrics;
39
38
  rewardsMetrics;
40
39
  l1Metrics;
41
- txFetcher;
42
- lastBlockNumber;
43
40
  tracer;
44
- constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, coordination, epochsMonitor, config = {}, telemetryClient = getTelemetryClient()){
41
+ constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, p2pClient, epochsMonitor, config = {}, telemetryClient = getTelemetryClient()){
45
42
  this.prover = prover;
46
43
  this.publisher = publisher;
47
44
  this.l2BlockSource = l2BlockSource;
48
45
  this.l1ToL2MessageSource = l1ToL2MessageSource;
49
46
  this.contractDataSource = contractDataSource;
50
47
  this.worldState = worldState;
51
- this.coordination = coordination;
48
+ this.p2pClient = p2pClient;
52
49
  this.epochsMonitor = epochsMonitor;
53
50
  this.telemetryClient = telemetryClient;
54
51
  this.log = createLogger('prover-node');
@@ -64,6 +61,7 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
64
61
  txGatheringIntervalMs: 1_000,
65
62
  txGatheringBatchSize: 10,
66
63
  txGatheringMaxParallelRequestsPerNode: 100,
64
+ txGatheringTimeoutMs: 120_000,
67
65
  proverNodeFailedEpochStore: undefined,
68
66
  ...compact(config)
69
67
  };
@@ -72,13 +70,12 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
72
70
  this.tracer = telemetryClient.getTracer('ProverNode');
73
71
  this.jobMetrics = new ProverNodeJobMetrics(meter, telemetryClient.getTracer('EpochProvingJob'));
74
72
  this.rewardsMetrics = new ProverNodeRewardsMetrics(meter, EthAddress.fromField(this.prover.getProverId()), this.publisher.getRollupContract());
75
- this.txFetcher = new RunningPromise(()=>this.checkForTxs(), this.log, this.config.txGatheringIntervalMs);
76
73
  }
77
74
  getProverId() {
78
75
  return this.prover.getProverId();
79
76
  }
80
77
  getP2P() {
81
- return this.coordination.getP2PClient();
78
+ return this.p2pClient;
82
79
  }
83
80
  /**
84
81
  * Handles an epoch being completed by starting a proof for it if there are no active jobs for it.
@@ -111,7 +108,6 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
111
108
  * Starts the prover node so it periodically checks for unproven epochs in the unfinalised chain from L1 and
112
109
  * starts proving jobs for them.
113
110
  */ async start() {
114
- this.txFetcher.start();
115
111
  this.epochsMonitor.start(this);
116
112
  this.l1Metrics.start();
117
113
  await this.rewardsMetrics.start();
@@ -121,14 +117,13 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
121
117
  * Stops the prover node and all its dependencies.
122
118
  */ async stop() {
123
119
  this.log.info('Stopping ProverNode');
124
- await this.txFetcher.stop();
125
120
  await this.epochsMonitor.stop();
126
121
  await this.prover.stop();
122
+ await tryStop(this.p2pClient);
127
123
  await tryStop(this.l2BlockSource);
128
124
  this.publisher.interrupt();
129
125
  await Promise.all(Array.from(this.jobs.values()).map((job)=>job.stop()));
130
126
  await this.worldState.stop();
131
- await tryStop(this.coordination);
132
127
  this.l1Metrics.stop();
133
128
  this.rewardsMetrics.stop();
134
129
  await this.telemetryClient.stop();
@@ -226,30 +221,24 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
226
221
  getL1Constants() {
227
222
  return this.l2BlockSource.getL1Constants();
228
223
  }
229
- /** Monitors for new blocks and requests their txs from the p2p layer to ensure they are available for proving. */ async checkForTxs() {
230
- const blockNumber = await this.l2BlockSource.getBlockNumber();
231
- if (this.lastBlockNumber === undefined || blockNumber > this.lastBlockNumber) {
232
- const block = await this.l2BlockSource.getBlock(blockNumber);
233
- if (!block) {
234
- return;
235
- }
236
- const txHashes = block.body.txEffects.map((tx)=>tx.txHash);
237
- this.log.verbose(`Fetching ${txHashes.length} tx hashes for block number ${blockNumber} from coordination`);
238
- await this.coordination.gatherTxs(txHashes); // This stores the txs in the tx pool, no need to persist them here
239
- this.lastBlockNumber = blockNumber;
240
- }
241
- }
242
224
  async gatherEpochData(epochNumber) {
243
225
  const blocks = await this.gatherBlocks(epochNumber);
244
- const txs = await this.gatherTxs(epochNumber, blocks);
226
+ const txArray = await this.gatherTxs(epochNumber, blocks);
227
+ const txs = new Map(txArray.map((tx)=>[
228
+ tx.getTxHash().toString(),
229
+ tx
230
+ ]));
245
231
  const l1ToL2Messages = await this.gatherMessages(epochNumber, blocks);
246
232
  const previousBlockHeader = await this.gatherPreviousBlockHeader(epochNumber, blocks[0]);
233
+ const [lastBlock] = await this.l2BlockSource.getPublishedBlocks(blocks.at(-1).number, 1);
234
+ const attestations = lastBlock?.attestations ?? [];
247
235
  return {
248
236
  blocks,
249
237
  txs,
250
238
  l1ToL2Messages,
251
239
  epochNumber,
252
- previousBlockHeader
240
+ previousBlockHeader,
241
+ attestations
253
242
  };
254
243
  }
255
244
  async gatherBlocks(epochNumber) {
@@ -260,17 +249,20 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
260
249
  return blocks;
261
250
  }
262
251
  async gatherTxs(epochNumber, blocks) {
263
- const txsToFind = blocks.flatMap((block)=>block.body.txEffects.map((tx)=>tx.txHash));
264
- const txs = await this.coordination.getTxsByHash(txsToFind);
265
- if (txs.length === txsToFind.length) {
252
+ const deadline = new Date(this.dateProvider.now() + this.config.txGatheringTimeoutMs);
253
+ const txProvider = this.p2pClient.getTxProvider();
254
+ const txsByBlock = await Promise.all(blocks.map((block)=>txProvider.getTxsForBlock(block, {
255
+ deadline
256
+ })));
257
+ const txs = txsByBlock.map(({ txs })=>txs).flat();
258
+ const missingTxs = txsByBlock.map(({ missingTxs })=>missingTxs).flat();
259
+ if (missingTxs.length === 0) {
266
260
  this.log.verbose(`Gathered all ${txs.length} txs for epoch ${epochNumber}`, {
267
261
  epochNumber
268
262
  });
269
263
  return txs;
270
264
  }
271
- const txHashesFound = await Promise.all(txs.map((tx)=>tx.getTxHash()));
272
- const missingTxHashes = txsToFind.filter((txHashToFind)=>!txHashesFound.some((txHashFound)=>txHashToFind.equals(txHashFound))).join(', ');
273
- throw new Error(`Txs not found for epoch ${epochNumber}: ${missingTxHashes}`);
265
+ throw new Error(`Txs not found for epoch ${epochNumber}: ${missingTxs.map((hash)=>hash.toString()).join(', ')}`);
274
266
  }
275
267
  async gatherMessages(epochNumber, blocks) {
276
268
  const messages = await Promise.all(blocks.map((b)=>this.l1ToL2MessageSource.getL1ToL2Messages(b.number)));
@@ -318,9 +310,6 @@ _ts_decorate([
318
310
  _ts_decorate([
319
311
  memoize
320
312
  ], ProverNode.prototype, "getL1Constants", null);
321
- _ts_decorate([
322
- trackSpan('ProverNode.checkForTxs')
323
- ], ProverNode.prototype, "checkForTxs", null);
324
313
  _ts_decorate([
325
314
  trackSpan('ProverNode.gatherEpochData', (epochNumber)=>({
326
315
  [Attributes.EPOCH_NUMBER]: Number(epochNumber)