@aztec/sequencer-client 0.56.0 → 0.58.0
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 +2 -2
- package/dest/block_builder/index.d.ts.map +1 -1
- package/dest/block_builder/light.d.ts +8 -12
- package/dest/block_builder/light.d.ts.map +1 -1
- package/dest/block_builder/light.js +11 -15
- package/dest/block_builder/orchestrator.d.ts +8 -11
- package/dest/block_builder/orchestrator.d.ts.map +1 -1
- package/dest/block_builder/orchestrator.js +3 -10
- package/dest/client/sequencer-client.d.ts +2 -2
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +3 -4
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -9
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +2 -1
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +7 -2
- package/dest/publisher/index.d.ts +1 -1
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/index.js +1 -1
- package/dest/publisher/l1-publisher-metrics.d.ts.map +1 -1
- package/dest/publisher/l1-publisher-metrics.js +2 -1
- package/dest/publisher/l1-publisher.d.ts +52 -36
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +305 -117
- package/dest/publisher/utils.d.ts +1 -1
- package/dest/publisher/utils.js +1 -1
- package/dest/sequencer/sequencer.d.ts +6 -6
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +142 -88
- package/dest/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/tx_validator/gas_validator.js +7 -5
- package/dest/tx_validator/phases_validator.d.ts +1 -1
- package/dest/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/tx_validator/phases_validator.js +1 -1
- package/dest/tx_validator/tx_validator_factory.d.ts +9 -7
- package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
- package/dest/tx_validator/tx_validator_factory.js +20 -10
- package/package.json +22 -19
- package/src/block_builder/index.ts +2 -2
- package/src/block_builder/light.ts +16 -24
- package/src/block_builder/orchestrator.ts +10 -18
- package/src/client/sequencer-client.ts +3 -9
- package/src/config.ts +10 -8
- package/src/global_variable_builder/global_builder.ts +1 -0
- package/src/publisher/config.ts +6 -1
- package/src/publisher/index.ts +1 -1
- package/src/publisher/l1-publisher-metrics.ts +1 -0
- package/src/publisher/l1-publisher.ts +435 -144
- package/src/publisher/utils.ts +1 -1
- package/src/sequencer/sequencer.ts +173 -108
- package/src/tx_validator/gas_validator.ts +6 -7
- package/src/tx_validator/phases_validator.ts +1 -1
- package/src/tx_validator/tx_validator_factory.ts +39 -15
|
@@ -78,4 +78,4 @@ export class PhasesTxValidator {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
_PhasesTxValidator_log = new WeakMap();
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvcGhhc2VzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsRUFBRSxHQUVILE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdkYsTUFBTSxPQUFPLGlCQUFpQjtJQUk1QixZQUFZLFNBQTZCLEVBQVUsY0FBZ0M7UUFBaEMsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBSG5GLGlDQUFPLGlCQUFpQixDQUFDLHdDQUF3QyxDQUFDLEVBQUM7UUFJakUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksMkJBQTJCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBUztRQUN6QixNQUFNLFFBQVEsR0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQVMsRUFBRSxDQUFDO1FBRTVCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsd0ZBQXdGO1lBQ3hGLG1HQUFtRztZQUNuRywrREFBK0Q7WUFDL0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWxELElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQztZQUVELE1BQU0s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
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { type AllowedElement, type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-types';
|
|
2
|
-
import { type GlobalVariables } from '@aztec/circuits.js';
|
|
3
|
-
import { type
|
|
4
|
-
import { type
|
|
1
|
+
import { type AllowedElement, type MerkleTreeReadOperations, type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-types';
|
|
2
|
+
import { type ContractDataSource, type GlobalVariables } from '@aztec/circuits.js';
|
|
3
|
+
import { type NullifierSource } from '@aztec/p2p';
|
|
4
|
+
import { type PublicStateSource } from './gas_validator.js';
|
|
5
5
|
export declare class TxValidatorFactory {
|
|
6
|
-
private
|
|
6
|
+
private committedDb;
|
|
7
7
|
private contractDataSource;
|
|
8
8
|
private enforceFees;
|
|
9
|
-
|
|
9
|
+
nullifierSource: NullifierSource;
|
|
10
|
+
publicStateSource: PublicStateSource;
|
|
11
|
+
constructor(committedDb: MerkleTreeReadOperations, contractDataSource: ContractDataSource, enforceFees: boolean);
|
|
10
12
|
validatorForNewTxs(globalVariables: GlobalVariables, setupAllowList: AllowedElement[]): TxValidator<Tx>;
|
|
11
|
-
validatorForProcessedTxs(): TxValidator<ProcessedTx>;
|
|
13
|
+
validatorForProcessedTxs(fork: MerkleTreeReadOperations): TxValidator<ProcessedTx>;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=tx_validator_factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,EAAE,EACP,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,WAAW;IALrB,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,iBAAiB,CAAC;gBAE3B,WAAW,EAAE,wBAAwB,EACrC,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,OAAO;IAa9B,kBAAkB,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;IAUvG,wBAAwB,CAAC,IAAI,EAAE,wBAAwB,GAAG,WAAW,CAAC,WAAW,CAAC;CAKnF"}
|
|
@@ -1,20 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { MerkleTreeId, } from '@aztec/circuit-types';
|
|
2
|
+
import { AggregateTxValidator, DataTxValidator, DoubleSpendTxValidator, MetadataTxValidator, } from '@aztec/p2p';
|
|
3
|
+
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
4
|
+
import { readPublicState } from '@aztec/simulator';
|
|
4
5
|
import { GasTxValidator } from './gas_validator.js';
|
|
5
6
|
import { PhasesTxValidator } from './phases_validator.js';
|
|
6
7
|
export class TxValidatorFactory {
|
|
7
|
-
constructor(
|
|
8
|
-
this.
|
|
8
|
+
constructor(committedDb, contractDataSource, enforceFees) {
|
|
9
|
+
this.committedDb = committedDb;
|
|
9
10
|
this.contractDataSource = contractDataSource;
|
|
10
11
|
this.enforceFees = enforceFees;
|
|
12
|
+
this.nullifierSource = {
|
|
13
|
+
getNullifierIndex: nullifier => this.committedDb.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer()),
|
|
14
|
+
};
|
|
15
|
+
this.publicStateSource = {
|
|
16
|
+
storageRead: (contractAddress, slot) => {
|
|
17
|
+
return readPublicState(this.committedDb, contractAddress, slot);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
11
20
|
}
|
|
12
21
|
validatorForNewTxs(globalVariables, setupAllowList) {
|
|
13
|
-
|
|
14
|
-
return new AggregateTxValidator(new DataTxValidator(), new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber), new DoubleSpendTxValidator(worldStateDB), new PhasesTxValidator(this.contractDataSource, setupAllowList), new GasTxValidator(worldStateDB, FeeJuiceAddress, this.enforceFees));
|
|
22
|
+
return new AggregateTxValidator(new DataTxValidator(), new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber), new DoubleSpendTxValidator(this.nullifierSource), new PhasesTxValidator(this.contractDataSource, setupAllowList), new GasTxValidator(this.publicStateSource, ProtocolContractAddress.FeeJuice, this.enforceFees));
|
|
15
23
|
}
|
|
16
|
-
validatorForProcessedTxs() {
|
|
17
|
-
return new DoubleSpendTxValidator(
|
|
24
|
+
validatorForProcessedTxs(fork) {
|
|
25
|
+
return new DoubleSpendTxValidator({
|
|
26
|
+
getNullifierIndex: nullifier => fork.findLeafIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBuffer()),
|
|
27
|
+
});
|
|
18
28
|
}
|
|
19
29
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yX2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfdmFsaWRhdG9yL3R4X3ZhbGlkYXRvcl9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxZQUFZLEdBS2IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsbUJBQW1CLEdBRXBCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUEwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsWUFDVSxXQUFxQyxFQUNyQyxrQkFBc0MsRUFDdEMsV0FBb0I7UUFGcEIsZ0JBQVcsR0FBWCxXQUFXLENBQTBCO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFFNUIsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixpQkFBaUIsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xILENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLEdBQUc7WUFDdkIsV0FBVyxFQUFFLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNyQyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRSxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxlQUFnQyxFQUFFLGNBQWdDO1FBQ25GLE9BQU8sSUFBSSxvQkFBb0IsQ0FDN0IsSUFBSSxlQUFlLEVBQUUsRUFDckIsSUFBSSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFDN0UsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQ2hELElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxFQUM5RCxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsdUJBQXVCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUE4QjtRQUNyRCxPQUFPLElBQUksc0JBQXNCLENBQUM7WUFDaEMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3RHLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.58.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -24,24 +24,24 @@
|
|
|
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/aztec.js": "0.
|
|
28
|
-
"@aztec/bb-prover": "0.
|
|
29
|
-
"@aztec/circuit-types": "0.
|
|
30
|
-
"@aztec/circuits.js": "0.
|
|
31
|
-
"@aztec/ethereum": "0.
|
|
32
|
-
"@aztec/foundation": "0.
|
|
33
|
-
"@aztec/l1-artifacts": "0.
|
|
34
|
-
"@aztec/merkle-tree": "0.
|
|
35
|
-
"@aztec/noir-contracts.js": "0.
|
|
36
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
37
|
-
"@aztec/p2p": "0.
|
|
38
|
-
"@aztec/protocol-contracts": "0.
|
|
39
|
-
"@aztec/prover-client": "0.
|
|
40
|
-
"@aztec/simulator": "0.
|
|
41
|
-
"@aztec/telemetry-client": "0.
|
|
42
|
-
"@aztec/types": "0.
|
|
43
|
-
"@aztec/validator-client": "0.
|
|
44
|
-
"@aztec/world-state": "0.
|
|
27
|
+
"@aztec/aztec.js": "0.58.0",
|
|
28
|
+
"@aztec/bb-prover": "0.58.0",
|
|
29
|
+
"@aztec/circuit-types": "0.58.0",
|
|
30
|
+
"@aztec/circuits.js": "0.58.0",
|
|
31
|
+
"@aztec/ethereum": "0.58.0",
|
|
32
|
+
"@aztec/foundation": "0.58.0",
|
|
33
|
+
"@aztec/l1-artifacts": "0.58.0",
|
|
34
|
+
"@aztec/merkle-tree": "0.58.0",
|
|
35
|
+
"@aztec/noir-contracts.js": "0.58.0",
|
|
36
|
+
"@aztec/noir-protocol-circuits-types": "0.58.0",
|
|
37
|
+
"@aztec/p2p": "0.58.0",
|
|
38
|
+
"@aztec/protocol-contracts": "0.58.0",
|
|
39
|
+
"@aztec/prover-client": "0.58.0",
|
|
40
|
+
"@aztec/simulator": "0.58.0",
|
|
41
|
+
"@aztec/telemetry-client": "0.58.0",
|
|
42
|
+
"@aztec/types": "0.58.0",
|
|
43
|
+
"@aztec/validator-client": "0.58.0",
|
|
44
|
+
"@aztec/world-state": "0.58.0",
|
|
45
45
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
46
46
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
47
47
|
"lodash.chunk": "^4.2.0",
|
|
@@ -89,6 +89,9 @@
|
|
|
89
89
|
"parser": {
|
|
90
90
|
"syntax": "typescript",
|
|
91
91
|
"decorators": true
|
|
92
|
+
},
|
|
93
|
+
"transform": {
|
|
94
|
+
"decoratorVersion": "2022-03"
|
|
92
95
|
}
|
|
93
96
|
}
|
|
94
97
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type BlockBuilder, type MerkleTreeReadOperations } from '@aztec/circuit-types';
|
|
2
2
|
|
|
3
3
|
export * from './orchestrator.js';
|
|
4
4
|
export * from './light.js';
|
|
5
5
|
export interface BlockBuilderFactory {
|
|
6
|
-
create(db:
|
|
6
|
+
create(db: MerkleTreeReadOperations): BlockBuilder;
|
|
7
7
|
}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import { createDebugLogger } from '@aztec/aztec.js';
|
|
2
2
|
import {
|
|
3
|
-
type
|
|
3
|
+
type BlockBuilder,
|
|
4
4
|
Body,
|
|
5
5
|
L2Block,
|
|
6
6
|
MerkleTreeId,
|
|
7
|
-
type
|
|
8
|
-
PROVING_STATUS,
|
|
7
|
+
type MerkleTreeWriteOperations,
|
|
9
8
|
type ProcessedTx,
|
|
10
|
-
type ProvingTicket,
|
|
11
|
-
type SimulationBlockResult,
|
|
12
9
|
type TxEffect,
|
|
13
10
|
makeEmptyProcessedTx,
|
|
14
11
|
toTxEffect,
|
|
@@ -18,22 +15,19 @@ import {
|
|
|
18
15
|
type GlobalVariables,
|
|
19
16
|
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
20
17
|
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
|
|
21
|
-
VerificationKeyData,
|
|
22
18
|
makeEmptyRecursiveProof,
|
|
23
19
|
} from '@aztec/circuits.js';
|
|
24
20
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
25
|
-
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
|
|
21
|
+
import { TubeVk, getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
|
|
22
|
+
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
26
23
|
import { buildBaseRollupInput, buildHeaderFromTxEffects, getTreeSnapshot } from '@aztec/prover-client/helpers';
|
|
27
24
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
28
25
|
import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
29
26
|
|
|
30
27
|
/**
|
|
31
|
-
*
|
|
32
|
-
* This class is temporary and should die once we switch from tx effects to tx objects submissions, since sequencers won't have
|
|
33
|
-
* the need to create L2 block headers to submit to L1. When we do that, we should also remove the references to the
|
|
34
|
-
* prover-client and bb-prover packages from this package.
|
|
28
|
+
* Builds a block and its header from a set of processed tx without running any circuits.
|
|
35
29
|
*/
|
|
36
|
-
export class LightweightBlockBuilder implements
|
|
30
|
+
export class LightweightBlockBuilder implements BlockBuilder {
|
|
37
31
|
private numTxs?: number;
|
|
38
32
|
private globalVariables?: GlobalVariables;
|
|
39
33
|
private l1ToL2Messages?: Fr[];
|
|
@@ -42,9 +36,9 @@ export class LightweightBlockBuilder implements BlockSimulator {
|
|
|
42
36
|
|
|
43
37
|
private readonly logger = createDebugLogger('aztec:sequencer-client:block_builder_light');
|
|
44
38
|
|
|
45
|
-
constructor(private db:
|
|
39
|
+
constructor(private db: MerkleTreeWriteOperations, private telemetry: TelemetryClient) {}
|
|
46
40
|
|
|
47
|
-
async startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<
|
|
41
|
+
async startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<void> {
|
|
48
42
|
this.logger.verbose('Starting new block', { numTxs, globalVariables, l1ToL2Messages });
|
|
49
43
|
this.numTxs = numTxs;
|
|
50
44
|
this.globalVariables = globalVariables;
|
|
@@ -52,9 +46,6 @@ export class LightweightBlockBuilder implements BlockSimulator {
|
|
|
52
46
|
|
|
53
47
|
// Update L1 to L2 tree
|
|
54
48
|
await this.db.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, this.l1ToL2Messages!);
|
|
55
|
-
|
|
56
|
-
// Nothing to prove, so we return an already resolved promise
|
|
57
|
-
return { provingPromise: Promise.resolve({ status: PROVING_STATUS.SUCCESS }) };
|
|
58
49
|
}
|
|
59
50
|
|
|
60
51
|
async addNewTx(tx: ProcessedTx): Promise<void> {
|
|
@@ -65,13 +56,11 @@ export class LightweightBlockBuilder implements BlockSimulator {
|
|
|
65
56
|
makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH),
|
|
66
57
|
this.globalVariables!,
|
|
67
58
|
this.db,
|
|
68
|
-
|
|
59
|
+
TubeVk,
|
|
69
60
|
);
|
|
70
61
|
}
|
|
71
62
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
async setBlockCompleted(): Promise<void> {
|
|
63
|
+
async setBlockCompleted(): Promise<L2Block> {
|
|
75
64
|
const paddingTxCount = this.numTxs! - this.txs.length;
|
|
76
65
|
this.logger.verbose(`Setting block as completed and adding ${paddingTxCount} padding txs`);
|
|
77
66
|
for (let i = 0; i < paddingTxCount; i++) {
|
|
@@ -81,12 +70,15 @@ export class LightweightBlockBuilder implements BlockSimulator {
|
|
|
81
70
|
this.globalVariables!.chainId,
|
|
82
71
|
this.globalVariables!.version,
|
|
83
72
|
getVKTreeRoot(),
|
|
73
|
+
protocolContractTreeRoot,
|
|
84
74
|
),
|
|
85
75
|
);
|
|
86
76
|
}
|
|
77
|
+
|
|
78
|
+
return this.buildBlock();
|
|
87
79
|
}
|
|
88
80
|
|
|
89
|
-
async
|
|
81
|
+
private async buildBlock(): Promise<L2Block> {
|
|
90
82
|
this.logger.verbose(`Finalising block`);
|
|
91
83
|
const nonEmptyTxEffects: TxEffect[] = this.txs
|
|
92
84
|
.map(tx => toTxEffect(tx, this.globalVariables!.gasFees))
|
|
@@ -98,14 +90,14 @@ export class LightweightBlockBuilder implements BlockSimulator {
|
|
|
98
90
|
const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db);
|
|
99
91
|
|
|
100
92
|
const block = new L2Block(newArchive, header, body);
|
|
101
|
-
return
|
|
93
|
+
return block;
|
|
102
94
|
}
|
|
103
95
|
}
|
|
104
96
|
|
|
105
97
|
export class LightweightBlockBuilderFactory {
|
|
106
98
|
constructor(private telemetry?: TelemetryClient) {}
|
|
107
99
|
|
|
108
|
-
create(db:
|
|
100
|
+
create(db: MerkleTreeWriteOperations): BlockBuilder {
|
|
109
101
|
return new LightweightBlockBuilder(db, this.telemetry ?? new NoopTelemetryClient());
|
|
110
102
|
}
|
|
111
103
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { TestCircuitProver } from '@aztec/bb-prover';
|
|
2
2
|
import {
|
|
3
|
-
type
|
|
4
|
-
type
|
|
3
|
+
type BlockBuilder,
|
|
4
|
+
type L2Block,
|
|
5
|
+
type MerkleTreeWriteOperations,
|
|
5
6
|
type ProcessedTx,
|
|
6
|
-
type ProvingTicket,
|
|
7
|
-
type SimulationBlockResult,
|
|
8
7
|
} from '@aztec/circuit-types';
|
|
9
8
|
import { type Fr, type GlobalVariables } from '@aztec/circuits.js';
|
|
10
9
|
import { ProvingOrchestrator } from '@aztec/prover-client/orchestrator';
|
|
@@ -14,27 +13,20 @@ import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* Implements a block simulator using a test circuit prover under the hood, which just simulates circuits and outputs empty proofs.
|
|
17
|
-
* This class is
|
|
18
|
-
*
|
|
19
|
-
* prover-client and bb-prover packages from this package.
|
|
16
|
+
* This class is unused at the moment, but could be leveraged by a prover-node to ascertain that it can prove a block before
|
|
17
|
+
* committing to proving it by sending a quote.
|
|
20
18
|
*/
|
|
21
|
-
export class OrchestratorBlockBuilder implements
|
|
19
|
+
export class OrchestratorBlockBuilder implements BlockBuilder {
|
|
22
20
|
private orchestrator: ProvingOrchestrator;
|
|
23
|
-
constructor(db:
|
|
21
|
+
constructor(db: MerkleTreeWriteOperations, simulationProvider: SimulationProvider, telemetry: TelemetryClient) {
|
|
24
22
|
const testProver = new TestCircuitProver(telemetry, simulationProvider);
|
|
25
23
|
this.orchestrator = new ProvingOrchestrator(db, testProver, telemetry);
|
|
26
24
|
}
|
|
27
25
|
|
|
28
|
-
startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<
|
|
26
|
+
startNewBlock(numTxs: number, globalVariables: GlobalVariables, l1ToL2Messages: Fr[]): Promise<void> {
|
|
29
27
|
return this.orchestrator.startNewBlock(numTxs, globalVariables, l1ToL2Messages);
|
|
30
28
|
}
|
|
31
|
-
|
|
32
|
-
this.orchestrator.cancel();
|
|
33
|
-
}
|
|
34
|
-
finaliseBlock(): Promise<SimulationBlockResult> {
|
|
35
|
-
return this.orchestrator.finaliseBlock();
|
|
36
|
-
}
|
|
37
|
-
setBlockCompleted(): Promise<void> {
|
|
29
|
+
setBlockCompleted(): Promise<L2Block> {
|
|
38
30
|
return this.orchestrator.setBlockCompleted();
|
|
39
31
|
}
|
|
40
32
|
addNewTx(tx: ProcessedTx): Promise<void> {
|
|
@@ -45,7 +37,7 @@ export class OrchestratorBlockBuilder implements BlockSimulator {
|
|
|
45
37
|
export class OrchestratorBlockBuilderFactory {
|
|
46
38
|
constructor(private simulationProvider: SimulationProvider, private telemetry?: TelemetryClient) {}
|
|
47
39
|
|
|
48
|
-
create(db:
|
|
40
|
+
create(db: MerkleTreeWriteOperations): BlockBuilder {
|
|
49
41
|
return new OrchestratorBlockBuilder(db, this.simulationProvider, this.telemetry ?? new NoopTelemetryClient());
|
|
50
42
|
}
|
|
51
43
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type L1ToL2MessageSource, type L2BlockSource, type WorldStateSynchronizer } from '@aztec/circuit-types';
|
|
2
|
+
import { type ContractDataSource } from '@aztec/circuits.js';
|
|
2
3
|
import { type EthAddress } from '@aztec/foundation/eth-address';
|
|
3
4
|
import { type P2P } from '@aztec/p2p';
|
|
4
5
|
import { PublicProcessorFactory, type SimulationProvider } from '@aztec/simulator';
|
|
5
6
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
6
|
-
import { type ContractDataSource } from '@aztec/types/contracts';
|
|
7
7
|
import { type ValidatorClient } from '@aztec/validator-client';
|
|
8
8
|
|
|
9
9
|
import { LightweightBlockBuilderFactory } from '../block_builder/index.js';
|
|
@@ -45,14 +45,8 @@ export class SequencerClient {
|
|
|
45
45
|
) {
|
|
46
46
|
const publisher = new L1Publisher(config, telemetryClient);
|
|
47
47
|
const globalsBuilder = new GlobalVariableBuilder(config);
|
|
48
|
-
const merkleTreeDb = worldStateSynchronizer.getLatest();
|
|
49
48
|
|
|
50
|
-
const publicProcessorFactory = new PublicProcessorFactory(
|
|
51
|
-
merkleTreeDb,
|
|
52
|
-
contractDataSource,
|
|
53
|
-
simulationProvider,
|
|
54
|
-
telemetryClient,
|
|
55
|
-
);
|
|
49
|
+
const publicProcessorFactory = new PublicProcessorFactory(contractDataSource, simulationProvider, telemetryClient);
|
|
56
50
|
|
|
57
51
|
const sequencer = new Sequencer(
|
|
58
52
|
publisher,
|
|
@@ -64,7 +58,7 @@ export class SequencerClient {
|
|
|
64
58
|
l2BlockSource,
|
|
65
59
|
l1ToL2MessageSource,
|
|
66
60
|
publicProcessorFactory,
|
|
67
|
-
new TxValidatorFactory(
|
|
61
|
+
new TxValidatorFactory(worldStateSynchronizer.getCommitted(), contractDataSource, !!config.enforceFees),
|
|
68
62
|
telemetryClient,
|
|
69
63
|
config,
|
|
70
64
|
);
|
package/src/config.ts
CHANGED
|
@@ -10,8 +10,7 @@ import {
|
|
|
10
10
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
11
11
|
import { FPCContract } from '@aztec/noir-contracts.js/FPC';
|
|
12
12
|
import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
|
|
13
|
-
import {
|
|
14
|
-
import { FeeJuiceAddress } from '@aztec/protocol-contracts/fee-juice';
|
|
13
|
+
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
15
14
|
|
|
16
15
|
import {
|
|
17
16
|
type PublisherConfig,
|
|
@@ -117,9 +116,9 @@ export const chainConfigMappings: ConfigMappingsType<ChainConfig> = {
|
|
|
117
116
|
|
|
118
117
|
export const sequencerClientConfigMappings: ConfigMappingsType<SequencerClientConfig> = {
|
|
119
118
|
...sequencerConfigMappings,
|
|
119
|
+
...l1ReaderConfigMappings,
|
|
120
120
|
...getTxSenderConfigMappings('SEQ'),
|
|
121
121
|
...getPublisherConfigMappings('SEQ'),
|
|
122
|
-
...l1ReaderConfigMappings,
|
|
123
122
|
...chainConfigMappings,
|
|
124
123
|
};
|
|
125
124
|
|
|
@@ -184,21 +183,24 @@ function getDefaultAllowedSetupFunctions(): AllowedElement[] {
|
|
|
184
183
|
return [
|
|
185
184
|
// needed for authwit support
|
|
186
185
|
{
|
|
187
|
-
address:
|
|
186
|
+
address: ProtocolContractAddress.AuthRegistry,
|
|
188
187
|
},
|
|
189
188
|
// needed for claiming on the same tx as a spend
|
|
190
189
|
{
|
|
191
|
-
address:
|
|
192
|
-
selector
|
|
190
|
+
address: ProtocolContractAddress.FeeJuice,
|
|
191
|
+
// We can't restrict the selector because public functions get routed via dispatch.
|
|
192
|
+
// selector: FunctionSelector.fromSignature('_increase_public_balance((Field),Field)'),
|
|
193
193
|
},
|
|
194
194
|
// needed for private transfers via FPC
|
|
195
195
|
{
|
|
196
196
|
classId: getContractClassFromArtifact(TokenContractArtifact).id,
|
|
197
|
-
selector
|
|
197
|
+
// We can't restrict the selector because public functions get routed via dispatch.
|
|
198
|
+
// selector: FunctionSelector.fromSignature('_increase_public_balance((Field),Field)'),
|
|
198
199
|
},
|
|
199
200
|
{
|
|
200
201
|
classId: getContractClassFromArtifact(FPCContract.artifact).id,
|
|
201
|
-
selector
|
|
202
|
+
// We can't restrict the selector because public functions get routed via dispatch.
|
|
203
|
+
// selector: FunctionSelector.fromSignature('prepare_fee((Field),Field,(Field),Field)'),
|
|
202
204
|
},
|
|
203
205
|
];
|
|
204
206
|
}
|
|
@@ -39,6 +39,7 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
39
39
|
this.publicClient = createPublicClient({
|
|
40
40
|
chain: chain.chainInfo,
|
|
41
41
|
transport: http(chain.rpcUrl),
|
|
42
|
+
pollingInterval: config.viemPollingIntervalMS,
|
|
42
43
|
});
|
|
43
44
|
|
|
44
45
|
this.rollupContract = getContract({
|
package/src/publisher/config.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type L1ReaderConfig, NULL_KEY } from '@aztec/ethereum';
|
|
2
|
-
import { type ConfigMappingsType, getConfigFromMappings } from '@aztec/foundation/config';
|
|
2
|
+
import { type ConfigMappingsType, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* The configuration of the rollup transaction publisher.
|
|
@@ -51,6 +51,11 @@ export const getTxSenderConfigMappings: (
|
|
|
51
51
|
defaultValue: 1,
|
|
52
52
|
description: 'The number of confirmations required.',
|
|
53
53
|
},
|
|
54
|
+
viemPollingIntervalMS: {
|
|
55
|
+
env: `${scope}_VIEM_POLLING_INTERVAL_MS`,
|
|
56
|
+
description: 'The polling interval viem uses in ms',
|
|
57
|
+
...numberConfigHelper(1_000),
|
|
58
|
+
},
|
|
54
59
|
});
|
|
55
60
|
|
|
56
61
|
export function getTxSenderConfigFromEnv(scope: 'PROVER' | 'SEQ'): Omit<TxSenderConfig, 'l1Contracts'> {
|
package/src/publisher/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { L1Publisher } from './l1-publisher.js';
|
|
1
|
+
export { L1Publisher, L1SubmitEpochProofArgs } from './l1-publisher.js';
|
|
2
2
|
export * from './config.js';
|
|
@@ -83,6 +83,7 @@ export class L1PublisherMetrics {
|
|
|
83
83
|
private recordTx(txType: L1TxType, durationMs: number, stats: Omit<L1PublishProofStats, 'eventName'>) {
|
|
84
84
|
const attributes = {
|
|
85
85
|
[Attributes.L1_TX_TYPE]: txType,
|
|
86
|
+
[Attributes.L1_SENDER]: stats.sender,
|
|
86
87
|
} as const;
|
|
87
88
|
|
|
88
89
|
this.txCount.add(1, {
|