@aztec/prover-client 0.65.1 → 0.65.2
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 +4 -10
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +8 -7
- package/dest/index.d.ts +1 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -1
- package/dest/mocks/test_context.js +3 -2
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +10 -18
- package/dest/orchestrator/block-proving-state.js +2 -2
- package/dest/prover-agent/memory-proving-queue.d.ts +10 -8
- package/dest/prover-agent/memory-proving-queue.d.ts.map +1 -1
- package/dest/prover-agent/memory-proving-queue.js +35 -35
- package/dest/prover-agent/prover-agent.d.ts +1 -0
- package/dest/prover-agent/prover-agent.d.ts.map +1 -1
- package/dest/prover-agent/prover-agent.js +12 -9
- package/dest/proving_broker/caching_broker_facade.d.ts +30 -0
- package/dest/proving_broker/caching_broker_facade.d.ts.map +1 -0
- package/dest/proving_broker/caching_broker_facade.js +150 -0
- package/dest/proving_broker/factory.d.ts +4 -0
- package/dest/proving_broker/factory.d.ts.map +1 -0
- package/dest/proving_broker/factory.js +17 -0
- package/dest/proving_broker/index.d.ts +9 -0
- package/dest/proving_broker/index.d.ts.map +1 -0
- package/dest/proving_broker/index.js +9 -0
- package/dest/proving_broker/proof_store.d.ts +46 -0
- package/dest/proving_broker/proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store.js +37 -0
- package/dest/proving_broker/prover_cache/memory.d.ts +9 -0
- package/dest/proving_broker/prover_cache/memory.d.ts.map +1 -0
- package/dest/proving_broker/prover_cache/memory.js +16 -0
- package/dest/proving_broker/proving_agent.d.ts +11 -6
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +48 -20
- package/dest/proving_broker/proving_broker.d.ts +17 -16
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +44 -23
- package/dest/proving_broker/proving_broker_database/memory.d.ts +14 -0
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database/memory.js +35 -0
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +15 -0
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database/persisted.js +35 -0
- package/dest/proving_broker/{proving_job_database.d.ts → proving_broker_database.d.ts} +8 -8
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database.js +2 -0
- package/dest/proving_broker/proving_job_controller.d.ts +13 -8
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +43 -43
- package/dest/proving_broker/rpc.d.ts +11 -0
- package/dest/proving_broker/rpc.d.ts.map +1 -0
- package/dest/proving_broker/rpc.js +44 -0
- package/dest/test/mock_prover.d.ts +15 -1
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +36 -1
- package/dest/tx-prover/factory.d.ts +2 -1
- package/dest/tx-prover/factory.d.ts.map +1 -1
- package/dest/tx-prover/factory.js +3 -3
- package/dest/tx-prover/tx-prover.d.ts +13 -7
- package/dest/tx-prover/tx-prover.d.ts.map +1 -1
- package/dest/tx-prover/tx-prover.js +52 -35
- package/package.json +14 -12
- package/src/config.ts +17 -16
- package/src/index.ts +1 -0
- package/src/mocks/test_context.ts +2 -2
- package/src/orchestrator/block-building-helpers.ts +22 -33
- package/src/orchestrator/block-proving-state.ts +1 -1
- package/src/prover-agent/memory-proving-queue.ts +43 -44
- package/src/prover-agent/prover-agent.ts +16 -20
- package/src/proving_broker/caching_broker_facade.ts +312 -0
- package/src/proving_broker/factory.ts +21 -0
- package/src/proving_broker/index.ts +8 -0
- package/src/proving_broker/proof_store.ts +106 -0
- package/src/proving_broker/prover_cache/memory.ts +20 -0
- package/src/proving_broker/proving_agent.ts +75 -20
- package/src/proving_broker/proving_broker.ts +98 -65
- package/src/proving_broker/proving_broker_database/memory.ts +43 -0
- package/src/proving_broker/proving_broker_database/persisted.ts +45 -0
- package/src/proving_broker/{proving_job_database.ts → proving_broker_database.ts} +7 -12
- package/src/proving_broker/proving_job_controller.ts +54 -46
- package/src/proving_broker/rpc.ts +64 -0
- package/src/test/mock_prover.ts +51 -0
- package/src/tx-prover/factory.ts +7 -2
- package/src/tx-prover/tx-prover.ts +78 -46
- package/dest/proving_broker/proving_broker_interface.d.ts +0 -61
- package/dest/proving_broker/proving_broker_interface.d.ts.map +0 -1
- package/dest/proving_broker/proving_broker_interface.js +0 -2
- package/dest/proving_broker/proving_job_database/memory.d.ts +0 -14
- package/dest/proving_broker/proving_job_database/memory.d.ts.map +0 -1
- package/dest/proving_broker/proving_job_database/memory.js +0 -35
- package/dest/proving_broker/proving_job_database/persisted.d.ts +0 -15
- package/dest/proving_broker/proving_job_database/persisted.d.ts.map +0 -1
- package/dest/proving_broker/proving_job_database/persisted.js +0 -35
- package/dest/proving_broker/proving_job_database.d.ts.map +0 -1
- package/dest/proving_broker/proving_job_database.js +0 -2
- package/src/proving_broker/proving_broker_interface.ts +0 -74
- package/src/proving_broker/proving_job_database/memory.ts +0 -43
- package/src/proving_broker/proving_job_database/persisted.ts +0 -45
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAA2C,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAIxC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOvD;;;GAGG;AACH,qBAAa,QAAS,YAAW,kBAAkB;IAO/C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,GAAG;IAVb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B,OAAO;IAYA,iBAAiB,CAAC,EAAE,EAAE,yBAAyB,EAAE,KAAK,GAAE,WAAuC,GAAG,WAAW;IAS7G,WAAW,IAAI,EAAE;IAIlB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5E;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;OAEG;IACU,IAAI;IAQjB;;;;;;OAMG;WACiB,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe;IAMjG,mBAAmB,IAAI,kBAAkB;YAQlC,oBAAoB;YAmBpB,UAAU;CAGzB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,GAAG,UAAU,GAAG,QAAQ,EAClD,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAU9B"}
|
|
@@ -1,37 +1,43 @@
|
|
|
1
1
|
import { BBNativeRollupProver, TestCircuitProver } from '@aztec/bb-prover';
|
|
2
2
|
import { Fr } from '@aztec/circuits.js';
|
|
3
|
+
import { times } from '@aztec/foundation/collection';
|
|
4
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
5
|
import { NativeACVMSimulator } from '@aztec/simulator';
|
|
6
|
+
import { join } from 'path';
|
|
4
7
|
import { ProvingOrchestrator } from '../orchestrator/orchestrator.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
8
|
+
import { CachingBrokerFacade } from '../proving_broker/caching_broker_facade.js';
|
|
9
|
+
import { InlineProofStore } from '../proving_broker/proof_store.js';
|
|
10
|
+
import { InMemoryProverCache } from '../proving_broker/prover_cache/memory.js';
|
|
11
|
+
import { ProvingAgent } from '../proving_broker/proving_agent.js';
|
|
7
12
|
/**
|
|
8
13
|
* A prover factory.
|
|
9
14
|
* TODO(palla/prover-node): Rename this class
|
|
10
15
|
*/
|
|
11
16
|
export class TxProver {
|
|
12
|
-
constructor(config, telemetry,
|
|
17
|
+
constructor(config, telemetry, orchestratorClient, agentClient, log = createDebugLogger('aztec:prover-client:tx-prover')) {
|
|
13
18
|
this.config = config;
|
|
14
19
|
this.telemetry = telemetry;
|
|
15
|
-
this.
|
|
20
|
+
this.orchestratorClient = orchestratorClient;
|
|
21
|
+
this.agentClient = agentClient;
|
|
22
|
+
this.log = log;
|
|
16
23
|
this.running = false;
|
|
24
|
+
this.agents = [];
|
|
17
25
|
// TODO(palla/prover-node): Cache the paddingTx here, and not in each proving orchestrator,
|
|
18
26
|
// so it can be reused across multiple ones and not recomputed every time.
|
|
19
|
-
this.
|
|
27
|
+
this.cacheDir = this.config.cacheDir ? join(this.config.cacheDir, `tx_prover_${this.config.proverId}`) : undefined;
|
|
20
28
|
}
|
|
21
|
-
createEpochProver(db) {
|
|
22
|
-
return new ProvingOrchestrator(db, this.
|
|
29
|
+
createEpochProver(db, cache = new InMemoryProverCache()) {
|
|
30
|
+
return new ProvingOrchestrator(db, new CachingBrokerFacade(this.orchestratorClient, cache), this.telemetry, this.config.proverId);
|
|
23
31
|
}
|
|
24
32
|
getProverId() {
|
|
25
33
|
return this.config.proverId ?? Fr.ZERO;
|
|
26
34
|
}
|
|
27
35
|
async updateProverConfig(config) {
|
|
28
36
|
const newConfig = { ...this.config, ...config };
|
|
29
|
-
if (newConfig.realProofs !== this.config.realProofs
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
if (this.config.proverAgentConcurrency !== newConfig.proverAgentConcurrency) {
|
|
34
|
-
await this.agent?.setMaxConcurrency(newConfig.proverAgentConcurrency);
|
|
37
|
+
if (newConfig.realProofs !== this.config.realProofs ||
|
|
38
|
+
newConfig.proverAgentCount !== this.config.proverAgentCount) {
|
|
39
|
+
await this.stopAgents();
|
|
40
|
+
await this.createAndStartAgents();
|
|
35
41
|
}
|
|
36
42
|
if (!this.config.realProofs && newConfig.realProofs) {
|
|
37
43
|
// TODO(palla/prover-node): Reset padding tx here once we cache it at this class
|
|
@@ -41,14 +47,12 @@ export class TxProver {
|
|
|
41
47
|
/**
|
|
42
48
|
* Starts the prover instance
|
|
43
49
|
*/
|
|
44
|
-
start() {
|
|
50
|
+
async start() {
|
|
45
51
|
if (this.running) {
|
|
46
52
|
return Promise.resolve();
|
|
47
53
|
}
|
|
48
54
|
this.running = true;
|
|
49
|
-
this.
|
|
50
|
-
this.agent?.start(this.queue);
|
|
51
|
-
return Promise.resolve();
|
|
55
|
+
await this.createAndStartAgents();
|
|
52
56
|
}
|
|
53
57
|
/**
|
|
54
58
|
* Stops the prover instance
|
|
@@ -58,9 +62,7 @@ export class TxProver {
|
|
|
58
62
|
return;
|
|
59
63
|
}
|
|
60
64
|
this.running = false;
|
|
61
|
-
|
|
62
|
-
await this.agent?.stop();
|
|
63
|
-
await this.queue.stop();
|
|
65
|
+
await this.stopAgents();
|
|
64
66
|
}
|
|
65
67
|
/**
|
|
66
68
|
* Creates a new prover client and starts it
|
|
@@ -69,25 +71,40 @@ export class TxProver {
|
|
|
69
71
|
* @param worldStateSynchronizer - An instance of the world state
|
|
70
72
|
* @returns An instance of the prover, constructed and started.
|
|
71
73
|
*/
|
|
72
|
-
static async new(config, telemetry) {
|
|
73
|
-
const
|
|
74
|
-
? new ProverAgent(await TxProver.buildCircuitProver(config, telemetry), config.proverAgentConcurrency, config.proverAgentPollInterval)
|
|
75
|
-
: undefined;
|
|
76
|
-
const prover = new TxProver(config, telemetry, agent);
|
|
74
|
+
static async new(config, broker, telemetry) {
|
|
75
|
+
const prover = new TxProver(config, telemetry, broker, broker);
|
|
77
76
|
await prover.start();
|
|
78
77
|
return prover;
|
|
79
78
|
}
|
|
80
|
-
|
|
81
|
-
if (
|
|
82
|
-
|
|
79
|
+
getProvingJobSource() {
|
|
80
|
+
if (!this.agentClient) {
|
|
81
|
+
throw new Error('Agent client not provided');
|
|
83
82
|
}
|
|
84
|
-
|
|
85
|
-
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
86
|
-
: undefined;
|
|
87
|
-
return new TestCircuitProver(telemetry, simulationProvider, config);
|
|
83
|
+
return this.agentClient;
|
|
88
84
|
}
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
async createAndStartAgents() {
|
|
86
|
+
if (this.agents.length > 0) {
|
|
87
|
+
throw new Error('Agents already started');
|
|
88
|
+
}
|
|
89
|
+
if (!this.agentClient) {
|
|
90
|
+
throw new Error('Agent client not provided');
|
|
91
|
+
}
|
|
92
|
+
const proofStore = new InlineProofStore();
|
|
93
|
+
const prover = await buildServerCircuitProver(this.config, this.telemetry);
|
|
94
|
+
this.agents = times(this.config.proverAgentCount, () => new ProvingAgent(this.agentClient, proofStore, prover, [], this.config.proverAgentPollIntervalMs));
|
|
95
|
+
await Promise.all(this.agents.map(agent => agent.start()));
|
|
96
|
+
}
|
|
97
|
+
async stopAgents() {
|
|
98
|
+
await Promise.all(this.agents.map(agent => agent.stop()));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export function buildServerCircuitProver(config, telemetry) {
|
|
102
|
+
if (config.realProofs) {
|
|
103
|
+
return BBNativeRollupProver.new(config, telemetry);
|
|
91
104
|
}
|
|
105
|
+
const simulationProvider = config.acvmBinaryPath
|
|
106
|
+
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
107
|
+
: undefined;
|
|
108
|
+
return Promise.resolve(new TestCircuitProver(telemetry, simulationProvider, config));
|
|
92
109
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3Zlci90eC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQyxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBWTNHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFNbkIsWUFDVSxNQUEwQixFQUMxQixTQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsV0FBZ0MsRUFDaEMsTUFBTSxpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBQztRQUp4RCxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFxRDtRQVYxRCxZQUFPLEdBQUcsS0FB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
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-client",
|
|
3
|
-
"version": "0.65.
|
|
3
|
+
"version": "0.65.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
+
"./broker": "./dest/proving_broker/index.js",
|
|
7
8
|
"./prover-agent": "./dest/prover-agent/index.js",
|
|
8
9
|
"./orchestrator": "./dest/orchestrator/index.js",
|
|
9
10
|
"./helpers": "./dest/orchestrator/block-building-helpers.js"
|
|
@@ -64,21 +65,22 @@
|
|
|
64
65
|
]
|
|
65
66
|
},
|
|
66
67
|
"dependencies": {
|
|
67
|
-
"@aztec/bb-prover": "0.65.
|
|
68
|
-
"@aztec/circuit-types": "0.65.
|
|
69
|
-
"@aztec/circuits.js": "0.65.
|
|
70
|
-
"@aztec/foundation": "0.65.
|
|
71
|
-
"@aztec/kv-store": "0.65.
|
|
72
|
-
"@aztec/noir-protocol-circuits-types": "0.65.
|
|
73
|
-
"@aztec/protocol-contracts": "0.65.
|
|
74
|
-
"@aztec/simulator": "0.65.
|
|
75
|
-
"@aztec/telemetry-client": "0.65.
|
|
76
|
-
"@aztec/world-state": "0.65.
|
|
68
|
+
"@aztec/bb-prover": "0.65.2",
|
|
69
|
+
"@aztec/circuit-types": "0.65.2",
|
|
70
|
+
"@aztec/circuits.js": "0.65.2",
|
|
71
|
+
"@aztec/foundation": "0.65.2",
|
|
72
|
+
"@aztec/kv-store": "0.65.2",
|
|
73
|
+
"@aztec/noir-protocol-circuits-types": "0.65.2",
|
|
74
|
+
"@aztec/protocol-contracts": "0.65.2",
|
|
75
|
+
"@aztec/simulator": "0.65.2",
|
|
76
|
+
"@aztec/telemetry-client": "0.65.2",
|
|
77
|
+
"@aztec/world-state": "0.65.2",
|
|
77
78
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
78
79
|
"commander": "^12.1.0",
|
|
79
80
|
"lodash.chunk": "^4.2.0",
|
|
80
81
|
"source-map-support": "^0.5.21",
|
|
81
|
-
"tslib": "^2.4.0"
|
|
82
|
+
"tslib": "^2.4.0",
|
|
83
|
+
"zod": "^3.23.8"
|
|
82
84
|
},
|
|
83
85
|
"devDependencies": {
|
|
84
86
|
"@jest/globals": "^29.5.0",
|
package/src/config.ts
CHANGED
|
@@ -1,25 +1,20 @@
|
|
|
1
|
-
import { type BBConfig } from '@aztec/bb-prover';
|
|
2
|
-
import {
|
|
1
|
+
import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover';
|
|
2
|
+
import {
|
|
3
|
+
type ProverAgentConfig,
|
|
4
|
+
type ProverBrokerConfig,
|
|
5
|
+
type ProverConfig,
|
|
6
|
+
proverAgentConfigMappings,
|
|
7
|
+
proverBrokerConfigMappings,
|
|
8
|
+
proverConfigMappings,
|
|
9
|
+
} from '@aztec/circuit-types';
|
|
3
10
|
import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
|
|
4
11
|
|
|
5
12
|
/**
|
|
6
13
|
* The prover configuration.
|
|
7
14
|
*/
|
|
8
|
-
export type ProverClientConfig = ProverConfig &
|
|
9
|
-
BBConfig & {
|
|
10
|
-
/** The URL to the Aztec prover node to take proving jobs from */
|
|
11
|
-
proverJobSourceUrl?: string;
|
|
12
|
-
/** The working directory to use for simulation/proving */
|
|
13
|
-
acvmWorkingDirectory: string;
|
|
14
|
-
/** The path to the ACVM binary */
|
|
15
|
-
acvmBinaryPath: string;
|
|
16
|
-
};
|
|
15
|
+
export type ProverClientConfig = ProverConfig & ProverAgentConfig & ProverBrokerConfig & BBConfig & ACVMConfig;
|
|
17
16
|
|
|
18
|
-
export const
|
|
19
|
-
proverJobSourceUrl: {
|
|
20
|
-
env: 'PROVER_JOB_SOURCE_URL',
|
|
21
|
-
description: 'The URL to the Aztec prover node to take proving jobs from',
|
|
22
|
-
},
|
|
17
|
+
export const bbConfigMappings: ConfigMappingsType<BBConfig & ACVMConfig> = {
|
|
23
18
|
acvmWorkingDirectory: {
|
|
24
19
|
env: 'ACVM_WORKING_DIRECTORY',
|
|
25
20
|
description: 'The working directory to use for simulation/proving',
|
|
@@ -41,7 +36,13 @@ export const proverClientConfigMappings: ConfigMappingsType<ProverClientConfig>
|
|
|
41
36
|
description: 'Whether to skip cleanup of bb temporary files',
|
|
42
37
|
...booleanConfigHelper(false),
|
|
43
38
|
},
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const proverClientConfigMappings: ConfigMappingsType<ProverClientConfig> = {
|
|
42
|
+
...bbConfigMappings,
|
|
44
43
|
...proverConfigMappings,
|
|
44
|
+
...proverAgentConfigMappings,
|
|
45
|
+
...proverBrokerConfigMappings,
|
|
45
46
|
};
|
|
46
47
|
|
|
47
48
|
/**
|
package/src/index.ts
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
type TxValidator,
|
|
10
10
|
} from '@aztec/circuit-types';
|
|
11
11
|
import { type Gas, type GlobalVariables, Header } from '@aztec/circuits.js';
|
|
12
|
-
import {
|
|
12
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
13
13
|
import { type DebugLogger } from '@aztec/foundation/log';
|
|
14
14
|
import { openTmpStore } from '@aztec/kv-store/utils';
|
|
15
15
|
import {
|
|
@@ -118,7 +118,7 @@ export class TestContext {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
const queue = new MemoryProvingQueue(telemetry);
|
|
121
|
-
const orchestrator = new ProvingOrchestrator(proverDb, queue, telemetry);
|
|
121
|
+
const orchestrator = new ProvingOrchestrator(proverDb, queue, telemetry, Fr.ZERO);
|
|
122
122
|
const agent = new ProverAgent(localProver, proverCount);
|
|
123
123
|
|
|
124
124
|
queue.start();
|
|
@@ -492,41 +492,30 @@ async function processPublicDataUpdateRequests(tx: ProcessedTx, db: MerkleTreeWr
|
|
|
492
492
|
({ leafSlot, value }) => new PublicDataTreeLeaf(leafSlot, value),
|
|
493
493
|
);
|
|
494
494
|
|
|
495
|
-
const
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
// TODO(Alvaro) write a specialized function for this? Internally add_or_update_value uses batch insertion anyway
|
|
505
|
-
const { lowLeavesWitnessData, newSubtreeSiblingPath } = await db.batchInsert(
|
|
506
|
-
MerkleTreeId.PUBLIC_DATA_TREE,
|
|
507
|
-
[write.toBuffer()],
|
|
508
|
-
// TODO(#3675) remove oldValue from update requests
|
|
509
|
-
0,
|
|
510
|
-
);
|
|
511
|
-
|
|
512
|
-
if (lowLeavesWitnessData === undefined) {
|
|
513
|
-
throw new Error(`Could not craft public data batch insertion proofs`);
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
const [lowLeafWitness] = lowLeavesWitnessData;
|
|
517
|
-
lowPublicDataWritesPreimages.push(lowLeafWitness.leafPreimage as PublicDataTreeLeafPreimage);
|
|
518
|
-
lowPublicDataWritesMembershipWitnesses.push(
|
|
519
|
-
MembershipWitness.fromBufferArray<typeof PUBLIC_DATA_TREE_HEIGHT>(
|
|
520
|
-
lowLeafWitness.index,
|
|
521
|
-
assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT),
|
|
522
|
-
),
|
|
523
|
-
);
|
|
495
|
+
const { lowLeavesWitnessData, insertionWitnessData } = await db.sequentialInsert(
|
|
496
|
+
MerkleTreeId.PUBLIC_DATA_TREE,
|
|
497
|
+
allPublicDataWrites.map(write => {
|
|
498
|
+
if (write.isEmpty()) {
|
|
499
|
+
throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}`);
|
|
500
|
+
}
|
|
501
|
+
return write.toBuffer();
|
|
502
|
+
}),
|
|
503
|
+
);
|
|
524
504
|
|
|
525
|
-
|
|
505
|
+
const lowPublicDataWritesPreimages = lowLeavesWitnessData.map(
|
|
506
|
+
lowLeafWitness => lowLeafWitness.leafPreimage as PublicDataTreeLeafPreimage,
|
|
507
|
+
);
|
|
508
|
+
const lowPublicDataWritesMembershipWitnesses = lowLeavesWitnessData.map(lowLeafWitness =>
|
|
509
|
+
MembershipWitness.fromBufferArray<typeof PUBLIC_DATA_TREE_HEIGHT>(
|
|
510
|
+
lowLeafWitness.index,
|
|
511
|
+
assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT),
|
|
512
|
+
),
|
|
513
|
+
);
|
|
514
|
+
const publicDataWritesSiblingPaths = insertionWitnessData.map(w => {
|
|
515
|
+
const insertionSiblingPath = w.siblingPath.toFields();
|
|
526
516
|
assertLength(insertionSiblingPath, PUBLIC_DATA_TREE_HEIGHT);
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
}
|
|
517
|
+
return insertionSiblingPath as Tuple<Fr, typeof PUBLIC_DATA_TREE_HEIGHT>;
|
|
518
|
+
});
|
|
530
519
|
|
|
531
520
|
return {
|
|
532
521
|
lowPublicDataWritesPreimages,
|
|
@@ -131,7 +131,7 @@ export class BlockProvingState {
|
|
|
131
131
|
|
|
132
132
|
/** Returns the block number as an epoch number. Used for prioritizing proof requests. */
|
|
133
133
|
public get epochNumber(): number {
|
|
134
|
-
return this.
|
|
134
|
+
return this.parentEpoch.epochNumber;
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type ProofAndVerificationKey,
|
|
3
3
|
type ProvingJob,
|
|
4
|
+
type ProvingJobInputsMap,
|
|
4
5
|
type ProvingJobSource,
|
|
5
|
-
type ProvingRequest,
|
|
6
6
|
type ProvingRequestResultFor,
|
|
7
7
|
ProvingRequestType,
|
|
8
8
|
type PublicInputsAndRecursiveProof,
|
|
@@ -35,13 +35,13 @@ import { AbortError, TimeoutError } from '@aztec/foundation/error';
|
|
|
35
35
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
36
36
|
import { type PromiseWithResolvers, RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
37
37
|
import { PriorityMemoryQueue } from '@aztec/foundation/queue';
|
|
38
|
-
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
39
38
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
40
39
|
|
|
40
|
+
import { InlineProofStore, type ProofStore } from '../proving_broker/proof_store.js';
|
|
41
41
|
import { ProvingQueueMetrics } from './queue_metrics.js';
|
|
42
42
|
|
|
43
|
-
type ProvingJobWithResolvers<T extends
|
|
44
|
-
PromiseWithResolvers<ProvingRequestResultFor<T
|
|
43
|
+
type ProvingJobWithResolvers<T extends ProvingRequestType = ProvingRequestType> = ProvingJob &
|
|
44
|
+
PromiseWithResolvers<ProvingRequestResultFor<T>> & {
|
|
45
45
|
signal?: AbortSignal;
|
|
46
46
|
epochNumber?: number;
|
|
47
47
|
attempts: number;
|
|
@@ -62,9 +62,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
62
62
|
(a, b) => (a.epochNumber ?? 0) - (b.epochNumber ?? 0),
|
|
63
63
|
);
|
|
64
64
|
private jobsInProgress = new Map<string, ProvingJobWithResolvers>();
|
|
65
|
-
|
|
66
65
|
private runningPromise: RunningPromise;
|
|
67
|
-
|
|
68
66
|
private metrics: ProvingQueueMetrics;
|
|
69
67
|
|
|
70
68
|
constructor(
|
|
@@ -75,6 +73,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
75
73
|
pollingIntervalMs = 1000,
|
|
76
74
|
private generateId = defaultIdGenerator,
|
|
77
75
|
private timeSource = defaultTimeSource,
|
|
76
|
+
private proofStore: ProofStore = new InlineProofStore(),
|
|
78
77
|
) {
|
|
79
78
|
this.metrics = new ProvingQueueMetrics(client, 'MemoryProvingQueue');
|
|
80
79
|
this.runningPromise = new RunningPromise(this.poll, pollingIntervalMs);
|
|
@@ -100,7 +99,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
100
99
|
this.log.info('Proving queue stopped');
|
|
101
100
|
}
|
|
102
101
|
|
|
103
|
-
public async getProvingJob({ timeoutSec = 1 } = {}): Promise<ProvingJob
|
|
102
|
+
public async getProvingJob({ timeoutSec = 1 } = {}): Promise<ProvingJob | undefined> {
|
|
104
103
|
if (!this.runningPromise.isRunning()) {
|
|
105
104
|
throw new Error('Proving queue is not running. Start the queue before getting jobs.');
|
|
106
105
|
}
|
|
@@ -119,7 +118,8 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
119
118
|
this.jobsInProgress.set(job.id, job);
|
|
120
119
|
return {
|
|
121
120
|
id: job.id,
|
|
122
|
-
|
|
121
|
+
type: job.type,
|
|
122
|
+
inputsUri: job.inputsUri,
|
|
123
123
|
};
|
|
124
124
|
} catch (err) {
|
|
125
125
|
if (err instanceof TimeoutError) {
|
|
@@ -167,20 +167,18 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
// every job should be retried with the exception of the public VM since its in development and can fail
|
|
170
|
-
if (job.attempts < MAX_RETRIES && job.
|
|
170
|
+
if (job.attempts < MAX_RETRIES && job.type !== ProvingRequestType.PUBLIC_VM) {
|
|
171
171
|
job.attempts++;
|
|
172
172
|
this.log.warn(
|
|
173
|
-
`Job id=${job.id} type=${ProvingRequestType[job.
|
|
173
|
+
`Job id=${job.id} type=${ProvingRequestType[job.type]} failed with error: ${reason}. Retry ${
|
|
174
174
|
job.attempts
|
|
175
175
|
}/${MAX_RETRIES}`,
|
|
176
176
|
);
|
|
177
177
|
this.queue.put(job);
|
|
178
178
|
} else {
|
|
179
179
|
const logFn =
|
|
180
|
-
job.
|
|
181
|
-
|
|
182
|
-
: this.log.error;
|
|
183
|
-
logFn(`Job id=${job.id} type=${ProvingRequestType[job.request.type]} failed with error: ${reason}`);
|
|
180
|
+
job.type === ProvingRequestType.PUBLIC_VM && !process.env.AVM_PROVING_STRICT ? this.log.warn : this.log.error;
|
|
181
|
+
logFn(`Job id=${job.id} type=${ProvingRequestType[job.type]} failed with error: ${reason}`);
|
|
184
182
|
job.reject(new Error(reason));
|
|
185
183
|
}
|
|
186
184
|
return Promise.resolve();
|
|
@@ -214,7 +212,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
214
212
|
}
|
|
215
213
|
|
|
216
214
|
if (job.heartbeat + this.jobTimeoutMs < now) {
|
|
217
|
-
this.log.warn(`Job ${job.id} type=${ProvingRequestType[job.
|
|
215
|
+
this.log.warn(`Job ${job.id} type=${ProvingRequestType[job.type]} has timed out`);
|
|
218
216
|
|
|
219
217
|
this.jobsInProgress.delete(job.id);
|
|
220
218
|
job.heartbeat = 0;
|
|
@@ -223,19 +221,23 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
223
221
|
}
|
|
224
222
|
};
|
|
225
223
|
|
|
226
|
-
private enqueue<T extends
|
|
227
|
-
|
|
224
|
+
private async enqueue<T extends ProvingRequestType>(
|
|
225
|
+
type: T,
|
|
226
|
+
inputs: ProvingJobInputsMap[T],
|
|
228
227
|
signal?: AbortSignal,
|
|
229
228
|
epochNumber?: number,
|
|
230
|
-
): Promise<ProvingRequestResultFor<T
|
|
229
|
+
): Promise<ProvingRequestResultFor<T>['result']> {
|
|
231
230
|
if (!this.runningPromise.isRunning()) {
|
|
232
231
|
return Promise.reject(new Error('Proving queue is not running.'));
|
|
233
232
|
}
|
|
234
233
|
|
|
235
|
-
const { promise, resolve, reject } = promiseWithResolvers<ProvingRequestResultFor<T
|
|
234
|
+
const { promise, resolve, reject } = promiseWithResolvers<ProvingRequestResultFor<T>>();
|
|
235
|
+
const id = this.generateId();
|
|
236
|
+
const inputsUri = await this.proofStore.saveProofInput(id, type, inputs);
|
|
236
237
|
const item: ProvingJobWithResolvers<T> = {
|
|
237
|
-
id
|
|
238
|
-
|
|
238
|
+
id,
|
|
239
|
+
type,
|
|
240
|
+
inputsUri,
|
|
239
241
|
signal,
|
|
240
242
|
promise,
|
|
241
243
|
resolve,
|
|
@@ -250,16 +252,13 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
250
252
|
}
|
|
251
253
|
|
|
252
254
|
this.log.debug(
|
|
253
|
-
`Adding id=${item.id} type=${ProvingRequestType[
|
|
255
|
+
`Adding id=${item.id} type=${ProvingRequestType[type]} proving job to queue depth=${this.queue.length()}`,
|
|
254
256
|
);
|
|
255
|
-
|
|
256
|
-
if (!this.queue.put(item as any)) {
|
|
257
|
+
|
|
258
|
+
if (!this.queue.put(item as ProvingJobWithResolvers<any>)) {
|
|
257
259
|
throw new Error();
|
|
258
260
|
}
|
|
259
261
|
|
|
260
|
-
const byteSize = serializeToBuffer(item.request.inputs).length;
|
|
261
|
-
this.metrics.recordNewJob(item.request.type, byteSize);
|
|
262
|
-
|
|
263
262
|
return promise.then(({ result }) => result);
|
|
264
263
|
}
|
|
265
264
|
|
|
@@ -268,7 +267,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
268
267
|
signal?: AbortSignal,
|
|
269
268
|
epochNumber?: number,
|
|
270
269
|
): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>> {
|
|
271
|
-
return this.enqueue(
|
|
270
|
+
return this.enqueue(ProvingRequestType.PRIVATE_KERNEL_EMPTY, inputs, signal, epochNumber);
|
|
272
271
|
}
|
|
273
272
|
|
|
274
273
|
getTubeProof(
|
|
@@ -276,7 +275,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
276
275
|
signal?: AbortSignal,
|
|
277
276
|
epochNumber?: number,
|
|
278
277
|
): Promise<ProofAndVerificationKey<typeof RECURSIVE_PROOF_LENGTH>> {
|
|
279
|
-
return this.enqueue(
|
|
278
|
+
return this.enqueue(ProvingRequestType.TUBE_PROOF, inputs, signal, epochNumber);
|
|
280
279
|
}
|
|
281
280
|
|
|
282
281
|
/**
|
|
@@ -288,7 +287,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
288
287
|
signal?: AbortSignal,
|
|
289
288
|
epochNumber?: number,
|
|
290
289
|
): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
|
|
291
|
-
return this.enqueue(
|
|
290
|
+
return this.enqueue(ProvingRequestType.BASE_PARITY, inputs, signal, epochNumber);
|
|
292
291
|
}
|
|
293
292
|
|
|
294
293
|
/**
|
|
@@ -300,7 +299,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
300
299
|
signal?: AbortSignal,
|
|
301
300
|
epochNumber?: number,
|
|
302
301
|
): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
|
|
303
|
-
return this.enqueue(
|
|
302
|
+
return this.enqueue(ProvingRequestType.ROOT_PARITY, inputs, signal, epochNumber);
|
|
304
303
|
}
|
|
305
304
|
|
|
306
305
|
getPrivateBaseRollupProof(
|
|
@@ -308,7 +307,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
308
307
|
signal?: AbortSignal,
|
|
309
308
|
epochNumber?: number,
|
|
310
309
|
): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>> {
|
|
311
|
-
return this.enqueue(
|
|
310
|
+
return this.enqueue(ProvingRequestType.PRIVATE_BASE_ROLLUP, inputs, signal, epochNumber);
|
|
312
311
|
}
|
|
313
312
|
|
|
314
313
|
getPublicBaseRollupProof(
|
|
@@ -316,7 +315,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
316
315
|
signal?: AbortSignal,
|
|
317
316
|
epochNumber?: number,
|
|
318
317
|
): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>> {
|
|
319
|
-
return this.enqueue(
|
|
318
|
+
return this.enqueue(ProvingRequestType.PUBLIC_BASE_ROLLUP, inputs, signal, epochNumber);
|
|
320
319
|
}
|
|
321
320
|
|
|
322
321
|
/**
|
|
@@ -324,11 +323,11 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
324
323
|
* @param input - Input to the circuit.
|
|
325
324
|
*/
|
|
326
325
|
getMergeRollupProof(
|
|
327
|
-
|
|
326
|
+
inputs: MergeRollupInputs,
|
|
328
327
|
signal?: AbortSignal,
|
|
329
328
|
epochNumber?: number,
|
|
330
329
|
): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs>> {
|
|
331
|
-
return this.enqueue(
|
|
330
|
+
return this.enqueue(ProvingRequestType.MERGE_ROLLUP, inputs, signal, epochNumber);
|
|
332
331
|
}
|
|
333
332
|
|
|
334
333
|
/**
|
|
@@ -336,19 +335,19 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
336
335
|
* @param input - Input to the circuit.
|
|
337
336
|
*/
|
|
338
337
|
getBlockRootRollupProof(
|
|
339
|
-
|
|
338
|
+
inputs: BlockRootRollupInputs,
|
|
340
339
|
signal?: AbortSignal,
|
|
341
340
|
epochNumber?: number,
|
|
342
341
|
): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
|
|
343
|
-
return this.enqueue(
|
|
342
|
+
return this.enqueue(ProvingRequestType.BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
|
|
344
343
|
}
|
|
345
344
|
|
|
346
345
|
getEmptyBlockRootRollupProof(
|
|
347
|
-
|
|
346
|
+
inputs: EmptyBlockRootRollupInputs,
|
|
348
347
|
signal?: AbortSignal,
|
|
349
348
|
epochNumber?: number,
|
|
350
349
|
): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
|
|
351
|
-
return this.enqueue(
|
|
350
|
+
return this.enqueue(ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP, inputs, signal, epochNumber);
|
|
352
351
|
}
|
|
353
352
|
|
|
354
353
|
/**
|
|
@@ -356,11 +355,11 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
356
355
|
* @param input - Input to the circuit.
|
|
357
356
|
*/
|
|
358
357
|
getBlockMergeRollupProof(
|
|
359
|
-
|
|
358
|
+
inputs: BlockMergeRollupInputs,
|
|
360
359
|
signal?: AbortSignal,
|
|
361
360
|
epochNumber?: number,
|
|
362
361
|
): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
|
|
363
|
-
return this.enqueue(
|
|
362
|
+
return this.enqueue(ProvingRequestType.BLOCK_MERGE_ROLLUP, inputs, signal, epochNumber);
|
|
364
363
|
}
|
|
365
364
|
|
|
366
365
|
/**
|
|
@@ -368,11 +367,11 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
368
367
|
* @param input - Input to the circuit.
|
|
369
368
|
*/
|
|
370
369
|
getRootRollupProof(
|
|
371
|
-
|
|
370
|
+
inputs: RootRollupInputs,
|
|
372
371
|
signal?: AbortSignal,
|
|
373
372
|
epochNumber?: number,
|
|
374
373
|
): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs>> {
|
|
375
|
-
return this.enqueue(
|
|
374
|
+
return this.enqueue(ProvingRequestType.ROOT_ROLLUP, inputs, signal, epochNumber);
|
|
376
375
|
}
|
|
377
376
|
|
|
378
377
|
/**
|
|
@@ -383,7 +382,7 @@ export class MemoryProvingQueue implements ServerCircuitProver, ProvingJobSource
|
|
|
383
382
|
signal?: AbortSignal,
|
|
384
383
|
epochNumber?: number,
|
|
385
384
|
): Promise<ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>> {
|
|
386
|
-
return this.enqueue(
|
|
385
|
+
return this.enqueue(ProvingRequestType.PUBLIC_VM, inputs, signal, epochNumber);
|
|
387
386
|
}
|
|
388
387
|
|
|
389
388
|
/**
|