@aztec/prover-client 0.65.0 → 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 +5 -2
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +18 -22
- package/dest/orchestrator/block-proving-state.js +2 -2
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +5 -8
- 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 +34 -37
- package/src/orchestrator/block-proving-state.ts +1 -1
- package/src/orchestrator/orchestrator.ts +4 -9
- 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 -34
- 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 -44
|
@@ -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();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
Body,
|
|
3
3
|
MerkleTreeId,
|
|
4
4
|
type MerkleTreeWriteOperations,
|
|
5
5
|
type ProcessedTx,
|
|
@@ -316,6 +316,7 @@ export function buildHeaderFromCircuitOutputs(
|
|
|
316
316
|
state,
|
|
317
317
|
previousMergeData[0].constants.globalVariables,
|
|
318
318
|
previousMergeData[0].accumulatedFees.add(previousMergeData[1].accumulatedFees),
|
|
319
|
+
previousMergeData[0].accumulatedManaUsed.add(previousMergeData[1].accumulatedManaUsed),
|
|
319
320
|
);
|
|
320
321
|
if (!header.hash().equals(rootRollupOutputs.endBlockHash)) {
|
|
321
322
|
logger?.error(
|
|
@@ -328,8 +329,8 @@ export function buildHeaderFromCircuitOutputs(
|
|
|
328
329
|
return header;
|
|
329
330
|
}
|
|
330
331
|
|
|
331
|
-
export async function
|
|
332
|
-
|
|
332
|
+
export async function buildHeaderAndBodyFromTxs(
|
|
333
|
+
txs: ProcessedTx[],
|
|
333
334
|
globalVariables: GlobalVariables,
|
|
334
335
|
l1ToL2Messages: Fr[],
|
|
335
336
|
db: MerkleTreeReadOperations,
|
|
@@ -345,6 +346,9 @@ export async function buildHeaderFromTxEffects(
|
|
|
345
346
|
|
|
346
347
|
const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
347
348
|
|
|
349
|
+
const nonEmptyTxEffects: TxEffect[] = txs.map(tx => tx.txEffect).filter(txEffect => !txEffect.isEmpty());
|
|
350
|
+
const body = new Body(nonEmptyTxEffects);
|
|
351
|
+
|
|
348
352
|
const outHash = computeUnbalancedMerkleRoot(
|
|
349
353
|
body.txEffects.map(tx => tx.txOutHash()),
|
|
350
354
|
TxEffect.empty().txOutHash(),
|
|
@@ -365,7 +369,11 @@ export async function buildHeaderFromTxEffects(
|
|
|
365
369
|
);
|
|
366
370
|
|
|
367
371
|
const fees = body.txEffects.reduce((acc, tx) => acc.add(tx.transactionFee), Fr.ZERO);
|
|
368
|
-
|
|
372
|
+
const manaUsed = txs.reduce((acc, tx) => acc.add(new Fr(tx.gasUsed.totalGas.l2Gas)), Fr.ZERO);
|
|
373
|
+
|
|
374
|
+
const header = new Header(previousArchive, contentCommitment, stateReference, globalVariables, fees, manaUsed);
|
|
375
|
+
|
|
376
|
+
return { header, body };
|
|
369
377
|
}
|
|
370
378
|
|
|
371
379
|
// Validate that the roots of all local trees match the output of the root circuit simulation
|
|
@@ -484,41 +492,30 @@ async function processPublicDataUpdateRequests(tx: ProcessedTx, db: MerkleTreeWr
|
|
|
484
492
|
({ leafSlot, value }) => new PublicDataTreeLeaf(leafSlot, value),
|
|
485
493
|
);
|
|
486
494
|
|
|
487
|
-
const
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
// TODO(Alvaro) write a specialized function for this? Internally add_or_update_value uses batch insertion anyway
|
|
497
|
-
const { lowLeavesWitnessData, newSubtreeSiblingPath } = await db.batchInsert(
|
|
498
|
-
MerkleTreeId.PUBLIC_DATA_TREE,
|
|
499
|
-
[write.toBuffer()],
|
|
500
|
-
// TODO(#3675) remove oldValue from update requests
|
|
501
|
-
0,
|
|
502
|
-
);
|
|
503
|
-
|
|
504
|
-
if (lowLeavesWitnessData === undefined) {
|
|
505
|
-
throw new Error(`Could not craft public data batch insertion proofs`);
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
const [lowLeafWitness] = lowLeavesWitnessData;
|
|
509
|
-
lowPublicDataWritesPreimages.push(lowLeafWitness.leafPreimage as PublicDataTreeLeafPreimage);
|
|
510
|
-
lowPublicDataWritesMembershipWitnesses.push(
|
|
511
|
-
MembershipWitness.fromBufferArray<typeof PUBLIC_DATA_TREE_HEIGHT>(
|
|
512
|
-
lowLeafWitness.index,
|
|
513
|
-
assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT),
|
|
514
|
-
),
|
|
515
|
-
);
|
|
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
|
+
);
|
|
516
504
|
|
|
517
|
-
|
|
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();
|
|
518
516
|
assertLength(insertionSiblingPath, PUBLIC_DATA_TREE_HEIGHT);
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
}
|
|
517
|
+
return insertionSiblingPath as Tuple<Fr, typeof PUBLIC_DATA_TREE_HEIGHT>;
|
|
518
|
+
});
|
|
522
519
|
|
|
523
520
|
return {
|
|
524
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,10 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Body,
|
|
3
2
|
L2Block,
|
|
4
3
|
MerkleTreeId,
|
|
5
4
|
type ProcessedTx,
|
|
6
5
|
type ServerCircuitProver,
|
|
7
|
-
type TxEffect,
|
|
8
6
|
makeEmptyProcessedTx,
|
|
9
7
|
} from '@aztec/circuit-types';
|
|
10
8
|
import {
|
|
@@ -55,8 +53,8 @@ import { inspect } from 'util';
|
|
|
55
53
|
|
|
56
54
|
import {
|
|
57
55
|
buildBaseRollupHints,
|
|
56
|
+
buildHeaderAndBodyFromTxs,
|
|
58
57
|
buildHeaderFromCircuitOutputs,
|
|
59
|
-
buildHeaderFromTxEffects,
|
|
60
58
|
createBlockMergeRollupInputs,
|
|
61
59
|
createMergeRollupInputs,
|
|
62
60
|
getPreviousRollupDataFromPublicInputs,
|
|
@@ -416,15 +414,12 @@ export class ProvingOrchestrator implements EpochProver {
|
|
|
416
414
|
|
|
417
415
|
private async buildBlock(provingState: BlockProvingState, expectedHeader?: Header) {
|
|
418
416
|
// Collect all new nullifiers, commitments, and contracts from all txs in this block to build body
|
|
419
|
-
const
|
|
420
|
-
.map(txProvingState => txProvingState.processedTx.txEffect)
|
|
421
|
-
.filter(txEffect => !txEffect.isEmpty());
|
|
422
|
-
const body = new Body(nonEmptyTxEffects);
|
|
417
|
+
const txs = provingState!.allTxs.map(a => a.processedTx);
|
|
423
418
|
|
|
424
419
|
// Given we've applied every change from this block, now assemble the block header
|
|
425
420
|
// and update the archive tree, so we're ready to start processing the next block
|
|
426
|
-
const header = await
|
|
427
|
-
|
|
421
|
+
const { header, body } = await buildHeaderAndBodyFromTxs(
|
|
422
|
+
txs,
|
|
428
423
|
provingState.globalVariables,
|
|
429
424
|
provingState.newL1ToL2Messages,
|
|
430
425
|
this.db,
|