@aztec/sequencer-client 0.69.0 → 0.69.1
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/client/sequencer-client.d.ts +2 -0
- 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 -1
- package/dest/index.d.ts +3 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +4 -2
- package/dest/publisher/config.d.ts +4 -0
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +6 -1
- package/dest/publisher/l1-publisher.d.ts +36 -11
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +154 -88
- package/dest/sequencer/index.d.ts +1 -0
- package/dest/sequencer/index.d.ts.map +1 -1
- package/dest/sequencer/index.js +2 -1
- package/dest/sequencer/sequencer.d.ts +9 -16
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +61 -130
- package/dest/sequencer/utils.d.ts +2 -2
- package/dest/sequencer/utils.d.ts.map +1 -1
- package/dest/sequencer/utils.js +3 -3
- package/dest/slasher/factory.d.ts +11 -0
- package/dest/slasher/factory.d.ts.map +1 -0
- package/dest/slasher/factory.js +10 -0
- package/dest/slasher/index.d.ts +3 -0
- package/dest/slasher/index.d.ts.map +1 -0
- package/dest/slasher/index.js +3 -0
- package/dest/slasher/slasher_client.d.ts +127 -0
- package/dest/slasher/slasher_client.d.ts.map +1 -0
- package/dest/slasher/slasher_client.js +305 -0
- package/dest/tx_validator/gas_validator.d.ts +2 -3
- package/dest/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/tx_validator/gas_validator.js +9 -22
- package/dest/tx_validator/nullifier_cache.d.ts +16 -0
- package/dest/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/tx_validator/nullifier_cache.js +24 -0
- package/dest/tx_validator/phases_validator.d.ts +2 -3
- package/dest/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/tx_validator/phases_validator.js +15 -24
- package/dest/tx_validator/tx_validator_factory.d.ts +15 -14
- package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
- package/dest/tx_validator/tx_validator_factory.js +38 -24
- package/package.json +21 -19
- package/src/client/sequencer-client.ts +5 -2
- package/src/config.ts +10 -0
- package/src/index.ts +3 -1
- package/src/publisher/config.ts +10 -0
- package/src/publisher/l1-publisher.ts +180 -97
- package/src/sequencer/index.ts +1 -0
- package/src/sequencer/sequencer.ts +70 -180
- package/src/sequencer/utils.ts +2 -2
- package/src/slasher/factory.ts +22 -0
- package/src/slasher/index.ts +2 -0
- package/src/slasher/slasher_client.ts +402 -0
- package/src/tx_validator/gas_validator.ts +11 -24
- package/src/tx_validator/nullifier_cache.ts +29 -0
- package/src/tx_validator/phases_validator.ts +22 -33
- package/src/tx_validator/tx_validator_factory.ts +82 -40
|
@@ -9,37 +9,28 @@ export class PhasesTxValidator {
|
|
|
9
9
|
_PhasesTxValidator_log.set(this, createLogger('sequencer:tx_validator:tx_phases'));
|
|
10
10
|
this.contractDataSource = new ContractsDataSourcePublicDB(contracts);
|
|
11
11
|
}
|
|
12
|
-
async
|
|
13
|
-
|
|
14
|
-
const invalidTxs = [];
|
|
15
|
-
for (const tx of txs) {
|
|
12
|
+
async validateTx(tx) {
|
|
13
|
+
try {
|
|
16
14
|
// TODO(@spalladino): We add this just to handle public authwit-check calls during setup
|
|
17
15
|
// which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
|
|
18
16
|
// which is what we're trying to do as part of the current txs.
|
|
19
17
|
await this.contractDataSource.addNewContracts(tx);
|
|
20
|
-
if (
|
|
21
|
-
|
|
18
|
+
if (!tx.data.forPublic) {
|
|
19
|
+
__classPrivateFieldGet(this, _PhasesTxValidator_log, "f").debug(`Tx ${Tx.getHash(tx)} does not contain enqueued public functions. Skipping phases validation.`);
|
|
20
|
+
return { result: 'valid' };
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
const setupFns = getExecutionRequestsByPhase(tx, TxExecutionPhase.SETUP);
|
|
23
|
+
for (const setupFn of setupFns) {
|
|
24
|
+
if (!(await this.isOnAllowList(setupFn, this.setupAllowList))) {
|
|
25
|
+
__classPrivateFieldGet(this, _PhasesTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it calls setup function not on allow list: ${setupFn.callContext.contractAddress}:${setupFn.callContext.functionSelector}`, { allowList: this.setupAllowList });
|
|
26
|
+
return { result: 'invalid', reason: ['Setup function not on allow list'] };
|
|
27
|
+
}
|
|
25
28
|
}
|
|
26
|
-
|
|
29
|
+
return { result: 'valid' };
|
|
27
30
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
async validateTx(tx) {
|
|
31
|
-
if (!tx.data.forPublic) {
|
|
32
|
-
__classPrivateFieldGet(this, _PhasesTxValidator_log, "f").debug(`Tx ${Tx.getHash(tx)} does not contain enqueued public functions. Skipping phases validation.`);
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
const setupFns = getExecutionRequestsByPhase(tx, TxExecutionPhase.SETUP);
|
|
36
|
-
for (const setupFn of setupFns) {
|
|
37
|
-
if (!(await this.isOnAllowList(setupFn, this.setupAllowList))) {
|
|
38
|
-
__classPrivateFieldGet(this, _PhasesTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} because it calls setup function not on allow list: ${setupFn.callContext.contractAddress}:${setupFn.callContext.functionSelector}`);
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
31
|
+
finally {
|
|
32
|
+
await this.contractDataSource.removeNewContracts(tx);
|
|
41
33
|
}
|
|
42
|
-
return true;
|
|
43
34
|
}
|
|
44
35
|
async isOnAllowList(publicCall, allowList) {
|
|
45
36
|
if (publicCall.isEmpty()) {
|
|
@@ -78,4 +69,4 @@ export class PhasesTxValidator {
|
|
|
78
69
|
}
|
|
79
70
|
}
|
|
80
71
|
_PhasesTxValidator_log = new WeakMap();
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvcGhhc2VzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFHTCxFQUFFLEVBQ0YsZ0JBQWdCLEdBR2pCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVGLE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsWUFBWSxTQUE2QixFQUFVLGNBQWdDO1FBQWhDLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUhuRixpQ0FBTyxZQUFZLENBQUMsa0NBQWtDLENBQUMsRUFBQztRQUl0RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFNO1FBQ3JCLElBQUksQ0FBQztZQUNILHdGQUF3RjtZQUN4RixtR0FBbUc7WUFDbkcsK0RBQStEO1lBQy9ELE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVsRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsdUJBQUEsSUFBSSw4QkFBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7Z0JBQ2hILE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0IsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RSxLQUFL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
|
|
@@ -1,15 +1,16 @@
|
|
|
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 {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { type AllowedElement, type ClientProtocolCircuitVerifier, type MerkleTreeReadOperations, type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-types';
|
|
2
|
+
import { type ContractDataSource, type GasFees, type GlobalVariables } from '@aztec/circuits.js';
|
|
3
|
+
import { NullifierCache } from './nullifier_cache.js';
|
|
4
|
+
export declare function createValidatorForAcceptingTxs(db: MerkleTreeReadOperations, contractDataSource: ContractDataSource, verifier: ClientProtocolCircuitVerifier | undefined, data: {
|
|
5
|
+
blockNumber: number;
|
|
6
|
+
l1ChainId: number;
|
|
7
|
+
enforceFees: boolean;
|
|
8
|
+
setupAllowList: AllowedElement[];
|
|
9
|
+
gasFees: GasFees;
|
|
10
|
+
}): TxValidator<Tx>;
|
|
11
|
+
export declare function createValidatorsForBlockBuilding(db: MerkleTreeReadOperations, contractDataSource: ContractDataSource, globalVariables: GlobalVariables, enforceFees: boolean, setupAllowList: AllowedElement[]): {
|
|
12
|
+
preprocessValidator: TxValidator<Tx>;
|
|
13
|
+
postprocessValidator: TxValidator<ProcessedTx>;
|
|
14
|
+
nullifierCache: NullifierCache;
|
|
15
|
+
};
|
|
15
16
|
//# 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,EACL,KAAK,cAAc,
|
|
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,EACnB,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,EAAE,EACP,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAqB,KAAK,kBAAkB,EAAM,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAYxH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,6BAA6B,GAAG,SAAS,EACnD,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB,GACA,WAAW,CAAC,EAAE,CAAC,CAejB;AAED,wBAAgB,gCAAgC,CAC9C,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,cAAc,EAAE,GAC/B;IACD,mBAAmB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACrC,oBAAoB,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC/C,cAAc,EAAE,cAAc,CAAC;CAChC,CAgBA"}
|
|
@@ -1,32 +1,46 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AggregateTxValidator, DataTxValidator, DoubleSpendTxValidator, MetadataTxValidator, } from '@aztec/p2p';
|
|
1
|
+
import { Fr } from '@aztec/circuits.js';
|
|
2
|
+
import { AggregateTxValidator, DataTxValidator, DoubleSpendTxValidator, MetadataTxValidator, TxProofValidator, } from '@aztec/p2p';
|
|
3
3
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
4
4
|
import { readPublicState } from '@aztec/simulator';
|
|
5
5
|
import { GasTxValidator } from './gas_validator.js';
|
|
6
|
+
import { NullifierCache } from './nullifier_cache.js';
|
|
6
7
|
import { PhasesTxValidator } from './phases_validator.js';
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
storageRead: (contractAddress, slot) => {
|
|
19
|
-
return readPublicState(this.committedDb, contractAddress, slot);
|
|
20
|
-
},
|
|
21
|
-
};
|
|
8
|
+
export function createValidatorForAcceptingTxs(db, contractDataSource, verifier, data) {
|
|
9
|
+
const { blockNumber, l1ChainId, enforceFees, setupAllowList, gasFees } = data;
|
|
10
|
+
const validators = [
|
|
11
|
+
new DataTxValidator(),
|
|
12
|
+
new MetadataTxValidator(new Fr(l1ChainId), new Fr(blockNumber)),
|
|
13
|
+
new DoubleSpendTxValidator(new NullifierCache(db)),
|
|
14
|
+
new PhasesTxValidator(contractDataSource, setupAllowList),
|
|
15
|
+
new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, enforceFees, gasFees),
|
|
16
|
+
];
|
|
17
|
+
if (verifier) {
|
|
18
|
+
validators.push(new TxProofValidator(verifier));
|
|
22
19
|
}
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
return new AggregateTxValidator(...validators);
|
|
21
|
+
}
|
|
22
|
+
export function createValidatorsForBlockBuilding(db, contractDataSource, globalVariables, enforceFees, setupAllowList) {
|
|
23
|
+
const nullifierCache = new NullifierCache(db);
|
|
24
|
+
const publicStateSource = new DatabasePublicStateSource(db);
|
|
25
|
+
return {
|
|
26
|
+
preprocessValidator: preprocessValidator(nullifierCache, publicStateSource, contractDataSource, enforceFees, globalVariables, setupAllowList),
|
|
27
|
+
postprocessValidator: postprocessValidator(nullifierCache),
|
|
28
|
+
nullifierCache,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
class DatabasePublicStateSource {
|
|
32
|
+
constructor(db) {
|
|
33
|
+
this.db = db;
|
|
25
34
|
}
|
|
26
|
-
|
|
27
|
-
return
|
|
28
|
-
getNullifierIndices: nullifiers => fork.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers),
|
|
29
|
-
});
|
|
35
|
+
storageRead(contractAddress, slot) {
|
|
36
|
+
return readPublicState(this.db, contractAddress, slot);
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
|
-
|
|
39
|
+
function preprocessValidator(nullifierCache, publicStateSource, contractDataSource, enforceFees, globalVariables, setupAllowList) {
|
|
40
|
+
// We don't include the TxProofValidator nor the DataTxValidator here because they are already checked by the time we get to block building.
|
|
41
|
+
return new AggregateTxValidator(new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber), new DoubleSpendTxValidator(nullifierCache), new PhasesTxValidator(contractDataSource, setupAllowList), new GasTxValidator(publicStateSource, ProtocolContractAddress.FeeJuice, enforceFees, globalVariables.gasFees));
|
|
42
|
+
}
|
|
43
|
+
function postprocessValidator(nullifierCache) {
|
|
44
|
+
return new DoubleSpendTxValidator(nullifierCache);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yX2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfdmFsaWRhdG9yL3R4X3ZhbGlkYXRvcl9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBOEMsRUFBRSxFQUFzQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3hILE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUEwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxNQUFNLFVBQVUsOEJBQThCLENBQzVDLEVBQTRCLEVBQzVCLGtCQUFzQyxFQUN0QyxRQUFtRCxFQUNuRCxJQU1DO0lBRUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDOUUsTUFBTSxVQUFVLEdBQXNCO1FBQ3BDLElBQUksZUFBZSxFQUFFO1FBQ3JCLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0QsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQztRQUN6RCxJQUFJLGNBQWMsQ0FBQyxJQUFJLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDO0tBQzlHLENBQUM7SUFFRixJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLFVBQVUsZ0NBQWdDLENBQzlDLEVBQTRCLEVBQzVCLGtCQUFzQyxFQUN0QyxlQUFnQyxFQUNoQyxXQUFvQixFQUNwQixjQUFnQztJQU1oQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLGlCQUFpQixHQUFHLElBQUkseUJBQXlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFNUQsT0FBTztRQUNMLG1CQUFtQixFQUFFLG1CQUFtQixDQUN0QyxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGNBQWMsQ0FDZjtRQUNELG9CQUFvQixFQUFFLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztRQUMxRCxjQUFjO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLHlCQUF5QjtJQUM3QixZQUFvQixFQUE0QjtRQUE1QixPQUFFLEdBQUYsRUFBRSxDQUEwQjtJQUFHLENBQUM7SUFFcEQsV0FBVyxDQUFDLGVBQTZCLEVBQUUsSUFBUTtRQUNqRCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLG1CQUFtQixDQUMxQixjQUE4QixFQUM5QixpQkFBb0MsRUFDcEMsa0JBQXNDLEVBQ3RDLFdBQW9CLEVBQ3BCLGVBQWdDLEVBQ2hDLGNBQWdDO0lBRWhDLDRJQUE0STtJQUM1SSxPQUFPLElBQUksb0JBQW9CLENBQzdCLElBQUksbUJBQW1CLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQzdFLElBQUksc0JBQXNCLENBQUMsY0FBYyxDQUFDLEVBQzFDLElBQUksaUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEVBQ3pELElBQUksY0FBYyxDQUFDLGlCQUFpQixFQUFFLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUM5RyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsY0FBOEI7SUFDMUQsT0FBTyxJQUFJLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3BELENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "0.69.
|
|
3
|
+
"version": "0.69.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -27,24 +27,24 @@
|
|
|
27
27
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@aztec/aztec.js": "0.69.
|
|
31
|
-
"@aztec/bb-prover": "0.69.
|
|
32
|
-
"@aztec/circuit-types": "0.69.
|
|
33
|
-
"@aztec/circuits.js": "0.69.
|
|
34
|
-
"@aztec/ethereum": "0.69.
|
|
35
|
-
"@aztec/foundation": "0.69.
|
|
36
|
-
"@aztec/l1-artifacts": "0.69.
|
|
37
|
-
"@aztec/merkle-tree": "0.69.
|
|
38
|
-
"@aztec/noir-contracts.js": "0.69.
|
|
39
|
-
"@aztec/noir-protocol-circuits-types": "0.69.
|
|
40
|
-
"@aztec/p2p": "0.69.
|
|
41
|
-
"@aztec/protocol-contracts": "0.69.
|
|
42
|
-
"@aztec/prover-client": "0.69.
|
|
43
|
-
"@aztec/simulator": "0.69.
|
|
44
|
-
"@aztec/telemetry-client": "0.69.
|
|
45
|
-
"@aztec/types": "0.69.
|
|
46
|
-
"@aztec/validator-client": "0.69.
|
|
47
|
-
"@aztec/world-state": "0.69.
|
|
30
|
+
"@aztec/aztec.js": "0.69.1",
|
|
31
|
+
"@aztec/bb-prover": "0.69.1",
|
|
32
|
+
"@aztec/circuit-types": "0.69.1",
|
|
33
|
+
"@aztec/circuits.js": "0.69.1",
|
|
34
|
+
"@aztec/ethereum": "0.69.1",
|
|
35
|
+
"@aztec/foundation": "0.69.1",
|
|
36
|
+
"@aztec/l1-artifacts": "0.69.1",
|
|
37
|
+
"@aztec/merkle-tree": "0.69.1",
|
|
38
|
+
"@aztec/noir-contracts.js": "0.69.1",
|
|
39
|
+
"@aztec/noir-protocol-circuits-types": "0.69.1",
|
|
40
|
+
"@aztec/p2p": "0.69.1",
|
|
41
|
+
"@aztec/protocol-contracts": "0.69.1",
|
|
42
|
+
"@aztec/prover-client": "0.69.1",
|
|
43
|
+
"@aztec/simulator": "0.69.1",
|
|
44
|
+
"@aztec/telemetry-client": "0.69.1",
|
|
45
|
+
"@aztec/types": "0.69.1",
|
|
46
|
+
"@aztec/validator-client": "0.69.1",
|
|
47
|
+
"@aztec/world-state": "0.69.1",
|
|
48
48
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
49
49
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
50
50
|
"lodash.chunk": "^4.2.0",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"viem": "^2.7.15"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
+
"@aztec/archiver": "workspace:^",
|
|
56
57
|
"@aztec/kv-store": "workspace:^",
|
|
57
58
|
"@jest/globals": "^29.5.0",
|
|
58
59
|
"@types/jest": "^29.5.0",
|
|
@@ -63,6 +64,7 @@
|
|
|
63
64
|
"@types/node": "^18.7.23",
|
|
64
65
|
"concurrently": "^7.6.0",
|
|
65
66
|
"eslint": "^8.37.0",
|
|
67
|
+
"express": "^4.21.1",
|
|
66
68
|
"jest": "^29.5.0",
|
|
67
69
|
"jest-mock-extended": "^3.0.3",
|
|
68
70
|
"levelup": "^5.1.1",
|
|
@@ -13,7 +13,7 @@ import { type SequencerClientConfig } from '../config.js';
|
|
|
13
13
|
import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
14
14
|
import { L1Publisher } from '../publisher/index.js';
|
|
15
15
|
import { Sequencer, type SequencerConfig } from '../sequencer/index.js';
|
|
16
|
-
import {
|
|
16
|
+
import { type SlasherClient } from '../slasher/index.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Encapsulates the full sequencer and publisher.
|
|
@@ -40,6 +40,7 @@ export class SequencerClient {
|
|
|
40
40
|
validatorClient: ValidatorClient | undefined; // allowed to be undefined while we migrate
|
|
41
41
|
p2pClient: P2P;
|
|
42
42
|
worldStateSynchronizer: WorldStateSynchronizer;
|
|
43
|
+
slasherClient: SlasherClient;
|
|
43
44
|
contractDataSource: ContractDataSource;
|
|
44
45
|
l2BlockSource: L2BlockSource;
|
|
45
46
|
l1ToL2MessageSource: L1ToL2MessageSource;
|
|
@@ -52,6 +53,7 @@ export class SequencerClient {
|
|
|
52
53
|
validatorClient,
|
|
53
54
|
p2pClient,
|
|
54
55
|
worldStateSynchronizer,
|
|
56
|
+
slasherClient,
|
|
55
57
|
contractDataSource,
|
|
56
58
|
l2BlockSource,
|
|
57
59
|
l1ToL2MessageSource,
|
|
@@ -91,11 +93,12 @@ export class SequencerClient {
|
|
|
91
93
|
globalsBuilder,
|
|
92
94
|
p2pClient,
|
|
93
95
|
worldStateSynchronizer,
|
|
96
|
+
slasherClient,
|
|
94
97
|
new LightweightBlockBuilderFactory(telemetryClient),
|
|
95
98
|
l2BlockSource,
|
|
96
99
|
l1ToL2MessageSource,
|
|
97
100
|
publicProcessorFactory,
|
|
98
|
-
|
|
101
|
+
contractDataSource,
|
|
99
102
|
l1Constants,
|
|
100
103
|
deps.dateProvider,
|
|
101
104
|
telemetryClient,
|
package/src/config.ts
CHANGED
|
@@ -59,6 +59,16 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
59
59
|
description: 'The minimum number of txs to include in a block.',
|
|
60
60
|
...numberConfigHelper(1),
|
|
61
61
|
},
|
|
62
|
+
maxL2BlockGas: {
|
|
63
|
+
env: 'SEQ_MAX_L2_BLOCK_GAS',
|
|
64
|
+
description: 'The maximum L2 block gas.',
|
|
65
|
+
...numberConfigHelper(10e9),
|
|
66
|
+
},
|
|
67
|
+
maxDABlockGas: {
|
|
68
|
+
env: 'SEQ_MAX_DA_BLOCK_GAS',
|
|
69
|
+
description: 'The maximum DA block gas.',
|
|
70
|
+
...numberConfigHelper(10e9),
|
|
71
|
+
},
|
|
62
72
|
coinbase: {
|
|
63
73
|
env: 'COINBASE',
|
|
64
74
|
parseEnv: (val: string) => EthAddress.fromString(val),
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export * from './client/index.js';
|
|
2
2
|
export * from './config.js';
|
|
3
3
|
export * from './publisher/index.js';
|
|
4
|
-
export
|
|
4
|
+
export * from './tx_validator/tx_validator_factory.js';
|
|
5
|
+
export * from './slasher/index.js';
|
|
6
|
+
export { Sequencer, SequencerState, getDefaultAllowedSetupFunctions } from './sequencer/index.js';
|
|
5
7
|
|
|
6
8
|
// Used by the node to simulate public parts of transactions. Should these be moved to a shared library?
|
|
7
9
|
// ISSUE(#9832)
|
package/src/publisher/config.ts
CHANGED
|
@@ -24,6 +24,11 @@ export type PublisherConfig = L1TxUtilsConfig & {
|
|
|
24
24
|
* The interval to wait between publish retries.
|
|
25
25
|
*/
|
|
26
26
|
l1PublishRetryIntervalMS: number;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The URL of the blob sink.
|
|
30
|
+
*/
|
|
31
|
+
blobSinkUrl?: string;
|
|
27
32
|
};
|
|
28
33
|
|
|
29
34
|
export const getTxSenderConfigMappings: (
|
|
@@ -72,6 +77,11 @@ export const getPublisherConfigMappings: (
|
|
|
72
77
|
description: 'The interval to wait between publish retries.',
|
|
73
78
|
},
|
|
74
79
|
...l1TxUtilsConfigMappings,
|
|
80
|
+
blobSinkUrl: {
|
|
81
|
+
env: `${scope}_BLOB_SINK_URL`,
|
|
82
|
+
description: 'The URL of the blob sink.',
|
|
83
|
+
parseEnv: (val?: string) => val,
|
|
84
|
+
},
|
|
75
85
|
});
|
|
76
86
|
|
|
77
87
|
export function getPublisherConfigFromEnv(scope: 'PROVER' | 'SEQ'): PublisherConfig {
|