@aztec/prover-client 0.0.1-commit.03f7ef2 → 0.0.1-commit.04d373f
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 +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +16 -2
- package/dest/light/lightweight_checkpoint_builder.d.ts +22 -6
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -1
- package/dest/light/lightweight_checkpoint_builder.js +112 -28
- package/dest/mocks/fixtures.d.ts +1 -1
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +2 -1
- package/dest/mocks/test_context.d.ts +6 -2
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +31 -11
- package/dest/orchestrator/block-building-helpers.d.ts +5 -5
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +4 -4
- package/dest/orchestrator/block-proving-state.d.ts +4 -1
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +7 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts +24 -4
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/checkpoint-proving-state.js +47 -5
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts +107 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-sub-tree-orchestrator.js +151 -0
- package/dest/orchestrator/epoch-proving-context.d.ts +51 -0
- package/dest/orchestrator/epoch-proving-context.d.ts.map +1 -0
- package/dest/orchestrator/epoch-proving-context.js +81 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +7 -6
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +37 -1
- package/dest/orchestrator/index.d.ts +4 -1
- package/dest/orchestrator/index.d.ts.map +1 -1
- package/dest/orchestrator/index.js +3 -0
- package/dest/orchestrator/orchestrator.d.ts +30 -25
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +549 -255
- package/dest/orchestrator/orchestrator_metrics.d.ts +1 -1
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator_metrics.js +2 -6
- package/dest/orchestrator/proving-scheduler.d.ts +72 -0
- package/dest/orchestrator/proving-scheduler.d.ts.map +1 -0
- package/dest/orchestrator/proving-scheduler.js +117 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts +83 -0
- package/dest/orchestrator/top-tree-orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-orchestrator.js +182 -0
- package/dest/orchestrator/top-tree-proving-scheduler.d.ts +62 -0
- package/dest/orchestrator/top-tree-proving-scheduler.d.ts.map +1 -0
- package/dest/orchestrator/top-tree-proving-scheduler.js +73 -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 +5 -4
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +6 -6
- package/dest/prover-client/factory.d.ts +3 -3
- package/dest/prover-client/factory.d.ts.map +1 -1
- package/dest/prover-client/prover-client.d.ts +66 -7
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +64 -11
- package/dest/proving_broker/broker_prover_facade.d.ts +7 -5
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +16 -22
- package/dest/proving_broker/config.d.ts +12 -64
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +22 -5
- package/dest/proving_broker/index.d.ts +2 -1
- package/dest/proving_broker/index.d.ts.map +1 -1
- package/dest/proving_broker/index.js +1 -0
- 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 -2
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +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 +8 -5
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +69 -21
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +391 -3
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +3 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.js +22 -35
- package/dest/proving_broker/proving_job_controller.d.ts +4 -3
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +6 -3
- package/dest/proving_broker/rpc.d.ts +6 -2
- package/dest/proving_broker/rpc.d.ts.map +1 -1
- package/dest/proving_broker/rpc.js +87 -23
- package/dest/test/mock_proof_store.d.ts +3 -3
- package/dest/test/mock_proof_store.d.ts.map +1 -1
- package/dest/test/mock_prover.d.ts +5 -5
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +3 -3
- package/package.json +19 -21
- package/src/config.ts +18 -2
- package/src/light/lightweight_checkpoint_builder.ts +159 -37
- package/src/mocks/fixtures.ts +2 -1
- package/src/mocks/test_context.ts +24 -11
- package/src/orchestrator/block-building-helpers.ts +4 -4
- package/src/orchestrator/block-proving-state.ts +9 -0
- package/src/orchestrator/checkpoint-proving-state.ts +65 -6
- package/src/orchestrator/checkpoint-sub-tree-orchestrator.ts +271 -0
- package/src/orchestrator/epoch-proving-context.ts +101 -0
- package/src/orchestrator/epoch-proving-state.ts +59 -9
- package/src/orchestrator/index.ts +8 -0
- package/src/orchestrator/orchestrator.ts +165 -293
- package/src/orchestrator/orchestrator_metrics.ts +2 -6
- package/src/orchestrator/proving-scheduler.ts +156 -0
- package/src/orchestrator/top-tree-orchestrator.ts +314 -0
- package/src/orchestrator/top-tree-proving-scheduler.ts +154 -0
- package/src/orchestrator/top-tree-proving-state.ts +220 -0
- package/src/orchestrator/tx-proving-state.ts +8 -11
- package/src/prover-client/factory.ts +6 -2
- package/src/prover-client/prover-client.ts +157 -24
- package/src/proving_broker/broker_prover_facade.ts +25 -26
- package/src/proving_broker/config.ts +25 -2
- package/src/proving_broker/index.ts +1 -0
- 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 -1
- package/src/proving_broker/proving_agent.ts +6 -19
- package/src/proving_broker/proving_broker.ts +65 -16
- package/src/proving_broker/proving_broker_database/persisted.ts +17 -3
- package/src/proving_broker/proving_broker_instrumentation.ts +23 -35
- package/src/proving_broker/proving_job_controller.ts +9 -3
- package/src/proving_broker/rpc.ts +46 -20
- package/src/test/mock_prover.ts +1 -8
- 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 -38
- package/dest/block-factory/light.d.ts.map +0 -1
- package/dest/block-factory/light.js +0 -108
- 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/block-factory/index.ts +0 -1
- package/src/block-factory/light.ts +0 -137
- package/src/proving_broker/proof_store/gcs_proof_store.ts +0 -76
- package/src/proving_broker/proving_agent_instrumentation.ts +0 -21
package/dest/config.d.ts
CHANGED
|
@@ -14,4 +14,4 @@ export declare const proverClientConfigMappings: ConfigMappingsType<ProverClient
|
|
|
14
14
|
* @returns The prover configuration.
|
|
15
15
|
*/
|
|
16
16
|
export declare function getProverEnvVars(): ProverClientUserConfig;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFJeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQXdCLE1BQU0sd0NBQXdDLENBQUM7QUFFakcsT0FBTyxFQUNMLEtBQUssaUJBQWlCLEVBQ3RCLEtBQUssa0JBQWtCLEVBR3hCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsdURBQXVEO0FBQ3ZELE1BQU0sTUFBTSxzQkFBc0IsR0FBRyxZQUFZLEdBQUcsaUJBQWlCLEdBQUcsa0JBQWtCLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQztBQUVuSCxpRUFBaUU7QUFDakUsTUFBTSxNQUFNLGtCQUFrQixHQUFHLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUU3RyxlQUFPLE1BQU0sZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FnRHRFLENBQUM7QUFFRixlQUFPLE1BQU0sMEJBQTBCLEVBQUUsa0JBQWtCLENBQUMsc0JBQXNCLENBS2pGLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsd0JBQWdCLGdCQUFnQixJQUFJLHNCQUFzQixDQUV6RCJ9
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,wCAAwC,CAAC;AAEjG,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,4BAA4B,CAAC;AAEpC,uDAAuD;AACvD,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnH,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC,CAAC;AAE7G,eAAO,MAAM,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,wCAAwC,CAAC;AAEjG,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,4BAA4B,CAAC;AAEpC,uDAAuD;AACvD,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnH,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC,CAAC;AAE7G,eAAO,MAAM,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ,GAAG,UAAU,CAgDtE,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,sBAAsB,CAKjF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,sBAAsB,CAEzD"}
|
package/dest/config.js
CHANGED
|
@@ -25,13 +25,27 @@ export const bbConfigMappings = {
|
|
|
25
25
|
},
|
|
26
26
|
numConcurrentIVCVerifiers: {
|
|
27
27
|
env: 'BB_NUM_IVC_VERIFIERS',
|
|
28
|
-
description: 'Max
|
|
28
|
+
description: 'Max concurrent verifications for the RPC verifier (QueuedIVCVerifier).',
|
|
29
29
|
...numberConfigHelper(8)
|
|
30
30
|
},
|
|
31
31
|
bbIVCConcurrency: {
|
|
32
32
|
env: 'BB_IVC_CONCURRENCY',
|
|
33
|
-
description: '
|
|
33
|
+
description: 'Thread count for the RPC IVC verifier.',
|
|
34
34
|
...numberConfigHelper(1)
|
|
35
|
+
},
|
|
36
|
+
bbChonkVerifyMaxBatch: {
|
|
37
|
+
env: 'BB_CHONK_VERIFY_MAX_BATCH',
|
|
38
|
+
description: 'Upper bound on proofs per batch for the peer chonk batch verifier. Proofs are verified immediately as they arrive; this only caps how many can accumulate while a batch is already being processed.',
|
|
39
|
+
...numberConfigHelper(16)
|
|
40
|
+
},
|
|
41
|
+
bbChonkVerifyConcurrency: {
|
|
42
|
+
env: 'BB_CHONK_VERIFY_BATCH_CONCURRENCY',
|
|
43
|
+
description: 'Thread count for the peer batch verifier parallel reduce. 0 = auto.',
|
|
44
|
+
...numberConfigHelper(6)
|
|
45
|
+
},
|
|
46
|
+
bbDebugOutputDir: {
|
|
47
|
+
env: 'BB_DEBUG_OUTPUT_DIR',
|
|
48
|
+
description: 'When set, bb.js operations write input/output files and log equivalent CLI commands to this directory'
|
|
35
49
|
}
|
|
36
50
|
};
|
|
37
51
|
export const proverClientConfigMappings = {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
-
import {
|
|
3
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
4
|
+
import { L2Block } from '@aztec/stdlib/block';
|
|
4
5
|
import { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
5
6
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
6
7
|
import { type CheckpointGlobalVariables, type GlobalVariables, type ProcessedTx, StateReference } from '@aztec/stdlib/tx';
|
|
@@ -13,15 +14,27 @@ import { type CheckpointGlobalVariables, type GlobalVariables, type ProcessedTx,
|
|
|
13
14
|
export declare class LightweightCheckpointBuilder {
|
|
14
15
|
readonly checkpointNumber: CheckpointNumber;
|
|
15
16
|
readonly constants: CheckpointGlobalVariables;
|
|
17
|
+
feeAssetPriceModifier: bigint;
|
|
16
18
|
readonly l1ToL2Messages: Fr[];
|
|
19
|
+
private readonly previousCheckpointOutHashes;
|
|
17
20
|
readonly db: MerkleTreeWriteOperations;
|
|
18
21
|
private readonly logger;
|
|
19
22
|
private lastArchives;
|
|
20
23
|
private spongeBlob;
|
|
21
24
|
private blocks;
|
|
22
25
|
private blobFields;
|
|
23
|
-
constructor(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeWriteOperations);
|
|
24
|
-
static startNewCheckpoint(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeWriteOperations): Promise<LightweightCheckpointBuilder>;
|
|
26
|
+
constructor(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, feeAssetPriceModifier: bigint, l1ToL2Messages: Fr[], previousCheckpointOutHashes: Fr[], db: MerkleTreeWriteOperations, bindings?: LoggerBindings);
|
|
27
|
+
static startNewCheckpoint(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, l1ToL2Messages: Fr[], previousCheckpointOutHashes: Fr[], db: MerkleTreeWriteOperations, bindings?: LoggerBindings, feeAssetPriceModifier?: bigint): Promise<LightweightCheckpointBuilder>;
|
|
28
|
+
/**
|
|
29
|
+
* Resumes building a checkpoint from existing blocks. This is used for validator re-execution
|
|
30
|
+
* where blocks have already been built and their effects are already in the database.
|
|
31
|
+
* Unlike startNewCheckpoint, this does NOT append l1ToL2Messages to the tree since they
|
|
32
|
+
* were already added when the blocks were originally built.
|
|
33
|
+
*/
|
|
34
|
+
static resumeCheckpoint(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, feeAssetPriceModifier: bigint, l1ToL2Messages: Fr[], previousCheckpointOutHashes: Fr[], db: MerkleTreeWriteOperations, existingBlocks: L2Block[], bindings?: LoggerBindings): Promise<LightweightCheckpointBuilder>;
|
|
35
|
+
/** Returns how many blocks have been added to this checkpoint so far */
|
|
36
|
+
getBlockCount(): number;
|
|
37
|
+
getBlocks(): L2Block[];
|
|
25
38
|
/**
|
|
26
39
|
* Adds a new block to the checkpoint. The tx effects must have already been inserted into the db if
|
|
27
40
|
* this is called after tx processing, if that's not the case, then set `insertTxsEffects` to true.
|
|
@@ -29,8 +42,11 @@ export declare class LightweightCheckpointBuilder {
|
|
|
29
42
|
addBlock(globalVariables: GlobalVariables, txs: ProcessedTx[], opts?: {
|
|
30
43
|
insertTxsEffects?: boolean;
|
|
31
44
|
expectedEndState?: StateReference;
|
|
32
|
-
}): Promise<
|
|
45
|
+
}): Promise<{
|
|
46
|
+
block: L2Block;
|
|
47
|
+
timings: Record<string, number>;
|
|
48
|
+
}>;
|
|
33
49
|
completeCheckpoint(): Promise<Checkpoint>;
|
|
34
50
|
clone(): LightweightCheckpointBuilder;
|
|
35
51
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHR3ZWlnaHRfY2hlY2twb2ludF9idWlsZGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlnaHQvbGlnaHR3ZWlnaHRfY2hlY2twb2ludF9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBU2pGLE9BQU8sRUFDTCxLQUFLLHlCQUF5QixFQUM5QixLQUFLLGVBQWUsRUFDcEIsS0FBSyxXQUFXLEVBQ2hCLGNBQWMsRUFDZixNQUFNLGtCQUFrQixDQUFDO0FBUTFCOzs7OztHQUtHO0FBQ0gscUJBQWEsNEJBQTRCO2FBU3JCLGdCQUFnQixFQUFFLGdCQUFnQjthQUNsQyxTQUFTLEVBQUUseUJBQXlCO0lBQzdDLHFCQUFxQixFQUFFLE1BQU07YUFDcEIsY0FBYyxFQUFFLEVBQUUsRUFBRTtJQUNwQyxPQUFPLENBQUMsUUFBUSxDQUFDLDJCQUEyQjthQUM1QixFQUFFLEVBQUUseUJBQXlCO0lBYi9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFTO0lBRWhDLE9BQU8sQ0FBQyxZQUFZLENBQWdDO0lBQ3BELE9BQU8sQ0FBQyxVQUFVLENBQWE7SUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBaUI7SUFDL0IsT0FBTyxDQUFDLFVBQVUsQ0FBWTtJQUU5QixZQUNrQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsU0FBUyxFQUFFLHlCQUF5QixFQUM3QyxxQkFBcUIsRUFBRSxNQUFNLEVBQ3BCLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFDbkIsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLEVBQ2xDLEVBQUUsRUFBRSx5QkFBeUIsRUFDN0MsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQVExQjtJQUVELE9BQWEsa0JBQWtCLENBQzdCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxTQUFTLEVBQUUseUJBQXlCLEVBQ3BDLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFDcEIsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLEVBQ2pDLEVBQUUsRUFBRSx5QkFBeUIsRUFDN0IsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUN6QixxQkFBcUIsR0FBRSxNQUFXLEdBQ2pDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQWF2QztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBYSxnQkFBZ0IsQ0FDM0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLFNBQVMsRUFBRSx5QkFBeUIsRUFDcEMscUJBQXFCLEVBQUUsTUFBTSxFQUM3QixjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQ3BCLDJCQUEyQixFQUFFLEVBQUUsRUFBRSxFQUNqQyxFQUFFLEVBQUUseUJBQXlCLEVBQzdCLGNBQWMsRUFBRSxPQUFPLEVBQUUsRUFDekIsUUFBUSxDQUFDLEVBQUUsY0FBYyxHQUN4QixPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FtRHZDO0lBRUQsd0VBQXdFO0lBQ2pFLGFBQWEsV0FFbkI7SUFFTSxTQUFTLGNBRWY7SUFFRDs7O09BR0c7SUFDVSxRQUFRLENBQ25CLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFDbEIsSUFBSSxHQUFFO1FBQUUsZ0JBQWdCLENBQUMsRUFBRSxPQUFPLENBQUM7UUFBQyxnQkFBZ0IsQ0FBQyxFQUFFLGNBQWMsQ0FBQTtLQUFPLEdBQzNFLE9BQU8sQ0FBQztRQUFFLEtBQUssRUFBRSxPQUFPLENBQUM7UUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtLQUFFLENBQUMsQ0E4RTlEO0lBRUssa0JBQWtCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQXFEOUM7SUFFRCxLQUFLLGlDQWVKO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightweight_checkpoint_builder.d.ts","sourceRoot":"","sources":["../../src/light/lightweight_checkpoint_builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lightweight_checkpoint_builder.d.ts","sourceRoot":"","sources":["../../src/light/lightweight_checkpoint_builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAyB,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AASjF,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAQ1B;;;;;GAKG;AACH,qBAAa,4BAA4B;aASrB,gBAAgB,EAAE,gBAAgB;aAClC,SAAS,EAAE,yBAAyB;IAC7C,qBAAqB,EAAE,MAAM;aACpB,cAAc,EAAE,EAAE,EAAE;IACpC,OAAO,CAAC,QAAQ,CAAC,2BAA2B;aAC5B,EAAE,EAAE,yBAAyB;IAb/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAY;IAE9B,YACkB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,yBAAyB,EAC7C,qBAAqB,EAAE,MAAM,EACpB,cAAc,EAAE,EAAE,EAAE,EACnB,2BAA2B,EAAE,EAAE,EAAE,EAClC,EAAE,EAAE,yBAAyB,EAC7C,QAAQ,CAAC,EAAE,cAAc,EAQ1B;IAED,OAAa,kBAAkB,CAC7B,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,yBAAyB,EACpC,cAAc,EAAE,EAAE,EAAE,EACpB,2BAA2B,EAAE,EAAE,EAAE,EACjC,EAAE,EAAE,yBAAyB,EAC7B,QAAQ,CAAC,EAAE,cAAc,EACzB,qBAAqB,GAAE,MAAW,GACjC,OAAO,CAAC,4BAA4B,CAAC,CAavC;IAED;;;;;OAKG;IACH,OAAa,gBAAgB,CAC3B,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,yBAAyB,EACpC,qBAAqB,EAAE,MAAM,EAC7B,cAAc,EAAE,EAAE,EAAE,EACpB,2BAA2B,EAAE,EAAE,EAAE,EACjC,EAAE,EAAE,yBAAyB,EAC7B,cAAc,EAAE,OAAO,EAAE,EACzB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,4BAA4B,CAAC,CAmDvC;IAED,wEAAwE;IACjE,aAAa,WAEnB;IAEM,SAAS,cAEf;IAED;;;OAGG;IACU,QAAQ,CACnB,eAAe,EAAE,eAAe,EAChC,GAAG,EAAE,WAAW,EAAE,EAClB,IAAI,GAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,cAAc,CAAA;KAAO,GAC3E,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CA8E9D;IAEK,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAqD9C;IAED,KAAK,iCAeJ;CACF"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { SpongeBlob, computeBlobsHashFromBlobs, encodeCheckpointEndMarker, getBlobsPerL1Block } from '@aztec/blob-lib';
|
|
2
|
-
import {
|
|
3
|
-
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
2
|
+
import { IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
|
|
4
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
|
-
import {
|
|
5
|
+
import { elapsed } from '@aztec/foundation/timer';
|
|
6
|
+
import { L2Block } from '@aztec/stdlib/block';
|
|
7
7
|
import { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
8
|
-
import { computeCheckpointOutHash, computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
|
|
8
|
+
import { accumulateCheckpointOutHashes, appendL1ToL2MessagesToTree, computeCheckpointOutHash, computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging';
|
|
9
9
|
import { CheckpointHeader, computeBlockHeadersHash } from '@aztec/stdlib/rollup';
|
|
10
10
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
11
|
-
import { ContentCommitment } from '@aztec/stdlib/tx';
|
|
12
11
|
import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffects } from '../orchestrator/block-building-helpers.js';
|
|
13
12
|
/**
|
|
14
13
|
* Builds a checkpoint and its header and the blocks in it from a set of processed tx without running any circuits.
|
|
@@ -18,55 +17,116 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffects } from '.
|
|
|
18
17
|
*/ export class LightweightCheckpointBuilder {
|
|
19
18
|
checkpointNumber;
|
|
20
19
|
constants;
|
|
20
|
+
feeAssetPriceModifier;
|
|
21
21
|
l1ToL2Messages;
|
|
22
|
+
previousCheckpointOutHashes;
|
|
22
23
|
db;
|
|
23
24
|
logger;
|
|
24
25
|
lastArchives;
|
|
25
26
|
spongeBlob;
|
|
26
27
|
blocks;
|
|
27
28
|
blobFields;
|
|
28
|
-
constructor(checkpointNumber, constants, l1ToL2Messages, db){
|
|
29
|
+
constructor(checkpointNumber, constants, feeAssetPriceModifier, l1ToL2Messages, previousCheckpointOutHashes, db, bindings){
|
|
29
30
|
this.checkpointNumber = checkpointNumber;
|
|
30
31
|
this.constants = constants;
|
|
32
|
+
this.feeAssetPriceModifier = feeAssetPriceModifier;
|
|
31
33
|
this.l1ToL2Messages = l1ToL2Messages;
|
|
34
|
+
this.previousCheckpointOutHashes = previousCheckpointOutHashes;
|
|
32
35
|
this.db = db;
|
|
33
|
-
this.logger = createLogger('lightweight-checkpoint-builder');
|
|
34
36
|
this.lastArchives = [];
|
|
35
37
|
this.blocks = [];
|
|
36
38
|
this.blobFields = [];
|
|
39
|
+
this.logger = createLogger('checkpoint-builder', {
|
|
40
|
+
...bindings,
|
|
41
|
+
instanceId: `checkpoint-${checkpointNumber}`
|
|
42
|
+
});
|
|
37
43
|
this.spongeBlob = SpongeBlob.init();
|
|
38
44
|
this.logger.debug('Starting new checkpoint', {
|
|
39
45
|
constants,
|
|
40
|
-
l1ToL2Messages
|
|
46
|
+
l1ToL2Messages,
|
|
47
|
+
feeAssetPriceModifier
|
|
41
48
|
});
|
|
42
49
|
}
|
|
43
|
-
static async startNewCheckpoint(checkpointNumber, constants, l1ToL2Messages, db) {
|
|
50
|
+
static async startNewCheckpoint(checkpointNumber, constants, l1ToL2Messages, previousCheckpointOutHashes, db, bindings, feeAssetPriceModifier = 0n) {
|
|
44
51
|
// Insert l1-to-l2 messages into the tree.
|
|
45
|
-
await db
|
|
46
|
-
return new LightweightCheckpointBuilder(checkpointNumber, constants, l1ToL2Messages, db);
|
|
52
|
+
await appendL1ToL2MessagesToTree(db, l1ToL2Messages);
|
|
53
|
+
return new LightweightCheckpointBuilder(checkpointNumber, constants, feeAssetPriceModifier, l1ToL2Messages, previousCheckpointOutHashes, db, bindings);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resumes building a checkpoint from existing blocks. This is used for validator re-execution
|
|
57
|
+
* where blocks have already been built and their effects are already in the database.
|
|
58
|
+
* Unlike startNewCheckpoint, this does NOT append l1ToL2Messages to the tree since they
|
|
59
|
+
* were already added when the blocks were originally built.
|
|
60
|
+
*/ static async resumeCheckpoint(checkpointNumber, constants, feeAssetPriceModifier, l1ToL2Messages, previousCheckpointOutHashes, db, existingBlocks, bindings) {
|
|
61
|
+
const builder = new LightweightCheckpointBuilder(checkpointNumber, constants, feeAssetPriceModifier, l1ToL2Messages, previousCheckpointOutHashes, db, bindings);
|
|
62
|
+
builder.logger.debug('Resuming checkpoint from existing blocks', {
|
|
63
|
+
checkpointNumber,
|
|
64
|
+
numExistingBlocks: existingBlocks.length,
|
|
65
|
+
blockNumbers: existingBlocks.map((b)=>b.header.getBlockNumber())
|
|
66
|
+
});
|
|
67
|
+
if (existingBlocks.length === 0) {
|
|
68
|
+
throw new Error(`Cannot resume checkpoint ${checkpointNumber} with no existing blocks`);
|
|
69
|
+
}
|
|
70
|
+
// Validate block order and consistency
|
|
71
|
+
for(let i = 1; i < existingBlocks.length; i++){
|
|
72
|
+
const prev = existingBlocks[i - 1];
|
|
73
|
+
const curr = existingBlocks[i];
|
|
74
|
+
if (curr.number !== prev.number + 1) {
|
|
75
|
+
throw new Error(`Non-sequential block numbers in resumeCheckpoint: ${prev.number} -> ${curr.number}`);
|
|
76
|
+
}
|
|
77
|
+
if (!prev.archive.root.equals(curr.header.lastArchive.root)) {
|
|
78
|
+
throw new Error(`Archive root mismatch between blocks ${prev.number} and ${curr.number}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for(let i = 0; i < existingBlocks.length; i++){
|
|
82
|
+
const block = existingBlocks[i];
|
|
83
|
+
const isFirstBlock = i === 0;
|
|
84
|
+
if (isFirstBlock) {
|
|
85
|
+
builder.lastArchives.push(block.header.lastArchive);
|
|
86
|
+
}
|
|
87
|
+
builder.lastArchives.push(block.archive);
|
|
88
|
+
const blockBlobFields = block.toBlobFields();
|
|
89
|
+
await builder.spongeBlob.absorb(blockBlobFields);
|
|
90
|
+
builder.blobFields.push(...blockBlobFields);
|
|
91
|
+
builder.blocks.push(block);
|
|
92
|
+
}
|
|
93
|
+
return builder;
|
|
94
|
+
}
|
|
95
|
+
/** Returns how many blocks have been added to this checkpoint so far */ getBlockCount() {
|
|
96
|
+
return this.blocks.length;
|
|
97
|
+
}
|
|
98
|
+
getBlocks() {
|
|
99
|
+
return this.blocks;
|
|
47
100
|
}
|
|
48
101
|
/**
|
|
49
102
|
* Adds a new block to the checkpoint. The tx effects must have already been inserted into the db if
|
|
50
103
|
* this is called after tx processing, if that's not the case, then set `insertTxsEffects` to true.
|
|
51
104
|
*/ async addBlock(globalVariables, txs, opts = {}) {
|
|
105
|
+
const timings = {};
|
|
52
106
|
const isFirstBlock = this.blocks.length === 0;
|
|
53
107
|
// Empty blocks are only allowed as the first block in a checkpoint
|
|
54
108
|
if (!isFirstBlock && txs.length === 0) {
|
|
55
109
|
throw new Error('Cannot add empty block that is not the first block in the checkpoint.');
|
|
56
110
|
}
|
|
57
111
|
if (isFirstBlock) {
|
|
58
|
-
|
|
112
|
+
const [msGetInitialArchive, initialArchive] = await elapsed(()=>getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db));
|
|
113
|
+
this.lastArchives.push(initialArchive);
|
|
114
|
+
timings.getInitialArchive = msGetInitialArchive;
|
|
59
115
|
}
|
|
60
116
|
const lastArchive = this.lastArchives.at(-1);
|
|
61
117
|
if (opts.insertTxsEffects) {
|
|
62
118
|
this.logger.debug(`Inserting side effects for ${txs.length} txs for block ${globalVariables.blockNumber} into db`, {
|
|
63
119
|
txs: txs.map((tx)=>tx.hash.toString())
|
|
64
120
|
});
|
|
121
|
+
let msInsertSideEffects = 0;
|
|
65
122
|
for (const tx of txs){
|
|
66
|
-
await insertSideEffects(tx, this.db);
|
|
123
|
+
const [ms] = await elapsed(()=>insertSideEffects(tx, this.db));
|
|
124
|
+
msInsertSideEffects += ms;
|
|
67
125
|
}
|
|
126
|
+
timings.insertSideEffects = msInsertSideEffects;
|
|
68
127
|
}
|
|
69
|
-
const endState = await this.db.getStateReference();
|
|
128
|
+
const [msGetEndState, endState] = await elapsed(()=>this.db.getStateReference());
|
|
129
|
+
timings.getEndState = msGetEndState;
|
|
70
130
|
if (opts.expectedEndState && !endState.equals(opts.expectedEndState)) {
|
|
71
131
|
this.logger.error('End state after processing txs does not match expected end state', {
|
|
72
132
|
globalVariables: globalVariables.toInspect(),
|
|
@@ -75,15 +135,22 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffects } from '.
|
|
|
75
135
|
});
|
|
76
136
|
throw new Error(`End state does not match expected end state when building block ${globalVariables.blockNumber}`);
|
|
77
137
|
}
|
|
78
|
-
const { header, body, blockBlobFields } = await buildHeaderAndBodyFromTxs(txs, lastArchive, endState, globalVariables, this.spongeBlob, isFirstBlock);
|
|
138
|
+
const [msBuildHeaderAndBody, { header, body, blockBlobFields }] = await elapsed(()=>buildHeaderAndBodyFromTxs(txs, lastArchive, endState, globalVariables, this.spongeBlob, isFirstBlock));
|
|
139
|
+
timings.buildHeaderAndBody = msBuildHeaderAndBody;
|
|
79
140
|
header.state.validate();
|
|
80
141
|
await this.db.updateArchive(header);
|
|
81
|
-
const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db);
|
|
142
|
+
const [msUpdateArchive, newArchive] = await elapsed(()=>getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db));
|
|
143
|
+
timings.updateArchive = msUpdateArchive;
|
|
82
144
|
this.lastArchives.push(newArchive);
|
|
83
|
-
const
|
|
84
|
-
|
|
145
|
+
const expectedNextLeafIndex = Number(globalVariables.blockNumber) + 1;
|
|
146
|
+
if (newArchive.nextAvailableLeafIndex !== expectedNextLeafIndex) {
|
|
147
|
+
throw new Error(`Archive tree next leaf index mismatch after building block ${globalVariables.blockNumber} (expected ${expectedNextLeafIndex} but got ${newArchive.nextAvailableLeafIndex})`);
|
|
148
|
+
}
|
|
149
|
+
const indexWithinCheckpoint = IndexWithinCheckpoint(this.blocks.length);
|
|
150
|
+
const block = new L2Block(newArchive, header, body, this.checkpointNumber, indexWithinCheckpoint);
|
|
85
151
|
this.blocks.push(block);
|
|
86
|
-
await this.spongeBlob.absorb(blockBlobFields);
|
|
152
|
+
const [msSpongeAbsorb] = await elapsed(()=>this.spongeBlob.absorb(blockBlobFields));
|
|
153
|
+
timings.spongeAbsorb = msSpongeAbsorb;
|
|
87
154
|
this.blobFields.push(...blockBlobFields);
|
|
88
155
|
this.logger.debug(`Built block ${header.getBlockNumber()}`, {
|
|
89
156
|
globalVariables: globalVariables.toInspect(),
|
|
@@ -92,7 +159,10 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffects } from '.
|
|
|
92
159
|
blockHash: (await block.hash()).toString(),
|
|
93
160
|
txs: block.body.txEffects.map((tx)=>tx.txHash.toString())
|
|
94
161
|
});
|
|
95
|
-
return
|
|
162
|
+
return {
|
|
163
|
+
block,
|
|
164
|
+
timings
|
|
165
|
+
};
|
|
96
166
|
}
|
|
97
167
|
async completeCheckpoint() {
|
|
98
168
|
if (!this.blocks.length) {
|
|
@@ -106,18 +176,23 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffects } from '.
|
|
|
106
176
|
const blocks = this.blocks;
|
|
107
177
|
const blockHeadersHash = await computeBlockHeadersHash(blocks.map((block)=>block.header));
|
|
108
178
|
const newArchive = this.lastArchives[this.lastArchives.length - 1];
|
|
109
|
-
const blobs = getBlobsPerL1Block(this.blobFields);
|
|
179
|
+
const blobs = await getBlobsPerL1Block(this.blobFields);
|
|
110
180
|
const blobsHash = computeBlobsHashFromBlobs(blobs);
|
|
111
181
|
const inHash = computeInHashFromL1ToL2Messages(this.l1ToL2Messages);
|
|
112
|
-
const outHash = computeCheckpointOutHash(blocks.map((block)=>block.body.txEffects.map((tx)=>tx.l2ToL1Msgs)));
|
|
113
182
|
const { slotNumber, coinbase, feeRecipient, gasFees } = this.constants;
|
|
114
|
-
|
|
115
|
-
|
|
183
|
+
const checkpointOutHash = computeCheckpointOutHash(blocks.map((block)=>block.body.txEffects.map((tx)=>tx.l2ToL1Msgs)));
|
|
184
|
+
const epochOutHash = accumulateCheckpointOutHashes([
|
|
185
|
+
...this.previousCheckpointOutHashes,
|
|
186
|
+
checkpointOutHash
|
|
187
|
+
]);
|
|
188
|
+
// All blocks in the checkpoint have the same timestamp
|
|
116
189
|
const timestamp = blocks[blocks.length - 1].timestamp;
|
|
117
190
|
const totalManaUsed = blocks.reduce((acc, block)=>acc.add(block.header.totalManaUsed), Fr.ZERO);
|
|
118
191
|
const header = CheckpointHeader.from({
|
|
119
192
|
lastArchiveRoot: this.lastArchives[0].root,
|
|
120
|
-
|
|
193
|
+
blobsHash,
|
|
194
|
+
inHash,
|
|
195
|
+
epochOutHash,
|
|
121
196
|
blockHeadersHash,
|
|
122
197
|
slotNumber,
|
|
123
198
|
timestamp,
|
|
@@ -126,12 +201,21 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffects } from '.
|
|
|
126
201
|
gasFees,
|
|
127
202
|
totalManaUsed
|
|
128
203
|
});
|
|
129
|
-
|
|
204
|
+
this.logger.debug(`Completed checkpoint ${this.checkpointNumber}`, {
|
|
205
|
+
checkpointNumber: this.checkpointNumber,
|
|
206
|
+
headerHash: header.hash().toString(),
|
|
207
|
+
checkpointOutHash: checkpointOutHash.toString(),
|
|
208
|
+
numPreviousCheckpointOutHashes: this.previousCheckpointOutHashes.length,
|
|
209
|
+
...header.toInspect()
|
|
210
|
+
});
|
|
211
|
+
return new Checkpoint(newArchive, header, blocks, this.checkpointNumber, this.feeAssetPriceModifier);
|
|
130
212
|
}
|
|
131
213
|
clone() {
|
|
132
|
-
const clone = new LightweightCheckpointBuilder(this.checkpointNumber, this.constants, [
|
|
214
|
+
const clone = new LightweightCheckpointBuilder(this.checkpointNumber, this.constants, this.feeAssetPriceModifier, [
|
|
133
215
|
...this.l1ToL2Messages
|
|
134
|
-
],
|
|
216
|
+
], [
|
|
217
|
+
...this.previousCheckpointOutHashes
|
|
218
|
+
], this.db, this.logger.getBindings());
|
|
135
219
|
clone.lastArchives = [
|
|
136
220
|
...this.lastArchives
|
|
137
221
|
];
|
package/dest/mocks/fixtures.d.ts
CHANGED
|
@@ -17,4 +17,4 @@ export declare function getSimulator(config: {
|
|
|
17
17
|
}, logger?: Logger): Promise<CircuitSimulator>;
|
|
18
18
|
export declare const makeGlobals: (blockNumber: number, slotNumber?: number, overrides?: Partial<FieldsOf<GlobalVariables> & FieldsOf<CheckpointConstantData>>) => GlobalVariables;
|
|
19
19
|
export declare const makeCheckpointConstants: (slotNumber: number, overrides?: Partial<FieldsOf<CheckpointConstantData>>) => CheckpointConstantData;
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2Nrcy9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBK0MsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFpQm5ELGVBQU8sTUFBTSxvQkFBb0I7Ozs7Ozs7Y0FrQ2hDLENBQUM7QUFFRix3QkFBc0IsWUFBWSxDQUNoQyxNQUFNLEVBQUU7SUFBRSxvQkFBb0IsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQUMsY0FBYyxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUE7Q0FBRSxFQUN4RixNQUFNLENBQUMsRUFBRSxNQUFNLEdBQ2QsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBZ0IzQjtBQUVELGVBQU8sTUFBTSxXQUFXLGtKQWlCdkIsQ0FBQztBQUVGLGVBQU8sTUFBTSx1QkFBdUIsdUdBZ0JuQyxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/mocks/fixtures.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAE,KAAK,gBAAgB,EAA+C,MAAM,yBAAyB,CAAC;AAG7G,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAiBnD,eAAO,MAAM,oBAAoB;;;;;;;cAkChC,CAAC;AAEF,wBAAsB,YAAY,CAChC,MAAM,EAAE;IAAE,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACxF,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/mocks/fixtures.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAE,KAAK,gBAAgB,EAA+C,MAAM,yBAAyB,CAAC;AAG7G,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAiBnD,eAAO,MAAM,oBAAoB;;;;;;;cAkChC,CAAC;AAEF,wBAAsB,YAAY,CAChC,MAAM,EAAE;IAAE,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACxF,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CAgB3B;AAED,eAAO,MAAM,WAAW,kJAiBvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,uGAgBnC,CAAC"}
|
package/dest/mocks/fixtures.js
CHANGED
|
@@ -57,7 +57,8 @@ export async function getSimulator(config, logger) {
|
|
|
57
57
|
recursive: true
|
|
58
58
|
});
|
|
59
59
|
logger?.info(`Using native ACVM at ${config.acvmBinaryPath} and working directory ${config.acvmWorkingDirectory}`);
|
|
60
|
-
|
|
60
|
+
const acvmLogger = logger?.createChild('acvm-native');
|
|
61
|
+
return new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath, undefined, acvmLogger);
|
|
61
62
|
} catch {
|
|
62
63
|
logger?.warn(`Failed to access ACVM at ${config.acvmBinaryPath}, falling back to WASM`);
|
|
63
64
|
}
|
|
@@ -3,6 +3,7 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
3
3
|
import type { Logger } from '@aztec/foundation/log';
|
|
4
4
|
import type { FieldsOf } from '@aztec/foundation/types';
|
|
5
5
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
+
import type { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
6
7
|
import type { MerkleTreeWriteOperations, ServerCircuitProver } from '@aztec/stdlib/interfaces/server';
|
|
7
8
|
import type { CheckpointConstantData } from '@aztec/stdlib/rollup';
|
|
8
9
|
import { mockProcessedTx } from '@aztec/stdlib/testing';
|
|
@@ -23,7 +24,9 @@ export declare class TestContext {
|
|
|
23
24
|
private logger;
|
|
24
25
|
private headers;
|
|
25
26
|
private checkpoints;
|
|
27
|
+
private checkpointOutHashes;
|
|
26
28
|
private nextCheckpointIndex;
|
|
29
|
+
private nextCheckpointNumber;
|
|
27
30
|
private nextBlockNumber;
|
|
28
31
|
private epochNumber;
|
|
29
32
|
private feePayerBalance;
|
|
@@ -37,13 +40,14 @@ export declare class TestContext {
|
|
|
37
40
|
cleanup(): Promise<void>;
|
|
38
41
|
startNewEpoch(): void;
|
|
39
42
|
getBlobFields(): Fr[][];
|
|
40
|
-
getFinalBlobChallenges(): Promise<import("
|
|
43
|
+
getFinalBlobChallenges(): Promise<import("@aztec/blob-lib").FinalBlobBatchingChallenges>;
|
|
41
44
|
makeCheckpoint(numBlocks: number, { numTxsPerBlock, numL1ToL2Messages, makeProcessedTxOpts, ...constantOpts }?: {
|
|
42
45
|
numTxsPerBlock?: number | number[];
|
|
43
46
|
numL1ToL2Messages?: number;
|
|
44
47
|
makeProcessedTxOpts?: (blockGlobalVariables: GlobalVariables, txIndex: number) => Partial<Parameters<typeof mockProcessedTx>[0]>;
|
|
45
48
|
} & Partial<FieldsOf<CheckpointConstantData>>): Promise<{
|
|
46
49
|
constants: CheckpointConstantData;
|
|
50
|
+
checkpoint: Checkpoint;
|
|
47
51
|
header: import("@aztec/stdlib/rollup").CheckpointHeader;
|
|
48
52
|
blocks: {
|
|
49
53
|
header: BlockHeader;
|
|
@@ -61,4 +65,4 @@ declare class TestProvingOrchestrator extends ProvingOrchestrator {
|
|
|
61
65
|
protected verifyBuiltBlockAgainstSyncedState(provingState: BlockProvingState): Promise<void>;
|
|
62
66
|
}
|
|
63
67
|
export {};
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jb250ZXh0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9ja3MvdGVzdF9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBS3ZELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUt4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsS0FBSyxXQUFXLEVBQ2hCLEtBQUssZUFBZSxFQUNwQixLQUFLLFdBQVcsRUFHakIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBV2xFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3BELHFCQUFhLFdBQVc7SUFXYixVQUFVLEVBQUUsdUJBQXVCO0lBQ25DLE1BQU0sRUFBRSxtQkFBbUI7SUFDM0IsTUFBTSxFQUFFLFVBQVU7SUFDbEIsa0JBQWtCLEVBQUUseUJBQXlCO0lBQzdDLFlBQVksRUFBRSx1QkFBdUI7SUFDNUMsT0FBTyxDQUFDLFFBQVE7SUFFaEIsT0FBTyxDQUFDLG9CQUFvQjtJQUM1QixPQUFPLENBQUMsTUFBTTtJQWxCaEIsT0FBTyxDQUFDLE9BQU8sQ0FBdUM7SUFDdEQsT0FBTyxDQUFDLFdBQVcsQ0FBb0I7SUFDdkMsT0FBTyxDQUFDLG1CQUFtQixDQUFZO0lBQ3ZDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBSztJQUNoQyxPQUFPLENBQUMsb0JBQW9CLENBQXVCO0lBQ25ELE9BQU8sQ0FBQyxlQUFlLENBQUs7SUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBSztJQUN4QixPQUFPLENBQUMsZUFBZSxDQUFLO0lBRTVCLFlBQ1MsVUFBVSxFQUFFLHVCQUF1QixFQUNuQyxNQUFNLEVBQUUsbUJBQW1CLEVBQzNCLE1BQU0sRUFBRSxVQUFVLEVBQ2xCLGtCQUFrQixFQUFFLHlCQUF5QixFQUM3QyxZQUFZLEVBQUUsdUJBQXVCLEVBQ3BDLFFBQVEsRUFBRSxZQUFZLEVBQzlCLHNCQUFzQixFQUFFLEVBQUUsRUFDbEIsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEVBQzlCLE1BQU0sRUFBRSxNQUFNLEVBR3ZCO0lBRUQsSUFBVyxXQUFXLDRCQUVyQjtJQUVELE9BQWEsR0FBRyxDQUNkLE1BQU0sRUFBRSxNQUFNLEVBQ2QsRUFDRSxXQUFlLEVBQ2YsWUFBOEcsRUFDL0csR0FBRTtRQUNELFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLEtBQUssT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDdEUsd0JBd0RQO0lBRU0sT0FBTyx1Q0FFYjtJQUVLLE9BQU8sa0JBVVo7SUFFTSxhQUFhLFNBS25CO0lBR00sYUFBYSxXQUVuQjtJQUVZLHNCQUFzQixtRUFHbEM7SUFFWSxjQUFjLENBQ3pCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLEVBQ0UsY0FBa0IsRUFDbEIsaUJBQXFCLEVBQ3JCLG1CQUFnQyxFQUNoQyxHQUFHLFlBQVksRUFDaEIsR0FBRTtRQUNELGNBQWMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUMzQixtQkFBbUIsQ0FBQyxFQUFFLENBQ3BCLG9CQUFvQixFQUFFLGVBQWUsRUFDckMsT0FBTyxFQUFFLE1BQU0sS0FDWixPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyRCxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBTTs7Ozs7Ozs7OztPQTJHbkQ7WUFFYSxlQUFlO0lBb0I3QixPQUFPLENBQUMsY0FBYztZQVNSLFdBQVc7Q0E4QjFCO0FBRUQsY0FBTSx1QkFBd0IsU0FBUSxtQkFBbUI7SUFDaEQsMkNBQTJDLFVBQVM7SUFJM0QsVUFBbUIsa0NBQWtDLENBQUMsWUFBWSxFQUFFLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLcEc7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_context.d.ts","sourceRoot":"","sources":["../../src/mocks/test_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAKxD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"test_context.d.ts","sourceRoot":"","sources":["../../src/mocks/test_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAKxD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,EAGjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAWlE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,qBAAa,WAAW;IAWb,UAAU,EAAE,uBAAuB;IACnC,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,UAAU;IAClB,kBAAkB,EAAE,yBAAyB;IAC7C,YAAY,EAAE,uBAAuB;IAC5C,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,MAAM;IAlBhB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,eAAe,CAAK;IAE5B,YACS,UAAU,EAAE,uBAAuB,EACnC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,yBAAyB,EAC7C,YAAY,EAAE,uBAAuB,EACpC,QAAQ,EAAE,YAAY,EAC9B,sBAAsB,EAAE,EAAE,EAClB,oBAAoB,EAAE,MAAM,EAAE,EAC9B,MAAM,EAAE,MAAM,EAGvB;IAED,IAAW,WAAW,4BAErB;IAED,OAAa,GAAG,CACd,MAAM,EAAE,MAAM,EACd,EACE,WAAe,EACf,YAA8G,EAC/G,GAAE;QACD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;KACtE,wBAwDP;IAEM,OAAO,uCAEb;IAEK,OAAO,kBAUZ;IAEM,aAAa,SAKnB;IAGM,aAAa,WAEnB;IAEY,sBAAsB,mEAGlC;IAEY,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,EACE,cAAkB,EAClB,iBAAqB,EACrB,mBAAgC,EAChC,GAAG,YAAY,EAChB,GAAE;QACD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,mBAAmB,CAAC,EAAE,CACpB,oBAAoB,EAAE,eAAe,EACrC,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACrD,GAAG,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAM;;;;;;;;;;OA2GnD;YAEa,eAAe;IAoB7B,OAAO,CAAC,cAAc;YASR,WAAW;CA8B1B;AAED,cAAM,uBAAwB,SAAQ,mBAAmB;IAChD,2CAA2C,UAAS;IAI3D,UAAmB,kCAAkC,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpG;CACF"}
|
|
@@ -31,7 +31,9 @@ export class TestContext {
|
|
|
31
31
|
logger;
|
|
32
32
|
headers;
|
|
33
33
|
checkpoints;
|
|
34
|
+
checkpointOutHashes;
|
|
34
35
|
nextCheckpointIndex;
|
|
36
|
+
nextCheckpointNumber;
|
|
35
37
|
nextBlockNumber;
|
|
36
38
|
epochNumber;
|
|
37
39
|
feePayerBalance;
|
|
@@ -46,7 +48,9 @@ export class TestContext {
|
|
|
46
48
|
this.logger = logger;
|
|
47
49
|
this.headers = new Map();
|
|
48
50
|
this.checkpoints = [];
|
|
51
|
+
this.checkpointOutHashes = [];
|
|
49
52
|
this.nextCheckpointIndex = 0;
|
|
53
|
+
this.nextCheckpointNumber = CheckpointNumber(1);
|
|
50
54
|
this.nextBlockNumber = 1;
|
|
51
55
|
this.epochNumber = 1;
|
|
52
56
|
this.feePayerBalance = initialFeePayerBalance;
|
|
@@ -59,11 +63,14 @@ export class TestContext {
|
|
|
59
63
|
const feePayer = AztecAddress.fromNumber(42222);
|
|
60
64
|
const initialFeePayerBalance = new Fr(10n ** 20n);
|
|
61
65
|
const feePayerSlot = await computeFeePayerBalanceLeafSlot(feePayer);
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
const genesis = {
|
|
67
|
+
prefilledPublicData: [
|
|
68
|
+
new PublicDataTreeLeaf(feePayerSlot, initialFeePayerBalance)
|
|
69
|
+
],
|
|
70
|
+
genesisTimestamp: 0n
|
|
71
|
+
};
|
|
65
72
|
// Separated dbs for public processor and prover - see public_processor for context
|
|
66
|
-
const ws = await NativeWorldStateService.tmp(/*rollupAddress=*/ undefined, /*cleanupTmpDir=*/ true,
|
|
73
|
+
const ws = await NativeWorldStateService.tmp(/*rollupAddress=*/ undefined, /*cleanupTmpDir=*/ true, genesis);
|
|
67
74
|
let localProver;
|
|
68
75
|
const config = await getEnvironmentConfig(logger);
|
|
69
76
|
if (!config) {
|
|
@@ -75,8 +82,10 @@ export class TestContext {
|
|
|
75
82
|
bbBinaryPath: config.expectedBBPath,
|
|
76
83
|
bbWorkingDirectory: config.bbWorkingDirectory,
|
|
77
84
|
bbSkipCleanup: config.bbSkipCleanup,
|
|
78
|
-
numConcurrentIVCVerifiers:
|
|
79
|
-
bbIVCConcurrency: 1
|
|
85
|
+
numConcurrentIVCVerifiers: 8,
|
|
86
|
+
bbIVCConcurrency: 1,
|
|
87
|
+
bbChonkVerifyMaxBatch: 16,
|
|
88
|
+
bbChonkVerifyConcurrency: 6
|
|
80
89
|
};
|
|
81
90
|
localProver = await createProver(bbConfig);
|
|
82
91
|
}
|
|
@@ -85,7 +94,7 @@ export class TestContext {
|
|
|
85
94
|
}
|
|
86
95
|
const broker = new TestBroker(proverCount, localProver);
|
|
87
96
|
const facade = new BrokerCircuitProverFacade(broker);
|
|
88
|
-
const orchestrator = new TestProvingOrchestrator(ws, facade, EthAddress.ZERO);
|
|
97
|
+
const orchestrator = new TestProvingOrchestrator(ws, facade, EthAddress.ZERO, false, 10);
|
|
89
98
|
await broker.start();
|
|
90
99
|
facade.start();
|
|
91
100
|
return new this(ws, localProver, broker, facade, orchestrator, feePayer, initialFeePayerBalance, directoriesToCleanup, logger);
|
|
@@ -110,6 +119,7 @@ export class TestContext {
|
|
|
110
119
|
}
|
|
111
120
|
startNewEpoch() {
|
|
112
121
|
this.checkpoints = [];
|
|
122
|
+
this.checkpointOutHashes = [];
|
|
113
123
|
this.nextCheckpointIndex = 0;
|
|
114
124
|
this.epochNumber++;
|
|
115
125
|
}
|
|
@@ -126,7 +136,8 @@ export class TestContext {
|
|
|
126
136
|
throw new Error('Cannot make a checkpoint with 0 blocks. Crate an empty block (numTxsPerBlock = 0) if there are no txs.');
|
|
127
137
|
}
|
|
128
138
|
const checkpointIndex = this.nextCheckpointIndex++;
|
|
129
|
-
const checkpointNumber =
|
|
139
|
+
const checkpointNumber = this.nextCheckpointNumber;
|
|
140
|
+
this.nextCheckpointNumber++;
|
|
130
141
|
const slotNumber = checkpointNumber * 15; // times an arbitrary number to make it different to the checkpoint number
|
|
131
142
|
const constants = makeCheckpointConstants(slotNumber, constantOpts);
|
|
132
143
|
const fork = await this.worldState.fork();
|
|
@@ -136,11 +147,14 @@ export class TestContext {
|
|
|
136
147
|
const newL1ToL2Snapshot = await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, fork);
|
|
137
148
|
const startBlockNumber = this.nextBlockNumber;
|
|
138
149
|
const previousBlockHeader = this.getBlockHeader(BlockNumber(startBlockNumber - 1));
|
|
150
|
+
// All blocks in the same slot/checkpoint share the same timestamp.
|
|
151
|
+
const timestamp = BigInt(slotNumber * 26);
|
|
139
152
|
// Build global variables.
|
|
140
153
|
const blockGlobalVariables = times(numBlocks, (i)=>makeGlobals(startBlockNumber + i, slotNumber, {
|
|
141
154
|
coinbase: constants.coinbase,
|
|
142
155
|
feeRecipient: constants.feeRecipient,
|
|
143
|
-
gasFees: constants.gasFees
|
|
156
|
+
gasFees: constants.gasFees,
|
|
157
|
+
timestamp
|
|
144
158
|
}));
|
|
145
159
|
this.nextBlockNumber += numBlocks;
|
|
146
160
|
// Build txs.
|
|
@@ -163,13 +177,17 @@ export class TestContext {
|
|
|
163
177
|
return txs;
|
|
164
178
|
});
|
|
165
179
|
const cleanFork = await this.worldState.fork();
|
|
166
|
-
const
|
|
180
|
+
const previousCheckpointOutHashes = this.checkpointOutHashes;
|
|
181
|
+
const builder = await LightweightCheckpointBuilder.startNewCheckpoint(checkpointNumber, {
|
|
182
|
+
...constants,
|
|
183
|
+
timestamp
|
|
184
|
+
}, l1ToL2Messages, previousCheckpointOutHashes, cleanFork);
|
|
167
185
|
// Add tx effects to db and build block headers.
|
|
168
186
|
const blocks = [];
|
|
169
187
|
for(let i = 0; i < numBlocks; i++){
|
|
170
188
|
const txs = blockTxs[i];
|
|
171
189
|
const state = blockEndStates[i];
|
|
172
|
-
const block = await builder.addBlock(blockGlobalVariables[i], txs, {
|
|
190
|
+
const { block } = await builder.addBlock(blockGlobalVariables[i], txs, {
|
|
173
191
|
expectedEndState: state,
|
|
174
192
|
insertTxsEffects: true
|
|
175
193
|
});
|
|
@@ -184,8 +202,10 @@ export class TestContext {
|
|
|
184
202
|
}
|
|
185
203
|
const checkpoint = await builder.completeCheckpoint();
|
|
186
204
|
this.checkpoints.push(checkpoint);
|
|
205
|
+
this.checkpointOutHashes.push(checkpoint.getCheckpointOutHash());
|
|
187
206
|
return {
|
|
188
207
|
constants,
|
|
208
|
+
checkpoint,
|
|
189
209
|
header: checkpoint.header,
|
|
190
210
|
blocks,
|
|
191
211
|
l1ToL2Messages,
|
|
@@ -22,13 +22,13 @@ export declare const insertSideEffects: (tx: ProcessedTx, db: MerkleTreeWriteOpe
|
|
|
22
22
|
nullifierInsertionResult: import("@aztec/stdlib/trees").BatchInsertionResult<number, number>;
|
|
23
23
|
publicDataInsertionResult: import("@aztec/stdlib/trees").SequentialInsertionResult<number>;
|
|
24
24
|
}>;
|
|
25
|
-
export declare function getChonkProofFromTx(tx: Tx | ProcessedTx): RecursiveProof<
|
|
25
|
+
export declare function getChonkProofFromTx(tx: Tx | ProcessedTx): RecursiveProof<1349>;
|
|
26
26
|
export declare function getPublicChonkVerifierPrivateInputsFromTx(tx: Tx | ProcessedTx, proverId: Fr): PublicChonkVerifierPrivateInputs;
|
|
27
|
-
export declare const buildBlobHints: (blobFields: Fr[]) => {
|
|
28
|
-
blobCommitments: import("
|
|
27
|
+
export declare const buildBlobHints: (blobFields: Fr[]) => Promise<{
|
|
28
|
+
blobCommitments: import("@aztec/foundation/curves/bls12").BLS12Point[];
|
|
29
29
|
blobs: import("@aztec/blob-lib").Blob[];
|
|
30
30
|
blobsHash: Fr;
|
|
31
|
-
}
|
|
31
|
+
}>;
|
|
32
32
|
export declare const buildFinalBlobChallenges: (blobFieldsPerCheckpoint: Fr[][]) => Promise<import("@aztec/blob-lib").FinalBlobBatchingChallenges>;
|
|
33
33
|
export declare const accumulateBlobs: (blobFields: Fr[], startBlobAccumulator: BatchedBlobAccumulator) => Promise<BatchedBlobAccumulator>;
|
|
34
34
|
export declare const buildHeaderFromCircuitOutputs: (blockRootRollupOutput: BlockRollupPublicInputs) => Promise<BlockHeader>;
|
|
@@ -59,4 +59,4 @@ export declare function validatePartialState(partialState: PartialStateReference
|
|
|
59
59
|
export declare function validateTx(tx: ProcessedTx): void;
|
|
60
60
|
export declare function toProofData<T extends Bufferable, PROOF_LENGTH extends number>({ inputs, proof, verificationKey }: PublicInputsAndRecursiveProof<T, PROOF_LENGTH>, vkIndex?: number): ProofData<T, PROOF_LENGTH>;
|
|
61
61
|
export {};
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYnVpbGRpbmctaGVscGVycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9ibG9jay1idWlsZGluZy1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUtYLE1BQU0saUJBQWlCLENBQUM7QUFpQnpCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQWdDLE1BQU0sNkJBQTZCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJNUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFaEgsT0FBTyxFQUFTLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsZ0NBQWdDLEVBRWpDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixZQUFZLEVBSWIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsS0FBSyxXQUFXLEVBQ2hCLGNBQWMsRUFDZCxFQUFFLEVBQ0gsTUFBTSxrQkFBa0IsQ0FBQztBQUcxQixPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5FOztHQUVHO0FBQ0gsS0FBSyxhQUFhLEdBQUcsY0FBYyxHQUFHLGNBQWMsR0FBRyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7QUFDMUY7O0dBRUc7QUFDSCxNQUFNLE1BQU0sU0FBUyxHQUFHLGFBQWEsR0FBRyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFHeEUsZUFBTyxNQUFNLHdDQUF3QyxtUEEwSHBELENBQUM7QUFFRixlQUFPLE1BQU0saUJBQWlCOzs7RUFvQzdCLENBQUM7QUFFRix3QkFBZ0IsbUJBQW1CLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLHdCQVF2RDtBQUVELHdCQUFnQix5Q0FBeUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFBRSxvQ0FPM0Y7QUFLRCxlQUFPLE1BQU0sY0FBYzs7OztFQUsxQixDQUFDO0FBRUYsZUFBTyxNQUFNLHdCQUF3QixxR0FFcEMsQ0FBQztBQUVGLGVBQU8sTUFBTSxlQUFlLHFHQU8zQixDQUFDO0FBRUYsZUFBTyxNQUFNLDZCQUE2QiwwRUEyQnpDLENBQUM7QUFFRixlQUFPLE1BQU0seUJBQXlCOzs7O0VBMERyQyxDQUFDO0FBRUYsd0JBQXNCLGtCQUFrQixDQUFDLEdBQUcsU0FBUyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsd0JBQXdCOzs7Ozs7U0FJM0c7QUFFRCx3QkFBc0Isc0JBQXNCLENBQUMsR0FBRyxTQUFTLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSx3QkFBd0I7Ozs7OztTQUkvRztBQUVELHdCQUFzQixlQUFlLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBR3JIO0FBRUQsd0JBQWdCLDBCQUEwQixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsd0JBTXJFO0FBRUQsd0JBQXNCLHFCQUFxQixDQUN6QyxNQUFNLEVBQUUsWUFBWSxFQUNwQixhQUFhLEVBQUUsTUFBTSxFQUNyQixFQUFFLEVBQUUsd0JBQXdCLEdBQzNCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQU1mO0FBR0Qsd0JBQXNCLHVCQUF1QixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQzVELEtBQUssRUFBRSxFQUFFLEVBQ1QsTUFBTSxFQUFFLFlBQVksRUFDcEIsTUFBTSxFQUFFLENBQUMsRUFDVCxFQUFFLEVBQUUsd0JBQXdCLEdBQzNCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQVkvQjtBQUVELHdCQUFnQixvQkFBb0IsQ0FDbEMsWUFBWSxFQUFFLHFCQUFxQixFQUNuQyxhQUFhLEVBQUUsR0FBRyxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxRQVN6RDtBQXFCRCx3QkFBZ0IsVUFBVSxDQUFDLEVBQUUsRUFBRSxXQUFXLFFBY3pDO0FBRUQsd0JBQWdCLFdBQVcsQ0FBQyxDQUFDLFNBQVMsVUFBVSxFQUFFLFlBQVksU0FBUyxNQUFNLEVBQzNFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQ2xGLE9BQU8sQ0FBQyxFQUFFLE1BQU0sOEJBS2pCIn0=
|