@aztec/prover-client 0.0.1-fake-ceab37513c → 0.0.6-commit.a2d1860fe9
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 +2 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -2
- package/dest/index.d.ts +1 -1
- 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 +48 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
- package/dest/light/lightweight_checkpoint_builder.js +202 -0
- package/dest/mocks/fixtures.d.ts +5 -5
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +35 -16
- package/dest/mocks/test_context.d.ts +39 -33
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +141 -82
- package/dest/orchestrator/block-building-helpers.d.ts +34 -34
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +151 -187
- package/dest/orchestrator/block-proving-state.d.ts +71 -55
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +280 -185
- package/dest/orchestrator/checkpoint-proving-state.d.ts +76 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-proving-state.js +243 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +40 -32
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +165 -85
- package/dest/orchestrator/index.d.ts +1 -1
- package/dest/orchestrator/orchestrator.d.ts +51 -35
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +847 -329
- package/dest/orchestrator/orchestrator_metrics.d.ts +1 -3
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator_metrics.js +2 -15
- package/dest/orchestrator/tx-proving-state.d.ts +15 -12
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +27 -33
- package/dest/prover-client/factory.d.ts +3 -3
- package/dest/prover-client/factory.d.ts.map +1 -1
- package/dest/prover-client/index.d.ts +1 -1
- package/dest/prover-client/prover-client.d.ts +5 -5
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +15 -10
- package/dest/prover-client/server-epoch-prover.d.ts +13 -11
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +9 -9
- package/dest/proving_broker/broker_prover_facade.d.ts +28 -21
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +45 -36
- package/dest/proving_broker/config.d.ts +24 -8
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +26 -3
- package/dest/proving_broker/factory.d.ts +1 -1
- package/dest/proving_broker/fixtures.d.ts +3 -2
- package/dest/proving_broker/fixtures.d.ts.map +1 -1
- package/dest/proving_broker/fixtures.js +3 -2
- package/dest/proving_broker/index.d.ts +1 -1
- package/dest/proving_broker/proof_store/factory.d.ts +2 -5
- package/dest/proving_broker/proof_store/factory.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/factory.js +7 -30
- 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 +2 -1
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
- package/dest/proving_broker/proving_agent.d.ts +5 -9
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +4 -19
- package/dest/proving_broker/proving_broker.d.ts +7 -4
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +64 -30
- package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +5 -3
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +392 -3
- package/dest/proving_broker/proving_broker_database.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.js +15 -35
- package/dest/proving_broker/proving_job_controller.d.ts +5 -3
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +46 -24
- package/dest/proving_broker/rpc.d.ts +7 -5
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +8 -0
- package/dest/test/mock_proof_store.d.ts +1 -1
- package/dest/test/mock_proof_store.d.ts.map +1 -1
- package/dest/test/mock_prover.d.ts +23 -19
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +38 -23
- package/package.json +21 -20
- package/src/config.ts +2 -2
- package/src/light/index.ts +1 -0
- package/src/light/lightweight_checkpoint_builder.ts +294 -0
- package/src/mocks/fixtures.ts +43 -37
- package/src/mocks/test_context.ts +201 -114
- package/src/orchestrator/block-building-helpers.ts +233 -313
- package/src/orchestrator/block-proving-state.ts +324 -247
- package/src/orchestrator/checkpoint-proving-state.ts +349 -0
- package/src/orchestrator/epoch-proving-state.ts +229 -132
- package/src/orchestrator/orchestrator.ts +630 -385
- package/src/orchestrator/orchestrator_metrics.ts +2 -25
- package/src/orchestrator/tx-proving-state.ts +49 -60
- package/src/prover-client/factory.ts +6 -2
- package/src/prover-client/prover-client.ts +31 -23
- package/src/prover-client/server-epoch-prover.ts +30 -21
- package/src/proving_broker/broker_prover_facade.ts +183 -118
- package/src/proving_broker/config.ts +30 -1
- package/src/proving_broker/fixtures.ts +8 -3
- package/src/proving_broker/proof_store/factory.ts +10 -32
- package/src/proving_broker/proof_store/file_store_proof_store.ts +78 -0
- package/src/proving_broker/proof_store/index.ts +1 -0
- package/src/proving_broker/proving_agent.ts +6 -19
- package/src/proving_broker/proving_broker.ts +72 -28
- package/src/proving_broker/proving_broker_database/memory.ts +2 -1
- package/src/proving_broker/proving_broker_database/persisted.ts +20 -5
- package/src/proving_broker/proving_broker_database.ts +2 -1
- package/src/proving_broker/proving_broker_instrumentation.ts +14 -35
- package/src/proving_broker/proving_job_controller.ts +51 -25
- package/src/proving_broker/rpc.ts +14 -0
- package/src/test/mock_prover.ts +144 -74
- package/dest/bin/get-proof-inputs.d.ts +0 -2
- package/dest/bin/get-proof-inputs.d.ts.map +0 -1
- package/dest/bin/get-proof-inputs.js +0 -51
- package/dest/block-factory/index.d.ts +0 -2
- package/dest/block-factory/index.d.ts.map +0 -1
- package/dest/block-factory/index.js +0 -1
- package/dest/block-factory/light.d.ts +0 -36
- package/dest/block-factory/light.d.ts.map +0 -1
- package/dest/block-factory/light.js +0 -87
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +0 -14
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +0 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.js +0 -52
- package/dest/proving_broker/proving_agent_instrumentation.d.ts +0 -8
- package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +0 -1
- package/dest/proving_broker/proving_agent_instrumentation.js +0 -16
- package/src/bin/get-proof-inputs.ts +0 -59
- package/src/block-factory/index.ts +0 -1
- package/src/block-factory/light.ts +0 -114
- package/src/proving_broker/proof_store/gcs_proof_store.ts +0 -76
- package/src/proving_broker/proving_agent_instrumentation.ts +0 -21
|
@@ -3,16 +3,14 @@ import type {
|
|
|
3
3
|
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
4
4
|
NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
|
|
5
5
|
RECURSIVE_PROOF_LENGTH,
|
|
6
|
-
TUBE_PROOF_LENGTH,
|
|
7
6
|
} from '@aztec/constants';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
7
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
8
|
+
import { sha256 } from '@aztec/foundation/crypto/sha256';
|
|
9
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
11
10
|
import { type PromiseWithResolvers, RunningPromise, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
12
11
|
import { truncate } from '@aztec/foundation/string';
|
|
13
12
|
import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
|
|
14
13
|
import {
|
|
15
|
-
type ProofAndVerificationKey,
|
|
16
14
|
type ProofUri,
|
|
17
15
|
type ProvingJobId,
|
|
18
16
|
type ProvingJobInputsMap,
|
|
@@ -23,22 +21,29 @@ import {
|
|
|
23
21
|
type ServerCircuitProver,
|
|
24
22
|
makeProvingJobId,
|
|
25
23
|
} from '@aztec/stdlib/interfaces/server';
|
|
26
|
-
import type {
|
|
27
|
-
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
24
|
+
import type { ParityBasePrivateInputs, ParityPublicInputs, ParityRootPrivateInputs } from '@aztec/stdlib/parity';
|
|
25
|
+
import { ProvingRequestType, RecursiveProof } from '@aztec/stdlib/proofs';
|
|
28
26
|
import type {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
BlockMergeRollupPrivateInputs,
|
|
28
|
+
BlockRollupPublicInputs,
|
|
29
|
+
BlockRootEmptyTxFirstRollupPrivateInputs,
|
|
30
|
+
BlockRootFirstRollupPrivateInputs,
|
|
31
|
+
BlockRootRollupPrivateInputs,
|
|
32
|
+
BlockRootSingleTxFirstRollupPrivateInputs,
|
|
33
|
+
BlockRootSingleTxRollupPrivateInputs,
|
|
34
|
+
CheckpointMergeRollupPrivateInputs,
|
|
35
|
+
CheckpointPaddingRollupPrivateInputs,
|
|
36
|
+
CheckpointRollupPublicInputs,
|
|
37
|
+
CheckpointRootRollupPrivateInputs,
|
|
38
|
+
CheckpointRootSingleBlockRollupPrivateInputs,
|
|
39
|
+
PrivateTxBaseRollupPrivateInputs,
|
|
40
|
+
PublicChonkVerifierPrivateInputs,
|
|
41
|
+
PublicChonkVerifierPublicInputs,
|
|
42
|
+
PublicTxBaseRollupPrivateInputs,
|
|
43
|
+
RootRollupPrivateInputs,
|
|
39
44
|
RootRollupPublicInputs,
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
TxMergeRollupPrivateInputs,
|
|
46
|
+
TxRollupPublicInputs,
|
|
42
47
|
} from '@aztec/stdlib/rollup';
|
|
43
48
|
|
|
44
49
|
import { InlineProofStore, type ProofStore } from './proof_store/index.js';
|
|
@@ -63,14 +68,17 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
|
|
|
63
68
|
private runningPromise?: RunningPromise;
|
|
64
69
|
private timeOfLastSnapshotSync = Date.now();
|
|
65
70
|
private jobsToRetrieve: Set<ProvingJobId> = new Set();
|
|
71
|
+
private log: Logger;
|
|
66
72
|
|
|
67
73
|
constructor(
|
|
68
74
|
private broker: ProvingJobProducer,
|
|
69
75
|
private proofStore: ProofStore = new InlineProofStore(),
|
|
70
76
|
private failedProofStore?: ProofStore,
|
|
71
77
|
private pollIntervalMs = 1000,
|
|
72
|
-
|
|
73
|
-
) {
|
|
78
|
+
bindings?: LoggerBindings,
|
|
79
|
+
) {
|
|
80
|
+
this.log = createLogger('prover-client:broker-circuit-prover-facade', bindings);
|
|
81
|
+
}
|
|
74
82
|
|
|
75
83
|
/**
|
|
76
84
|
* This is a critical section. This function can not be async since it writes
|
|
@@ -124,7 +132,7 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
|
|
|
124
132
|
id: ProvingJobId,
|
|
125
133
|
type: T,
|
|
126
134
|
inputs: ProvingJobInputsMap[T],
|
|
127
|
-
epochNumber =
|
|
135
|
+
epochNumber = EpochNumber.ZERO,
|
|
128
136
|
signal?: AbortSignal,
|
|
129
137
|
): Promise<ProvingJobResultsMap[T]> {
|
|
130
138
|
const { job: job, isEnqueued } = this.getOrCreateProvingJob(id, type, signal);
|
|
@@ -391,210 +399,267 @@ export class BrokerCircuitProverFacade implements ServerCircuitProver {
|
|
|
391
399
|
|
|
392
400
|
getAvmProof(
|
|
393
401
|
inputs: AvmCircuitInputs,
|
|
394
|
-
skipPublicInputsValidation?: boolean, // TODO(#14234)[Unconditional PIs validation]: remove this argument
|
|
395
402
|
signal?: AbortSignal,
|
|
396
|
-
epochNumber?:
|
|
397
|
-
): Promise<
|
|
398
|
-
this.log.info(`getAvmProof() called with skipPublicInputsValidation: ${skipPublicInputsValidation}`);
|
|
399
|
-
|
|
403
|
+
epochNumber?: EpochNumber,
|
|
404
|
+
): Promise<RecursiveProof<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>> {
|
|
400
405
|
return this.enqueueJob(
|
|
401
406
|
this.generateId(ProvingRequestType.PUBLIC_VM, inputs, epochNumber),
|
|
402
407
|
ProvingRequestType.PUBLIC_VM,
|
|
403
408
|
inputs,
|
|
404
409
|
epochNumber,
|
|
405
410
|
signal,
|
|
406
|
-
)
|
|
407
|
-
// TODO(#14234)[Unconditional PIs validation]: Remove ".then()".
|
|
408
|
-
// Override the default value of skipPublicInputsValidation potentially set in BBNativeRollupProver.getAvmProof().
|
|
409
|
-
result.proof.proof[0] = skipPublicInputsValidation ? new Fr(1) : new Fr(0);
|
|
410
|
-
return result;
|
|
411
|
-
});
|
|
411
|
+
);
|
|
412
412
|
}
|
|
413
413
|
|
|
414
414
|
getBaseParityProof(
|
|
415
|
-
inputs:
|
|
415
|
+
inputs: ParityBasePrivateInputs,
|
|
416
416
|
signal?: AbortSignal,
|
|
417
|
-
epochNumber?:
|
|
417
|
+
epochNumber?: EpochNumber,
|
|
418
418
|
): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
|
|
419
419
|
return this.enqueueJob(
|
|
420
|
-
this.generateId(ProvingRequestType.
|
|
421
|
-
ProvingRequestType.
|
|
420
|
+
this.generateId(ProvingRequestType.PARITY_BASE, inputs, epochNumber),
|
|
421
|
+
ProvingRequestType.PARITY_BASE,
|
|
422
422
|
inputs,
|
|
423
423
|
epochNumber,
|
|
424
424
|
signal,
|
|
425
425
|
);
|
|
426
426
|
}
|
|
427
427
|
|
|
428
|
-
|
|
429
|
-
input:
|
|
428
|
+
getTxMergeRollupProof(
|
|
429
|
+
input: TxMergeRollupPrivateInputs,
|
|
430
430
|
signal?: AbortSignal,
|
|
431
|
-
epochNumber?:
|
|
432
|
-
): Promise<
|
|
433
|
-
PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
434
|
-
> {
|
|
431
|
+
epochNumber?: EpochNumber,
|
|
432
|
+
): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
435
433
|
return this.enqueueJob(
|
|
436
|
-
this.generateId(ProvingRequestType.
|
|
437
|
-
ProvingRequestType.
|
|
434
|
+
this.generateId(ProvingRequestType.TX_MERGE_ROLLUP, input, epochNumber),
|
|
435
|
+
ProvingRequestType.TX_MERGE_ROLLUP,
|
|
438
436
|
input,
|
|
439
437
|
epochNumber,
|
|
440
438
|
signal,
|
|
441
439
|
);
|
|
442
440
|
}
|
|
443
441
|
|
|
444
|
-
|
|
445
|
-
|
|
442
|
+
getPublicChonkVerifierProof(
|
|
443
|
+
inputs: PublicChonkVerifierPrivateInputs,
|
|
446
444
|
signal?: AbortSignal,
|
|
447
|
-
epochNumber?:
|
|
445
|
+
epochNumber?: EpochNumber,
|
|
448
446
|
): Promise<
|
|
449
|
-
PublicInputsAndRecursiveProof<
|
|
447
|
+
PublicInputsAndRecursiveProof<PublicChonkVerifierPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
450
448
|
> {
|
|
451
449
|
return this.enqueueJob(
|
|
452
|
-
this.generateId(ProvingRequestType.
|
|
453
|
-
ProvingRequestType.
|
|
450
|
+
this.generateId(ProvingRequestType.PUBLIC_CHONK_VERIFIER, inputs, epochNumber),
|
|
451
|
+
ProvingRequestType.PUBLIC_CHONK_VERIFIER,
|
|
452
|
+
inputs,
|
|
453
|
+
epochNumber,
|
|
454
|
+
signal,
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
getPrivateTxBaseRollupProof(
|
|
459
|
+
baseRollupInput: PrivateTxBaseRollupPrivateInputs,
|
|
460
|
+
signal?: AbortSignal,
|
|
461
|
+
epochNumber?: EpochNumber,
|
|
462
|
+
): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
463
|
+
return this.enqueueJob(
|
|
464
|
+
this.generateId(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP, baseRollupInput, epochNumber),
|
|
465
|
+
ProvingRequestType.PRIVATE_TX_BASE_ROLLUP,
|
|
466
|
+
baseRollupInput,
|
|
467
|
+
epochNumber,
|
|
468
|
+
signal,
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
getPublicTxBaseRollupProof(
|
|
473
|
+
inputs: PublicTxBaseRollupPrivateInputs,
|
|
474
|
+
signal?: AbortSignal,
|
|
475
|
+
epochNumber?: EpochNumber,
|
|
476
|
+
): Promise<PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
477
|
+
return this.enqueueJob(
|
|
478
|
+
this.generateId(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP, inputs, epochNumber),
|
|
479
|
+
ProvingRequestType.PUBLIC_TX_BASE_ROLLUP,
|
|
480
|
+
inputs,
|
|
481
|
+
epochNumber,
|
|
482
|
+
signal,
|
|
483
|
+
);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
getRootParityProof(
|
|
487
|
+
inputs: ParityRootPrivateInputs,
|
|
488
|
+
signal?: AbortSignal,
|
|
489
|
+
epochNumber?: EpochNumber,
|
|
490
|
+
): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>> {
|
|
491
|
+
return this.enqueueJob(
|
|
492
|
+
this.generateId(ProvingRequestType.PARITY_ROOT, inputs, epochNumber),
|
|
493
|
+
ProvingRequestType.PARITY_ROOT,
|
|
494
|
+
inputs,
|
|
495
|
+
epochNumber,
|
|
496
|
+
signal,
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
getBlockRootFirstRollupProof(
|
|
501
|
+
input: BlockRootFirstRollupPrivateInputs,
|
|
502
|
+
signal?: AbortSignal,
|
|
503
|
+
epochNumber?: EpochNumber,
|
|
504
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
505
|
+
return this.enqueueJob(
|
|
506
|
+
this.generateId(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP, input, epochNumber),
|
|
507
|
+
ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP,
|
|
454
508
|
input,
|
|
455
509
|
epochNumber,
|
|
456
510
|
signal,
|
|
457
511
|
);
|
|
458
512
|
}
|
|
459
513
|
|
|
460
|
-
|
|
461
|
-
input:
|
|
514
|
+
getBlockRootSingleTxFirstRollupProof(
|
|
515
|
+
input: BlockRootSingleTxFirstRollupPrivateInputs,
|
|
462
516
|
signal?: AbortSignal,
|
|
463
|
-
epochNumber?:
|
|
464
|
-
): Promise<
|
|
465
|
-
PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
466
|
-
> {
|
|
517
|
+
epochNumber?: EpochNumber,
|
|
518
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
467
519
|
return this.enqueueJob(
|
|
468
|
-
this.generateId(ProvingRequestType.
|
|
469
|
-
ProvingRequestType.
|
|
520
|
+
this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP, input, epochNumber),
|
|
521
|
+
ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP,
|
|
470
522
|
input,
|
|
471
523
|
epochNumber,
|
|
472
524
|
signal,
|
|
473
525
|
);
|
|
474
526
|
}
|
|
475
527
|
|
|
476
|
-
|
|
477
|
-
input:
|
|
528
|
+
getBlockRootEmptyTxFirstRollupProof(
|
|
529
|
+
input: BlockRootEmptyTxFirstRollupPrivateInputs,
|
|
478
530
|
signal?: AbortSignal,
|
|
479
|
-
epochNumber?:
|
|
480
|
-
): Promise<
|
|
481
|
-
PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
482
|
-
> {
|
|
531
|
+
epochNumber?: EpochNumber,
|
|
532
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
483
533
|
return this.enqueueJob(
|
|
484
|
-
this.generateId(ProvingRequestType.
|
|
485
|
-
ProvingRequestType.
|
|
534
|
+
this.generateId(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP, input, epochNumber),
|
|
535
|
+
ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP,
|
|
486
536
|
input,
|
|
487
537
|
epochNumber,
|
|
488
538
|
signal,
|
|
489
539
|
);
|
|
490
540
|
}
|
|
491
541
|
|
|
492
|
-
|
|
493
|
-
input:
|
|
542
|
+
getBlockRootRollupProof(
|
|
543
|
+
input: BlockRootRollupPrivateInputs,
|
|
494
544
|
signal?: AbortSignal,
|
|
495
|
-
epochNumber?:
|
|
496
|
-
): Promise<
|
|
497
|
-
PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
498
|
-
> {
|
|
545
|
+
epochNumber?: EpochNumber,
|
|
546
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
499
547
|
return this.enqueueJob(
|
|
500
|
-
this.generateId(ProvingRequestType.
|
|
501
|
-
ProvingRequestType.
|
|
548
|
+
this.generateId(ProvingRequestType.BLOCK_ROOT_ROLLUP, input, epochNumber),
|
|
549
|
+
ProvingRequestType.BLOCK_ROOT_ROLLUP,
|
|
502
550
|
input,
|
|
503
551
|
epochNumber,
|
|
504
552
|
signal,
|
|
505
553
|
);
|
|
506
554
|
}
|
|
507
555
|
|
|
508
|
-
|
|
509
|
-
input:
|
|
556
|
+
getBlockRootSingleTxRollupProof(
|
|
557
|
+
input: BlockRootSingleTxRollupPrivateInputs,
|
|
510
558
|
signal?: AbortSignal,
|
|
511
|
-
epochNumber?:
|
|
512
|
-
): Promise<
|
|
513
|
-
PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
514
|
-
> {
|
|
559
|
+
epochNumber?: EpochNumber,
|
|
560
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
515
561
|
return this.enqueueJob(
|
|
516
|
-
this.generateId(ProvingRequestType.
|
|
517
|
-
ProvingRequestType.
|
|
562
|
+
this.generateId(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP, input, epochNumber),
|
|
563
|
+
ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP,
|
|
518
564
|
input,
|
|
519
565
|
epochNumber,
|
|
520
566
|
signal,
|
|
521
567
|
);
|
|
522
568
|
}
|
|
523
|
-
|
|
524
|
-
|
|
569
|
+
|
|
570
|
+
getBlockMergeRollupProof(
|
|
571
|
+
input: BlockMergeRollupPrivateInputs,
|
|
525
572
|
signal?: AbortSignal,
|
|
526
|
-
epochNumber?:
|
|
573
|
+
epochNumber?: EpochNumber,
|
|
574
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>> {
|
|
575
|
+
return this.enqueueJob(
|
|
576
|
+
this.generateId(ProvingRequestType.BLOCK_MERGE_ROLLUP, input, epochNumber),
|
|
577
|
+
ProvingRequestType.BLOCK_MERGE_ROLLUP,
|
|
578
|
+
input,
|
|
579
|
+
epochNumber,
|
|
580
|
+
signal,
|
|
581
|
+
);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
getCheckpointRootRollupProof(
|
|
585
|
+
input: CheckpointRootRollupPrivateInputs,
|
|
586
|
+
signal?: AbortSignal,
|
|
587
|
+
epochNumber?: EpochNumber,
|
|
527
588
|
): Promise<
|
|
528
|
-
PublicInputsAndRecursiveProof<
|
|
589
|
+
PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
529
590
|
> {
|
|
530
591
|
return this.enqueueJob(
|
|
531
|
-
this.generateId(ProvingRequestType.
|
|
532
|
-
ProvingRequestType.
|
|
533
|
-
|
|
592
|
+
this.generateId(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP, input, epochNumber),
|
|
593
|
+
ProvingRequestType.CHECKPOINT_ROOT_ROLLUP,
|
|
594
|
+
input,
|
|
534
595
|
epochNumber,
|
|
535
596
|
signal,
|
|
536
597
|
);
|
|
537
598
|
}
|
|
538
599
|
|
|
539
|
-
|
|
540
|
-
|
|
600
|
+
getCheckpointRootSingleBlockRollupProof(
|
|
601
|
+
input: CheckpointRootSingleBlockRollupPrivateInputs,
|
|
541
602
|
signal?: AbortSignal,
|
|
542
|
-
epochNumber?:
|
|
603
|
+
epochNumber?: EpochNumber,
|
|
543
604
|
): Promise<
|
|
544
|
-
PublicInputsAndRecursiveProof<
|
|
605
|
+
PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
545
606
|
> {
|
|
546
607
|
return this.enqueueJob(
|
|
547
|
-
this.generateId(ProvingRequestType.
|
|
548
|
-
ProvingRequestType.
|
|
549
|
-
|
|
608
|
+
this.generateId(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP, input, epochNumber),
|
|
609
|
+
ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP,
|
|
610
|
+
input,
|
|
550
611
|
epochNumber,
|
|
551
612
|
signal,
|
|
552
613
|
);
|
|
553
614
|
}
|
|
554
615
|
|
|
555
|
-
|
|
556
|
-
|
|
616
|
+
getCheckpointPaddingRollupProof(
|
|
617
|
+
input: CheckpointPaddingRollupPrivateInputs,
|
|
557
618
|
signal?: AbortSignal,
|
|
558
|
-
epochNumber?:
|
|
559
|
-
): Promise<
|
|
619
|
+
epochNumber?: EpochNumber,
|
|
620
|
+
): Promise<
|
|
621
|
+
PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
622
|
+
> {
|
|
560
623
|
return this.enqueueJob(
|
|
561
|
-
this.generateId(ProvingRequestType.
|
|
562
|
-
ProvingRequestType.
|
|
563
|
-
|
|
624
|
+
this.generateId(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP, input, epochNumber),
|
|
625
|
+
ProvingRequestType.CHECKPOINT_PADDING_ROLLUP,
|
|
626
|
+
input,
|
|
564
627
|
epochNumber,
|
|
565
628
|
signal,
|
|
566
629
|
);
|
|
567
630
|
}
|
|
568
631
|
|
|
569
|
-
|
|
570
|
-
input:
|
|
632
|
+
getCheckpointMergeRollupProof(
|
|
633
|
+
input: CheckpointMergeRollupPrivateInputs,
|
|
571
634
|
signal?: AbortSignal,
|
|
572
|
-
epochNumber?:
|
|
573
|
-
): Promise<
|
|
635
|
+
epochNumber?: EpochNumber,
|
|
636
|
+
): Promise<
|
|
637
|
+
PublicInputsAndRecursiveProof<CheckpointRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
|
|
638
|
+
> {
|
|
574
639
|
return this.enqueueJob(
|
|
575
|
-
this.generateId(ProvingRequestType.
|
|
576
|
-
ProvingRequestType.
|
|
640
|
+
this.generateId(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP, input, epochNumber),
|
|
641
|
+
ProvingRequestType.CHECKPOINT_MERGE_ROLLUP,
|
|
577
642
|
input,
|
|
578
643
|
epochNumber,
|
|
579
644
|
signal,
|
|
580
645
|
);
|
|
581
646
|
}
|
|
582
647
|
|
|
583
|
-
|
|
584
|
-
|
|
648
|
+
getRootRollupProof(
|
|
649
|
+
input: RootRollupPrivateInputs,
|
|
585
650
|
signal?: AbortSignal,
|
|
586
|
-
epochNumber?:
|
|
587
|
-
): Promise<
|
|
651
|
+
epochNumber?: EpochNumber,
|
|
652
|
+
): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs, typeof RECURSIVE_PROOF_LENGTH>> {
|
|
588
653
|
return this.enqueueJob(
|
|
589
|
-
this.generateId(ProvingRequestType.
|
|
590
|
-
ProvingRequestType.
|
|
591
|
-
|
|
654
|
+
this.generateId(ProvingRequestType.ROOT_ROLLUP, input, epochNumber),
|
|
655
|
+
ProvingRequestType.ROOT_ROLLUP,
|
|
656
|
+
input,
|
|
592
657
|
epochNumber,
|
|
593
658
|
signal,
|
|
594
659
|
);
|
|
595
660
|
}
|
|
596
661
|
|
|
597
|
-
private generateId(type: ProvingRequestType, inputs: { toBuffer(): Buffer }, epochNumber =
|
|
662
|
+
private generateId(type: ProvingRequestType, inputs: { toBuffer(): Buffer }, epochNumber = EpochNumber.ZERO) {
|
|
598
663
|
const inputsHash = sha256(inputs.toBuffer());
|
|
599
664
|
return makeProvingJobId(epochNumber, type, inputsHash.toString('hex'));
|
|
600
665
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type L1ReaderConfig, l1ReaderConfigMappings } from '@aztec/ethereum';
|
|
1
|
+
import { type L1ReaderConfig, l1ReaderConfigMappings } from '@aztec/ethereum/l1-reader';
|
|
2
2
|
import {
|
|
3
3
|
type ConfigMappingsType,
|
|
4
4
|
booleanConfigHelper,
|
|
@@ -31,6 +31,8 @@ export const ProverBrokerConfig = z.object({
|
|
|
31
31
|
proverBrokerBatchIntervalMs: z.number().int().nonnegative(),
|
|
32
32
|
/** The maximum number of epochs to keep results for */
|
|
33
33
|
proverBrokerMaxEpochsToKeepResultsFor: z.number().int().nonnegative(),
|
|
34
|
+
/** Enable debug replay mode for replaying proving jobs from stored inputs */
|
|
35
|
+
proverBrokerDebugReplayEnabled: z.boolean(),
|
|
34
36
|
});
|
|
35
37
|
|
|
36
38
|
export type ProverBrokerConfig = z.infer<typeof ProverBrokerConfig> &
|
|
@@ -74,6 +76,11 @@ export const proverBrokerConfigMappings: ConfigMappingsType<ProverBrokerConfig>
|
|
|
74
76
|
parseEnv: (val: string | undefined) => (val ? +val : undefined),
|
|
75
77
|
description: "The size of the prover broker's database. Will override the dataStoreMapSizeKb if set.",
|
|
76
78
|
},
|
|
79
|
+
proverBrokerDebugReplayEnabled: {
|
|
80
|
+
env: 'PROVER_BROKER_DEBUG_REPLAY_ENABLED',
|
|
81
|
+
description: 'Enable debug replay mode for replaying proving jobs from stored inputs',
|
|
82
|
+
...booleanConfigHelper(false),
|
|
83
|
+
},
|
|
77
84
|
...dataConfigMappings,
|
|
78
85
|
...l1ReaderConfigMappings,
|
|
79
86
|
...pickConfigMappings(chainConfigMappings, ['rollupVersion']),
|
|
@@ -98,6 +105,12 @@ export const ProverAgentConfig = z.object({
|
|
|
98
105
|
proverTestDelayMs: z.number(),
|
|
99
106
|
/** If using realistic delays, what percentage of realistic times to apply. */
|
|
100
107
|
proverTestDelayFactor: z.number(),
|
|
108
|
+
/** The delay (ms) to inject during fake proof verification */
|
|
109
|
+
proverTestVerificationDelayMs: z.number().optional(),
|
|
110
|
+
/** Whether to abort pending proving jobs when the orchestrator is cancelled */
|
|
111
|
+
cancelJobsOnStop: z.boolean(),
|
|
112
|
+
/** Where to store proving results. Must be accessible to both prover node and agents. If not set will inline-encode the parameters */
|
|
113
|
+
proofStore: z.string().optional(),
|
|
101
114
|
});
|
|
102
115
|
|
|
103
116
|
export type ProverAgentConfig = z.infer<typeof ProverAgentConfig>;
|
|
@@ -146,4 +159,20 @@ export const proverAgentConfigMappings: ConfigMappingsType<ProverAgentConfig> =
|
|
|
146
159
|
description: 'If using realistic delays, what percentage of realistic times to apply.',
|
|
147
160
|
...numberConfigHelper(1),
|
|
148
161
|
},
|
|
162
|
+
proverTestVerificationDelayMs: {
|
|
163
|
+
env: 'PROVER_TEST_VERIFICATION_DELAY_MS',
|
|
164
|
+
description: 'The delay (ms) to inject during fake proof verification',
|
|
165
|
+
...numberConfigHelper(10),
|
|
166
|
+
},
|
|
167
|
+
cancelJobsOnStop: {
|
|
168
|
+
env: 'PROVER_CANCEL_JOBS_ON_STOP',
|
|
169
|
+
description:
|
|
170
|
+
'Whether to abort pending proving jobs when the orchestrator is cancelled. ' +
|
|
171
|
+
'When false (default), jobs remain in the broker queue and can be reused on restart/reorg.',
|
|
172
|
+
...booleanConfigHelper(false),
|
|
173
|
+
},
|
|
174
|
+
proofStore: {
|
|
175
|
+
env: 'PROVER_PROOF_STORE',
|
|
176
|
+
description: 'Optional proof input store for the prover',
|
|
177
|
+
},
|
|
149
178
|
};
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { randomBytes } from '@aztec/foundation/crypto/random';
|
|
2
3
|
import { type ProofUri, type ProvingJobId, makeProvingJobId } from '@aztec/stdlib/interfaces/server';
|
|
3
4
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
4
5
|
|
|
5
|
-
export function makeRandomProvingJobId(epochNumber?:
|
|
6
|
-
return makeProvingJobId(
|
|
6
|
+
export function makeRandomProvingJobId(epochNumber?: EpochNumber): ProvingJobId {
|
|
7
|
+
return makeProvingJobId(
|
|
8
|
+
epochNumber ?? EpochNumber(1),
|
|
9
|
+
ProvingRequestType.PARITY_BASE,
|
|
10
|
+
randomBytes(8).toString('hex'),
|
|
11
|
+
);
|
|
7
12
|
}
|
|
8
13
|
|
|
9
14
|
export function makeInputsUri(): ProofUri {
|
|
@@ -1,42 +1,20 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { createFileStore } from '@aztec/stdlib/file-store';
|
|
2
3
|
|
|
3
|
-
import {
|
|
4
|
+
import { FileStoreProofStore } from './file_store_proof_store.js';
|
|
4
5
|
import { InlineProofStore } from './inline_proof_store.js';
|
|
5
6
|
import type { ProofStore } from './proof_store.js';
|
|
6
7
|
|
|
7
|
-
export function createProofStore(
|
|
8
|
-
|
|
8
|
+
export async function createProofStore(
|
|
9
|
+
config: string | undefined,
|
|
10
|
+
logger = createLogger('prover-client:proof-store'),
|
|
11
|
+
): Promise<ProofStore> {
|
|
12
|
+
if (!config) {
|
|
9
13
|
logger.info('Creating inline proof store');
|
|
10
14
|
return new InlineProofStore();
|
|
11
|
-
} else if (config.startsWith('gs://')) {
|
|
12
|
-
try {
|
|
13
|
-
const url = new URL(config);
|
|
14
|
-
const bucket = url.host;
|
|
15
|
-
const path = url.pathname.replace(/^\/+/, '');
|
|
16
|
-
logger.info(`Creating google cloud proof store at ${bucket}`, { bucket, path });
|
|
17
|
-
return new GoogleCloudStorageProofStore(bucket, path);
|
|
18
|
-
} catch {
|
|
19
|
-
throw new Error(
|
|
20
|
-
`Invalid google cloud proof store definition: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`,
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
} else {
|
|
24
|
-
throw new Error(`Unknown proof store config: '${config}'. Supported values are 'gs://bucket-name/path/to/store'.`);
|
|
25
15
|
}
|
|
26
|
-
}
|
|
27
16
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
): Pick<ProofStore, 'getProofInput' | 'getProofOutput'> {
|
|
32
|
-
if (uri.startsWith('data://')) {
|
|
33
|
-
return createProofStore(undefined, logger);
|
|
34
|
-
} else if (uri.startsWith('gs://')) {
|
|
35
|
-
const url = new URL(uri);
|
|
36
|
-
const basePath = url.pathname.replace(/^\/+/, '').split('/').slice(0, -3);
|
|
37
|
-
url.pathname = basePath.join('/');
|
|
38
|
-
return createProofStore(uri, logger);
|
|
39
|
-
} else {
|
|
40
|
-
throw new Error(`Unknown proof store config: '${uri}'. Supported protocols are 'data://' and 'gs://'.`);
|
|
41
|
-
}
|
|
17
|
+
const fileStore = await createFileStore(config, logger);
|
|
18
|
+
logger.info(`Creating file store proof store at ${config}`);
|
|
19
|
+
return new FileStoreProofStore(fileStore);
|
|
42
20
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { jsonParseWithSchema, jsonStringify } from '@aztec/foundation/json-rpc';
|
|
2
|
+
import type { FileStore } from '@aztec/stdlib/file-store';
|
|
3
|
+
import {
|
|
4
|
+
type ProofUri,
|
|
5
|
+
type ProvingJobId,
|
|
6
|
+
type ProvingJobInputs,
|
|
7
|
+
type ProvingJobInputsMap,
|
|
8
|
+
ProvingJobResult,
|
|
9
|
+
type ProvingJobResultsMap,
|
|
10
|
+
getProvingJobInputClassFor,
|
|
11
|
+
} from '@aztec/stdlib/interfaces/server';
|
|
12
|
+
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
13
|
+
|
|
14
|
+
import type { ProofStore } from './proof_store.js';
|
|
15
|
+
|
|
16
|
+
const INPUTS_PATH = 'inputs';
|
|
17
|
+
const OUTPUTS_PATH = 'outputs';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A proof store implementation backed by a generic FileStore.
|
|
21
|
+
* Supports any storage backend (GCS, S3, local filesystem) via the FileStore abstraction.
|
|
22
|
+
*/
|
|
23
|
+
export class FileStoreProofStore implements ProofStore {
|
|
24
|
+
constructor(private readonly fileStore: FileStore) {}
|
|
25
|
+
|
|
26
|
+
async saveProofInput<T extends ProvingRequestType>(
|
|
27
|
+
id: ProvingJobId,
|
|
28
|
+
type: T,
|
|
29
|
+
inputs: ProvingJobInputsMap[T],
|
|
30
|
+
): Promise<ProofUri> {
|
|
31
|
+
const path = `${INPUTS_PATH}/${ProvingRequestType[type]}/${id}`;
|
|
32
|
+
const uri = await this.fileStore.save(path, inputs.toBuffer());
|
|
33
|
+
return uri as ProofUri;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async saveProofOutput<T extends ProvingRequestType>(
|
|
37
|
+
id: ProvingJobId,
|
|
38
|
+
type: T,
|
|
39
|
+
result: ProvingJobResultsMap[T],
|
|
40
|
+
): Promise<ProofUri> {
|
|
41
|
+
const jobResult = { type, result } as ProvingJobResult;
|
|
42
|
+
const json = jsonStringify(jobResult);
|
|
43
|
+
const path = `${OUTPUTS_PATH}/${ProvingRequestType[type]}/${id}.json`;
|
|
44
|
+
const uri = await this.fileStore.save(path, Buffer.from(json, 'utf-8'));
|
|
45
|
+
return uri as ProofUri;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async getProofInput(uri: ProofUri): Promise<ProvingJobInputs> {
|
|
49
|
+
try {
|
|
50
|
+
const buffer = await this.fileStore.read(uri);
|
|
51
|
+
const type = this.extractTypeFromUri(uri);
|
|
52
|
+
const inputs = getProvingJobInputClassFor(type).fromBuffer(buffer);
|
|
53
|
+
return { inputs, type } as ProvingJobInputs;
|
|
54
|
+
} catch (err) {
|
|
55
|
+
throw new Error(`Error getting proof input at ${uri}: ${err}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async getProofOutput(uri: ProofUri): Promise<ProvingJobResult> {
|
|
60
|
+
try {
|
|
61
|
+
const buffer = await this.fileStore.read(uri);
|
|
62
|
+
return jsonParseWithSchema(buffer.toString('utf-8'), ProvingJobResult);
|
|
63
|
+
} catch (err) {
|
|
64
|
+
throw new Error(`Error getting proof output at ${uri}: ${err}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private extractTypeFromUri(uri: string): ProvingRequestType {
|
|
69
|
+
const url = new URL(uri);
|
|
70
|
+
const pathParts = url.pathname.split('/').filter(Boolean);
|
|
71
|
+
const typeString = pathParts.at(-2);
|
|
72
|
+
const type = typeString ? ProvingRequestType[typeString as keyof typeof ProvingRequestType] : undefined;
|
|
73
|
+
if (type === undefined) {
|
|
74
|
+
throw new Error(`Unrecognized proof type ${typeString} in URI ${uri}`);
|
|
75
|
+
}
|
|
76
|
+
return type;
|
|
77
|
+
}
|
|
78
|
+
}
|