@aztec/prover-node 0.47.0 → 0.48.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 CHANGED
@@ -1,8 +1,10 @@
1
1
  import { type ArchiverConfig } from '@aztec/archiver';
2
+ import { type ConfigMappingsType } from '@aztec/foundation/config';
2
3
  import { type ProverClientConfig } from '@aztec/prover-client';
3
4
  import { type PublisherConfig, type TxSenderConfig } from '@aztec/sequencer-client';
4
5
  import { type WorldStateConfig } from '@aztec/world-state';
5
6
  import { type TxProviderConfig } from './tx-provider/config.js';
6
7
  export type ProverNodeConfig = ArchiverConfig & ProverClientConfig & WorldStateConfig & PublisherConfig & TxSenderConfig & TxProviderConfig;
8
+ export declare const proverNodeConfigMappings: ConfigMappingsType<ProverNodeConfig>;
7
9
  export declare function getProverNodeConfigFromEnv(): ProverNodeConfig;
8
10
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA4B,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAA4B,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EAAE,KAAK,gBAAgB,EAA8B,MAAM,oBAAoB,CAAC;AAEvF,OAAO,EAAE,KAAK,gBAAgB,EAA8B,MAAM,yBAAyB,CAAC;AAE5F,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,gBAAgB,CAAC;AAEnB,wBAAgB,0BAA0B,IAAI,gBAAgB,CAU7D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAoD,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,KAAK,kBAAkB,EAAgD,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAKpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,gBAAgB,EAAwD,MAAM,oBAAoB,CAAC;AAEjH,OAAO,EAAE,KAAK,gBAAgB,EAAwD,MAAM,yBAAyB,CAAC;AAEtH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,gBAAgB,CAAC;AAEnB,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAOzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAS7D"}
package/dest/config.js CHANGED
@@ -1,17 +1,24 @@
1
- import { getArchiverConfigFromEnv } from '@aztec/archiver';
2
- import { getProverEnvVars } from '@aztec/prover-client';
3
- import { getTxSenderConfigFromEnv } from '@aztec/sequencer-client';
4
- import { getWorldStateConfigFromEnv } from '@aztec/world-state';
5
- import { getTxProviderConfigFromEnv } from './tx-provider/config.js';
1
+ import { archiverConfigMappings, getArchiverConfigFromEnv } from '@aztec/archiver';
2
+ import { getProverEnvVars, proverClientConfigMappings } from '@aztec/prover-client';
3
+ import { getPublisherConfigFromEnv, getPublisherConfigMappings, getTxSenderConfigFromEnv, getTxSenderConfigMappings, } from '@aztec/sequencer-client';
4
+ import { getWorldStateConfigFromEnv, worldStateConfigMappings } from '@aztec/world-state';
5
+ import { getTxProviderConfigFromEnv, txProviderConfigMappings } from './tx-provider/config.js';
6
+ export const proverNodeConfigMappings = {
7
+ ...archiverConfigMappings,
8
+ ...proverClientConfigMappings,
9
+ ...worldStateConfigMappings,
10
+ ...getPublisherConfigMappings('PROVER'),
11
+ ...getTxSenderConfigMappings('PROVER'),
12
+ ...txProviderConfigMappings,
13
+ };
6
14
  export function getProverNodeConfigFromEnv() {
7
- const { PROOF_PUBLISH_RETRY_INTERVAL_MS } = process.env;
8
15
  return {
9
16
  ...getArchiverConfigFromEnv(),
10
17
  ...getProverEnvVars(),
11
18
  ...getWorldStateConfigFromEnv(),
19
+ ...getPublisherConfigFromEnv('PROVER'),
12
20
  ...getTxSenderConfigFromEnv('PROVER'),
13
21
  ...getTxProviderConfigFromEnv(),
14
- l1PublishRetryIntervalMS: PROOF_PUBLISH_RETRY_INTERVAL_MS ? +PROOF_PUBLISH_RETRY_INTERVAL_MS : 1000,
15
22
  };
16
23
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUEyQixnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFBNkMsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RyxPQUFPLEVBQXlCLDBCQUEwQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkYsT0FBTyxFQUF5QiwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUzVGLE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsTUFBTSxFQUFFLCtCQUErQixFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUN4RCxPQUFPO1FBQ0wsR0FBRyx3QkFBd0IsRUFBRTtRQUM3QixHQUFHLGdCQUFnQixFQUFFO1FBQ3JCLEdBQUcsMEJBQTBCLEVBQUU7UUFDL0IsR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLENBQUM7UUFDckMsR0FBRywwQkFBMEIsRUFBRTtRQUMvQix3QkFBd0IsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSztLQUNyRyxDQUFDO0FBQ0osQ0FBQyJ9
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEcsT0FBTyxFQUEyQixnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdHLE9BQU8sRUFHTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4Qix5QkFBeUIsR0FDMUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQXlCLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakgsT0FBTyxFQUF5QiwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBU3RILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUF5QztJQUM1RSxHQUFHLHNCQUFzQjtJQUN6QixHQUFHLDBCQUEwQjtJQUM3QixHQUFHLHdCQUF3QjtJQUMzQixHQUFHLDBCQUEwQixDQUFDLFFBQVEsQ0FBQztJQUN2QyxHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQztJQUN0QyxHQUFHLHdCQUF3QjtDQUM1QixDQUFDO0FBRUYsTUFBTSxVQUFVLDBCQUEwQjtJQUN4QyxPQUFPO1FBQ0wsR0FBRyx3QkFBd0IsRUFBRTtRQUM3QixHQUFHLGdCQUFnQixFQUFFO1FBQ3JCLEdBQUcsMEJBQTBCLEVBQUU7UUFDL0IsR0FBRyx5QkFBeUIsQ0FBQyxRQUFRLENBQUM7UUFDdEMsR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLENBQUM7UUFDckMsR0FBRywwQkFBMEIsRUFBRTtLQUNoQyxDQUFDO0FBQ0osQ0FBQyJ9
@@ -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,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AAK5E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAChB,uBA8BP"}
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,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AAK5E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAChB,uBAqCP"}
package/dest/factory.js CHANGED
@@ -3,7 +3,7 @@ import { createDebugLogger } from '@aztec/foundation/log';
3
3
  import { createStore } from '@aztec/kv-store/utils';
4
4
  import { createProverClient } from '@aztec/prover-client';
5
5
  import { getL1Publisher } from '@aztec/sequencer-client';
6
- import { PublicProcessorFactory, createSimulationProvider } from '@aztec/simulator';
6
+ import { createSimulationProvider } from '@aztec/simulator';
7
7
  import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
8
8
  import { createWorldStateSynchronizer } from '@aztec/world-state';
9
9
  import { ProverNode } from './prover-node.js';
@@ -21,14 +21,12 @@ export async function createProverNode(config, deps = {}) {
21
21
  const worldStateSynchronizer = await createWorldStateSynchronizer(worldStateConfig, store, archiver);
22
22
  await worldStateSynchronizer.start();
23
23
  const simulationProvider = await createSimulationProvider(config, log);
24
- const prover = await createProverClient(config, worldStateSynchronizer, archiver);
24
+ const prover = await createProverClient(config, telemetry);
25
25
  // REFACTOR: Move publisher out of sequencer package and into an L1-related package
26
- const publisher = getL1Publisher(config);
27
- const latestWorldState = worldStateSynchronizer.getLatest();
28
- const publicProcessorFactory = new PublicProcessorFactory(latestWorldState, archiver, simulationProvider, telemetry);
26
+ const publisher = getL1Publisher(config, telemetry);
29
27
  const txProvider = deps.aztecNodeTxProvider
30
28
  ? new AztecNodeTxProvider(deps.aztecNodeTxProvider)
31
29
  : createTxProvider(config);
32
- return new ProverNode(prover, publicProcessorFactory, publisher, archiver, txProvider);
30
+ return new ProverNode(prover, publisher, archiver, archiver, archiver, worldStateSynchronizer, txProvider, simulationProvider, telemetry);
33
31
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEUsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVELGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxNQUF3QixFQUN4QixPQU1JLEVBQUU7SUFFTixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksbUJBQW1CLEVBQUUsQ0FBQztJQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUV6RSxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFcEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RyxHQUFHLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxNQUFNLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFdkYsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pFLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckcsTUFBTSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVyQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsTUFBTSxFQUFFLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRWxGLG1GQUFtRjtJQUNuRixNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFekMsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM1RCxNQUFNLHNCQUFzQixHQUFHLElBQUksc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUI7UUFDekMsQ0FBQyxDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ25ELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU3QixPQUFPLElBQUksVUFBVSxDQUFDLE1BQU8sRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzFGLENBQUMifQ==
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEUsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVELGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxNQUF3QixFQUN4QixPQU1JLEVBQUU7SUFFTixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksbUJBQW1CLEVBQUUsQ0FBQztJQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUV6RSxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFcEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RyxHQUFHLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxNQUFNLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFdkYsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLDBCQUEwQixFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pFLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckcsTUFBTSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVyQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTNELG1GQUFtRjtJQUNuRixNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXBELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUI7UUFDekMsQ0FBQyxDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ25ELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU3QixPQUFPLElBQUksVUFBVSxDQUNuQixNQUFPLEVBQ1AsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFNBQVMsQ0FDVixDQUFDO0FBQ0osQ0FBQyJ9
@@ -1,4 +1,4 @@
1
- import { type BlockProver, type L2BlockSource, type TxProvider } from '@aztec/circuit-types';
1
+ import { type BlockProver, type L1ToL2MessageSource, type L2BlockSource, type TxProvider } from '@aztec/circuit-types';
2
2
  import { type L1Publisher } from '@aztec/sequencer-client';
3
3
  import { type PublicProcessorFactory } from '@aztec/simulator';
4
4
  /**
@@ -11,15 +11,17 @@ export declare class BlockProvingJob {
11
11
  private publicProcessorFactory;
12
12
  private publisher;
13
13
  private l2BlockSource;
14
+ private l1ToL2MessageSource;
14
15
  private txProvider;
15
16
  private state;
16
17
  private log;
17
- constructor(prover: BlockProver, publicProcessorFactory: PublicProcessorFactory, publisher: L1Publisher, l2BlockSource: L2BlockSource, txProvider: TxProvider);
18
+ constructor(prover: BlockProver, publicProcessorFactory: PublicProcessorFactory, publisher: L1Publisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, txProvider: TxProvider);
18
19
  getState(): BlockProvingJobState;
19
20
  run(fromBlock: number, toBlock: number): Promise<void>;
20
21
  private getBlock;
21
22
  private getTxs;
23
+ private getL1ToL2Messages;
22
24
  private processTxs;
23
25
  }
24
- export type BlockProvingJobState = 'initialized' | 'started' | 'processing' | 'awaiting-prover' | 'publishing-proof' | 'completed';
26
+ export type BlockProvingJobState = 'initialized' | 'processing' | 'awaiting-prover' | 'publishing-proof' | 'completed' | 'failed';
25
27
  //# sourceMappingURL=block-proving-job.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"block-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/block-proving-job.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAGhB,KAAK,aAAa,EAKlB,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAErF;;;;GAIG;AACH,qBAAa,eAAe;IAKxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU;IARpB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAgD;gBAGjD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU;IAGzB,QAAQ,IAAI,oBAAoB;IAI1B,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;YA8DrC,QAAQ;YAQR,MAAM;YAWN,UAAU;CAoBzB;AAED,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,WAAW,CAAC"}
1
+ {"version":3,"file":"block-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/block-proving-job.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,mBAAmB,EAExB,KAAK,aAAa,EAKlB,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAErF;;;;GAIG;AACH,qBAAa,eAAe;IAKxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,UAAU;IATpB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAgD;gBAGjD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,UAAU;IAGzB,QAAQ,IAAI,oBAAoB;IAI1B,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;YAwErC,QAAQ;YAQR,MAAM;IAWpB,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAoBzB;AAED,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,WAAW,GACX,QAAQ,CAAC"}
@@ -6,11 +6,12 @@ import { createDebugLogger } from '@aztec/foundation/log';
6
6
  * world state as part of public call execution via the public processor.
7
7
  */
8
8
  export class BlockProvingJob {
9
- constructor(prover, publicProcessorFactory, publisher, l2BlockSource, txProvider) {
9
+ constructor(prover, publicProcessorFactory, publisher, l2BlockSource, l1ToL2MessageSource, txProvider) {
10
10
  this.prover = prover;
11
11
  this.publicProcessorFactory = publicProcessorFactory;
12
12
  this.publisher = publisher;
13
13
  this.l2BlockSource = l2BlockSource;
14
+ this.l1ToL2MessageSource = l1ToL2MessageSource;
14
15
  this.txProvider = txProvider;
15
16
  this.state = 'initialized';
16
17
  this.log = createDebugLogger('aztec:block-proving-job');
@@ -23,48 +24,54 @@ export class BlockProvingJob {
23
24
  throw new Error(`Block ranges are not yet supported`);
24
25
  }
25
26
  this.log.info(`Starting block proving job`, { fromBlock, toBlock });
26
- this.state = 'started';
27
- // TODO: Fast-forward world state to fromBlock and/or await fromBlock to be published to the unproven chain
28
27
  this.state = 'processing';
29
- let historicalHeader = (await this.l2BlockSource.getBlock(fromBlock - 1))?.header;
30
- for (let blockNumber = fromBlock; blockNumber <= toBlock; blockNumber++) {
31
- const block = await this.getBlock(blockNumber);
32
- const globalVariables = block.header.globalVariables;
33
- const txHashes = block.body.txEffects.map(tx => tx.txHash);
34
- const txCount = block.body.numberOfTxsIncludingPadded;
35
- const l1ToL2Messages = []; // TODO: grab L1 to L2 messages for this block
36
- this.log.verbose(`Starting block processing`, {
37
- number: block.number,
38
- blockHash: block.hash().toString(),
39
- lastArchive: block.header.lastArchive.root,
40
- noteHashTreeRoot: block.header.state.partial.noteHashTree.root,
41
- nullifierTreeRoot: block.header.state.partial.nullifierTree.root,
42
- publicDataTreeRoot: block.header.state.partial.publicDataTree.root,
43
- historicalHeader: historicalHeader?.hash(),
44
- ...globalVariables,
45
- });
46
- const provingTicket = await this.prover.startNewBlock(txCount, globalVariables, l1ToL2Messages);
47
- const publicProcessor = this.publicProcessorFactory.create(historicalHeader, globalVariables);
48
- const txs = await this.getTxs(txHashes);
49
- await this.processTxs(publicProcessor, txs, txCount);
50
- this.log.verbose(`Processed all txs for block`, {
51
- blockNumber: block.number,
52
- blockHash: block.hash().toString(),
53
- });
54
- await this.prover.setBlockCompleted();
55
- const result = await provingTicket.provingPromise;
56
- if (result.status === PROVING_STATUS.FAILURE) {
57
- throw new Error(`Block proving failed: ${result.reason}`);
28
+ try {
29
+ let historicalHeader = (await this.l2BlockSource.getBlock(fromBlock - 1))?.header;
30
+ for (let blockNumber = fromBlock; blockNumber <= toBlock; blockNumber++) {
31
+ const block = await this.getBlock(blockNumber);
32
+ const globalVariables = block.header.globalVariables;
33
+ const txHashes = block.body.txEffects.map(tx => tx.txHash);
34
+ const txCount = block.body.numberOfTxsIncludingPadded;
35
+ const l1ToL2Messages = await this.getL1ToL2Messages(block);
36
+ this.log.verbose(`Starting block processing`, {
37
+ number: block.number,
38
+ blockHash: block.hash().toString(),
39
+ lastArchive: block.header.lastArchive.root,
40
+ noteHashTreeRoot: block.header.state.partial.noteHashTree.root,
41
+ nullifierTreeRoot: block.header.state.partial.nullifierTree.root,
42
+ publicDataTreeRoot: block.header.state.partial.publicDataTree.root,
43
+ historicalHeader: historicalHeader?.hash(),
44
+ ...globalVariables,
45
+ });
46
+ // When we move to proving epochs, this should change into a startNewEpoch and be lifted outside the loop.
47
+ const provingTicket = await this.prover.startNewBlock(txCount, globalVariables, l1ToL2Messages);
48
+ const publicProcessor = this.publicProcessorFactory.create(historicalHeader, globalVariables);
49
+ const txs = await this.getTxs(txHashes);
50
+ await this.processTxs(publicProcessor, txs, txCount);
51
+ this.log.verbose(`Processed all txs for block`, {
52
+ blockNumber: block.number,
53
+ blockHash: block.hash().toString(),
54
+ });
55
+ await this.prover.setBlockCompleted();
56
+ // This should be moved outside the loop to match the creation of the proving ticket when we move to epochs.
57
+ this.state = 'awaiting-prover';
58
+ const result = await provingTicket.provingPromise;
59
+ if (result.status === PROVING_STATUS.FAILURE) {
60
+ throw new Error(`Block proving failed: ${result.reason}`);
61
+ }
62
+ historicalHeader = block.header;
58
63
  }
59
- historicalHeader = block.header;
64
+ const { block, aggregationObject, proof } = await this.prover.finaliseBlock();
65
+ this.log.info(`Finalised proof for block range`, { fromBlock, toBlock });
66
+ this.state = 'publishing-proof';
67
+ await this.publisher.submitProof(block.header, block.archive.root, this.prover.getProverId(), aggregationObject, proof);
68
+ this.log.info(`Submitted proof for block range`, { fromBlock, toBlock });
69
+ this.state = 'completed';
70
+ }
71
+ catch (err) {
72
+ this.log.error(`Error running block prover job: ${err}`);
73
+ this.state = 'failed';
60
74
  }
61
- this.state = 'awaiting-prover';
62
- const { block, aggregationObject, proof } = await this.prover.finaliseBlock();
63
- this.log.info(`Finalised proof for block range`, { fromBlock, toBlock });
64
- this.state = 'publishing-proof';
65
- await this.publisher.submitProof(block.header, block.archive.root, aggregationObject, proof);
66
- this.log.info(`Submitted proof for block range`, { fromBlock, toBlock });
67
- this.state = 'completed';
68
75
  }
69
76
  async getBlock(blockNumber) {
70
77
  const block = await this.l2BlockSource.getBlock(blockNumber);
@@ -81,6 +88,9 @@ export class BlockProvingJob {
81
88
  }
82
89
  return txs.map(([_, tx]) => tx);
83
90
  }
91
+ getL1ToL2Messages(block) {
92
+ return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
93
+ }
84
94
  async processTxs(publicProcessor, txs, totalNumberOfTxs) {
85
95
  const [processedTxs, failedTxs] = await publicProcessor.process(txs, totalNumberOfTxs, this.prover, new EmptyTxValidator());
86
96
  if (failedTxs.length) {
@@ -89,4 +99,4 @@ export class BlockProvingJob {
89
99
  return processedTxs;
90
100
  }
91
101
  }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stcHJvdmluZy1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvam9iL2Jsb2NrLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFHaEIsY0FBYyxHQUtmLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJMUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ1UsTUFBbUIsRUFDbkIsc0JBQThDLEVBQzlDLFNBQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLFVBQXNCO1FBSnRCLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbkIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxjQUFTLEdBQVQsU0FBUyxDQUFhO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFSeEIsVUFBSyxHQUF5QixhQUFhLENBQUM7UUFDNUMsUUFBRyxHQUFHLGlCQUFpQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFReEQsQ0FBQztJQUVHLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBaUIsRUFBRSxPQUFlO1FBQ2pELElBQUksU0FBUyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUV2QiwyR0FBMkc7UUFFM0csSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7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
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stcHJvdmluZy1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvam9iL2Jsb2NrLXByb3Zpbmctam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFJaEIsY0FBYyxHQUtmLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJMUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ1UsTUFBbUIsRUFDbkIsc0JBQThDLEVBQzlDLFNBQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxVQUFzQjtRQUx0QixXQUFNLEdBQU4sTUFBTSxDQUFhO1FBQ25CLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFUeEIsVUFBSyxHQUF5QixhQUFhLENBQUM7UUFDNUMsUUFBRyxHQUFHLGlCQUFpQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFTeEQsQ0FBQztJQUVHLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBaUIsRUFBRSxPQUFlO1FBQ2pELElBQUksU0FBUyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztRQUMx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
@@ -1,6 +1,9 @@
1
- import { type L2BlockSource, type ProverClient, type TxProvider } from '@aztec/circuit-types';
1
+ import { type L1ToL2MessageSource, type L2BlockSource, type ProverClient, type TxProvider } from '@aztec/circuit-types';
2
2
  import { type L1Publisher } from '@aztec/sequencer-client';
3
- import { type PublicProcessorFactory } from '@aztec/simulator';
3
+ import { type SimulationProvider } from '@aztec/simulator';
4
+ import { type TelemetryClient } from '@aztec/telemetry-client';
5
+ import { type WorldStateSynchronizer } from '@aztec/world-state';
6
+ import { type ContractDataSource } from '../../types/src/contracts/contract_data_source.js';
4
7
  /**
5
8
  * An Aztec Prover Node is a standalone process that monitors the unfinalised chain on L1 for unproven blocks,
6
9
  * fetches their txs from a tx source in the p2p network or an external node, re-executes their public functions,
@@ -8,14 +11,19 @@ import { type PublicProcessorFactory } from '@aztec/simulator';
8
11
  */
9
12
  export declare class ProverNode {
10
13
  private prover;
11
- private publicProcessorFactory;
12
14
  private publisher;
13
15
  private l2BlockSource;
16
+ private l1ToL2MessageSource;
17
+ private contractDataSource;
18
+ private worldState;
14
19
  private txProvider;
20
+ private simulator;
21
+ private telemetryClient;
15
22
  private options;
16
23
  private log;
17
24
  private runningPromise;
18
- constructor(prover: ProverClient, publicProcessorFactory: PublicProcessorFactory, publisher: L1Publisher, l2BlockSource: L2BlockSource, txProvider: TxProvider, options?: {
25
+ private latestBlockWeAreProving;
26
+ constructor(prover: ProverClient, publisher: L1Publisher, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, txProvider: TxProvider, simulator: SimulationProvider, telemetryClient: TelemetryClient, options?: {
19
27
  pollingIntervalMs: number;
20
28
  disableAutomaticProving: boolean;
21
29
  });
@@ -31,7 +39,6 @@ export declare class ProverNode {
31
39
  /**
32
40
  * Single iteration of recurring work. This method is called periodically by the running promise.
33
41
  * Checks whether there are new blocks to prove, proves them, and submits them.
34
- * Only proves one block per job and one job at a time (for now).
35
42
  */
36
43
  protected work(): Promise<void>;
37
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG9F,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAI/D;;;;GAIG;AACH,qBAAa,UAAU;IAKnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IATjB,OAAO,CAAC,GAAG,CAA0C;IACrD,OAAO,CAAC,cAAc,CAA6B;gBAGzC,MAAM,EAAE,YAAY,EACpB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,uBAAuB,EAAE,OAAO,CAAA;KAG7E;IAGH;;;OAGG;IACH,KAAK;IAML;;OAEG;IACG,IAAI;IASV;;;;OAIG;cACa,IAAI;IAoBpB;;OAEG;IACI,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAI/C;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKpD;;OAEG;IACI,SAAS;IAIhB,OAAO,CAAC,gBAAgB;CASzB"}
1
+ {"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGxH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAG5F;;;;GAIG;AACH,qBAAa,UAAU;IAMnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,OAAO;IAdjB,OAAO,CAAC,GAAG,CAA0C;IACrD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,uBAAuB,CAAqB;gBAG1C,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,WAAW,EACtB,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,sBAAsB,EAClC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,kBAAkB,EAC7B,eAAe,EAAE,eAAe,EAChC,OAAO,GAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,uBAAuB,EAAE,OAAO,CAAA;KAG7E;IAGH;;;OAGG;IACH,KAAK;IAML;;OAEG;IACG,IAAI;IAUV;;;OAGG;cACa,IAAI;IAyBpB;;OAEG;IACU,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKrD;;OAEG;IACU,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK1D;;OAEG;IACI,SAAS;YAIF,gBAAgB;CAyB/B"}
@@ -1,5 +1,6 @@
1
1
  import { createDebugLogger } from '@aztec/foundation/log';
2
2
  import { RunningPromise } from '@aztec/foundation/running-promise';
3
+ import { PublicProcessorFactory } from '@aztec/simulator';
3
4
  import { BlockProvingJob } from './job/block-proving-job.js';
4
5
  /**
5
6
  * An Aztec Prover Node is a standalone process that monitors the unfinalised chain on L1 for unproven blocks,
@@ -7,15 +8,19 @@ import { BlockProvingJob } from './job/block-proving-job.js';
7
8
  * creates a rollup proof, and submits it to L1.
8
9
  */
9
10
  export class ProverNode {
10
- constructor(prover, publicProcessorFactory, publisher, l2BlockSource, txProvider, options = {
11
+ constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, txProvider, simulator, telemetryClient, options = {
11
12
  pollingIntervalMs: 1000,
12
13
  disableAutomaticProving: false,
13
14
  }) {
14
15
  this.prover = prover;
15
- this.publicProcessorFactory = publicProcessorFactory;
16
16
  this.publisher = publisher;
17
17
  this.l2BlockSource = l2BlockSource;
18
+ this.l1ToL2MessageSource = l1ToL2MessageSource;
19
+ this.contractDataSource = contractDataSource;
20
+ this.worldState = worldState;
18
21
  this.txProvider = txProvider;
22
+ this.simulator = simulator;
23
+ this.telemetryClient = telemetryClient;
19
24
  this.options = options;
20
25
  this.log = createDebugLogger('aztec:prover-node');
21
26
  }
@@ -38,11 +43,11 @@ export class ProverNode {
38
43
  await this.l2BlockSource.stop();
39
44
  this.publisher.interrupt();
40
45
  this.log.info('Stopped ProverNode');
46
+ // TODO(palla/prover-node): Keep a reference to all ongoing ProvingJobs and stop them.
41
47
  }
42
48
  /**
43
49
  * Single iteration of recurring work. This method is called periodically by the running promise.
44
50
  * Checks whether there are new blocks to prove, proves them, and submits them.
45
- * Only proves one block per job and one job at a time (for now).
46
51
  */
47
52
  async work() {
48
53
  if (this.options.disableAutomaticProving) {
@@ -52,26 +57,31 @@ export class ProverNode {
52
57
  this.l2BlockSource.getBlockNumber(),
53
58
  this.l2BlockSource.getProvenBlockNumber(),
54
59
  ]);
55
- if (latestProvenBlockNumber >= latestBlockNumber) {
56
- this.log.debug(`No new blocks to prove`, { latestBlockNumber, latestProvenBlockNumber });
60
+ // Consider both the latest block we are proving and the last block proven on the chain
61
+ const latestBlockBeingProven = this.latestBlockWeAreProving ?? 0;
62
+ const latestProven = Math.max(latestBlockBeingProven, latestProvenBlockNumber);
63
+ if (latestProven >= latestBlockNumber) {
64
+ this.log.debug(`No new blocks to prove`, { latestBlockNumber, latestProvenBlockNumber, latestBlockBeingProven });
57
65
  return;
58
66
  }
59
- const fromBlock = latestProvenBlockNumber + 1;
67
+ const fromBlock = latestProven + 1;
60
68
  const toBlock = fromBlock; // We only prove one block at a time for now
61
- await this.prove(fromBlock, toBlock);
69
+ await this.startProof(fromBlock, toBlock);
70
+ this.latestBlockWeAreProving = toBlock;
62
71
  }
63
72
  /**
64
73
  * Creates a proof for a block range. Returns once the proof has been submitted to L1.
65
74
  */
66
- prove(fromBlock, toBlock) {
67
- return this.createProvingJob().run(fromBlock, toBlock);
75
+ async prove(fromBlock, toBlock) {
76
+ const job = await this.createProvingJob(fromBlock);
77
+ return job.run(fromBlock, toBlock);
68
78
  }
69
79
  /**
70
80
  * Starts a proving process and returns immediately.
71
81
  */
72
- startProof(fromBlock, toBlock) {
73
- void this.createProvingJob().run(fromBlock, toBlock);
74
- return Promise.resolve();
82
+ async startProof(fromBlock, toBlock) {
83
+ const job = await this.createProvingJob(fromBlock);
84
+ void job.run(fromBlock, toBlock);
75
85
  }
76
86
  /**
77
87
  * Returns the prover instance.
@@ -79,8 +89,15 @@ export class ProverNode {
79
89
  getProver() {
80
90
  return this.prover;
81
91
  }
82
- createProvingJob() {
83
- return new BlockProvingJob(this.prover, this.publicProcessorFactory, this.publisher, this.l2BlockSource, this.txProvider);
92
+ async createProvingJob(fromBlock) {
93
+ if ((await this.worldState.status()).syncedToL2Block >= fromBlock) {
94
+ throw new Error(`Cannot create proving job for block ${fromBlock} as it is behind the current world state`);
95
+ }
96
+ // Fast forward world state to right before the target block and get a fork
97
+ const db = await this.worldState.syncImmediateAndFork(fromBlock - 1, true);
98
+ // Create a processor using the forked world state
99
+ const publicProcessorFactory = new PublicProcessorFactory(db, this.contractDataSource, this.simulator, this.telemetryClient);
100
+ return new BlockProvingJob(this.prover.createBlockProver(db), publicProcessorFactory, this.publisher, this.l2BlockSource, this.l1ToL2MessageSource, this.txProvider);
84
101
  }
85
102
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBSW5FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFJckIsWUFDVSxNQUFvQixFQUNwQixzQkFBOEMsRUFDOUMsU0FBc0IsRUFDdEIsYUFBNEIsRUFDNUIsVUFBc0IsRUFDdEIsVUFBMkU7UUFDakYsaUJBQWlCLEVBQUUsSUFBSztRQUN4Qix1QkFBdUIsRUFBRSxLQUFLO0tBQy9CO1FBUk8sV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUdkO1FBWkssUUFBRyxHQUFHLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFhbEQsQ0FBQztJQUVKOzs7T0FHRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLEtBQUssQ0FBQyxJQUFJO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLGlCQUFpQixFQUFFLHVCQUF1QixDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFO1lBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUU7U0FDMUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBdUIsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLDRDQUE0QztRQUN2RSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxTQUFpQixFQUFFLE9BQWU7UUFDN0MsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxTQUFpQixFQUFFLE9BQWU7UUFDbEQsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixPQUFPLElBQUksZUFBZSxDQUN4QixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO0lBQ0osQ0FBQztDQUNGIn0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxzQkFBc0IsRUFBMkIsTUFBTSxrQkFBa0IsQ0FBQztBQUtuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0Q7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBS3JCLFlBQ1UsTUFBb0IsRUFDcEIsU0FBc0IsRUFDdEIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLGtCQUFzQyxFQUN0QyxVQUFrQyxFQUNsQyxVQUFzQixFQUN0QixTQUE2QixFQUM3QixlQUFnQyxFQUNoQyxVQUEyRTtRQUNqRixpQkFBaUIsRUFBRSxJQUFLO1FBQ3hCLHVCQUF1QixFQUFFLEtBQUs7S0FDL0I7UUFaTyxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFDN0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLFlBQU8sR0FBUCxPQUFPLENBR2Q7UUFqQkssUUFBRyxHQUFHLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFrQmxELENBQUM7SUFFSjs7O09BR0c7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJ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
@@ -1,5 +1,7 @@
1
+ import { type ConfigMappingsType } from '@aztec/foundation/config';
1
2
  export type TxProviderConfig = {
2
3
  txProviderNodeUrl: string | undefined;
3
4
  };
5
+ export declare const txProviderConfigMappings: ConfigMappingsType<TxProviderConfig>;
4
6
  export declare function getTxProviderConfigFromEnv(): TxProviderConfig;
5
7
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tx-provider/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAI7D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tx-provider/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAyB,MAAM,0BAA0B,CAAC;AAE1F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAMzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D"}
@@ -1,6 +1,12 @@
1
+ import { getConfigFromMappings } from '@aztec/foundation/config';
2
+ export const txProviderConfigMappings = {
3
+ txProviderNodeUrl: {
4
+ env: 'TX_PROVIDER_NODE_URL',
5
+ description: 'The URL of the tx provider node',
6
+ parseEnv: (val) => val,
7
+ },
8
+ };
1
9
  export function getTxProviderConfigFromEnv() {
2
- return {
3
- txProviderNodeUrl: process.env.TX_PROVIDER_NODE_URL ?? process.env.AZTEC_NODE_URL,
4
- };
10
+ return getConfigFromMappings(txProviderConfigMappings);
5
11
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3ZpZGVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE9BQU87UUFDTCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztLQUNsRixDQUFDO0FBQ0osQ0FBQyJ9
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3ZpZGVyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJCLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFNMUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXlDO0lBQzVFLGlCQUFpQixFQUFFO1FBQ2pCLEdBQUcsRUFBRSxzQkFBc0I7UUFDM0IsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxRQUFRLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUc7S0FDL0I7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLDBCQUEwQjtJQUN4QyxPQUFPLHFCQUFxQixDQUFtQix3QkFBd0IsQ0FBQyxDQUFDO0FBQzNFLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/prover-node",
3
- "version": "0.47.0",
3
+ "version": "0.48.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js"
@@ -49,16 +49,16 @@
49
49
  ]
50
50
  },
51
51
  "dependencies": {
52
- "@aztec/archiver": "0.47.0",
53
- "@aztec/circuit-types": "0.47.0",
54
- "@aztec/circuits.js": "0.47.0",
55
- "@aztec/foundation": "0.47.0",
56
- "@aztec/kv-store": "0.47.0",
57
- "@aztec/prover-client": "0.47.0",
58
- "@aztec/sequencer-client": "0.47.0",
59
- "@aztec/simulator": "0.47.0",
60
- "@aztec/telemetry-client": "0.47.0",
61
- "@aztec/world-state": "0.47.0",
52
+ "@aztec/archiver": "0.48.0",
53
+ "@aztec/circuit-types": "0.48.0",
54
+ "@aztec/circuits.js": "0.48.0",
55
+ "@aztec/foundation": "0.48.0",
56
+ "@aztec/kv-store": "0.48.0",
57
+ "@aztec/prover-client": "0.48.0",
58
+ "@aztec/sequencer-client": "0.48.0",
59
+ "@aztec/simulator": "0.48.0",
60
+ "@aztec/telemetry-client": "0.48.0",
61
+ "@aztec/world-state": "0.48.0",
62
62
  "source-map-support": "^0.5.21",
63
63
  "tslib": "^2.4.0"
64
64
  },
package/src/config.ts CHANGED
@@ -1,9 +1,17 @@
1
- import { type ArchiverConfig, getArchiverConfigFromEnv } from '@aztec/archiver';
2
- import { type ProverClientConfig, getProverEnvVars } from '@aztec/prover-client';
3
- import { type PublisherConfig, type TxSenderConfig, getTxSenderConfigFromEnv } from '@aztec/sequencer-client';
4
- import { type WorldStateConfig, getWorldStateConfigFromEnv } from '@aztec/world-state';
1
+ import { type ArchiverConfig, archiverConfigMappings, getArchiverConfigFromEnv } from '@aztec/archiver';
2
+ import { type ConfigMappingsType } from '@aztec/foundation/config';
3
+ import { type ProverClientConfig, getProverEnvVars, proverClientConfigMappings } from '@aztec/prover-client';
4
+ import {
5
+ type PublisherConfig,
6
+ type TxSenderConfig,
7
+ getPublisherConfigFromEnv,
8
+ getPublisherConfigMappings,
9
+ getTxSenderConfigFromEnv,
10
+ getTxSenderConfigMappings,
11
+ } from '@aztec/sequencer-client';
12
+ import { type WorldStateConfig, getWorldStateConfigFromEnv, worldStateConfigMappings } from '@aztec/world-state';
5
13
 
6
- import { type TxProviderConfig, getTxProviderConfigFromEnv } from './tx-provider/config.js';
14
+ import { type TxProviderConfig, getTxProviderConfigFromEnv, txProviderConfigMappings } from './tx-provider/config.js';
7
15
 
8
16
  export type ProverNodeConfig = ArchiverConfig &
9
17
  ProverClientConfig &
@@ -12,14 +20,22 @@ export type ProverNodeConfig = ArchiverConfig &
12
20
  TxSenderConfig &
13
21
  TxProviderConfig;
14
22
 
23
+ export const proverNodeConfigMappings: ConfigMappingsType<ProverNodeConfig> = {
24
+ ...archiverConfigMappings,
25
+ ...proverClientConfigMappings,
26
+ ...worldStateConfigMappings,
27
+ ...getPublisherConfigMappings('PROVER'),
28
+ ...getTxSenderConfigMappings('PROVER'),
29
+ ...txProviderConfigMappings,
30
+ };
31
+
15
32
  export function getProverNodeConfigFromEnv(): ProverNodeConfig {
16
- const { PROOF_PUBLISH_RETRY_INTERVAL_MS } = process.env;
17
33
  return {
18
34
  ...getArchiverConfigFromEnv(),
19
35
  ...getProverEnvVars(),
20
36
  ...getWorldStateConfigFromEnv(),
37
+ ...getPublisherConfigFromEnv('PROVER'),
21
38
  ...getTxSenderConfigFromEnv('PROVER'),
22
39
  ...getTxProviderConfigFromEnv(),
23
- l1PublishRetryIntervalMS: PROOF_PUBLISH_RETRY_INTERVAL_MS ? +PROOF_PUBLISH_RETRY_INTERVAL_MS : 1_000,
24
40
  };
25
41
  }
package/src/factory.ts CHANGED
@@ -4,7 +4,7 @@ import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
4
4
  import { createStore } from '@aztec/kv-store/utils';
5
5
  import { createProverClient } from '@aztec/prover-client';
6
6
  import { getL1Publisher } from '@aztec/sequencer-client';
7
- import { PublicProcessorFactory, createSimulationProvider } from '@aztec/simulator';
7
+ import { createSimulationProvider } from '@aztec/simulator';
8
8
  import { type TelemetryClient } from '@aztec/telemetry-client';
9
9
  import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
10
10
  import { createWorldStateSynchronizer } from '@aztec/world-state';
@@ -40,17 +40,24 @@ export async function createProverNode(
40
40
 
41
41
  const simulationProvider = await createSimulationProvider(config, log);
42
42
 
43
- const prover = await createProverClient(config, worldStateSynchronizer, archiver);
43
+ const prover = await createProverClient(config, telemetry);
44
44
 
45
45
  // REFACTOR: Move publisher out of sequencer package and into an L1-related package
46
- const publisher = getL1Publisher(config);
47
-
48
- const latestWorldState = worldStateSynchronizer.getLatest();
49
- const publicProcessorFactory = new PublicProcessorFactory(latestWorldState, archiver, simulationProvider, telemetry);
46
+ const publisher = getL1Publisher(config, telemetry);
50
47
 
51
48
  const txProvider = deps.aztecNodeTxProvider
52
49
  ? new AztecNodeTxProvider(deps.aztecNodeTxProvider)
53
50
  : createTxProvider(config);
54
51
 
55
- return new ProverNode(prover!, publicProcessorFactory, publisher, archiver, txProvider);
52
+ return new ProverNode(
53
+ prover!,
54
+ publisher,
55
+ archiver,
56
+ archiver,
57
+ archiver,
58
+ worldStateSynchronizer,
59
+ txProvider,
60
+ simulationProvider,
61
+ telemetry,
62
+ );
56
63
  }
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  type BlockProver,
3
3
  EmptyTxValidator,
4
+ type L1ToL2MessageSource,
4
5
  type L2Block,
5
6
  type L2BlockSource,
6
7
  PROVING_STATUS,
@@ -9,7 +10,6 @@ import {
9
10
  type TxHash,
10
11
  type TxProvider,
11
12
  } from '@aztec/circuit-types';
12
- import { type Fr } from '@aztec/circuits.js';
13
13
  import { createDebugLogger } from '@aztec/foundation/log';
14
14
  import { type L1Publisher } from '@aztec/sequencer-client';
15
15
  import { type PublicProcessor, type PublicProcessorFactory } from '@aztec/simulator';
@@ -28,6 +28,7 @@ export class BlockProvingJob {
28
28
  private publicProcessorFactory: PublicProcessorFactory,
29
29
  private publisher: L1Publisher,
30
30
  private l2BlockSource: L2BlockSource,
31
+ private l1ToL2MessageSource: L1ToL2MessageSource,
31
32
  private txProvider: TxProvider,
32
33
  ) {}
33
34
 
@@ -41,60 +42,70 @@ export class BlockProvingJob {
41
42
  }
42
43
 
43
44
  this.log.info(`Starting block proving job`, { fromBlock, toBlock });
44
- this.state = 'started';
45
-
46
- // TODO: Fast-forward world state to fromBlock and/or await fromBlock to be published to the unproven chain
47
-
48
45
  this.state = 'processing';
49
-
50
- let historicalHeader = (await this.l2BlockSource.getBlock(fromBlock - 1))?.header;
51
- for (let blockNumber = fromBlock; blockNumber <= toBlock; blockNumber++) {
52
- const block = await this.getBlock(blockNumber);
53
- const globalVariables = block.header.globalVariables;
54
- const txHashes = block.body.txEffects.map(tx => tx.txHash);
55
- const txCount = block.body.numberOfTxsIncludingPadded;
56
- const l1ToL2Messages: Fr[] = []; // TODO: grab L1 to L2 messages for this block
57
-
58
- this.log.verbose(`Starting block processing`, {
59
- number: block.number,
60
- blockHash: block.hash().toString(),
61
- lastArchive: block.header.lastArchive.root,
62
- noteHashTreeRoot: block.header.state.partial.noteHashTree.root,
63
- nullifierTreeRoot: block.header.state.partial.nullifierTree.root,
64
- publicDataTreeRoot: block.header.state.partial.publicDataTree.root,
65
- historicalHeader: historicalHeader?.hash(),
66
- ...globalVariables,
67
- });
68
- const provingTicket = await this.prover.startNewBlock(txCount, globalVariables, l1ToL2Messages);
69
- const publicProcessor = this.publicProcessorFactory.create(historicalHeader, globalVariables);
70
-
71
- const txs = await this.getTxs(txHashes);
72
- await this.processTxs(publicProcessor, txs, txCount);
73
-
74
- this.log.verbose(`Processed all txs for block`, {
75
- blockNumber: block.number,
76
- blockHash: block.hash().toString(),
77
- });
78
-
79
- await this.prover.setBlockCompleted();
80
-
81
- const result = await provingTicket.provingPromise;
82
- if (result.status === PROVING_STATUS.FAILURE) {
83
- throw new Error(`Block proving failed: ${result.reason}`);
46
+ try {
47
+ let historicalHeader = (await this.l2BlockSource.getBlock(fromBlock - 1))?.header;
48
+ for (let blockNumber = fromBlock; blockNumber <= toBlock; blockNumber++) {
49
+ const block = await this.getBlock(blockNumber);
50
+ const globalVariables = block.header.globalVariables;
51
+ const txHashes = block.body.txEffects.map(tx => tx.txHash);
52
+ const txCount = block.body.numberOfTxsIncludingPadded;
53
+ const l1ToL2Messages = await this.getL1ToL2Messages(block);
54
+
55
+ this.log.verbose(`Starting block processing`, {
56
+ number: block.number,
57
+ blockHash: block.hash().toString(),
58
+ lastArchive: block.header.lastArchive.root,
59
+ noteHashTreeRoot: block.header.state.partial.noteHashTree.root,
60
+ nullifierTreeRoot: block.header.state.partial.nullifierTree.root,
61
+ publicDataTreeRoot: block.header.state.partial.publicDataTree.root,
62
+ historicalHeader: historicalHeader?.hash(),
63
+ ...globalVariables,
64
+ });
65
+
66
+ // When we move to proving epochs, this should change into a startNewEpoch and be lifted outside the loop.
67
+ const provingTicket = await this.prover.startNewBlock(txCount, globalVariables, l1ToL2Messages);
68
+
69
+ const publicProcessor = this.publicProcessorFactory.create(historicalHeader, globalVariables);
70
+
71
+ const txs = await this.getTxs(txHashes);
72
+ await this.processTxs(publicProcessor, txs, txCount);
73
+
74
+ this.log.verbose(`Processed all txs for block`, {
75
+ blockNumber: block.number,
76
+ blockHash: block.hash().toString(),
77
+ });
78
+
79
+ await this.prover.setBlockCompleted();
80
+
81
+ // This should be moved outside the loop to match the creation of the proving ticket when we move to epochs.
82
+ this.state = 'awaiting-prover';
83
+ const result = await provingTicket.provingPromise;
84
+ if (result.status === PROVING_STATUS.FAILURE) {
85
+ throw new Error(`Block proving failed: ${result.reason}`);
86
+ }
87
+
88
+ historicalHeader = block.header;
84
89
  }
85
90
 
86
- historicalHeader = block.header;
87
- }
88
-
89
- this.state = 'awaiting-prover';
90
- const { block, aggregationObject, proof } = await this.prover.finaliseBlock();
91
- this.log.info(`Finalised proof for block range`, { fromBlock, toBlock });
91
+ const { block, aggregationObject, proof } = await this.prover.finaliseBlock();
92
+ this.log.info(`Finalised proof for block range`, { fromBlock, toBlock });
92
93
 
93
- this.state = 'publishing-proof';
94
- await this.publisher.submitProof(block.header, block.archive.root, aggregationObject, proof);
95
- this.log.info(`Submitted proof for block range`, { fromBlock, toBlock });
94
+ this.state = 'publishing-proof';
95
+ await this.publisher.submitProof(
96
+ block.header,
97
+ block.archive.root,
98
+ this.prover.getProverId(),
99
+ aggregationObject,
100
+ proof,
101
+ );
102
+ this.log.info(`Submitted proof for block range`, { fromBlock, toBlock });
96
103
 
97
- this.state = 'completed';
104
+ this.state = 'completed';
105
+ } catch (err) {
106
+ this.log.error(`Error running block prover job: ${err}`);
107
+ this.state = 'failed';
108
+ }
98
109
  }
99
110
 
100
111
  private async getBlock(blockNumber: number): Promise<L2Block> {
@@ -116,6 +127,10 @@ export class BlockProvingJob {
116
127
  return txs.map(([_, tx]) => tx!);
117
128
  }
118
129
 
130
+ private getL1ToL2Messages(block: L2Block) {
131
+ return this.l1ToL2MessageSource.getL1ToL2Messages(BigInt(block.number));
132
+ }
133
+
119
134
  private async processTxs(
120
135
  publicProcessor: PublicProcessor,
121
136
  txs: Tx[],
@@ -140,8 +155,8 @@ export class BlockProvingJob {
140
155
 
141
156
  export type BlockProvingJobState =
142
157
  | 'initialized'
143
- | 'started'
144
158
  | 'processing'
145
159
  | 'awaiting-prover'
146
160
  | 'publishing-proof'
147
- | 'completed';
161
+ | 'completed'
162
+ | 'failed';
@@ -1,9 +1,12 @@
1
- import { type L2BlockSource, type ProverClient, type TxProvider } from '@aztec/circuit-types';
1
+ import { type L1ToL2MessageSource, type L2BlockSource, type ProverClient, type TxProvider } from '@aztec/circuit-types';
2
2
  import { createDebugLogger } from '@aztec/foundation/log';
3
3
  import { RunningPromise } from '@aztec/foundation/running-promise';
4
4
  import { type L1Publisher } from '@aztec/sequencer-client';
5
- import { type PublicProcessorFactory } from '@aztec/simulator';
5
+ import { PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator';
6
+ import { type TelemetryClient } from '@aztec/telemetry-client';
7
+ import { type WorldStateSynchronizer } from '@aztec/world-state';
6
8
 
9
+ import { type ContractDataSource } from '../../types/src/contracts/contract_data_source.js';
7
10
  import { BlockProvingJob } from './job/block-proving-job.js';
8
11
 
9
12
  /**
@@ -14,13 +17,18 @@ import { BlockProvingJob } from './job/block-proving-job.js';
14
17
  export class ProverNode {
15
18
  private log = createDebugLogger('aztec:prover-node');
16
19
  private runningPromise: RunningPromise | undefined;
20
+ private latestBlockWeAreProving: number | undefined;
17
21
 
18
22
  constructor(
19
23
  private prover: ProverClient,
20
- private publicProcessorFactory: PublicProcessorFactory,
21
24
  private publisher: L1Publisher,
22
25
  private l2BlockSource: L2BlockSource,
26
+ private l1ToL2MessageSource: L1ToL2MessageSource,
27
+ private contractDataSource: ContractDataSource,
28
+ private worldState: WorldStateSynchronizer,
23
29
  private txProvider: TxProvider,
30
+ private simulator: SimulationProvider,
31
+ private telemetryClient: TelemetryClient,
24
32
  private options: { pollingIntervalMs: number; disableAutomaticProving: boolean } = {
25
33
  pollingIntervalMs: 1_000,
26
34
  disableAutomaticProving: false,
@@ -47,12 +55,12 @@ export class ProverNode {
47
55
  await this.l2BlockSource.stop();
48
56
  this.publisher.interrupt();
49
57
  this.log.info('Stopped ProverNode');
58
+ // TODO(palla/prover-node): Keep a reference to all ongoing ProvingJobs and stop them.
50
59
  }
51
60
 
52
61
  /**
53
62
  * Single iteration of recurring work. This method is called periodically by the running promise.
54
63
  * Checks whether there are new blocks to prove, proves them, and submits them.
55
- * Only proves one block per job and one job at a time (for now).
56
64
  */
57
65
  protected async work() {
58
66
  if (this.options.disableAutomaticProving) {
@@ -64,29 +72,35 @@ export class ProverNode {
64
72
  this.l2BlockSource.getProvenBlockNumber(),
65
73
  ]);
66
74
 
67
- if (latestProvenBlockNumber >= latestBlockNumber) {
68
- this.log.debug(`No new blocks to prove`, { latestBlockNumber, latestProvenBlockNumber });
75
+ // Consider both the latest block we are proving and the last block proven on the chain
76
+ const latestBlockBeingProven = this.latestBlockWeAreProving ?? 0;
77
+ const latestProven = Math.max(latestBlockBeingProven, latestProvenBlockNumber);
78
+ if (latestProven >= latestBlockNumber) {
79
+ this.log.debug(`No new blocks to prove`, { latestBlockNumber, latestProvenBlockNumber, latestBlockBeingProven });
69
80
  return;
70
81
  }
71
82
 
72
- const fromBlock = latestProvenBlockNumber + 1;
83
+ const fromBlock = latestProven + 1;
73
84
  const toBlock = fromBlock; // We only prove one block at a time for now
74
- await this.prove(fromBlock, toBlock);
85
+
86
+ await this.startProof(fromBlock, toBlock);
87
+ this.latestBlockWeAreProving = toBlock;
75
88
  }
76
89
 
77
90
  /**
78
91
  * Creates a proof for a block range. Returns once the proof has been submitted to L1.
79
92
  */
80
- public prove(fromBlock: number, toBlock: number) {
81
- return this.createProvingJob().run(fromBlock, toBlock);
93
+ public async prove(fromBlock: number, toBlock: number) {
94
+ const job = await this.createProvingJob(fromBlock);
95
+ return job.run(fromBlock, toBlock);
82
96
  }
83
97
 
84
98
  /**
85
99
  * Starts a proving process and returns immediately.
86
100
  */
87
- public startProof(fromBlock: number, toBlock: number) {
88
- void this.createProvingJob().run(fromBlock, toBlock);
89
- return Promise.resolve();
101
+ public async startProof(fromBlock: number, toBlock: number) {
102
+ const job = await this.createProvingJob(fromBlock);
103
+ void job.run(fromBlock, toBlock);
90
104
  }
91
105
 
92
106
  /**
@@ -96,12 +110,28 @@ export class ProverNode {
96
110
  return this.prover;
97
111
  }
98
112
 
99
- private createProvingJob() {
113
+ private async createProvingJob(fromBlock: number) {
114
+ if ((await this.worldState.status()).syncedToL2Block >= fromBlock) {
115
+ throw new Error(`Cannot create proving job for block ${fromBlock} as it is behind the current world state`);
116
+ }
117
+
118
+ // Fast forward world state to right before the target block and get a fork
119
+ const db = await this.worldState.syncImmediateAndFork(fromBlock - 1, true);
120
+
121
+ // Create a processor using the forked world state
122
+ const publicProcessorFactory = new PublicProcessorFactory(
123
+ db,
124
+ this.contractDataSource,
125
+ this.simulator,
126
+ this.telemetryClient,
127
+ );
128
+
100
129
  return new BlockProvingJob(
101
- this.prover,
102
- this.publicProcessorFactory,
130
+ this.prover.createBlockProver(db),
131
+ publicProcessorFactory,
103
132
  this.publisher,
104
133
  this.l2BlockSource,
134
+ this.l1ToL2MessageSource,
105
135
  this.txProvider,
106
136
  );
107
137
  }
@@ -1,9 +1,17 @@
1
+ import { type ConfigMappingsType, getConfigFromMappings } from '@aztec/foundation/config';
2
+
1
3
  export type TxProviderConfig = {
2
4
  txProviderNodeUrl: string | undefined;
3
5
  };
4
6
 
7
+ export const txProviderConfigMappings: ConfigMappingsType<TxProviderConfig> = {
8
+ txProviderNodeUrl: {
9
+ env: 'TX_PROVIDER_NODE_URL',
10
+ description: 'The URL of the tx provider node',
11
+ parseEnv: (val: string) => val,
12
+ },
13
+ };
14
+
5
15
  export function getTxProviderConfigFromEnv(): TxProviderConfig {
6
- return {
7
- txProviderNodeUrl: process.env.TX_PROVIDER_NODE_URL ?? process.env.AZTEC_NODE_URL,
8
- };
16
+ return getConfigFromMappings<TxProviderConfig>(txProviderConfigMappings);
9
17
  }