@aztec/sequencer-client 0.48.0 → 0.49.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/block_builder/index.d.ts +26 -0
- package/dest/block_builder/index.d.ts.map +1 -0
- package/dest/block_builder/index.js +40 -0
- package/dest/client/sequencer-client.d.ts +1 -2
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +4 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +1 -6
- package/dest/sequencer/sequencer.d.ts +4 -4
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +17 -25
- package/package.json +17 -15
- package/src/block_builder/index.ts +51 -0
- package/src/client/sequencer-client.ts +2 -3
- package/src/config.ts +0 -5
- package/src/sequencer/sequencer.ts +18 -36
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type BlockSimulator, type MerkleTreeOperations, type ProcessedTx, type ProvingTicket, type SimulationBlockResult } from '@aztec/circuit-types';
|
|
2
|
+
import { type Fr, type GlobalVariables } from '@aztec/circuits.js';
|
|
3
|
+
import { type SimulationProvider } from '@aztec/simulator';
|
|
4
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
|
+
/**
|
|
6
|
+
* Implements a block simulator using a test circuit prover under the hood, which just simulates circuits and outputs empty proofs.
|
|
7
|
+
* This class is temporary and should die once we switch from tx effects to tx objects submissions, since sequencers won't have
|
|
8
|
+
* the need to create L2 block headers to submit to L1. When we do that, we should also remove the references to the
|
|
9
|
+
* prover-client and bb-prover packages from this package.
|
|
10
|
+
*/
|
|
11
|
+
export declare class BlockBuilder implements BlockSimulator {
|
|
12
|
+
private orchestrator;
|
|
13
|
+
constructor(db: MerkleTreeOperations, simulationProvider: SimulationProvider, telemetry: TelemetryClient);
|
|
14
|
+
startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<ProvingTicket>;
|
|
15
|
+
cancelBlock(): void;
|
|
16
|
+
finaliseBlock(): Promise<SimulationBlockResult>;
|
|
17
|
+
setBlockCompleted(): Promise<void>;
|
|
18
|
+
addNewTx(tx: ProcessedTx): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare class BlockBuilderFactory {
|
|
21
|
+
private simulationProvider;
|
|
22
|
+
private telemetry?;
|
|
23
|
+
constructor(simulationProvider: SimulationProvider, telemetry?: TelemetryClient | undefined);
|
|
24
|
+
create(db: MerkleTreeOperations): BlockSimulator;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/block_builder/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,OAAO,CAAC,YAAY,CAAsB;gBAC9B,EAAE,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe;IAKxG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAG7G,WAAW,IAAI,IAAI;IAGnB,aAAa,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAG/C,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAGlC,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzC;AAED,qBAAa,mBAAmB;IAClB,OAAO,CAAC,kBAAkB;IAAsB,OAAO,CAAC,SAAS,CAAC;gBAA1D,kBAAkB,EAAE,kBAAkB,EAAU,SAAS,CAAC,6BAAiB;IAE/F,MAAM,CAAC,EAAE,EAAE,oBAAoB,GAAG,cAAc;CAGjD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { TestCircuitProver } from '@aztec/bb-prover';
|
|
2
|
+
import { ProvingOrchestrator } from '@aztec/prover-client/orchestrator';
|
|
3
|
+
import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
4
|
+
/**
|
|
5
|
+
* Implements a block simulator using a test circuit prover under the hood, which just simulates circuits and outputs empty proofs.
|
|
6
|
+
* This class is temporary and should die once we switch from tx effects to tx objects submissions, since sequencers won't have
|
|
7
|
+
* the need to create L2 block headers to submit to L1. When we do that, we should also remove the references to the
|
|
8
|
+
* prover-client and bb-prover packages from this package.
|
|
9
|
+
*/
|
|
10
|
+
export class BlockBuilder {
|
|
11
|
+
constructor(db, simulationProvider, telemetry) {
|
|
12
|
+
const testProver = new TestCircuitProver(telemetry, simulationProvider);
|
|
13
|
+
this.orchestrator = new ProvingOrchestrator(db, testProver, telemetry);
|
|
14
|
+
}
|
|
15
|
+
startNewBlock(numTxs, globalVariables, l1ToL2Messages) {
|
|
16
|
+
return this.orchestrator.startNewBlock(numTxs, globalVariables, l1ToL2Messages);
|
|
17
|
+
}
|
|
18
|
+
cancelBlock() {
|
|
19
|
+
this.orchestrator.cancelBlock();
|
|
20
|
+
}
|
|
21
|
+
finaliseBlock() {
|
|
22
|
+
return this.orchestrator.finaliseBlock();
|
|
23
|
+
}
|
|
24
|
+
setBlockCompleted() {
|
|
25
|
+
return this.orchestrator.setBlockCompleted();
|
|
26
|
+
}
|
|
27
|
+
addNewTx(tx) {
|
|
28
|
+
return this.orchestrator.addNewTx(tx);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class BlockBuilderFactory {
|
|
32
|
+
constructor(simulationProvider, telemetry) {
|
|
33
|
+
this.simulationProvider = simulationProvider;
|
|
34
|
+
this.telemetry = telemetry;
|
|
35
|
+
}
|
|
36
|
+
create(db) {
|
|
37
|
+
return new BlockBuilder(db, this.simulationProvider, this.telemetry ?? new NoopTelemetryClient());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2tfYnVpbGRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUd4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuRTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBRXZCLFlBQVksRUFBd0IsRUFBRSxrQkFBc0MsRUFBRSxTQUEwQjtRQUN0RyxNQUFNLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYyxFQUFFLGVBQWdDLEVBQUUsY0FBb0I7UUFDbEYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUNELFFBQVEsQ0FBQyxFQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFvQixrQkFBc0MsRUFBVSxTQUEyQjtRQUEzRSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBRyxDQUFDO0lBRW5HLE1BQU0sQ0FBQyxFQUF3QjtRQUM3QixPQUFPLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUNwRyxDQUFDO0NBQ0YifQ==
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type L1ToL2MessageSource, type L2BlockSource } from '@aztec/circuit-types';
|
|
2
|
-
import { type ProverClient } from '@aztec/circuit-types/interfaces';
|
|
3
2
|
import { type P2P } from '@aztec/p2p';
|
|
4
3
|
import { type SimulationProvider } from '@aztec/simulator';
|
|
5
4
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
@@ -25,7 +24,7 @@ export declare class SequencerClient {
|
|
|
25
24
|
* @param simulationProvider - An instance of a simulation provider
|
|
26
25
|
* @returns A new running instance.
|
|
27
26
|
*/
|
|
28
|
-
static new(config: SequencerClientConfig, p2pClient: P2P, worldStateSynchronizer: WorldStateSynchronizer, contractDataSource: ContractDataSource, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource,
|
|
27
|
+
static new(config: SequencerClientConfig, p2pClient: P2P, worldStateSynchronizer: WorldStateSynchronizer, contractDataSource: ContractDataSource, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, simulationProvider: SimulationProvider, telemetryClient: TelemetryClient): Promise<SequencerClient>;
|
|
29
28
|
/**
|
|
30
29
|
* Updates sequencer config.
|
|
31
30
|
* @param config - New parameters.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxE;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC;;;;;;;;;;;OAWG;WACiB,GAAG,CACrB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,GAAG,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe;IA+BlC;;;OAGG;IACI,qBAAqB,CAAC,MAAM,EAAE,eAAe;IAIpD;;OAEG;IACU,IAAI;IAIjB;;OAEG;IACI,OAAO;IAId,IAAI,QAAQ,yCAEX;IAED,IAAI,YAAY,2CAEf;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PublicProcessorFactory } from '@aztec/simulator';
|
|
2
|
+
import { BlockBuilderFactory } from '../block_builder/index.js';
|
|
2
3
|
import { getGlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
3
4
|
import { getL1Publisher } from '../publisher/index.js';
|
|
4
5
|
import { Sequencer } from '../sequencer/index.js';
|
|
@@ -22,12 +23,12 @@ export class SequencerClient {
|
|
|
22
23
|
* @param simulationProvider - An instance of a simulation provider
|
|
23
24
|
* @returns A new running instance.
|
|
24
25
|
*/
|
|
25
|
-
static async new(config, p2pClient, worldStateSynchronizer, contractDataSource, l2BlockSource, l1ToL2MessageSource,
|
|
26
|
+
static async new(config, p2pClient, worldStateSynchronizer, contractDataSource, l2BlockSource, l1ToL2MessageSource, simulationProvider, telemetryClient) {
|
|
26
27
|
const publisher = getL1Publisher(config, telemetryClient);
|
|
27
28
|
const globalsBuilder = getGlobalVariableBuilder(config);
|
|
28
29
|
const merkleTreeDb = worldStateSynchronizer.getLatest();
|
|
29
30
|
const publicProcessorFactory = new PublicProcessorFactory(merkleTreeDb, contractDataSource, simulationProvider, telemetryClient);
|
|
30
|
-
const sequencer = new Sequencer(publisher, globalsBuilder, p2pClient, worldStateSynchronizer,
|
|
31
|
+
const sequencer = new Sequencer(publisher, globalsBuilder, p2pClient, worldStateSynchronizer, new BlockBuilderFactory(simulationProvider, telemetryClient), l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, new TxValidatorFactory(merkleTreeDb, contractDataSource, !!config.enforceFees), telemetryClient, config);
|
|
31
32
|
await sequencer.start();
|
|
32
33
|
return new SequencerClient(sequencer);
|
|
33
34
|
}
|
|
@@ -57,4 +58,4 @@ export class SequencerClient {
|
|
|
57
58
|
return this.sequencer.feeRecipient;
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvc2VxdWVuY2VyLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsc0JBQXNCLEVBQTJCLE1BQU0sa0JBQWtCLENBQUM7QUFLbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFN0U7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUFvQixTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO0lBQUcsQ0FBQztJQUU1Qzs7Ozs7Ozs7Ozs7T0FXRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNyQixNQUE2QixFQUM3QixTQUFjLEVBQ2Qsc0JBQThDLEVBQzlDLGtCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsa0JBQXNDLEVBQ3RDLGVBQWdDO1FBRWhDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDMUQsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFeEQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLHNCQUFzQixDQUN2RCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixlQUFlLENBQ2hCLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FDN0IsU0FBUyxFQUNULGNBQWMsRUFDZCxTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLElBQUksbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLEVBQzVELGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLElBQUksa0JBQWtCLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQzlFLGVBQWUsRUFDZixNQUFNLENBQ1AsQ0FBQztRQUVGLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHFCQUFxQixDQUFDLE1BQXVCO1FBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQ3JDLENBQUM7Q0FDRiJ9
|
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,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,2BAA2B;AAC3B,KAAK,WAAW,GAAG;IACjB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,WAAW,CAAC;AAEtH,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,2BAA2B;AAC3B,KAAK,WAAW,GAAG;IACjB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,WAAW,CAAC;AAEtH,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CAAC,eAAe,CAsEvE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,kBAAkB,CAAC,WAAW,CAO/D,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CAMnF,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAqCvE"}
|
package/dest/config.js
CHANGED
|
@@ -75,11 +75,6 @@ export const sequencerConfigMappings = {
|
|
|
75
75
|
description: 'Whether to require every tx to have a fee payer',
|
|
76
76
|
...booleanConfigHelper(),
|
|
77
77
|
},
|
|
78
|
-
sequencerSkipSubmitProofs: {
|
|
79
|
-
env: 'SEQ_SKIP_SUBMIT_PROOFS',
|
|
80
|
-
description: 'Temporary flag to skip submitting proofs, so a prover-node takes care of it.',
|
|
81
|
-
...booleanConfigHelper(),
|
|
82
|
-
},
|
|
83
78
|
};
|
|
84
79
|
export const chainConfigMappings = {
|
|
85
80
|
l1ChainId: l1ReaderConfigMappings.l1ChainId,
|
|
@@ -184,4 +179,4 @@ function getDefaultAllowedTeardownFunctions() {
|
|
|
184
179
|
},
|
|
185
180
|
];
|
|
186
181
|
}
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RHLE9BQU8sRUFBdUIsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RSxPQUFPLEVBR0wsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUMxQixNQUFNLHVCQUF1QixDQUFDO0FBZ0IvQixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBd0M7SUFDMUUsNEJBQTRCLEVBQUU7UUFDNUIsR0FBRyxFQUFFLDRCQUE0QjtRQUNqQyxXQUFXLEVBQUUsMkRBQTJEO1FBQ3hFLEdBQUcsa0JBQWtCLENBQUMsSUFBSyxDQUFDO0tBQzdCO0lBQ0QsY0FBYyxFQUFFO1FBQ2QsR0FBRyxFQUFFLHNCQUFzQjtRQUMzQixXQUFXLEVBQUUsa0RBQWtEO1FBQy9ELEdBQUcsa0JBQWtCLENBQUMsRUFBRSxDQUFDO0tBQzFCO0lBQ0QsY0FBYyxFQUFFO1FBQ2QsR0FBRyxFQUFFLHNCQUFzQjtRQUMzQixXQUFXLEVBQUUsa0RBQWtEO1FBQy9ELEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxD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
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type L1ToL2MessageSource, type L2Block, type L2BlockSource, type ProcessedTx, Tx, type TxValidator } from '@aztec/circuit-types';
|
|
2
|
-
import { type ProverClient } from '@aztec/circuit-types/interfaces';
|
|
3
2
|
import { AztecAddress, EthAddress } from '@aztec/circuits.js';
|
|
4
3
|
import { type P2P } from '@aztec/p2p';
|
|
5
4
|
import { type PublicProcessorFactory } from '@aztec/simulator';
|
|
6
5
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
7
6
|
import { type WorldStateSynchronizer } from '@aztec/world-state';
|
|
7
|
+
import { type BlockBuilderFactory } from '../block_builder/index.js';
|
|
8
8
|
import { type GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
|
|
9
9
|
import { type Attestation, type L1Publisher } from '../publisher/l1-publisher.js';
|
|
10
10
|
import { type TxValidatorFactory } from '../tx_validator/tx_validator_factory.js';
|
|
@@ -23,11 +23,12 @@ export declare class Sequencer {
|
|
|
23
23
|
private globalsBuilder;
|
|
24
24
|
private p2pClient;
|
|
25
25
|
private worldState;
|
|
26
|
-
private
|
|
26
|
+
private blockBuilderFactory;
|
|
27
27
|
private l2BlockSource;
|
|
28
28
|
private l1ToL2MessageSource;
|
|
29
29
|
private publicProcessorFactory;
|
|
30
30
|
private txValidatorFactory;
|
|
31
|
+
private config;
|
|
31
32
|
private log;
|
|
32
33
|
private runningPromise?;
|
|
33
34
|
private pollingIntervalMs;
|
|
@@ -42,9 +43,8 @@ export declare class Sequencer {
|
|
|
42
43
|
private allowedInSetup;
|
|
43
44
|
private allowedInTeardown;
|
|
44
45
|
private maxBlockSizeInBytes;
|
|
45
|
-
private skipSubmitProofs;
|
|
46
46
|
private metrics;
|
|
47
|
-
constructor(publisher: L1Publisher, globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer,
|
|
47
|
+
constructor(publisher: L1Publisher, globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer, blockBuilderFactory: BlockBuilderFactory, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, publicProcessorFactory: PublicProcessorFactory, txValidatorFactory: TxValidatorFactory, telemetry: TelemetryClient, config?: SequencerConfig, log?: import("@aztec/foundation/log").Logger);
|
|
48
48
|
get tracer(): Tracer;
|
|
49
49
|
/**
|
|
50
50
|
* Updates sequencer config.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,EAAE,EACF,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
2
|
import { Tx, } from '@aztec/circuit-types';
|
|
3
|
-
import { BlockProofError, PROVING_STATUS
|
|
3
|
+
import { BlockProofError, PROVING_STATUS } from '@aztec/circuit-types/interfaces';
|
|
4
4
|
import { AztecAddress, EthAddress, IS_DEV_NET } from '@aztec/circuits.js';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
6
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
@@ -23,16 +23,17 @@ let Sequencer = (() => {
|
|
|
23
23
|
let _buildBlockAndPublish_decorators;
|
|
24
24
|
let _publishL2Block_decorators;
|
|
25
25
|
return _a = class Sequencer {
|
|
26
|
-
constructor(publisher, globalsBuilder, p2pClient, worldState,
|
|
26
|
+
constructor(publisher, globalsBuilder, p2pClient, worldState, blockBuilderFactory, l2BlockSource, l1ToL2MessageSource, publicProcessorFactory, txValidatorFactory, telemetry, config = {}, log = createDebugLogger('aztec:sequencer')) {
|
|
27
27
|
this.publisher = (__runInitializers(this, _instanceExtraInitializers), publisher);
|
|
28
28
|
this.globalsBuilder = globalsBuilder;
|
|
29
29
|
this.p2pClient = p2pClient;
|
|
30
30
|
this.worldState = worldState;
|
|
31
|
-
this.
|
|
31
|
+
this.blockBuilderFactory = blockBuilderFactory;
|
|
32
32
|
this.l2BlockSource = l2BlockSource;
|
|
33
33
|
this.l1ToL2MessageSource = l1ToL2MessageSource;
|
|
34
34
|
this.publicProcessorFactory = publicProcessorFactory;
|
|
35
35
|
this.txValidatorFactory = txValidatorFactory;
|
|
36
|
+
this.config = config;
|
|
36
37
|
this.log = log;
|
|
37
38
|
this.pollingIntervalMs = 1000;
|
|
38
39
|
this.maxTxsPerBlock = 32;
|
|
@@ -47,7 +48,6 @@ let Sequencer = (() => {
|
|
|
47
48
|
this.allowedInSetup = [];
|
|
48
49
|
this.allowedInTeardown = [];
|
|
49
50
|
this.maxBlockSizeInBytes = 1024 * 1024;
|
|
50
|
-
this.skipSubmitProofs = false;
|
|
51
51
|
this.updateConfig(config);
|
|
52
52
|
this.metrics = new SequencerMetrics(telemetry, () => this.state, 'Sequencer');
|
|
53
53
|
this.log.verbose(`Initialized sequencer with ${this.minTxsPerBLock}-${this.maxTxsPerBlock} txs per block.`);
|
|
@@ -91,10 +91,8 @@ let Sequencer = (() => {
|
|
|
91
91
|
if (config.allowedInTeardown) {
|
|
92
92
|
this.allowedInTeardown = config.allowedInTeardown;
|
|
93
93
|
}
|
|
94
|
-
// TODO
|
|
95
|
-
|
|
96
|
-
// proofs or not.
|
|
97
|
-
this.skipSubmitProofs = !!config.sequencerSkipSubmitProofs;
|
|
94
|
+
// TODO: Just read everything from the config object as needed instead of copying everything into local vars.
|
|
95
|
+
this.config = config;
|
|
98
96
|
}
|
|
99
97
|
/**
|
|
100
98
|
* Starts the sequencer and moves to IDLE state. Blocks until the initial sync is complete.
|
|
@@ -165,9 +163,10 @@ let Sequencer = (() => {
|
|
|
165
163
|
const lastBlockTime = historicalHeader?.globalVariables.timestamp.toNumber() || 0;
|
|
166
164
|
const currentTime = Math.floor(Date.now() / 1000);
|
|
167
165
|
const elapsedSinceLastBlock = currentTime - lastBlockTime;
|
|
166
|
+
this.log.debug(`Last block mined at ${lastBlockTime} current time is ${currentTime} (elapsed ${elapsedSinceLastBlock})`);
|
|
168
167
|
// Do not go forward with new block if not enough time has passed since last block
|
|
169
168
|
if (this.minSecondsBetweenBlocks > 0 && elapsedSinceLastBlock < this.minSecondsBetweenBlocks) {
|
|
170
|
-
this.log.debug(`Not creating block because not enough time has passed since last block
|
|
169
|
+
this.log.debug(`Not creating block because not enough time ${this.minSecondsBetweenBlocks} has passed since last block`);
|
|
171
170
|
return;
|
|
172
171
|
}
|
|
173
172
|
this.state = SequencerState.WAITING_FOR_TXS;
|
|
@@ -240,9 +239,9 @@ let Sequencer = (() => {
|
|
|
240
239
|
const numRealTxs = validTxs.length;
|
|
241
240
|
const blockSize = Math.max(2, numRealTxs);
|
|
242
241
|
const blockBuildingTimer = new Timer();
|
|
243
|
-
const
|
|
244
|
-
const blockTicket = await
|
|
245
|
-
const [publicProcessorDuration, [processedTxs, failedTxs]] = await elapsed(() => processor.process(validTxs, blockSize,
|
|
242
|
+
const blockBuilder = this.blockBuilderFactory.create(this.worldState.getLatest());
|
|
243
|
+
const blockTicket = await blockBuilder.startNewBlock(blockSize, newGlobalVariables, l1ToL2Messages);
|
|
244
|
+
const [publicProcessorDuration, [processedTxs, failedTxs]] = await elapsed(() => processor.process(validTxs, blockSize, blockBuilder, this.txValidatorFactory.validatorForProcessedTxs()));
|
|
246
245
|
if (failedTxs.length > 0) {
|
|
247
246
|
const failedTxData = failedTxs.map(fail => fail.tx);
|
|
248
247
|
this.log.debug(`Dropping failed txs ${Tx.getHashes(failedTxData).join(', ')}`);
|
|
@@ -252,14 +251,14 @@ let Sequencer = (() => {
|
|
|
252
251
|
// less txs than the minimum. But that'd cause the entire block to be aborted and retried. Instead, we should
|
|
253
252
|
// go back to the p2p pool and load more txs until we hit our minTxsPerBLock target. Only if there are no txs
|
|
254
253
|
// we should bail.
|
|
255
|
-
if (processedTxs.length === 0 && !this.skipMinTxsPerBlockCheck(elapsedSinceLastBlock)) {
|
|
254
|
+
if (processedTxs.length === 0 && !this.skipMinTxsPerBlockCheck(elapsedSinceLastBlock) && this.minTxsPerBLock > 0) {
|
|
256
255
|
this.log.verbose('No txs processed correctly to build block. Exiting');
|
|
257
|
-
|
|
256
|
+
blockBuilder.cancelBlock();
|
|
258
257
|
return;
|
|
259
258
|
}
|
|
260
259
|
await assertBlockHeight();
|
|
261
260
|
// All real transactions have been added, set the block as full and complete the proving.
|
|
262
|
-
await
|
|
261
|
+
await blockBuilder.setBlockCompleted();
|
|
263
262
|
// Here we are now waiting for the block to be proven.
|
|
264
263
|
// TODO(@PhilWindle) We should probably periodically check for things like another
|
|
265
264
|
// block being published before ours instead of just waiting on our block
|
|
@@ -268,8 +267,8 @@ let Sequencer = (() => {
|
|
|
268
267
|
throw new Error(`Block proving failed, reason: ${result.reason}`);
|
|
269
268
|
}
|
|
270
269
|
await assertBlockHeight();
|
|
271
|
-
// Block is
|
|
272
|
-
const { block
|
|
270
|
+
// Block is ready, now finalise and publish!
|
|
271
|
+
const { block } = await blockBuilder.finaliseBlock();
|
|
273
272
|
await assertBlockHeight();
|
|
274
273
|
const workDuration = workTimer.ms();
|
|
275
274
|
this.log.verbose(`Assembled block ${block.number} (txEffectsHash: ${block.header.contentCommitment.txsEffectsHash.toString('hex')})`, {
|
|
@@ -289,13 +288,6 @@ let Sequencer = (() => {
|
|
|
289
288
|
this.metrics.recordFailedBlock();
|
|
290
289
|
throw err;
|
|
291
290
|
}
|
|
292
|
-
// Submit the proof if we have configured this sequencer to run with an actual prover.
|
|
293
|
-
// This is temporary while we submit one proof per block, but will have to change once we
|
|
294
|
-
// move onto proving batches of multiple blocks at a time.
|
|
295
|
-
if (aggregationObject && proof && !this.skipSubmitProofs) {
|
|
296
|
-
await this.publisher.submitProof(block.header, block.archive.root, prover.getProverId(), aggregationObject, proof);
|
|
297
|
-
this.log.info(`Submitted proof for block ${block.number}`);
|
|
298
|
-
}
|
|
299
291
|
}
|
|
300
292
|
async collectAttestations(block) {
|
|
301
293
|
// @todo This should collect attestations properly and fix the ordering of them to make sense
|
|
@@ -429,4 +421,4 @@ export var SequencerState;
|
|
|
429
421
|
*/
|
|
430
422
|
SequencerState[SequencerState["STOPPED"] = 5] = "STOPPED";
|
|
431
423
|
})(SequencerState || (SequencerState = {}));
|
|
432
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFLTCxFQUFFLEdBRUgsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsZUFBZSxFQUNmLGNBQWMsR0FFZixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFxQyxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHekQsT0FBTyxFQUFFLFVBQVUsRUFBcUMsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFPbkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWhEOzs7Ozs7OztHQVFHO0lBQ1UsU0FBUzs7Ozs7c0JBQVQsU0FBUztZQWtCcEIsWUFDVSxTQUFzQixFQUN0QixjQUFxQyxFQUNyQyxTQUFjLEVBQ2QsVUFBa0MsRUFDbEMsTUFBb0IsRUFDcEIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLHNCQUE4QyxFQUM5QyxrQkFBc0MsRUFDOUMsU0FBMEIsRUFDMUIsU0FBMEIsRUFBRSxFQUNwQixNQUFNLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO2dCQVgxQyxjQUFTLElBbkJSLG1EQUFTLEVBbUJWLFNBQVMsRUFBYTtnQkFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO2dCQUNyQyxjQUFTLEdBQVQsU0FBUyxDQUFLO2dCQUNkLGVBQVUsR0FBVixVQUFVLENBQXdCO2dCQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFjO2dCQUNwQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtnQkFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtnQkFDeEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtnQkFDOUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtnQkFHdEMsUUFBRyxHQUFILEdBQUcsQ0FBdUM7Z0JBNUI1QyxzQkFBaUIsR0FBVyxJQUFJLENBQUM7Z0JBQ2pDLG1CQUFjLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixtQkFBYyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsNEJBQXVCLEdBQUcsQ0FBQyxDQUFDO2dCQUM1Qiw0QkFBdUIsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLDZFQUE2RTtnQkFDckUsY0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLGtCQUFhLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDbEMsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixVQUFLLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztnQkFDL0IsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO2dCQUN0QyxzQkFBaUIsR0FBcUIsRUFBRSxDQUFDO2dCQUN6Qyx3QkFBbUIsR0FBVyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7Z0JBaUJ4QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLDhCQUE4QixJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLGlCQUFpQixDQUFDLENBQUM7WUFDOUcsQ0FBQztZQUVELElBQUksTUFBTTtnQkFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQzdCLENBQUM7WUFFRDs7O2VBR0c7WUFDSSxZQUFZLENBQUMsTUFBdUI7Z0JBQ3pDLElBQUksTUFBTSxDQUFDLDRCQUE0QixLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN0RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDO2dCQUMvRCxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLHVCQUF1QixLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNqRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDO2dCQUNoRSxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLHVCQUF1QixLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNqRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDO2dCQUNoRSxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDM0MsQ0FBQztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUM3QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO2dCQUN4RCxDQUFDO2dCQUNELHlHQUF5RztnQkFDekcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCw0R0FBNEc7Z0JBQzVHLDRHQUE0RztnQkFDNUcsaUJBQWlCO2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztZQUM3RCxDQUFDO1lBRUQ7O2VBRUc7WUFDSSxLQUFLLENBQUMsS0FBSztnQkFDaEIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBRXpCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3ZGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBRUQ7O2VBRUc7WUFDSSxLQUFLLENBQUMsSUFBSTtnQkFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBRUQ7O2VBRUc7WUFDSSxPQUFPO2dCQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxjQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUNuQyxDQUFDO1lBRUQ7OztlQUdHO1lBQ0ksTUFBTTtnQkFDWCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixDQUFDO1lBRVMsS0FBSyxDQUFDLFdBQVc7Z0JBQ3pCLGtHQUFrRztnQkFDbEcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUcsQ0FBQztZQUVEOztlQUVHO1lBQ08sS0FBSyxDQUFDLElBQUk7Z0JBQ2xCLElBQUksQ0FBQztvQkFDSCx1REFBdUQ7b0JBQ3ZELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNuRCx3RkFBd0Y7b0JBQ3hGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQzt3QkFDdEUsT0FBTztvQkFDVCxDQUFDO29CQUVELElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7d0JBQ3RFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7d0JBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFDbkMsQ0FBQztvQkFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO29CQUN6RSxNQUFNLGNBQWMsR0FDbEIsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTO3dCQUM3QixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRTt3QkFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBRTNFLGtEQUFrRDtvQkFDbEQsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO3dCQUM5QyxPQUFPO29CQUNULENBQUM7b0JBRUQsZ0RBQWdEO29CQUNoRCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ2xELE1BQU0scUJBQXFCLEdBQUcsV0FBVyxHQUFHLGFBQWEsQ0FBQztvQkFFMUQsa0ZBQWtGO29CQUNsRixJQUFJLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7d0JBQzdGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNaLHlGQUF5RixhQUFhLGlCQUFpQixXQUFXLEdBQUcsQ0FDdEksQ0FBQzt3QkFDRixPQUFPO29CQUNULENBQUM7b0JBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsZUFBZSxDQUFDO29CQUU1QyxrQ0FBa0M7b0JBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUVwRCw4RkFBOEY7b0JBQzlGLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQzVDLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQzs0QkFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ1osNEJBQTRCLFVBQVUsQ0FBQyxNQUFNLHFCQUFxQixJQUFJLENBQUMsdUJBQXVCLGdDQUFnQyxDQUMvSCxDQUFDO3dCQUNKLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDWiw4REFBOEQsVUFBVSxDQUFDLE1BQU0sUUFBUSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQzlHLENBQUM7NEJBQ0YsT0FBTzt3QkFDVCxDQUFDO29CQUNILENBQUM7b0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxVQUFVLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxDQUFDO29CQUVuRSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FDdkUsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQztvQkFFRix3REFBd0Q7b0JBRXhELGlHQUFpRztvQkFDakcsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUN6QyxVQUFVLEVBQ1YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDcEYsQ0FBQztvQkFFRixzR0FBc0c7b0JBQ3RHLHVHQUF1RztvQkFDdkcsdUdBQXVHO29CQUN2Ryx3R0FBd0c7b0JBQ3hHLG9FQUFvRTtvQkFDcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUV4RCx5Q0FBeUM7b0JBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDbEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ1osNkVBQTZFLFFBQVEsQ0FBQyxNQUFNLFFBQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUMzSCxDQUFDO3dCQUNGLE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztnQkFDekcsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLElBQUksZUFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzNDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLFFBQVEsQ0FBQyxNQUFNLGdCQUFnQixDQUFDLENBQUM7d0JBQ2pGLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzNDLENBQUM7b0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsMkRBQTJELEVBQUcsR0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9DLENBQUM7WUFDSCxDQUFDO1lBRUQsK0hBQStIO1lBQ3ZILHVCQUF1QixDQUFDLE9BQWU7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDO1lBQ3JGLENBQUM7WUFLTyxLQUFLLENBQUMsb0JBQW9CLENBQ2hDLFFBQWMsRUFDZCxrQkFBbUMsRUFDbkMsZ0JBQW9DLEVBQ3BDLHFCQUE2QjtnQkFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0Isa0JBQWtCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLFFBQVEsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxDQUFDO2dCQUVsSCxNQUFNLGlCQUFpQixHQUFHLEtBQUssSUFBSSxFQUFFO29CQUNuQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDckUsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLEtBQUssa0JBQWtCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7d0JBQ3pFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzt3QkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO29CQUNoRSxDQUFDO29CQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO29CQUM3RCxDQUFDO29CQUVELG9GQUFvRjtnQkFDdEYsQ0FBQyxDQUFDO2dCQUVGLDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ25ILElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUNkLGFBQWEsY0FBYyxDQUFDLE1BQU0sZ0NBQWdDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUM5RyxDQUFDO2dCQUVGLHNGQUFzRjtnQkFDdEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUUzRixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFMUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFFOUYsTUFBTSxDQUFDLHVCQUF1QixFQUFFLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQzlFLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FDbkcsQ0FBQztnQkFDRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQy9FLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxDQUFDO2dCQUVELHlHQUF5RztnQkFDekcsNkdBQTZHO2dCQUM3Ryw2R0FBNkc7Z0JBQzdHLGtCQUFrQjtnQkFDbEIsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7b0JBQ3RGLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7b0JBQ3ZFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDckIsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0saUJBQWlCLEVBQUUsQ0FBQztnQkFFMUIseUZBQXlGO2dCQUN6RixNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUVqQyxzREFBc0Q7Z0JBQ3RELGtGQUFrRjtnQkFDbEYseUVBQXlFO2dCQUN6RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUM7Z0JBQ2hELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2dCQUVELE1BQU0saUJBQWlCLEVBQUUsQ0FBQztnQkFFMUIsNkNBQTZDO2dCQUM3QyxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUV6RSxNQUFNLGlCQUFpQixFQUFFLENBQUM7Z0JBRTFCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQ2QsbUJBQW1CLEtBQUssQ0FBQyxNQUFNLG9CQUFvQixLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQ3ZHLEtBQUssQ0FDTixHQUFHLEVBQ0o7b0JBQ0UsU0FBUyxFQUFFLGdCQUFnQjtvQkFDM0IsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLHFCQUFxQixFQUFFLHVCQUF1QjtvQkFDOUMsc0JBQXNCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxFQUFFO29CQUMvQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7aUJBQ1EsQ0FDOUIsQ0FBQztnQkFFRixJQUFJLENBQUM7b0JBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNYLDBCQUEwQixLQUFLLENBQUMsTUFBTSxTQUNwQyxZQUFZLENBQUMsTUFDZiwwQkFBMEIsWUFBWSxrQkFBa0IsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQ2hHLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxHQUFHLENBQUM7Z0JBQ1osQ0FBQztnQkFFRCxzRkFBc0Y7Z0JBQ3RGLHlGQUF5RjtnQkFDekYsMERBQTBEO2dCQUMxRCxJQUFJLGlCQUFpQixJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN6RCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUM5QixLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUNsQixNQUFNLENBQUMsV0FBVyxFQUFFLEVBQ3BCLGlCQUFpQixFQUNqQixLQUFLLENBQ04sQ0FBQztvQkFDRixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzdELENBQUM7WUFDSCxDQUFDO1lBRVMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQWM7Z0JBQ2hELDhGQUE4RjtnQkFDOUYscUZBQXFGO2dCQUNyRiwyRkFBMkY7Z0JBQzNGLG9CQUFvQjtnQkFDcEIsa0ZBQWtGO2dCQUNsRiw0QkFBNEI7Z0JBQzVCLDhCQUE4QjtnQkFDOUIsK0JBQStCO2dCQUMvQixnQ0FBZ0M7Z0JBQ2hDLDRCQUE0QjtnQkFDNUIsdUJBQXVCO2dCQUN2Qix1QkFBdUI7Z0JBQ3ZCLHFDQUFxQztnQkFDckMsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQztnQkFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2pGLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBRUQ7OztlQUdHO1lBSU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFjLEVBQUUsWUFBNEI7Z0JBQ3pFLG1FQUFtRTtnQkFDbkUsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2xGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ3pDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1lBRVMsS0FBSyxDQUFDLFlBQVksQ0FBNkIsR0FBUSxFQUFFLFNBQXlCO2dCQUMxRixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM3RixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsQ0FBQztnQkFFRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBRVMsb0JBQW9CLENBQUMsR0FBUztnQkFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2dCQUN6QyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBRWxCLE1BQU0sUUFBUSxHQUFTLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO29CQUM1RSxJQUFJLFNBQVMsR0FBRyxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNYLGVBQWUsRUFBRSxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsTUFBTSxxQkFBcUIsT0FBTyxtQ0FBbUMsU0FBUyxHQUFHLENBQ3ZJLENBQUM7d0JBQ0YsU0FBUztvQkFDWCxDQUFDO29CQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xCLFNBQVMsSUFBSSxNQUFNLENBQUM7Z0JBQ3RCLENBQUM7Z0JBRUQsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUVEOzs7ZUFHRztZQUNPLEtBQUssQ0FBQyxhQUFhO2dCQUMzQixNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztvQkFDekUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO29CQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRTtpQkFDMUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixDQUFDLEdBQUcsWUFBWSxDQUFDO2dCQUMzRSxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsSUFBSSxDQUFDLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDakgsVUFBVTtvQkFDVixHQUFHO29CQUNILGFBQWE7b0JBQ2IsbUJBQW1CO2lCQUNwQixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELElBQUksUUFBUTtnQkFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDeEIsQ0FBQztZQUVELElBQUksWUFBWTtnQkFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDNUIsQ0FBQzs7OztnREFsT0EsU0FBUyxDQUFDLGdDQUFnQyxFQUFFLENBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNsRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2lCQUNyRSxDQUFDLENBQUM7MENBdUpGLFNBQVMsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQy9DLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNO2lCQUN4QyxDQUFDLENBQUM7WUF4SkgsNk1BQWMsb0JBQW9CLDZEQTBIakM7WUErQkQsMkxBQWdCLGNBQWMsNkRBUzdCOzs7OztTQW5aVSxTQUFTO0FBbWR0Qjs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBeUJYO0FBekJELFdBQVksY0FBYztJQUN4Qjs7T0FFRztJQUNILG1EQUFJLENBQUE7SUFDSjs7T0FFRztJQUNILHlFQUFlLENBQUE7SUFDZjs7T0FFRztJQUNILHVFQUFjLENBQUE7SUFDZDs7T0FFRztJQUNILDJGQUF3QixDQUFBO0lBQ3hCOztPQUVHO0lBQ0gsMkVBQWdCLENBQUE7SUFDaEI7O09BRUc7SUFDSCx5REFBTyxDQUFBO0FBQ1QsQ0FBQyxFQXpCVyxjQUFjLEtBQWQsY0FBYyxRQXlCekIifQ==
|
|
424
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFLTCxFQUFFLEdBRUgsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQXVCLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV2RyxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBcUMsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0csT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxVQUFVLEVBQXFDLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUW5HLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRDs7Ozs7Ozs7R0FRRztJQUNVLFNBQVM7Ozs7O3NCQUFULFNBQVM7WUFpQnBCLFlBQ1UsU0FBc0IsRUFDdEIsY0FBcUMsRUFDckMsU0FBYyxFQUNkLFVBQWtDLEVBQ2xDLG1CQUF3QyxFQUN4QyxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsc0JBQThDLEVBQzlDLGtCQUFzQyxFQUM5QyxTQUEwQixFQUNsQixTQUEwQixFQUFFLEVBQzVCLE1BQU0saUJBQWlCLENBQUMsaUJBQWlCLENBQUM7Z0JBWDFDLGNBQVMsSUFsQlIsbURBQVMsRUFrQlYsU0FBUyxFQUFhO2dCQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7Z0JBQ3JDLGNBQVMsR0FBVCxTQUFTLENBQUs7Z0JBQ2QsZUFBVSxHQUFWLFVB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -24,20 +24,22 @@
|
|
|
24
24
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aztec/
|
|
28
|
-
"@aztec/
|
|
29
|
-
"@aztec/
|
|
30
|
-
"@aztec/
|
|
31
|
-
"@aztec/
|
|
32
|
-
"@aztec/
|
|
33
|
-
"@aztec/
|
|
34
|
-
"@aztec/noir-
|
|
35
|
-
"@aztec/
|
|
36
|
-
"@aztec/
|
|
37
|
-
"@aztec/
|
|
38
|
-
"@aztec/
|
|
39
|
-
"@aztec/
|
|
40
|
-
"@aztec/
|
|
27
|
+
"@aztec/bb-prover": "0.49.2",
|
|
28
|
+
"@aztec/circuit-types": "0.49.2",
|
|
29
|
+
"@aztec/circuits.js": "0.49.2",
|
|
30
|
+
"@aztec/ethereum": "0.49.2",
|
|
31
|
+
"@aztec/foundation": "0.49.2",
|
|
32
|
+
"@aztec/l1-artifacts": "0.49.2",
|
|
33
|
+
"@aztec/merkle-tree": "0.49.2",
|
|
34
|
+
"@aztec/noir-contracts.js": "0.49.2",
|
|
35
|
+
"@aztec/noir-protocol-circuits-types": "0.49.2",
|
|
36
|
+
"@aztec/p2p": "0.49.2",
|
|
37
|
+
"@aztec/protocol-contracts": "0.49.2",
|
|
38
|
+
"@aztec/prover-client": "0.49.2",
|
|
39
|
+
"@aztec/simulator": "0.49.2",
|
|
40
|
+
"@aztec/telemetry-client": "0.49.2",
|
|
41
|
+
"@aztec/types": "0.49.2",
|
|
42
|
+
"@aztec/world-state": "0.49.2",
|
|
41
43
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
42
44
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
43
45
|
"lodash.chunk": "^4.2.0",
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TestCircuitProver } from '@aztec/bb-prover';
|
|
2
|
+
import {
|
|
3
|
+
type BlockSimulator,
|
|
4
|
+
type MerkleTreeOperations,
|
|
5
|
+
type ProcessedTx,
|
|
6
|
+
type ProvingTicket,
|
|
7
|
+
type SimulationBlockResult,
|
|
8
|
+
} from '@aztec/circuit-types';
|
|
9
|
+
import { type Fr, type GlobalVariables } from '@aztec/circuits.js';
|
|
10
|
+
import { ProvingOrchestrator } from '@aztec/prover-client/orchestrator';
|
|
11
|
+
import { type SimulationProvider } from '@aztec/simulator';
|
|
12
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
13
|
+
import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Implements a block simulator using a test circuit prover under the hood, which just simulates circuits and outputs empty proofs.
|
|
17
|
+
* This class is temporary and should die once we switch from tx effects to tx objects submissions, since sequencers won't have
|
|
18
|
+
* the need to create L2 block headers to submit to L1. When we do that, we should also remove the references to the
|
|
19
|
+
* prover-client and bb-prover packages from this package.
|
|
20
|
+
*/
|
|
21
|
+
export class BlockBuilder implements BlockSimulator {
|
|
22
|
+
private orchestrator: ProvingOrchestrator;
|
|
23
|
+
constructor(db: MerkleTreeOperations, simulationProvider: SimulationProvider, telemetry: TelemetryClient) {
|
|
24
|
+
const testProver = new TestCircuitProver(telemetry, simulationProvider);
|
|
25
|
+
this.orchestrator = new ProvingOrchestrator(db, testProver, telemetry);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<ProvingTicket> {
|
|
29
|
+
return this.orchestrator.startNewBlock(numTxs, globalVariables, l1ToL2Messages);
|
|
30
|
+
}
|
|
31
|
+
cancelBlock(): void {
|
|
32
|
+
this.orchestrator.cancelBlock();
|
|
33
|
+
}
|
|
34
|
+
finaliseBlock(): Promise<SimulationBlockResult> {
|
|
35
|
+
return this.orchestrator.finaliseBlock();
|
|
36
|
+
}
|
|
37
|
+
setBlockCompleted(): Promise<void> {
|
|
38
|
+
return this.orchestrator.setBlockCompleted();
|
|
39
|
+
}
|
|
40
|
+
addNewTx(tx: ProcessedTx): Promise<void> {
|
|
41
|
+
return this.orchestrator.addNewTx(tx);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class BlockBuilderFactory {
|
|
46
|
+
constructor(private simulationProvider: SimulationProvider, private telemetry?: TelemetryClient) {}
|
|
47
|
+
|
|
48
|
+
create(db: MerkleTreeOperations): BlockSimulator {
|
|
49
|
+
return new BlockBuilder(db, this.simulationProvider, this.telemetry ?? new NoopTelemetryClient());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { type L1ToL2MessageSource, type L2BlockSource } from '@aztec/circuit-types';
|
|
2
|
-
import { type ProverClient } from '@aztec/circuit-types/interfaces';
|
|
3
2
|
import { type P2P } from '@aztec/p2p';
|
|
4
3
|
import { PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator';
|
|
5
4
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
6
5
|
import { type ContractDataSource } from '@aztec/types/contracts';
|
|
7
6
|
import { type WorldStateSynchronizer } from '@aztec/world-state';
|
|
8
7
|
|
|
8
|
+
import { BlockBuilderFactory } from '../block_builder/index.js';
|
|
9
9
|
import { type SequencerClientConfig } from '../config.js';
|
|
10
10
|
import { getGlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
11
11
|
import { getL1Publisher } from '../publisher/index.js';
|
|
@@ -37,7 +37,6 @@ export class SequencerClient {
|
|
|
37
37
|
contractDataSource: ContractDataSource,
|
|
38
38
|
l2BlockSource: L2BlockSource,
|
|
39
39
|
l1ToL2MessageSource: L1ToL2MessageSource,
|
|
40
|
-
prover: ProverClient,
|
|
41
40
|
simulationProvider: SimulationProvider,
|
|
42
41
|
telemetryClient: TelemetryClient,
|
|
43
42
|
) {
|
|
@@ -57,7 +56,7 @@ export class SequencerClient {
|
|
|
57
56
|
globalsBuilder,
|
|
58
57
|
p2pClient,
|
|
59
58
|
worldStateSynchronizer,
|
|
60
|
-
|
|
59
|
+
new BlockBuilderFactory(simulationProvider, telemetryClient),
|
|
61
60
|
l2BlockSource,
|
|
62
61
|
l1ToL2MessageSource,
|
|
63
62
|
publicProcessorFactory,
|
package/src/config.ts
CHANGED
|
@@ -104,11 +104,6 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
104
104
|
description: 'Whether to require every tx to have a fee payer',
|
|
105
105
|
...booleanConfigHelper(),
|
|
106
106
|
},
|
|
107
|
-
sequencerSkipSubmitProofs: {
|
|
108
|
-
env: 'SEQ_SKIP_SUBMIT_PROOFS',
|
|
109
|
-
description: 'Temporary flag to skip submitting proofs, so a prover-node takes care of it.',
|
|
110
|
-
...booleanConfigHelper(),
|
|
111
|
-
},
|
|
112
107
|
};
|
|
113
108
|
|
|
114
109
|
export const chainConfigMappings: ConfigMappingsType<ChainConfig> = {
|
|
@@ -6,12 +6,7 @@ import {
|
|
|
6
6
|
Tx,
|
|
7
7
|
type TxValidator,
|
|
8
8
|
} from '@aztec/circuit-types';
|
|
9
|
-
import {
|
|
10
|
-
type AllowedElement,
|
|
11
|
-
BlockProofError,
|
|
12
|
-
PROVING_STATUS,
|
|
13
|
-
type ProverClient,
|
|
14
|
-
} from '@aztec/circuit-types/interfaces';
|
|
9
|
+
import { type AllowedElement, BlockProofError, PROVING_STATUS } from '@aztec/circuit-types/interfaces';
|
|
15
10
|
import { type L2BlockBuiltStats } from '@aztec/circuit-types/stats';
|
|
16
11
|
import { AztecAddress, EthAddress, type GlobalVariables, type Header, IS_DEV_NET } from '@aztec/circuits.js';
|
|
17
12
|
import { Fr } from '@aztec/foundation/fields';
|
|
@@ -23,6 +18,7 @@ import { type PublicProcessorFactory } from '@aztec/simulator';
|
|
|
23
18
|
import { Attributes, type TelemetryClient, type Tracer, trackSpan } from '@aztec/telemetry-client';
|
|
24
19
|
import { type WorldStateStatus, type WorldStateSynchronizer } from '@aztec/world-state';
|
|
25
20
|
|
|
21
|
+
import { type BlockBuilderFactory } from '../block_builder/index.js';
|
|
26
22
|
import { type GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
|
|
27
23
|
import { type Attestation, type L1Publisher } from '../publisher/l1-publisher.js';
|
|
28
24
|
import { type TxValidatorFactory } from '../tx_validator/tx_validator_factory.js';
|
|
@@ -53,7 +49,6 @@ export class Sequencer {
|
|
|
53
49
|
private allowedInSetup: AllowedElement[] = [];
|
|
54
50
|
private allowedInTeardown: AllowedElement[] = [];
|
|
55
51
|
private maxBlockSizeInBytes: number = 1024 * 1024;
|
|
56
|
-
private skipSubmitProofs: boolean = false;
|
|
57
52
|
private metrics: SequencerMetrics;
|
|
58
53
|
|
|
59
54
|
constructor(
|
|
@@ -61,13 +56,13 @@ export class Sequencer {
|
|
|
61
56
|
private globalsBuilder: GlobalVariableBuilder,
|
|
62
57
|
private p2pClient: P2P,
|
|
63
58
|
private worldState: WorldStateSynchronizer,
|
|
64
|
-
private
|
|
59
|
+
private blockBuilderFactory: BlockBuilderFactory,
|
|
65
60
|
private l2BlockSource: L2BlockSource,
|
|
66
61
|
private l1ToL2MessageSource: L1ToL2MessageSource,
|
|
67
62
|
private publicProcessorFactory: PublicProcessorFactory,
|
|
68
63
|
private txValidatorFactory: TxValidatorFactory,
|
|
69
64
|
telemetry: TelemetryClient,
|
|
70
|
-
config: SequencerConfig = {},
|
|
65
|
+
private config: SequencerConfig = {},
|
|
71
66
|
private log = createDebugLogger('aztec:sequencer'),
|
|
72
67
|
) {
|
|
73
68
|
this.updateConfig(config);
|
|
@@ -115,10 +110,8 @@ export class Sequencer {
|
|
|
115
110
|
if (config.allowedInTeardown) {
|
|
116
111
|
this.allowedInTeardown = config.allowedInTeardown;
|
|
117
112
|
}
|
|
118
|
-
// TODO
|
|
119
|
-
|
|
120
|
-
// proofs or not.
|
|
121
|
-
this.skipSubmitProofs = !!config.sequencerSkipSubmitProofs;
|
|
113
|
+
// TODO: Just read everything from the config object as needed instead of copying everything into local vars.
|
|
114
|
+
this.config = config;
|
|
122
115
|
}
|
|
123
116
|
|
|
124
117
|
/**
|
|
@@ -201,11 +194,14 @@ export class Sequencer {
|
|
|
201
194
|
const lastBlockTime = historicalHeader?.globalVariables.timestamp.toNumber() || 0;
|
|
202
195
|
const currentTime = Math.floor(Date.now() / 1000);
|
|
203
196
|
const elapsedSinceLastBlock = currentTime - lastBlockTime;
|
|
197
|
+
this.log.debug(
|
|
198
|
+
`Last block mined at ${lastBlockTime} current time is ${currentTime} (elapsed ${elapsedSinceLastBlock})`,
|
|
199
|
+
);
|
|
204
200
|
|
|
205
201
|
// Do not go forward with new block if not enough time has passed since last block
|
|
206
202
|
if (this.minSecondsBetweenBlocks > 0 && elapsedSinceLastBlock < this.minSecondsBetweenBlocks) {
|
|
207
203
|
this.log.debug(
|
|
208
|
-
`Not creating block because not enough time has passed since last block
|
|
204
|
+
`Not creating block because not enough time ${this.minSecondsBetweenBlocks} has passed since last block`,
|
|
209
205
|
);
|
|
210
206
|
return;
|
|
211
207
|
}
|
|
@@ -318,11 +314,11 @@ export class Sequencer {
|
|
|
318
314
|
const blockSize = Math.max(2, numRealTxs);
|
|
319
315
|
|
|
320
316
|
const blockBuildingTimer = new Timer();
|
|
321
|
-
const
|
|
322
|
-
const blockTicket = await
|
|
317
|
+
const blockBuilder = this.blockBuilderFactory.create(this.worldState.getLatest());
|
|
318
|
+
const blockTicket = await blockBuilder.startNewBlock(blockSize, newGlobalVariables, l1ToL2Messages);
|
|
323
319
|
|
|
324
320
|
const [publicProcessorDuration, [processedTxs, failedTxs]] = await elapsed(() =>
|
|
325
|
-
processor.process(validTxs, blockSize,
|
|
321
|
+
processor.process(validTxs, blockSize, blockBuilder, this.txValidatorFactory.validatorForProcessedTxs()),
|
|
326
322
|
);
|
|
327
323
|
if (failedTxs.length > 0) {
|
|
328
324
|
const failedTxData = failedTxs.map(fail => fail.tx);
|
|
@@ -334,16 +330,16 @@ export class Sequencer {
|
|
|
334
330
|
// less txs than the minimum. But that'd cause the entire block to be aborted and retried. Instead, we should
|
|
335
331
|
// go back to the p2p pool and load more txs until we hit our minTxsPerBLock target. Only if there are no txs
|
|
336
332
|
// we should bail.
|
|
337
|
-
if (processedTxs.length === 0 && !this.skipMinTxsPerBlockCheck(elapsedSinceLastBlock)) {
|
|
333
|
+
if (processedTxs.length === 0 && !this.skipMinTxsPerBlockCheck(elapsedSinceLastBlock) && this.minTxsPerBLock > 0) {
|
|
338
334
|
this.log.verbose('No txs processed correctly to build block. Exiting');
|
|
339
|
-
|
|
335
|
+
blockBuilder.cancelBlock();
|
|
340
336
|
return;
|
|
341
337
|
}
|
|
342
338
|
|
|
343
339
|
await assertBlockHeight();
|
|
344
340
|
|
|
345
341
|
// All real transactions have been added, set the block as full and complete the proving.
|
|
346
|
-
await
|
|
342
|
+
await blockBuilder.setBlockCompleted();
|
|
347
343
|
|
|
348
344
|
// Here we are now waiting for the block to be proven.
|
|
349
345
|
// TODO(@PhilWindle) We should probably periodically check for things like another
|
|
@@ -355,8 +351,8 @@ export class Sequencer {
|
|
|
355
351
|
|
|
356
352
|
await assertBlockHeight();
|
|
357
353
|
|
|
358
|
-
// Block is
|
|
359
|
-
const { block
|
|
354
|
+
// Block is ready, now finalise and publish!
|
|
355
|
+
const { block } = await blockBuilder.finaliseBlock();
|
|
360
356
|
|
|
361
357
|
await assertBlockHeight();
|
|
362
358
|
|
|
@@ -387,20 +383,6 @@ export class Sequencer {
|
|
|
387
383
|
this.metrics.recordFailedBlock();
|
|
388
384
|
throw err;
|
|
389
385
|
}
|
|
390
|
-
|
|
391
|
-
// Submit the proof if we have configured this sequencer to run with an actual prover.
|
|
392
|
-
// This is temporary while we submit one proof per block, but will have to change once we
|
|
393
|
-
// move onto proving batches of multiple blocks at a time.
|
|
394
|
-
if (aggregationObject && proof && !this.skipSubmitProofs) {
|
|
395
|
-
await this.publisher.submitProof(
|
|
396
|
-
block.header,
|
|
397
|
-
block.archive.root,
|
|
398
|
-
prover.getProverId(),
|
|
399
|
-
aggregationObject,
|
|
400
|
-
proof,
|
|
401
|
-
);
|
|
402
|
-
this.log.info(`Submitted proof for block ${block.number}`);
|
|
403
|
-
}
|
|
404
386
|
}
|
|
405
387
|
|
|
406
388
|
protected async collectAttestations(block: L2Block): Promise<Attestation[] | undefined> {
|