@aztec/prover-client 0.73.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
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/bin/get-proof-inputs.js +18 -16
- package/dest/block_builder/index.js +0 -1
- package/dest/block_builder/light.js +23 -13
- package/dest/config.js +9 -11
- package/dest/index.js +0 -1
- package/dest/mocks/fixtures.js +28 -26
- package/dest/mocks/test_context.js +55 -31
- package/dest/orchestrator/block-building-helpers.js +90 -90
- package/dest/orchestrator/block-proving-state.js +95 -70
- package/dest/orchestrator/epoch-proving-state.js +53 -40
- package/dest/orchestrator/index.js +0 -1
- package/dest/orchestrator/orchestrator.js +649 -653
- package/dest/orchestrator/orchestrator_metrics.js +4 -3
- package/dest/orchestrator/tx-proving-state.js +52 -51
- package/dest/prover-agent/index.js +0 -1
- package/dest/prover-agent/memory-proving-queue.js +237 -248
- package/dest/prover-agent/prover-agent.js +184 -187
- package/dest/prover-agent/proving-error.js +0 -1
- package/dest/prover-agent/queue_metrics.js +6 -5
- package/dest/prover-agent/rpc.js +6 -4
- package/dest/prover-client/factory.js +0 -1
- package/dest/prover-client/index.js +0 -1
- package/dest/prover-client/prover-client.js +30 -25
- package/dest/prover-client/server-epoch-prover.js +4 -4
- package/dest/proving_broker/broker_prover_facade.js +70 -59
- package/dest/proving_broker/config.js +22 -37
- package/dest/proving_broker/factory.js +1 -2
- package/dest/proving_broker/fixtures.js +0 -1
- package/dest/proving_broker/index.js +0 -1
- package/dest/proving_broker/proof_store/factory.js +9 -12
- package/dest/proving_broker/proof_store/gcs_proof_store.js +11 -7
- package/dest/proving_broker/proof_store/index.js +0 -1
- package/dest/proving_broker/proof_store/inline_proof_store.js +11 -7
- package/dest/proving_broker/proof_store/proof_store.js +3 -2
- package/dest/proving_broker/proving_agent.js +121 -110
- package/dest/proving_broker/proving_agent_instrumentation.js +3 -3
- package/dest/proving_broker/proving_broker.js +491 -451
- package/dest/proving_broker/proving_broker_database/memory.js +19 -13
- package/dest/proving_broker/proving_broker_database/persisted.js +41 -21
- package/dest/proving_broker/proving_broker_database.js +3 -2
- package/dest/proving_broker/proving_broker_instrumentation.js +28 -21
- package/dest/proving_broker/proving_job_controller.js +81 -62
- package/dest/proving_broker/rpc.js +23 -15
- package/dest/test/mock_prover.js +11 -9
- package/package.json +13 -11
- package/src/index.ts +1 -1
- package/src/orchestrator/block-building-helpers.ts +1 -1
- package/src/proving_broker/proving_agent.ts +30 -11
- package/src/proving_broker/proving_broker.ts +53 -27
- package/src/proving_broker/rpc.ts +8 -2
- package/dest/bin/get-proof-inputs.d.ts +0 -2
- package/dest/bin/get-proof-inputs.d.ts.map +0 -1
- package/dest/block_builder/index.d.ts +0 -6
- package/dest/block_builder/index.d.ts.map +0 -1
- package/dest/block_builder/light.d.ts +0 -31
- package/dest/block_builder/light.d.ts.map +0 -1
- package/dest/config.d.ts +0 -17
- package/dest/config.d.ts.map +0 -1
- package/dest/index.d.ts +0 -4
- package/dest/index.d.ts.map +0 -1
- package/dest/mocks/fixtures.d.ts +0 -19
- package/dest/mocks/fixtures.d.ts.map +0 -1
- package/dest/mocks/test_context.d.ts +0 -49
- package/dest/mocks/test_context.d.ts.map +0 -1
- package/dest/orchestrator/block-building-helpers.d.ts +0 -50
- package/dest/orchestrator/block-building-helpers.d.ts.map +0 -1
- package/dest/orchestrator/block-proving-state.d.ts +0 -71
- package/dest/orchestrator/block-proving-state.d.ts.map +0 -1
- package/dest/orchestrator/epoch-proving-state.d.ts +0 -56
- package/dest/orchestrator/epoch-proving-state.d.ts.map +0 -1
- package/dest/orchestrator/index.d.ts +0 -2
- package/dest/orchestrator/index.d.ts.map +0 -1
- package/dest/orchestrator/orchestrator.d.ts +0 -108
- package/dest/orchestrator/orchestrator.d.ts.map +0 -1
- package/dest/orchestrator/orchestrator_metrics.d.ts +0 -8
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +0 -1
- package/dest/orchestrator/tx-proving-state.d.ts +0 -31
- package/dest/orchestrator/tx-proving-state.d.ts.map +0 -1
- package/dest/prover-agent/index.d.ts +0 -4
- package/dest/prover-agent/index.d.ts.map +0 -1
- package/dest/prover-agent/memory-proving-queue.d.ts +0 -82
- package/dest/prover-agent/memory-proving-queue.d.ts.map +0 -1
- package/dest/prover-agent/prover-agent.d.ts +0 -43
- package/dest/prover-agent/prover-agent.d.ts.map +0 -1
- package/dest/prover-agent/proving-error.d.ts +0 -5
- package/dest/prover-agent/proving-error.d.ts.map +0 -1
- package/dest/prover-agent/queue_metrics.d.ts +0 -10
- package/dest/prover-agent/queue_metrics.d.ts.map +0 -1
- package/dest/prover-agent/rpc.d.ts +0 -11
- package/dest/prover-agent/rpc.d.ts.map +0 -1
- package/dest/prover-client/factory.d.ts +0 -6
- package/dest/prover-client/factory.d.ts.map +0 -1
- package/dest/prover-client/index.d.ts +0 -3
- package/dest/prover-client/index.d.ts.map +0 -1
- package/dest/prover-client/prover-client.d.ts +0 -42
- package/dest/prover-client/prover-client.d.ts.map +0 -1
- package/dest/prover-client/server-epoch-prover.d.ts +0 -25
- package/dest/prover-client/server-epoch-prover.d.ts.map +0 -1
- package/dest/proving_broker/broker_prover_facade.d.ts +0 -39
- package/dest/proving_broker/broker_prover_facade.d.ts.map +0 -1
- package/dest/proving_broker/config.d.ts +0 -61
- package/dest/proving_broker/config.d.ts.map +0 -1
- package/dest/proving_broker/factory.d.ts +0 -5
- package/dest/proving_broker/factory.d.ts.map +0 -1
- package/dest/proving_broker/fixtures.d.ts +0 -5
- package/dest/proving_broker/fixtures.d.ts.map +0 -1
- package/dest/proving_broker/index.d.ts +0 -10
- package/dest/proving_broker/index.d.ts.map +0 -1
- package/dest/proving_broker/proof_store/factory.d.ts +0 -6
- package/dest/proving_broker/proof_store/factory.d.ts.map +0 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +0 -13
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +0 -1
- package/dest/proving_broker/proof_store/index.d.ts +0 -4
- package/dest/proving_broker/proof_store/index.d.ts.map +0 -1
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +0 -14
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +0 -1
- package/dest/proving_broker/proof_store/proof_store.d.ts +0 -35
- package/dest/proving_broker/proof_store/proof_store.d.ts.map +0 -1
- package/dest/proving_broker/proving_agent.d.ts +0 -44
- package/dest/proving_broker/proving_agent.d.ts.map +0 -1
- 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_broker.d.ts +0 -75
- package/dest/proving_broker/proving_broker.d.ts.map +0 -1
- package/dest/proving_broker/proving_broker_database/memory.d.ts +0 -16
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +0 -1
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +0 -21
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +0 -1
- package/dest/proving_broker/proving_broker_database.d.ts +0 -39
- package/dest/proving_broker/proving_broker_database.d.ts.map +0 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +0 -25
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +0 -1
- package/dest/proving_broker/proving_job_controller.d.ts +0 -31
- package/dest/proving_broker/proving_job_controller.d.ts.map +0 -1
- package/dest/proving_broker/rpc.d.ts +0 -11
- package/dest/proving_broker/rpc.d.ts.map +0 -1
- package/dest/test/mock_prover.d.ts +0 -33
- package/dest/test/mock_prover.d.ts.map +0 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import { AVM_HINTS_FILENAME, AVM_PUBLIC_INPUTS_FILENAME } from '@aztec/bb-prover';
|
|
1
|
+
/* eslint-disable no-console */ import { AVM_HINTS_FILENAME, AVM_PUBLIC_INPUTS_FILENAME } from '@aztec/bb-prover';
|
|
3
2
|
import { ProvingJobInputs, ProvingRequestType } from '@aztec/circuit-types';
|
|
4
3
|
import { jsonParseWithSchema, jsonStringify } from '@aztec/foundation/json-rpc';
|
|
5
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -20,7 +19,9 @@ async function main() {
|
|
|
20
19
|
printUsage();
|
|
21
20
|
throw new Error('Missing proof URI');
|
|
22
21
|
}
|
|
23
|
-
mkdirSync(outDir, {
|
|
22
|
+
mkdirSync(outDir, {
|
|
23
|
+
recursive: true
|
|
24
|
+
});
|
|
24
25
|
const proofStore = createProofStoreForUri(uri);
|
|
25
26
|
logger.info(`Processing uri ${uri}`);
|
|
26
27
|
const input = await proofStore.getProofInput(uri);
|
|
@@ -30,21 +31,22 @@ async function main() {
|
|
|
30
31
|
}
|
|
31
32
|
// This mimics the behavior of bb-prover/src/bb/execute.ts
|
|
32
33
|
function writeProofInputs(input, outDir) {
|
|
33
|
-
switch
|
|
34
|
-
case ProvingRequestType.PUBLIC_VM:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
34
|
+
switch(input.type){
|
|
35
|
+
case ProvingRequestType.PUBLIC_VM:
|
|
36
|
+
{
|
|
37
|
+
writeFileSync(`${outDir}/${AVM_PUBLIC_INPUTS_FILENAME}`, input.inputs.publicInputs.toBuffer());
|
|
38
|
+
logger.info(`Wrote AVM public inputs to ${AVM_PUBLIC_INPUTS_FILENAME}`);
|
|
39
|
+
writeFileSync(`${outDir}/${AVM_HINTS_FILENAME}`, input.inputs.avmHints.toBuffer());
|
|
40
|
+
logger.info(`Wrote AVM hints to ${AVM_HINTS_FILENAME}`);
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
default:
|
|
44
|
+
{
|
|
45
|
+
throw new Error(`Unimplemented proving request type: ${ProvingRequestType[input.type]}`);
|
|
46
|
+
}
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
|
-
main().catch(err
|
|
49
|
+
main().catch((err)=>{
|
|
47
50
|
console.error(err);
|
|
48
51
|
process.exit(1);
|
|
49
52
|
});
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXByb29mLWlucHV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vZ2V0LXByb29mLWlucHV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEYsT0FBTyxFQUFpQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFFOUQsU0FBUyxVQUFVO0lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDakIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLFVBQVUsRUFBRSxDQUFDO1FBQ2IsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULFVBQVUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdkMsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBZSxDQUFDLENBQUM7SUFDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0Isa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRixDQUFDO0FBRUQsMERBQTBEO0FBQzFELFNBQVMsZ0JBQWdCLENBQUMsS0FBdUIsRUFBRSxNQUFjO0lBQy9ELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLEtBQUssa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNsQyxhQUFhLENBQUMsR0FBRyxNQUFNLElBQUksMEJBQTBCLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQy9GLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLDBCQUEwQixFQUFFLENBQUMsQ0FBQztZQUN4RSxhQUFhLENBQUMsR0FBRyxNQUFNLElBQUksa0JBQWtCLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUN4RCxNQUFNO1FBQ1IsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUMifQ==
|
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
import { L2Block, MerkleTreeId, toNumBlobFields
|
|
1
|
+
import { L2Block, MerkleTreeId, toNumBlobFields } from '@aztec/circuit-types';
|
|
2
2
|
import { Fr, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/circuits.js';
|
|
3
3
|
import { SpongeBlob } from '@aztec/circuits.js/blobs';
|
|
4
4
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
7
|
-
import { buildBaseRollupHints, buildHeaderAndBodyFromTxs, getTreeSnapshot
|
|
7
|
+
import { buildBaseRollupHints, buildHeaderAndBodyFromTxs, getTreeSnapshot } from '../orchestrator/block-building-helpers.js';
|
|
8
8
|
/**
|
|
9
9
|
* Builds a block and its header from a set of processed tx without running any circuits.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
*/ export class LightweightBlockBuilder {
|
|
11
|
+
db;
|
|
12
|
+
telemetry;
|
|
13
|
+
spongeBlobState;
|
|
14
|
+
globalVariables;
|
|
15
|
+
l1ToL2Messages;
|
|
16
|
+
txs;
|
|
17
|
+
logger;
|
|
18
|
+
constructor(db, telemetry = getTelemetryClient()){
|
|
13
19
|
this.db = db;
|
|
14
20
|
this.telemetry = telemetry;
|
|
15
21
|
this.txs = [];
|
|
16
22
|
this.logger = createLogger('prover-client:block_builder');
|
|
17
23
|
}
|
|
18
24
|
async startNewBlock(globalVariables, l1ToL2Messages) {
|
|
19
|
-
this.logger.debug('Starting new block', {
|
|
25
|
+
this.logger.debug('Starting new block', {
|
|
26
|
+
globalVariables: globalVariables.toInspect(),
|
|
27
|
+
l1ToL2Messages
|
|
28
|
+
});
|
|
20
29
|
this.globalVariables = globalVariables;
|
|
21
30
|
this.l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
22
31
|
this.txs = [];
|
|
@@ -26,8 +35,10 @@ export class LightweightBlockBuilder {
|
|
|
26
35
|
}
|
|
27
36
|
async addTxs(txs) {
|
|
28
37
|
this.spongeBlobState = SpongeBlob.init(toNumBlobFields(txs));
|
|
29
|
-
for (const tx of txs)
|
|
30
|
-
this.logger.debug('Adding new tx to block', {
|
|
38
|
+
for (const tx of txs){
|
|
39
|
+
this.logger.debug('Adding new tx to block', {
|
|
40
|
+
txHash: tx.hash.toString()
|
|
41
|
+
});
|
|
31
42
|
this.txs.push(tx);
|
|
32
43
|
await buildBaseRollupHints(tx, this.globalVariables, this.db, this.spongeBlobState);
|
|
33
44
|
}
|
|
@@ -43,13 +54,14 @@ export class LightweightBlockBuilder {
|
|
|
43
54
|
this.logger.debug(`Built block ${block.number}`, {
|
|
44
55
|
globalVariables: this.globalVariables?.toInspect(),
|
|
45
56
|
archiveRoot: newArchive.root.toString(),
|
|
46
|
-
blockHash: block.hash.toString()
|
|
57
|
+
blockHash: block.hash.toString()
|
|
47
58
|
});
|
|
48
59
|
return block;
|
|
49
60
|
}
|
|
50
61
|
}
|
|
51
62
|
export class LightweightBlockBuilderFactory {
|
|
52
|
-
|
|
63
|
+
telemetry;
|
|
64
|
+
constructor(telemetry = getTelemetryClient()){
|
|
53
65
|
this.telemetry = telemetry;
|
|
54
66
|
}
|
|
55
67
|
create(db) {
|
|
@@ -59,11 +71,9 @@ export class LightweightBlockBuilderFactory {
|
|
|
59
71
|
/**
|
|
60
72
|
* Creates a block builder under the hood with the given txs and messages and creates a block.
|
|
61
73
|
* @param db - A db fork to use for block building.
|
|
62
|
-
*/
|
|
63
|
-
export async function buildBlock(txs, globalVariables, l1ToL2Messages, db, telemetry = getTelemetryClient()) {
|
|
74
|
+
*/ export async function buildBlock(txs, globalVariables, l1ToL2Messages, db, telemetry = getTelemetryClient()) {
|
|
64
75
|
const builder = new LightweightBlockBuilder(db, telemetry);
|
|
65
76
|
await builder.startNewBlock(globalVariables, l1ToL2Messages);
|
|
66
77
|
await builder.addTxs(txs);
|
|
67
78
|
return await builder.setBlockCompleted();
|
|
68
79
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2tfYnVpbGRlci9saWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsT0FBTyxFQUNQLFlBQVksRUFHWixlQUFlLEdBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBd0IsbUNBQW1DLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix5QkFBeUIsRUFDekIsZUFBZSxHQUNoQixNQUFNLDJDQUEyQyxDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHVCQUF1QjtJQVNsQyxZQUFvQixFQUE2QixFQUFVLFlBQTZCLGtCQUFrQixFQUFFO1FBQXhGLE9BQUUsR0FBRixFQUFFLENBQTJCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBd0M7UUFKcEcsUUFBRyxHQUFrQixFQUFFLENBQUM7UUFFZixXQUFNLEdBQUcsWUFBWSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFFeUMsQ0FBQztJQUVoSCxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWdDLEVBQUUsY0FBb0I7UUFDeEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FB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
|
package/dest/config.js
CHANGED
|
@@ -1,41 +1,39 @@
|
|
|
1
1
|
import { proverConfigMappings } from '@aztec/circuit-types';
|
|
2
2
|
import { booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
|
|
3
|
-
import { proverAgentConfigMappings, proverBrokerConfigMappings
|
|
3
|
+
import { proverAgentConfigMappings, proverBrokerConfigMappings } from './proving_broker/config.js';
|
|
4
4
|
export const bbConfigMappings = {
|
|
5
5
|
acvmWorkingDirectory: {
|
|
6
6
|
env: 'ACVM_WORKING_DIRECTORY',
|
|
7
|
-
description: 'The working directory to use for simulation/proving'
|
|
7
|
+
description: 'The working directory to use for simulation/proving'
|
|
8
8
|
},
|
|
9
9
|
acvmBinaryPath: {
|
|
10
10
|
env: 'ACVM_BINARY_PATH',
|
|
11
|
-
description: 'The path to the ACVM binary'
|
|
11
|
+
description: 'The path to the ACVM binary'
|
|
12
12
|
},
|
|
13
13
|
bbWorkingDirectory: {
|
|
14
14
|
env: 'BB_WORKING_DIRECTORY',
|
|
15
|
-
description: 'The working directory to use for proving'
|
|
15
|
+
description: 'The working directory to use for proving'
|
|
16
16
|
},
|
|
17
17
|
bbBinaryPath: {
|
|
18
18
|
env: 'BB_BINARY_PATH',
|
|
19
|
-
description: 'The path to the bb binary'
|
|
19
|
+
description: 'The path to the bb binary'
|
|
20
20
|
},
|
|
21
21
|
bbSkipCleanup: {
|
|
22
22
|
env: 'BB_SKIP_CLEANUP',
|
|
23
23
|
description: 'Whether to skip cleanup of bb temporary files',
|
|
24
|
-
...booleanConfigHelper(false)
|
|
25
|
-
}
|
|
24
|
+
...booleanConfigHelper(false)
|
|
25
|
+
}
|
|
26
26
|
};
|
|
27
27
|
export const proverClientConfigMappings = {
|
|
28
28
|
...bbConfigMappings,
|
|
29
29
|
...proverConfigMappings,
|
|
30
30
|
...proverAgentConfigMappings,
|
|
31
|
-
...proverBrokerConfigMappings
|
|
31
|
+
...proverBrokerConfigMappings
|
|
32
32
|
};
|
|
33
33
|
/**
|
|
34
34
|
* Returns the prover configuration from the environment variables.
|
|
35
35
|
* Note: If an environment variable is not set, the default value is used.
|
|
36
36
|
* @returns The prover configuration.
|
|
37
|
-
*/
|
|
38
|
-
export function getProverEnvVars() {
|
|
37
|
+
*/ export function getProverEnvVars() {
|
|
39
38
|
return getConfigFromMappings(proverClientConfigMappings);
|
|
40
39
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUEyQixtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9HLE9BQU8sRUFHTCx5QkFBeUIsRUFDekIsMEJBQTBCLEdBQzNCLE1BQU0sNEJBQTRCLENBQUM7QUFPcEMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQThDO0lBQ3pFLG9CQUFvQixFQUFFO1FBQ3BCLEdBQUcsRUFBRSx3QkFBd0I7UUFDN0IsV0FBVyxFQUFFLHFEQUFxRDtLQUNuRTtJQUNELGNBQWMsRUFBRTtRQUNkLEdBQUcsRUFBRSxrQkFBa0I7UUFDdkIsV0FBVyxFQUFFLDZCQUE2QjtLQUMzQztJQUNELGtCQUFrQixFQUFFO1FBQ2xCLEdBQUcsRUFBRSxzQkFBc0I7UUFDM0IsV0FBVyxFQUFFLDBDQUEwQztLQUN4RDtJQUNELFlBQVksRUFBRTtRQUNaLEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsV0FBVyxFQUFFLDJCQUEyQjtLQUN6QztJQUNELGFBQWEsRUFBRTtRQUNiLEdBQUcsRUFBRSxpQkFBaUI7UUFDdEIsV0FBVyxFQUFFLCtDQUErQztRQUM1RCxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQztLQUM5QjtDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBMkM7SUFDaEYsR0FBRyxnQkFBZ0I7SUFDbkIsR0FBRyxvQkFBb0I7SUFDdkIsR0FBRyx5QkFBeUI7SUFDNUIsR0FBRywwQkFBMEI7Q0FDOUIsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU8scUJBQXFCLENBQXFCLDBCQUEwQixDQUFDLENBQUM7QUFDL0UsQ0FBQyJ9
|
package/dest/index.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
export * from './prover-client/index.js';
|
|
2
2
|
export * from './config.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGFBQWEsQ0FBQyJ9
|
package/dest/mocks/fixtures.js
CHANGED
|
@@ -1,31 +1,34 @@
|
|
|
1
1
|
import { MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
-
import { AztecAddress, EthAddress, Fr, GasFees, GlobalVariables, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_TREE_HEIGHT
|
|
2
|
+
import { AztecAddress, EthAddress, Fr, GasFees, GlobalVariables, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_TREE_HEIGHT } from '@aztec/circuits.js';
|
|
3
3
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
4
4
|
import { randomBytes } from '@aztec/foundation/crypto';
|
|
5
5
|
import { fileURLToPath } from '@aztec/foundation/url';
|
|
6
6
|
import { NativeACVMSimulator, WASMSimulatorWithBlobs } from '@aztec/simulator/server';
|
|
7
7
|
import { promises as fs } from 'fs';
|
|
8
8
|
import path from 'path';
|
|
9
|
-
const { BB_RELEASE_DIR = 'cpp/build/bin', TEMP_DIR = '/tmp', BB_BINARY_PATH = '', BB_WORKING_DIRECTORY = '', BB_SKIP_CLEANUP = '', NOIR_RELEASE_DIR = 'noir-repo/target/release', ACVM_BINARY_PATH = '', ACVM_WORKING_DIRECTORY = ''
|
|
9
|
+
const { BB_RELEASE_DIR = 'cpp/build/bin', TEMP_DIR = '/tmp', BB_BINARY_PATH = '', BB_WORKING_DIRECTORY = '', BB_SKIP_CLEANUP = '', NOIR_RELEASE_DIR = 'noir-repo/target/release', ACVM_BINARY_PATH = '', ACVM_WORKING_DIRECTORY = '' } = process.env;
|
|
10
10
|
// Determines if we have access to the bb binary and a tmp folder for temp files
|
|
11
|
-
export const getEnvironmentConfig = async (logger)
|
|
11
|
+
export const getEnvironmentConfig = async (logger)=>{
|
|
12
12
|
try {
|
|
13
|
-
const expectedBBPath = BB_BINARY_PATH
|
|
14
|
-
? BB_BINARY_PATH
|
|
15
|
-
: `${path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../barretenberg/', BB_RELEASE_DIR)}/bb`;
|
|
13
|
+
const expectedBBPath = BB_BINARY_PATH ? BB_BINARY_PATH : `${path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../barretenberg/', BB_RELEASE_DIR)}/bb`;
|
|
16
14
|
await fs.access(expectedBBPath, fs.constants.R_OK);
|
|
17
15
|
const tempWorkingDirectory = `${TEMP_DIR}/${randomBytes(4).toString('hex')}`;
|
|
18
16
|
const bbWorkingDirectory = BB_WORKING_DIRECTORY ? BB_WORKING_DIRECTORY : `${tempWorkingDirectory}/bb`;
|
|
19
|
-
await fs.mkdir(bbWorkingDirectory, {
|
|
17
|
+
await fs.mkdir(bbWorkingDirectory, {
|
|
18
|
+
recursive: true
|
|
19
|
+
});
|
|
20
20
|
logger.verbose(`Using native BB binary at ${expectedBBPath} with working directory ${bbWorkingDirectory}`);
|
|
21
|
-
const expectedAcvmPath = ACVM_BINARY_PATH
|
|
22
|
-
? ACVM_BINARY_PATH
|
|
23
|
-
: `${path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../noir/', NOIR_RELEASE_DIR)}/acvm`;
|
|
21
|
+
const expectedAcvmPath = ACVM_BINARY_PATH ? ACVM_BINARY_PATH : `${path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../noir/', NOIR_RELEASE_DIR)}/acvm`;
|
|
24
22
|
await fs.access(expectedAcvmPath, fs.constants.R_OK);
|
|
25
23
|
const acvmWorkingDirectory = ACVM_WORKING_DIRECTORY ? ACVM_WORKING_DIRECTORY : `${tempWorkingDirectory}/acvm`;
|
|
26
|
-
await fs.mkdir(acvmWorkingDirectory, {
|
|
24
|
+
await fs.mkdir(acvmWorkingDirectory, {
|
|
25
|
+
recursive: true
|
|
26
|
+
});
|
|
27
27
|
logger.verbose(`Using native ACVM binary at ${expectedAcvmPath} with working directory ${acvmWorkingDirectory}`);
|
|
28
|
-
const bbSkipCleanup = [
|
|
28
|
+
const bbSkipCleanup = [
|
|
29
|
+
'1',
|
|
30
|
+
'true'
|
|
31
|
+
].includes(BB_SKIP_CLEANUP);
|
|
29
32
|
bbSkipCleanup && logger.verbose(`Not going to clean up BB working directory ${bbWorkingDirectory} after run`);
|
|
30
33
|
return {
|
|
31
34
|
acvmWorkingDirectory,
|
|
@@ -33,10 +36,9 @@ export const getEnvironmentConfig = async (logger) => {
|
|
|
33
36
|
expectedAcvmPath,
|
|
34
37
|
expectedBBPath,
|
|
35
38
|
directoryToCleanup: ACVM_WORKING_DIRECTORY && BB_WORKING_DIRECTORY ? undefined : tempWorkingDirectory,
|
|
36
|
-
bbSkipCleanup
|
|
39
|
+
bbSkipCleanup
|
|
37
40
|
};
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
41
|
+
} catch (err) {
|
|
40
42
|
logger.verbose(`Native BB not available, error: ${err}`);
|
|
41
43
|
return undefined;
|
|
42
44
|
}
|
|
@@ -45,11 +47,12 @@ export async function getSimulationProvider(config, logger) {
|
|
|
45
47
|
if (config.acvmBinaryPath && config.acvmWorkingDirectory) {
|
|
46
48
|
try {
|
|
47
49
|
await fs.access(config.acvmBinaryPath, fs.constants.R_OK);
|
|
48
|
-
await fs.mkdir(config.acvmWorkingDirectory, {
|
|
50
|
+
await fs.mkdir(config.acvmWorkingDirectory, {
|
|
51
|
+
recursive: true
|
|
52
|
+
});
|
|
49
53
|
logger?.info(`Using native ACVM at ${config.acvmBinaryPath} and working directory ${config.acvmWorkingDirectory}`);
|
|
50
54
|
return new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath);
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
55
|
+
} catch {
|
|
53
56
|
logger?.warn(`Failed to access ACVM at ${config.acvmBinaryPath}, falling back to WASM`);
|
|
54
57
|
}
|
|
55
58
|
}
|
|
@@ -57,14 +60,13 @@ export async function getSimulationProvider(config, logger) {
|
|
|
57
60
|
return new WASMSimulatorWithBlobs();
|
|
58
61
|
}
|
|
59
62
|
// Updates the expectedDb trees based on the new note hashes, contracts, and nullifiers from these txs
|
|
60
|
-
export const updateExpectedTreesFromTxs = async (db, txs)
|
|
61
|
-
await db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, txs.flatMap(tx
|
|
62
|
-
await db.batchInsert(MerkleTreeId.NULLIFIER_TREE, txs.flatMap(tx
|
|
63
|
-
for (const tx of txs)
|
|
64
|
-
await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, tx.txEffect.publicDataWrites.map(write
|
|
63
|
+
export const updateExpectedTreesFromTxs = async (db, txs)=>{
|
|
64
|
+
await db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, txs.flatMap((tx)=>padArrayEnd(tx.txEffect.noteHashes, Fr.zero(), MAX_NOTE_HASHES_PER_TX)));
|
|
65
|
+
await db.batchInsert(MerkleTreeId.NULLIFIER_TREE, txs.flatMap((tx)=>padArrayEnd(tx.txEffect.nullifiers, Fr.zero(), MAX_NULLIFIERS_PER_TX).map((x)=>x.toBuffer())), NULLIFIER_TREE_HEIGHT);
|
|
66
|
+
for (const tx of txs){
|
|
67
|
+
await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, tx.txEffect.publicDataWrites.map((write)=>write.toBuffer()));
|
|
65
68
|
}
|
|
66
69
|
};
|
|
67
|
-
export const makeGlobals = (blockNumber)
|
|
68
|
-
return new GlobalVariables(Fr.ZERO, Fr.ZERO, new Fr(blockNumber)
|
|
70
|
+
export const makeGlobals = (blockNumber)=>{
|
|
71
|
+
return new GlobalVariables(Fr.ZERO, Fr.ZERO, new Fr(blockNumber), new Fr(blockNumber), new Fr(blockNumber), EthAddress.ZERO, AztecAddress.ZERO, GasFees.empty());
|
|
69
72
|
};
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9ja3MvZml4dHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBb0QsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RyxPQUFPLEVBQ0wsWUFBWSxFQUNaLFVBQVUsRUFDVixFQUFFLEVBQ0YsT0FBTyxFQUNQLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLHFCQUFxQixHQUN0QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBMkIsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvRyxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFFeEIsTUFBTSxFQUNKLGNBQWMsR0FBRyxlQUFlLEVBQ2hDLFFBQVEsR0FBRyxNQUFNLEVBQ2pCLGNBQWMsR0FBRyxFQUFFLEVBQ25CLG9CQUFvQixHQUFHLEVBQUUsRUFDekIsZUFBZSxHQUFHLEVBQUUsRUFDcEIsZ0JBQWdCLEdBQUcsMEJBQTBCLEVBQzdDLGdCQUFnQixHQUFHLEVBQUUsRUFDckIsc0JBQXNCLEdBQUcsRUFBRSxHQUM1QixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFFaEIsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUMzRCxJQUFJLENBQUM7UUFDSCxNQUFNLGNBQWMsR0FBRyxjQUFjO1lBQ25DLENBQUMsQ0FBQyxjQUFj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
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { makeBloatedProcessedTx } from '@aztec/circuit-types/test';
|
|
2
|
-
import { TreeSnapshots
|
|
2
|
+
import { TreeSnapshots } from '@aztec/circuits.js';
|
|
3
3
|
import { times, timesParallel } from '@aztec/foundation/collection';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
6
6
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
|
|
7
7
|
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
8
|
-
import { PublicProcessor, PublicTxSimulator, WASMSimulatorWithBlobs
|
|
8
|
+
import { PublicProcessor, PublicTxSimulator, WASMSimulatorWithBlobs } from '@aztec/simulator/server';
|
|
9
9
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
10
10
|
import { NativeWorldStateService } from '@aztec/world-state/native';
|
|
11
11
|
import { jest } from '@jest/globals';
|
|
@@ -19,7 +19,19 @@ import { MemoryProvingQueue } from '../prover-agent/memory-proving-queue.js';
|
|
|
19
19
|
import { ProverAgent } from '../prover-agent/prover-agent.js';
|
|
20
20
|
import { getEnvironmentConfig, getSimulationProvider, makeGlobals, updateExpectedTreesFromTxs } from './fixtures.js';
|
|
21
21
|
export class TestContext {
|
|
22
|
-
|
|
22
|
+
publicTxSimulator;
|
|
23
|
+
worldState;
|
|
24
|
+
publicProcessor;
|
|
25
|
+
simulationProvider;
|
|
26
|
+
globalVariables;
|
|
27
|
+
prover;
|
|
28
|
+
proverAgent;
|
|
29
|
+
orchestrator;
|
|
30
|
+
blockNumber;
|
|
31
|
+
directoriesToCleanup;
|
|
32
|
+
logger;
|
|
33
|
+
headers;
|
|
34
|
+
constructor(publicTxSimulator, worldState, publicProcessor, simulationProvider, globalVariables, prover, proverAgent, orchestrator, blockNumber, directoriesToCleanup, logger){
|
|
23
35
|
this.publicTxSimulator = publicTxSimulator;
|
|
24
36
|
this.worldState = worldState;
|
|
25
37
|
this.publicProcessor = publicProcessor;
|
|
@@ -36,7 +48,7 @@ export class TestContext {
|
|
|
36
48
|
get epochProver() {
|
|
37
49
|
return this.orchestrator;
|
|
38
50
|
}
|
|
39
|
-
static async new(logger, proverCount = 4, createProver = _
|
|
51
|
+
static async new(logger, proverCount = 4, createProver = (_)=>Promise.resolve(new TestCircuitProver(new WASMSimulatorWithBlobs())), blockNumber = 1) {
|
|
40
52
|
const directoriesToCleanup = [];
|
|
41
53
|
const globalVariables = makeGlobals(blockNumber);
|
|
42
54
|
const worldStateDB = mock();
|
|
@@ -50,18 +62,17 @@ export class TestContext {
|
|
|
50
62
|
const config = await getEnvironmentConfig(logger);
|
|
51
63
|
const simulationProvider = await getSimulationProvider({
|
|
52
64
|
acvmWorkingDirectory: config?.acvmWorkingDirectory,
|
|
53
|
-
acvmBinaryPath: config?.expectedAcvmPath
|
|
65
|
+
acvmBinaryPath: config?.expectedAcvmPath
|
|
54
66
|
});
|
|
55
67
|
if (!config) {
|
|
56
68
|
localProver = new TestCircuitProver(simulationProvider);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
69
|
+
} else {
|
|
59
70
|
const bbConfig = {
|
|
60
71
|
acvmBinaryPath: config.expectedAcvmPath,
|
|
61
72
|
acvmWorkingDirectory: config.acvmWorkingDirectory,
|
|
62
73
|
bbBinaryPath: config.expectedBBPath,
|
|
63
74
|
bbWorkingDirectory: config.bbWorkingDirectory,
|
|
64
|
-
bbSkipCleanup: config.bbSkipCleanup
|
|
75
|
+
bbSkipCleanup: config.bbSkipCleanup
|
|
65
76
|
};
|
|
66
77
|
localProver = await createProver(bbConfig);
|
|
67
78
|
}
|
|
@@ -86,12 +97,17 @@ export class TestContext {
|
|
|
86
97
|
}
|
|
87
98
|
async cleanup() {
|
|
88
99
|
await this.proverAgent.stop();
|
|
89
|
-
for (const dir of this.directoriesToCleanup.filter(x
|
|
90
|
-
await fs.rm(dir, {
|
|
100
|
+
for (const dir of this.directoriesToCleanup.filter((x)=>x !== '')){
|
|
101
|
+
await fs.rm(dir, {
|
|
102
|
+
recursive: true,
|
|
103
|
+
force: true
|
|
104
|
+
});
|
|
91
105
|
}
|
|
92
106
|
}
|
|
93
107
|
async makeProcessedTx(seedOrOpts) {
|
|
94
|
-
const opts = typeof seedOrOpts === 'number' ? {
|
|
108
|
+
const opts = typeof seedOrOpts === 'number' ? {
|
|
109
|
+
seed: seedOrOpts
|
|
110
|
+
} : seedOrOpts;
|
|
95
111
|
const blockNum = (opts?.globalVariables ?? this.globalVariables).blockNumber.toNumber();
|
|
96
112
|
const header = this.getBlockHeader(blockNum - 1);
|
|
97
113
|
return makeBloatedProcessedTx({
|
|
@@ -99,29 +115,37 @@ export class TestContext {
|
|
|
99
115
|
vkTreeRoot: await getVKTreeRoot(),
|
|
100
116
|
protocolContractTreeRoot,
|
|
101
117
|
globalVariables: this.globalVariables,
|
|
102
|
-
...opts
|
|
118
|
+
...opts
|
|
103
119
|
});
|
|
104
120
|
}
|
|
105
|
-
/** Creates a block with the given number of txs and adds it to world-state */
|
|
106
|
-
async makePendingBlock(numTxs, numMsgs = 0, blockNumOrGlobals = this.globalVariables, makeProcessedTxOpts = () => ({})) {
|
|
121
|
+
/** Creates a block with the given number of txs and adds it to world-state */ async makePendingBlock(numTxs, numMsgs = 0, blockNumOrGlobals = this.globalVariables, makeProcessedTxOpts = ()=>({})) {
|
|
107
122
|
const globalVariables = typeof blockNumOrGlobals === 'number' ? makeGlobals(blockNumOrGlobals) : blockNumOrGlobals;
|
|
108
123
|
const blockNum = globalVariables.blockNumber.toNumber();
|
|
109
124
|
const db = await this.worldState.fork();
|
|
110
|
-
const msgs = times(numMsgs, i
|
|
111
|
-
const txs = await timesParallel(numTxs, i
|
|
125
|
+
const msgs = times(numMsgs, (i)=>new Fr(blockNum * 100 + i));
|
|
126
|
+
const txs = await timesParallel(numTxs, (i)=>this.makeProcessedTx({
|
|
127
|
+
seed: i + blockNum * 1000,
|
|
128
|
+
globalVariables,
|
|
129
|
+
...makeProcessedTxOpts(i)
|
|
130
|
+
}));
|
|
112
131
|
await this.setEndTreeRoots(txs);
|
|
113
132
|
const block = await buildBlock(txs, globalVariables, msgs, db);
|
|
114
133
|
this.headers.set(blockNum, block.header);
|
|
115
134
|
await this.worldState.handleL2BlockAndMessages(block, msgs);
|
|
116
|
-
return {
|
|
135
|
+
return {
|
|
136
|
+
block,
|
|
137
|
+
txs,
|
|
138
|
+
msgs
|
|
139
|
+
};
|
|
117
140
|
}
|
|
118
141
|
async processPublicFunctions(txs, maxTransactions) {
|
|
119
|
-
const defaultExecutorImplementation = (_stateManager, executionRequest, allocatedGas, _transactionFee, _fnName)
|
|
120
|
-
for (const tx of txs)
|
|
121
|
-
const allCalls = tx.publicTeardownFunctionCall.isEmpty()
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
142
|
+
const defaultExecutorImplementation = (_stateManager, executionRequest, allocatedGas, _transactionFee, _fnName)=>{
|
|
143
|
+
for (const tx of txs){
|
|
144
|
+
const allCalls = tx.publicTeardownFunctionCall.isEmpty() ? tx.enqueuedPublicFunctionCalls : [
|
|
145
|
+
...tx.enqueuedPublicFunctionCalls,
|
|
146
|
+
tx.publicTeardownFunctionCall
|
|
147
|
+
];
|
|
148
|
+
for (const request of allCalls){
|
|
125
149
|
if (executionRequest.callContext.equals(request.callContext)) {
|
|
126
150
|
return Promise.resolve(new AvmFinalizedCallResult(/*reverted=*/ false, /*output=*/ [], /*gasLeft=*/ allocatedGas));
|
|
127
151
|
}
|
|
@@ -133,8 +157,10 @@ export class TestContext {
|
|
|
133
157
|
}
|
|
134
158
|
async setEndTreeRoots(txs) {
|
|
135
159
|
const db = await this.worldState.fork();
|
|
136
|
-
for (const tx of txs)
|
|
137
|
-
await updateExpectedTreesFromTxs(db, [
|
|
160
|
+
for (const tx of txs){
|
|
161
|
+
await updateExpectedTreesFromTxs(db, [
|
|
162
|
+
tx
|
|
163
|
+
]);
|
|
138
164
|
const stateReference = await db.getStateReference();
|
|
139
165
|
if (tx.avmProvingRequest) {
|
|
140
166
|
tx.avmProvingRequest.inputs.publicInputs.endTreeSnapshots = new TreeSnapshots(stateReference.l1ToL2MessageTree, stateReference.partial.noteHashTree, stateReference.partial.nullifierTree, stateReference.partial.publicDataTree);
|
|
@@ -147,14 +173,13 @@ export class TestContext {
|
|
|
147
173
|
if (executorMock) {
|
|
148
174
|
simulateInternal.mockImplementation(executorMock);
|
|
149
175
|
}
|
|
150
|
-
return await this.publicProcessor.process(txs, {
|
|
176
|
+
return await this.publicProcessor.process(txs, {
|
|
177
|
+
maxTransactions
|
|
178
|
+
});
|
|
151
179
|
}
|
|
152
180
|
}
|
|
153
181
|
class TestProvingOrchestrator extends ProvingOrchestrator {
|
|
154
|
-
|
|
155
|
-
super(...arguments);
|
|
156
|
-
this.isVerifyBuiltBlockAgainstSyncedStateEnabled = false;
|
|
157
|
-
}
|
|
182
|
+
isVerifyBuiltBlockAgainstSyncedStateEnabled = false;
|
|
158
183
|
// Disable this check by default, since it requires seeding world state with the block being built
|
|
159
184
|
// This is only enabled in some tests with multiple blocks that populate the pending chain via makePendingBlock
|
|
160
185
|
verifyBuiltBlockAgainstSyncedState(l2Block, newArchive) {
|
|
@@ -164,4 +189,3 @@ class TestProvingOrchestrator extends ProvingOrchestrator {
|
|
|
164
189
|
return Promise.resolve();
|
|
165
190
|
}
|
|
166
191
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2tzL3Rlc3RfY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBS0wsYUFBYSxHQUNkLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBRWpCLHNCQUFzQixHQUV2QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRWhHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSww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
|