@aztec-labs/prover-client 6.0.0-nightly.20260829
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/README.md +1 -0
- package/dest/config.d.ts +17 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +63 -0
- package/dest/index.d.ts +4 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +2 -0
- package/dest/light/index.d.ts +2 -0
- package/dest/light/index.d.ts.map +1 -0
- package/dest/light/index.js +1 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts +58 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
- package/dest/light/lightweight_checkpoint_builder.js +243 -0
- package/dest/mocks/fixtures.d.ts +20 -0
- package/dest/mocks/fixtures.d.ts.map +1 -0
- package/dest/mocks/fixtures.js +96 -0
- package/dest/mocks/test_context.d.ts +93 -0
- package/dest/mocks/test_context.d.ts.map +1 -0
- package/dest/mocks/test_context.js +354 -0
- package/dest/orchestrator/block-building-helpers.d.ts +67 -0
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -0
- package/dest/orchestrator/block-building-helpers.js +274 -0
- package/dest/orchestrator/block-proving-state.d.ts +107 -0
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/block-proving-state.js +339 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts +67 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-proving-state.js +175 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts +169 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.js +1047 -0
- package/dest/orchestrator/chonk-cache.d.ts +39 -0
- package/dest/orchestrator/chonk-cache.d.ts.map +1 -0
- package/dest/orchestrator/chonk-cache.js +80 -0
- package/dest/orchestrator/index.d.ts +4 -0
- package/dest/orchestrator/index.d.ts.map +1 -0
- package/dest/orchestrator/index.js +3 -0
- package/dest/orchestrator/orchestrator_metrics.d.ts +8 -0
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -0
- package/dest/orchestrator/orchestrator_metrics.js +13 -0
- package/dest/orchestrator/proving-scheduler.d.ts +81 -0
- package/dest/orchestrator/proving-scheduler.d.ts.map +1 -0
- package/dest/orchestrator/proving-scheduler.js +120 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts +89 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-orchestrator.js +233 -0
- package/dest/orchestrator/top-tree-proving-state.d.ts +61 -0
- package/dest/orchestrator/top-tree-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-proving-state.js +185 -0
- package/dest/orchestrator/tx-proving-state.d.ts +37 -0
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/tx-proving-state.js +77 -0
- package/dest/prover-client/factory.d.ts +6 -0
- package/dest/prover-client/factory.d.ts.map +1 -0
- package/dest/prover-client/factory.js +5 -0
- package/dest/prover-client/index.d.ts +3 -0
- package/dest/prover-client/index.d.ts.map +1 -0
- package/dest/prover-client/index.js +2 -0
- package/dest/prover-client/prover-client.d.ts +99 -0
- package/dest/prover-client/prover-client.d.ts.map +1 -0
- package/dest/prover-client/prover-client.js +163 -0
- package/dest/proving_broker/broker_prover_facade.d.ts +52 -0
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -0
- package/dest/proving_broker/broker_prover_facade.js +360 -0
- package/dest/proving_broker/config.d.ts +40 -0
- package/dest/proving_broker/config.d.ts.map +1 -0
- package/dest/proving_broker/config.js +138 -0
- package/dest/proving_broker/factory.d.ts +5 -0
- package/dest/proving_broker/factory.d.ts.map +1 -0
- package/dest/proving_broker/factory.js +13 -0
- package/dest/proving_broker/fixtures.d.ts +6 -0
- package/dest/proving_broker/fixtures.d.ts.map +1 -0
- package/dest/proving_broker/fixtures.js +13 -0
- package/dest/proving_broker/index.d.ts +11 -0
- package/dest/proving_broker/index.d.ts.map +1 -0
- package/dest/proving_broker/index.js +10 -0
- package/dest/proving_broker/proof_store/factory.d.ts +3 -0
- package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/factory.js +13 -0
- package/dest/proving_broker/proof_store/file_store_proof_store.d.ts +18 -0
- package/dest/proving_broker/proof_store/file_store_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/file_store_proof_store.js +60 -0
- package/dest/proving_broker/proof_store/index.d.ts +5 -0
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/index.js +4 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +15 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.js +41 -0
- package/dest/proving_broker/proof_store/proof_store.d.ts +36 -0
- package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/proof_store.js +3 -0
- package/dest/proving_broker/proving_agent.d.ts +42 -0
- package/dest/proving_broker/proving_agent.d.ts.map +1 -0
- package/dest/proving_broker/proving_agent.js +155 -0
- package/dest/proving_broker/proving_broker.d.ts +77 -0
- package/dest/proving_broker/proving_broker.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker.js +780 -0
- package/dest/proving_broker/proving_broker_database/memory.d.ts +20 -0
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database/memory.js +67 -0
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +40 -0
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database/persisted.js +623 -0
- package/dest/proving_broker/proving_broker_database.d.ts +66 -0
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database.js +3 -0
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +31 -0
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_instrumentation.js +97 -0
- package/dest/proving_broker/proving_job_controller.d.ts +34 -0
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -0
- package/dest/proving_broker/proving_job_controller.js +184 -0
- package/dest/proving_broker/rpc.d.ts +38 -0
- package/dest/proving_broker/rpc.d.ts.map +1 -0
- package/dest/proving_broker/rpc.js +138 -0
- package/dest/test/epoch_settlement.d.ts +36 -0
- package/dest/test/epoch_settlement.d.ts.map +1 -0
- package/dest/test/epoch_settlement.js +52 -0
- package/dest/test/index.d.ts +2 -0
- package/dest/test/index.d.ts.map +1 -0
- package/dest/test/index.js +1 -0
- package/dest/test/mock_proof_store.d.ts +9 -0
- package/dest/test/mock_proof_store.d.ts.map +1 -0
- package/dest/test/mock_proof_store.js +10 -0
- package/dest/test/mock_prover.d.ts +38 -0
- package/dest/test/mock_prover.d.ts.map +1 -0
- package/dest/test/mock_prover.js +91 -0
- package/package.json +113 -0
- package/src/config.ts +87 -0
- package/src/index.ts +4 -0
- package/src/light/index.ts +1 -0
- package/src/light/lightweight_checkpoint_builder.ts +342 -0
- package/src/mocks/fixtures.ts +120 -0
- package/src/mocks/test_context.ts +477 -0
- package/src/orchestrator/block-building-helpers.ts +486 -0
- package/src/orchestrator/block-proving-state.ts +457 -0
- package/src/orchestrator/checkpoint-proving-state.ts +247 -0
- package/src/orchestrator/checkpoint-sub-tree-orchestrator.ts +1010 -0
- package/src/orchestrator/chonk-cache.ts +99 -0
- package/src/orchestrator/index.ts +12 -0
- package/src/orchestrator/orchestrator_metrics.ts +18 -0
- package/src/orchestrator/proving-scheduler.ts +160 -0
- package/src/orchestrator/top-tree-orchestrator.ts +394 -0
- package/src/orchestrator/top-tree-proving-state.ts +219 -0
- package/src/orchestrator/tx-proving-state.ts +121 -0
- package/src/prover-client/factory.ts +18 -0
- package/src/prover-client/index.ts +2 -0
- package/src/prover-client/prover-client.ts +286 -0
- package/src/proving_broker/broker_prover_facade.ts +626 -0
- package/src/proving_broker/config.ts +178 -0
- package/src/proving_broker/factory.ts +19 -0
- package/src/proving_broker/fixtures.ts +20 -0
- package/src/proving_broker/index.ts +10 -0
- package/src/proving_broker/proof_store/factory.ts +20 -0
- package/src/proving_broker/proof_store/file_store_proof_store.ts +78 -0
- package/src/proving_broker/proof_store/index.ts +4 -0
- package/src/proving_broker/proof_store/inline_proof_store.ts +63 -0
- package/src/proving_broker/proof_store/proof_store.ts +54 -0
- package/src/proving_broker/proving_agent.ts +210 -0
- package/src/proving_broker/proving_broker.ts +888 -0
- package/src/proving_broker/proving_broker_database/memory.ts +78 -0
- package/src/proving_broker/proving_broker_database/persisted.ts +296 -0
- package/src/proving_broker/proving_broker_database.ts +75 -0
- package/src/proving_broker/proving_broker_instrumentation.ts +133 -0
- package/src/proving_broker/proving_job_controller.ts +199 -0
- package/src/proving_broker/rpc.ts +131 -0
- package/src/test/epoch_settlement.ts +82 -0
- package/src/test/index.ts +1 -0
- package/src/test/mock_proof_store.ts +14 -0
- package/src/test/mock_prover.ts +304 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FileStore } from '@aztec-labs/stdlib/file-store';
|
|
2
|
+
import { type ProofUri, type ProvingJobId, type ProvingJobInputs, type ProvingJobInputsMap, ProvingJobResult, type ProvingJobResultsMap } from '@aztec-labs/stdlib/interfaces/server';
|
|
3
|
+
import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
|
|
4
|
+
import type { ProofStore } from './proof_store.js';
|
|
5
|
+
/**
|
|
6
|
+
* A proof store implementation backed by a generic FileStore.
|
|
7
|
+
* Supports any storage backend (GCS, S3, local filesystem) via the FileStore abstraction.
|
|
8
|
+
*/
|
|
9
|
+
export declare class FileStoreProofStore implements ProofStore {
|
|
10
|
+
private readonly fileStore;
|
|
11
|
+
constructor(fileStore: FileStore);
|
|
12
|
+
saveProofInput<T extends ProvingRequestType>(id: ProvingJobId, type: T, inputs: ProvingJobInputsMap[T]): Promise<ProofUri>;
|
|
13
|
+
saveProofOutput<T extends ProvingRequestType>(id: ProvingJobId, type: T, result: ProvingJobResultsMap[T]): Promise<ProofUri>;
|
|
14
|
+
getProofInput(uri: ProofUri): Promise<ProvingJobInputs>;
|
|
15
|
+
getProofOutput(uri: ProofUri): Promise<ProvingJobResult>;
|
|
16
|
+
private extractTypeFromUri;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9zdG9yZV9wcm9vZl9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL3Byb29mX3N0b3JlL2ZpbGVfc3RvcmVfcHJvb2Zfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUNMLEtBQUssUUFBUSxFQUNiLEtBQUssWUFBWSxFQUNqQixLQUFLLGdCQUFnQixFQUNyQixLQUFLLG1CQUFtQixFQUN4QixnQkFBZ0IsRUFDaEIsS0FBSyxvQkFBb0IsRUFFMUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUvRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUtuRDs7O0dBR0c7QUFDSCxxQkFBYSxtQkFBb0IsWUFBVyxVQUFVO0lBQ3hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUF0QyxZQUE2QixTQUFTLEVBQUUsU0FBUyxFQUFJO0lBRS9DLGNBQWMsQ0FBQyxDQUFDLFNBQVMsa0JBQWtCLEVBQy9DLEVBQUUsRUFBRSxZQUFZLEVBQ2hCLElBQUksRUFBRSxDQUFDLEVBQ1AsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLENBSW5CO0lBRUssZUFBZSxDQUFDLENBQUMsU0FBUyxrQkFBa0IsRUFDaEQsRUFBRSxFQUFFLFlBQVksRUFDaEIsSUFBSSxFQUFFLENBQUMsRUFDUCxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQzlCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FNbkI7SUFFSyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FTNUQ7SUFFSyxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FPN0Q7SUFFRCxPQUFPLENBQUMsa0JBQWtCO0NBVTNCIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_store_proof_store.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/file_store_proof_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,KAAK,oBAAoB,EAE1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,UAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAtC,YAA6B,SAAS,EAAE,SAAS,EAAI;IAE/C,cAAc,CAAC,CAAC,SAAS,kBAAkB,EAC/C,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAInB;IAEK,eAAe,CAAC,CAAC,SAAS,kBAAkB,EAChD,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAMnB;IAEK,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAS5D;IAEK,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAO7D;IAED,OAAO,CAAC,kBAAkB;CAU3B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsonParseWithSchema, jsonStringify } from '@aztec-labs/foundation/json-rpc';
|
|
2
|
+
import { ProvingJobResult, getProvingJobInputClassFor } from '@aztec-labs/stdlib/interfaces/server';
|
|
3
|
+
import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
|
|
4
|
+
const INPUTS_PATH = 'inputs';
|
|
5
|
+
const OUTPUTS_PATH = 'outputs';
|
|
6
|
+
/**
|
|
7
|
+
* A proof store implementation backed by a generic FileStore.
|
|
8
|
+
* Supports any storage backend (GCS, S3, local filesystem) via the FileStore abstraction.
|
|
9
|
+
*/ export class FileStoreProofStore {
|
|
10
|
+
fileStore;
|
|
11
|
+
constructor(fileStore){
|
|
12
|
+
this.fileStore = fileStore;
|
|
13
|
+
}
|
|
14
|
+
async saveProofInput(id, type, inputs) {
|
|
15
|
+
const path = `${INPUTS_PATH}/${ProvingRequestType[type]}/${id}`;
|
|
16
|
+
const uri = await this.fileStore.save(path, inputs.toBuffer());
|
|
17
|
+
return uri;
|
|
18
|
+
}
|
|
19
|
+
async saveProofOutput(id, type, result) {
|
|
20
|
+
const jobResult = {
|
|
21
|
+
type,
|
|
22
|
+
result
|
|
23
|
+
};
|
|
24
|
+
const json = jsonStringify(jobResult);
|
|
25
|
+
const path = `${OUTPUTS_PATH}/${ProvingRequestType[type]}/${id}.json`;
|
|
26
|
+
const uri = await this.fileStore.save(path, Buffer.from(json, 'utf-8'));
|
|
27
|
+
return uri;
|
|
28
|
+
}
|
|
29
|
+
async getProofInput(uri) {
|
|
30
|
+
try {
|
|
31
|
+
const buffer = await this.fileStore.read(uri);
|
|
32
|
+
const type = this.extractTypeFromUri(uri);
|
|
33
|
+
const inputs = getProvingJobInputClassFor(type).fromBuffer(buffer);
|
|
34
|
+
return {
|
|
35
|
+
inputs,
|
|
36
|
+
type
|
|
37
|
+
};
|
|
38
|
+
} catch (err) {
|
|
39
|
+
throw new Error(`Error getting proof input at ${uri}: ${err}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async getProofOutput(uri) {
|
|
43
|
+
try {
|
|
44
|
+
const buffer = await this.fileStore.read(uri);
|
|
45
|
+
return jsonParseWithSchema(buffer.toString('utf-8'), ProvingJobResult);
|
|
46
|
+
} catch (err) {
|
|
47
|
+
throw new Error(`Error getting proof output at ${uri}: ${err}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
extractTypeFromUri(uri) {
|
|
51
|
+
const url = new URL(uri);
|
|
52
|
+
const pathParts = url.pathname.split('/').filter(Boolean);
|
|
53
|
+
const typeString = pathParts.at(-2);
|
|
54
|
+
const type = typeString ? ProvingRequestType[typeString] : undefined;
|
|
55
|
+
if (type === undefined) {
|
|
56
|
+
throw new Error(`Unrecognized proof type ${typeString} in URI ${uri}`);
|
|
57
|
+
}
|
|
58
|
+
return type;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './proof_store.js';
|
|
2
|
+
export * from './inline_proof_store.js';
|
|
3
|
+
export * from './factory.js';
|
|
4
|
+
export * from './file_store_proof_store.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9wcm9vZl9zdG9yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyw2QkFBNkIsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ProofUri, type ProvingJobId, ProvingJobInputs, type ProvingJobInputsMap, ProvingJobResult, type ProvingJobResultsMap } from '@aztec-labs/stdlib/interfaces/server';
|
|
2
|
+
import type { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
|
|
3
|
+
import type { ProofStore } from './proof_store.js';
|
|
4
|
+
/**
|
|
5
|
+
* An implementation of a proof input/output database that stores data inline in the URI.
|
|
6
|
+
*/
|
|
7
|
+
export declare class InlineProofStore implements ProofStore {
|
|
8
|
+
saveProofInput<T extends ProvingRequestType>(_id: ProvingJobId, type: T, inputs: ProvingJobInputsMap[T]): Promise<ProofUri>;
|
|
9
|
+
saveProofOutput<T extends ProvingRequestType>(_id: ProvingJobId, type: T, result: ProvingJobResultsMap[T]): Promise<ProofUri>;
|
|
10
|
+
getProofInput(uri: ProofUri): Promise<ProvingJobInputs>;
|
|
11
|
+
getProofOutput(uri: ProofUri): Promise<ProvingJobResult>;
|
|
12
|
+
private encode;
|
|
13
|
+
private decode;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lX3Byb29mX3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmluZ19icm9rZXIvcHJvb2Zfc3RvcmUvaW5saW5lX3Byb29mX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxLQUFLLFFBQVEsRUFDYixLQUFLLFlBQVksRUFDakIsZ0JBQWdCLEVBQ2hCLEtBQUssbUJBQW1CLEVBQ3hCLGdCQUFnQixFQUNoQixLQUFLLG9CQUFvQixFQUMxQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHcEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPbkQ7O0dBRUc7QUFDSCxxQkFBYSxnQkFBaUIsWUFBVyxVQUFVO0lBQ2pELGNBQWMsQ0FBQyxDQUFDLFNBQVMsa0JBQWtCLEVBQ3pDLEdBQUcsRUFBRSxZQUFZLEVBQ2pCLElBQUksRUFBRSxDQUFDLEVBQ1AsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLENBR25CO0lBRUQsZUFBZSxDQUFDLENBQUMsU0FBUyxrQkFBa0IsRUFDMUMsR0FBRyxFQUFFLFlBQVksRUFDakIsSUFBSSxFQUFFLENBQUMsRUFDUCxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQzlCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FHbkI7SUFFRCxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FFdEQ7SUFFRCxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FFdkQ7SUFFRCxPQUFPLENBQUMsTUFBTTtJQUtkLE9BQU8sQ0FBQyxNQUFNO0NBUWYifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline_proof_store.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/inline_proof_store.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,KAAK,oBAAoB,EAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAOnD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,cAAc,CAAC,CAAC,SAAS,kBAAkB,EACzC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAGnB;IAED,eAAe,CAAC,CAAC,SAAS,kBAAkB,EAC1C,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAGnB;IAED,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEtD;IAED,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEvD;IAED,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,MAAM;CAQf"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsonParseWithSchema, jsonStringify } from '@aztec-labs/foundation/json-rpc';
|
|
2
|
+
import { ProvingJobInputs, ProvingJobResult } from '@aztec-labs/stdlib/interfaces/server';
|
|
3
|
+
// use an ASCII encoded data uri https://datatracker.ietf.org/doc/html/rfc2397#section-2
|
|
4
|
+
// we do this to avoid double encoding to base64 (since the inputs already serialize to a base64 string)
|
|
5
|
+
const PREFIX = 'data:application/json;charset=utf-8';
|
|
6
|
+
const SEPARATOR = ',';
|
|
7
|
+
/**
|
|
8
|
+
* An implementation of a proof input/output database that stores data inline in the URI.
|
|
9
|
+
*/ export class InlineProofStore {
|
|
10
|
+
saveProofInput(_id, type, inputs) {
|
|
11
|
+
const jobInputs = {
|
|
12
|
+
type,
|
|
13
|
+
inputs
|
|
14
|
+
};
|
|
15
|
+
return Promise.resolve(this.encode(jobInputs));
|
|
16
|
+
}
|
|
17
|
+
saveProofOutput(_id, type, result) {
|
|
18
|
+
const jobResult = {
|
|
19
|
+
type,
|
|
20
|
+
result
|
|
21
|
+
};
|
|
22
|
+
return Promise.resolve(this.encode(jobResult));
|
|
23
|
+
}
|
|
24
|
+
getProofInput(uri) {
|
|
25
|
+
return Promise.resolve(this.decode(uri, ProvingJobInputs));
|
|
26
|
+
}
|
|
27
|
+
getProofOutput(uri) {
|
|
28
|
+
return Promise.resolve(this.decode(uri, ProvingJobResult));
|
|
29
|
+
}
|
|
30
|
+
encode(obj) {
|
|
31
|
+
const encoded = encodeURIComponent(jsonStringify(obj));
|
|
32
|
+
return PREFIX + SEPARATOR + encoded;
|
|
33
|
+
}
|
|
34
|
+
decode(uri, schema) {
|
|
35
|
+
const [prefix, data] = uri.split(SEPARATOR);
|
|
36
|
+
if (prefix !== PREFIX) {
|
|
37
|
+
throw new Error('Invalid proof input URI: ' + prefix);
|
|
38
|
+
}
|
|
39
|
+
return jsonParseWithSchema(decodeURIComponent(data), schema);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ProofUri, ProvingJobId, ProvingJobInputs, ProvingJobInputsMap, ProvingJobResult, ProvingJobResultsMap } from '@aztec-labs/stdlib/interfaces/server';
|
|
2
|
+
import type { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
|
|
3
|
+
/**
|
|
4
|
+
* A database for storing proof inputs and outputs.
|
|
5
|
+
*/
|
|
6
|
+
export interface ProofStore {
|
|
7
|
+
/**
|
|
8
|
+
* Save a proof input to the database.
|
|
9
|
+
* @param jobId - The ID of the job the proof input is associated with.
|
|
10
|
+
* @param type - The type of the proving request.
|
|
11
|
+
* @param inputs - The proof input to save.
|
|
12
|
+
* @returns The URI of the saved proof input.
|
|
13
|
+
*/
|
|
14
|
+
saveProofInput<T extends ProvingRequestType>(jobId: ProvingJobId, type: T, inputs: ProvingJobInputsMap[T]): Promise<ProofUri>;
|
|
15
|
+
/**
|
|
16
|
+
* Save a proof output to the database.
|
|
17
|
+
* @param jobId - The ID of the job the proof input is associated with.
|
|
18
|
+
* @param type - The type of the proving request.
|
|
19
|
+
* @param result - The proof output to save.
|
|
20
|
+
* @returns The URI of the saved proof output.
|
|
21
|
+
*/
|
|
22
|
+
saveProofOutput<T extends ProvingRequestType>(id: ProvingJobId, type: T, result: ProvingJobResultsMap[T]): Promise<ProofUri>;
|
|
23
|
+
/**
|
|
24
|
+
* Retrieve a proof input from the database.
|
|
25
|
+
* @param uri - The URI of the proof input to retrieve.
|
|
26
|
+
* @returns The proof input.
|
|
27
|
+
*/
|
|
28
|
+
getProofInput(uri: ProofUri): Promise<ProvingJobInputs>;
|
|
29
|
+
/**
|
|
30
|
+
* Retrieve a proof output from the database.
|
|
31
|
+
* @param uri - The URI of the proof output to retrieve.
|
|
32
|
+
* @returns The proof output.
|
|
33
|
+
*/
|
|
34
|
+
getProofOutput(uri: ProofUri): Promise<ProvingJobResult>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvb2Zfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9wcm9vZl9zdG9yZS9wcm9vZl9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFDVixRQUFRLEVBQ1IsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNyQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEU7O0dBRUc7QUFDSCxNQUFNLFdBQVcsVUFBVTtJQUN6Qjs7Ozs7O09BTUc7SUFDSCxjQUFjLENBQUMsQ0FBQyxTQUFTLGtCQUFrQixFQUN6QyxLQUFLLEVBQUUsWUFBWSxFQUNuQixJQUFJLEVBQUUsQ0FBQyxFQUNQLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsR0FDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXJCOzs7Ozs7T0FNRztJQUNILGVBQWUsQ0FBQyxDQUFDLFNBQVMsa0JBQWtCLEVBQzFDLEVBQUUsRUFBRSxZQUFZLEVBQ2hCLElBQUksRUFBRSxDQUFDLEVBQ1AsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFckI7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXhEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztDQUMxRCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof_store.d.ts","sourceRoot":"","sources":["../../../src/proving_broker/proof_store/proof_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,cAAc,CAAC,CAAC,SAAS,kBAAkB,EACzC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,SAAS,kBAAkB,EAC1C,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAExD;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type LoggerBindings } from '@aztec-labs/foundation/log';
|
|
2
|
+
import type { ProverAgentStatus, ProvingJobConsumer, ServerCircuitProver } from '@aztec-labs/stdlib/interfaces/server';
|
|
3
|
+
import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
|
|
4
|
+
import type { ProofStore } from './proof_store/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* A helper class that encapsulates a circuit prover and connects it to a job source.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ProvingAgent {
|
|
9
|
+
/** The source of proving jobs */
|
|
10
|
+
private broker;
|
|
11
|
+
/** Database holding proof inputs and outputs */
|
|
12
|
+
private proofStore;
|
|
13
|
+
/** The prover implementation to defer jobs to */
|
|
14
|
+
private circuitProver;
|
|
15
|
+
/** Optional list of allowed proof types to build */
|
|
16
|
+
private proofAllowList;
|
|
17
|
+
/** How long to wait between jobs */
|
|
18
|
+
private pollIntervalMs;
|
|
19
|
+
private currentJobController?;
|
|
20
|
+
private runningPromise;
|
|
21
|
+
private log;
|
|
22
|
+
constructor(
|
|
23
|
+
/** The source of proving jobs */
|
|
24
|
+
broker: ProvingJobConsumer,
|
|
25
|
+
/** Database holding proof inputs and outputs */
|
|
26
|
+
proofStore: ProofStore,
|
|
27
|
+
/** The prover implementation to defer jobs to */
|
|
28
|
+
circuitProver: ServerCircuitProver,
|
|
29
|
+
/** Optional list of allowed proof types to build */
|
|
30
|
+
proofAllowList?: Array<ProvingRequestType>,
|
|
31
|
+
/** How long to wait between jobs */
|
|
32
|
+
pollIntervalMs?: number, bindings?: LoggerBindings);
|
|
33
|
+
setCircuitProver(circuitProver: ServerCircuitProver): void;
|
|
34
|
+
isRunning(): boolean;
|
|
35
|
+
start(): void;
|
|
36
|
+
stop(): Promise<void>;
|
|
37
|
+
getStatus(): ProverAgentStatus;
|
|
38
|
+
private work;
|
|
39
|
+
private startJob;
|
|
40
|
+
private reportResult;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmluZ19hZ2VudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpbmdfYnJva2VyL3Byb3ZpbmdfYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBSTVGLE9BQU8sS0FBSyxFQUVWLGlCQUFpQixFQUNqQixrQkFBa0IsRUFJbEIsbUJBQW1CLEVBQ3BCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHekQ7O0dBRUc7QUFDSCxxQkFBYSxZQUFZO0lBTXJCLGlDQUFpQztJQUNqQyxPQUFPLENBQUMsTUFBTTtJQUNkLGdEQUFnRDtJQUNoRCxPQUFPLENBQUMsVUFBVTtJQUNsQixpREFBaUQ7SUFDakQsT0FBTyxDQUFDLGFBQWE7SUFDckIsb0RBQW9EO0lBQ3BELE9BQU8sQ0FBQyxjQUFjO0lBQ3RCLG9DQUFvQztJQUNwQyxPQUFPLENBQUMsY0FBYztJQWR4QixPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBdUI7SUFDcEQsT0FBTyxDQUFDLGNBQWMsQ0FBaUI7SUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBUztJQUVwQjtJQUNFLGlDQUFpQztJQUN6QixNQUFNLEVBQUUsa0JBQWtCO0lBQ2xDLGdEQUFnRDtJQUN4QyxVQUFVLEVBQUUsVUFBVTtJQUM5QixpREFBaUQ7SUFDekMsYUFBYSxFQUFFLG1CQUFtQjtJQUMxQyxvREFBb0Q7SUFDNUMsY0FBYyxHQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBTTtJQUN0RCxvQ0FBb0M7SUFDNUIsY0FBYyxTQUFPLEVBQzdCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFJMUI7SUFFTSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxDQUVoRTtJQUVNLFNBQVMsSUFBSSxPQUFPLENBRTFCO0lBRU0sS0FBSyxJQUFJLElBQUksQ0FFbkI7SUFFWSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUdqQztJQUVNLFNBQVMsSUFBSSxpQkFBaUIsQ0FXcEM7WUFFYSxJQUFJO1lBcURKLFFBQVE7WUF3RFIsWUFBWTtDQTBCM0IifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proving_agent.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,4BAA4B,CAAC;AAI5F,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAIlB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;GAEG;AACH,qBAAa,YAAY;IAMrB,iCAAiC;IACjC,OAAO,CAAC,MAAM;IACd,gDAAgD;IAChD,OAAO,CAAC,UAAU;IAClB,iDAAiD;IACjD,OAAO,CAAC,aAAa;IACrB,oDAAoD;IACpD,OAAO,CAAC,cAAc;IACtB,oCAAoC;IACpC,OAAO,CAAC,cAAc;IAdxB,OAAO,CAAC,oBAAoB,CAAC,CAAuB;IACpD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,GAAG,CAAS;IAEpB;IACE,iCAAiC;IACzB,MAAM,EAAE,kBAAkB;IAClC,gDAAgD;IACxC,UAAU,EAAE,UAAU;IAC9B,iDAAiD;IACzC,aAAa,EAAE,mBAAmB;IAC1C,oDAAoD;IAC5C,cAAc,GAAE,KAAK,CAAC,kBAAkB,CAAM;IACtD,oCAAoC;IAC5B,cAAc,SAAO,EAC7B,QAAQ,CAAC,EAAE,cAAc,EAI1B;IAEM,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAEhE;IAEM,SAAS,IAAI,OAAO,CAE1B;IAEM,KAAK,IAAI,IAAI,CAEnB;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjC;IAEM,SAAS,IAAI,iBAAiB,CAWpC;YAEa,IAAI;YAqDJ,QAAQ;YAwDR,YAAY;CA0B3B"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { AbortError } from '@aztec-labs/foundation/error';
|
|
2
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
3
|
+
import { RunningPromise } from '@aztec-labs/foundation/running-promise';
|
|
4
|
+
import { truncate } from '@aztec-labs/foundation/string';
|
|
5
|
+
import { ProvingError } from '@aztec-labs/stdlib/errors';
|
|
6
|
+
import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
|
|
7
|
+
import { ProvingJobController, ProvingJobControllerStatus } from './proving_job_controller.js';
|
|
8
|
+
/**
|
|
9
|
+
* A helper class that encapsulates a circuit prover and connects it to a job source.
|
|
10
|
+
*/ export class ProvingAgent {
|
|
11
|
+
broker;
|
|
12
|
+
proofStore;
|
|
13
|
+
circuitProver;
|
|
14
|
+
proofAllowList;
|
|
15
|
+
pollIntervalMs;
|
|
16
|
+
currentJobController;
|
|
17
|
+
runningPromise;
|
|
18
|
+
log;
|
|
19
|
+
constructor(/** The source of proving jobs */ broker, /** Database holding proof inputs and outputs */ proofStore, /** The prover implementation to defer jobs to */ circuitProver, /** Optional list of allowed proof types to build */ proofAllowList = [], /** How long to wait between jobs */ pollIntervalMs = 1000, bindings){
|
|
20
|
+
this.broker = broker;
|
|
21
|
+
this.proofStore = proofStore;
|
|
22
|
+
this.circuitProver = circuitProver;
|
|
23
|
+
this.proofAllowList = proofAllowList;
|
|
24
|
+
this.pollIntervalMs = pollIntervalMs;
|
|
25
|
+
this.log = createLogger('prover-client:proving-agent', bindings);
|
|
26
|
+
this.runningPromise = new RunningPromise(this.work.bind(this), this.log, this.pollIntervalMs);
|
|
27
|
+
}
|
|
28
|
+
setCircuitProver(circuitProver) {
|
|
29
|
+
this.circuitProver = circuitProver;
|
|
30
|
+
}
|
|
31
|
+
isRunning() {
|
|
32
|
+
return this.runningPromise?.isRunning() ?? false;
|
|
33
|
+
}
|
|
34
|
+
start() {
|
|
35
|
+
this.runningPromise.start();
|
|
36
|
+
}
|
|
37
|
+
async stop() {
|
|
38
|
+
this.currentJobController?.abort();
|
|
39
|
+
await this.runningPromise.stop();
|
|
40
|
+
}
|
|
41
|
+
getStatus() {
|
|
42
|
+
if (this.currentJobController) {
|
|
43
|
+
return {
|
|
44
|
+
status: 'proving',
|
|
45
|
+
jobId: this.currentJobController.getJobId(),
|
|
46
|
+
proofType: this.currentJobController.getProofType(),
|
|
47
|
+
startedAtISO: new Date(this.currentJobController.getStartedAt()).toISOString()
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return this.runningPromise.isRunning() ? {
|
|
51
|
+
status: 'running'
|
|
52
|
+
} : {
|
|
53
|
+
status: 'stopped'
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async work() {
|
|
57
|
+
// every tick we need to take one of the following actions:
|
|
58
|
+
// 1. send a hearbeat to the broker that we're working on some job
|
|
59
|
+
// 2. if the job is complete, send its result to the broker
|
|
60
|
+
// 3. get a job from the broker
|
|
61
|
+
// Any one of these actions could give us a new job to work on. If that happens we abort the current job.
|
|
62
|
+
//
|
|
63
|
+
// This loop gets triggered in one of two ways:
|
|
64
|
+
// - either on a timer (see pollIntervalMs)
|
|
65
|
+
// - or when a proof completes
|
|
66
|
+
let maybeJob;
|
|
67
|
+
if (this.currentJobController) {
|
|
68
|
+
const status = this.currentJobController.getStatus();
|
|
69
|
+
const jobId = this.currentJobController.getJobId();
|
|
70
|
+
const proofType = this.currentJobController.getProofType();
|
|
71
|
+
const startedAt = this.currentJobController.getStartedAt();
|
|
72
|
+
const result = this.currentJobController.getResult();
|
|
73
|
+
if (status === ProvingJobControllerStatus.RUNNING) {
|
|
74
|
+
maybeJob = await this.broker.reportProvingJobProgress(jobId, startedAt, {
|
|
75
|
+
allowList: this.proofAllowList
|
|
76
|
+
});
|
|
77
|
+
} else if (status === ProvingJobControllerStatus.DONE) {
|
|
78
|
+
if (result) {
|
|
79
|
+
maybeJob = await this.reportResult(jobId, proofType, result);
|
|
80
|
+
} else {
|
|
81
|
+
this.log.warn(`Job controller for job ${this.currentJobController.getJobId()} is done but doesn't have a result`, {
|
|
82
|
+
jobId
|
|
83
|
+
});
|
|
84
|
+
maybeJob = await this.reportResult(jobId, proofType, new ProvingError('No result found after proving', undefined, /* retry */ true));
|
|
85
|
+
}
|
|
86
|
+
this.currentJobController = undefined;
|
|
87
|
+
} else {
|
|
88
|
+
// IDLE status should not be seen because a job is started as soon as it is created
|
|
89
|
+
this.log.warn(`Idle job controller for job: ${this.currentJobController.getJobId()}. Skipping main loop work`, {
|
|
90
|
+
jobId: this.currentJobController.getJobId()
|
|
91
|
+
});
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
maybeJob = await this.broker.getProvingJob({
|
|
96
|
+
allowList: this.proofAllowList
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (maybeJob) {
|
|
100
|
+
await this.startJob(maybeJob);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async startJob({ job, time: startedAt }) {
|
|
104
|
+
let abortedProofJobId;
|
|
105
|
+
let abortedProofName;
|
|
106
|
+
if (this.currentJobController?.getStatus() === ProvingJobControllerStatus.RUNNING) {
|
|
107
|
+
abortedProofJobId = this.currentJobController.getJobId();
|
|
108
|
+
abortedProofName = this.currentJobController.getProofTypeName();
|
|
109
|
+
this.currentJobController?.abort();
|
|
110
|
+
}
|
|
111
|
+
let inputs;
|
|
112
|
+
try {
|
|
113
|
+
inputs = await this.proofStore.getProofInput(job.inputsUri);
|
|
114
|
+
} catch {
|
|
115
|
+
const maybeJob = await this.broker.reportProvingJobError(job.id, 'Failed to load proof inputs', true, {
|
|
116
|
+
allowList: this.proofAllowList
|
|
117
|
+
});
|
|
118
|
+
if (maybeJob) {
|
|
119
|
+
return this.startJob(maybeJob);
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
this.currentJobController = new ProvingJobController(job.id, inputs, job.epochNumber, startedAt, this.circuitProver, ()=>{
|
|
124
|
+
// trigger a run of the main work loop when proving completes
|
|
125
|
+
// no need to await this here. The controller will stay alive (in DONE state) until the result is send to the broker
|
|
126
|
+
void this.runningPromise.trigger();
|
|
127
|
+
}, this.log.getBindings());
|
|
128
|
+
if (abortedProofJobId) {
|
|
129
|
+
this.log.info(`Aborting job id=${abortedProofJobId} type=${abortedProofName} to start new job id=${this.currentJobController.getJobId()} type=${this.currentJobController.getProofTypeName()} inputsUri=${truncate(job.inputsUri)}`);
|
|
130
|
+
} else {
|
|
131
|
+
this.log.info(`Starting job id=${this.currentJobController.getJobId()} type=${this.currentJobController.getProofTypeName()} inputsUri=${truncate(job.inputsUri)}`);
|
|
132
|
+
}
|
|
133
|
+
this.currentJobController.start();
|
|
134
|
+
}
|
|
135
|
+
async reportResult(jobId, type, result) {
|
|
136
|
+
let maybeJob;
|
|
137
|
+
if (result instanceof AbortError) {
|
|
138
|
+
// no-op
|
|
139
|
+
this.log.warn(`Job id=${jobId} was aborted. Not reporting result back to broker`, result);
|
|
140
|
+
} else if (result instanceof Error) {
|
|
141
|
+
const retry = result.name === ProvingError.NAME ? result.retry : false;
|
|
142
|
+
this.log.error(`Job id=${jobId} type=${ProvingRequestType[type]} failed err=${result.message} retry=${retry}`, result);
|
|
143
|
+
maybeJob = await this.broker.reportProvingJobError(jobId, result.message, retry, {
|
|
144
|
+
allowList: this.proofAllowList
|
|
145
|
+
});
|
|
146
|
+
} else {
|
|
147
|
+
const outputUri = await this.proofStore.saveProofOutput(jobId, type, result);
|
|
148
|
+
this.log.info(`Job id=${jobId} type=${ProvingRequestType[type]} completed outputUri=${truncate(outputUri)}`);
|
|
149
|
+
maybeJob = await this.broker.reportProvingJobSuccess(jobId, outputUri, {
|
|
150
|
+
allowList: this.proofAllowList
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return maybeJob;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { EpochNumber } from '@aztec-labs/foundation/branded-types';
|
|
2
|
+
import { type GetProvingJobResponse, type ProofUri, type ProvingJob, type ProvingJobBrokerDebug, type ProvingJobConsumer, type ProvingJobFilter, type ProvingJobId, type ProvingJobProducer, type ProvingJobStatus } from '@aztec-labs/stdlib/interfaces/server';
|
|
3
|
+
import { ProvingRequestType } from '@aztec-labs/stdlib/proofs';
|
|
4
|
+
import { type TelemetryClient, type Traceable, type Tracer } from '@aztec-labs/telemetry-client';
|
|
5
|
+
import { type ProverBrokerConfig } from './config.js';
|
|
6
|
+
import type { ProvingBrokerDatabase } from './proving_broker_database.js';
|
|
7
|
+
/**
|
|
8
|
+
* A broker that manages proof requests and distributes them to workers based on their priority.
|
|
9
|
+
* It takes a backend that is responsible for storing and retrieving proof requests and results.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ProvingBroker implements ProvingJobProducer, ProvingJobConsumer, ProvingJobBrokerDebug, Traceable {
|
|
12
|
+
#private;
|
|
13
|
+
private database;
|
|
14
|
+
private logger;
|
|
15
|
+
private queues;
|
|
16
|
+
private jobsCache;
|
|
17
|
+
private resultsCache;
|
|
18
|
+
private pendingResults;
|
|
19
|
+
private enqueuedAt;
|
|
20
|
+
private inProgress;
|
|
21
|
+
private retries;
|
|
22
|
+
private promises;
|
|
23
|
+
private cleanupPromise;
|
|
24
|
+
private msTimeSource;
|
|
25
|
+
private jobTimeoutMs;
|
|
26
|
+
private maxRetries;
|
|
27
|
+
private instrumentation;
|
|
28
|
+
readonly tracer: Tracer;
|
|
29
|
+
private completedJobNotifications;
|
|
30
|
+
/**
|
|
31
|
+
* The broker keeps track of the highest epoch its seen.
|
|
32
|
+
* This information is used for garbage collection: once it reaches the next epoch, it can start pruning the database of old state.
|
|
33
|
+
* It is important that this value is initialized to zero. This ensures that we don't delete any old jobs until the current
|
|
34
|
+
* process instance receives a job request informing it of the actual current highest epoch
|
|
35
|
+
* Example:
|
|
36
|
+
* proving epoch 11 - the broker will wipe all jobs for epochs 9 and lower
|
|
37
|
+
* finished proving epoch 11 and got first job for epoch 12 -> the broker will wipe all settled jobs for epochs 10 and lower
|
|
38
|
+
* reorged back to end of epoch 10 -> epoch 11 is skipped and epoch 12 starts -> the broker will wipe all settled jobs for epochs 10 and lower
|
|
39
|
+
*/
|
|
40
|
+
private epochHeight;
|
|
41
|
+
private maxEpochsToKeepResultsFor;
|
|
42
|
+
private started;
|
|
43
|
+
private debugReplayEnabled;
|
|
44
|
+
constructor(database: ProvingBrokerDatabase, { proverBrokerJobTimeoutMs, proverBrokerPollIntervalMs, proverBrokerJobMaxRetries, proverBrokerMaxEpochsToKeepResultsFor, proverBrokerDebugReplayEnabled }?: Required<Pick<ProverBrokerConfig, 'proverBrokerJobTimeoutMs' | 'proverBrokerPollIntervalMs' | 'proverBrokerJobMaxRetries' | 'proverBrokerMaxEpochsToKeepResultsFor' | 'proverBrokerDebugReplayEnabled'>>, client?: TelemetryClient, logger?: import("@aztec-labs/foundation/log").Logger);
|
|
45
|
+
private measureQueueDepth;
|
|
46
|
+
private countActiveJobs;
|
|
47
|
+
start(): Promise<void>;
|
|
48
|
+
stop(): Promise<void>;
|
|
49
|
+
enqueueProvingJob(job: ProvingJob): Promise<ProvingJobStatus>;
|
|
50
|
+
cancelProvingJob(id: ProvingJobId): Promise<void>;
|
|
51
|
+
getProvingJobStatus(id: ProvingJobId): Promise<ProvingJobStatus>;
|
|
52
|
+
getCompletedJobs(ids: ProvingJobId[]): Promise<ProvingJobId[]>;
|
|
53
|
+
getProvingJob(filter?: ProvingJobFilter): Promise<GetProvingJobResponse | undefined>;
|
|
54
|
+
reportProvingJobSuccess(id: ProvingJobId, value: ProofUri, filter?: ProvingJobFilter): Promise<GetProvingJobResponse | undefined>;
|
|
55
|
+
reportProvingJobError(id: ProvingJobId, err: string, retry?: boolean, filter?: ProvingJobFilter): Promise<GetProvingJobResponse | undefined>;
|
|
56
|
+
reportProvingJobProgress(id: ProvingJobId, startedAt: number, filter?: ProvingJobFilter): Promise<{
|
|
57
|
+
job: ProvingJob;
|
|
58
|
+
time: number;
|
|
59
|
+
} | undefined>;
|
|
60
|
+
replayProvingJob(jobId: ProvingJobId, type: ProvingRequestType, epochNumber: EpochNumber, inputsUri: ProofUri): Promise<ProvingJobStatus>;
|
|
61
|
+
private cleanUpProvingJobState;
|
|
62
|
+
private cleanupPass;
|
|
63
|
+
private cleanupJobsOlderThanEpoch;
|
|
64
|
+
private reEnqueueExpiredJobs;
|
|
65
|
+
private enqueueJobInternal;
|
|
66
|
+
private isJobStale;
|
|
67
|
+
private oldestEpochToKeep;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Relative priority of each proof type. Proofs higher up on the list are more important and should be prioritized
|
|
71
|
+
* over proofs lower on the list.
|
|
72
|
+
*
|
|
73
|
+
* The aim is that this will speed up block proving as the closer we get to a block's root proof the more likely it
|
|
74
|
+
* is to get picked up by agents
|
|
75
|
+
*/
|
|
76
|
+
export declare const PROOF_TYPES_IN_PRIORITY_ORDER: ProvingRequestType[];
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmluZ19icm9rZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aW5nX2Jyb2tlci9wcm92aW5nX2Jyb2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFLbkUsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssUUFBUSxFQUNiLEtBQUssVUFBVSxFQUNmLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssWUFBWSxFQUNqQixLQUFLLGtCQUFrQixFQUV2QixLQUFLLGdCQUFnQixFQUV0QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUdySCxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBNkIsTUFBTSxhQUFhLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQTRCMUU7OztHQUdHO0FBQ0gscUJBQWEsYUFBYyxZQUFXLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLFNBQVM7O0lBaUYxRyxPQUFPLENBQUMsUUFBUTtJQWtCaEIsT0FBTyxDQUFDLE1BQU07SUFsR2hCLE9BQU8sQ0FBQyxNQUFNLENBc0JaO0lBSUYsT0FBTyxDQUFDLFNBQVMsQ0FBK0M7SUFJaEUsT0FBTyxDQUFDLFlBQVksQ0FBMEM7SUFJOUQsT0FBTyxDQUFDLGNBQWMsQ0FBb0Q7SUFHMUUsT0FBTyxDQUFDLFVBQVUsQ0FBa0M7SUFNcEQsT0FBTyxDQUFDLFVBQVUsQ0FBK0M7SUFHakUsT0FBTyxDQUFDLE9BQU8sQ0FBbUM7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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proving_broker.d.ts","sourceRoot":"","sources":["../../src/proving_broker/proving_broker.ts"],"names":[],"mappings":"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"}
|