@aztec/sequencer-client 2.1.0-rc.9 → 3.0.0-devnet.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/config.d.ts.map +1 -1
- package/dest/config.js +4 -0
- package/dest/publisher/sequencer-publisher-factory.d.ts +2 -1
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-factory.js +1 -1
- package/dest/publisher/sequencer-publisher-metrics.d.ts +1 -1
- package/dest/publisher/sequencer-publisher-metrics.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-metrics.js +1 -1
- package/dest/publisher/sequencer-publisher.d.ts +3 -3
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +12 -10
- package/dest/sequencer/block_builder.d.ts.map +1 -1
- package/dest/sequencer/block_builder.js +7 -3
- package/dest/sequencer/metrics.d.ts +1 -1
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/sequencer.d.ts +3 -3
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +8 -6
- package/dest/sequencer/timetable.d.ts +1 -1
- package/dest/sequencer/timetable.d.ts.map +1 -1
- package/dest/sequencer/timetable.js +1 -1
- package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
- package/dest/tx_validator/tx_validator_factory.js +11 -8
- package/package.json +28 -28
- package/src/config.ts +4 -0
- package/src/publisher/sequencer-publisher-factory.ts +2 -1
- package/src/publisher/sequencer-publisher-metrics.ts +1 -1
- package/src/publisher/sequencer-publisher.ts +20 -17
- package/src/sequencer/block_builder.ts +7 -5
- package/src/sequencer/metrics.ts +1 -1
- package/src/sequencer/sequencer.ts +17 -9
- package/src/sequencer/timetable.ts +1 -1
- package/src/tx_validator/tx_validator_factory.ts +10 -5
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,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAuB,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,KAAK,qBAAqB,EAAiC,MAAM,yBAAyB,CAAC;AAEpG,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,uBAAuB,CAAC;AAE/B,cAAc,uBAAuB,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,eAAO,MAAM,oCAAoC,IAAI,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GACjD,cAAc,GACd,qBAAqB,GACrB,cAAc,GACd,eAAe,GACf,cAAc,GACd,WAAW,GACX,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,GACzC,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC,CAAC;AAE/F,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAuB,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,KAAK,qBAAqB,EAAiC,MAAM,yBAAyB,CAAC;AAEpG,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,uBAAuB,CAAC;AAE/B,cAAc,uBAAuB,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,eAAO,MAAM,oCAAoC,IAAI,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GACjD,cAAc,GACd,qBAAqB,GACrB,cAAc,GACd,eAAe,GACf,cAAc,GACd,WAAW,GACX,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,GACzC,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC,CAAC;AAE/F,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CAAC,eAAe,CA+GvE,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,kBAAkB,CAAC,qBAAqB,CASnF,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD"}
|
package/dest/config.js
CHANGED
|
@@ -106,6 +106,10 @@ export const sequencerConfigMappings = {
|
|
|
106
106
|
description: 'Do not invalidate the previous block if invalid when we are the proposer (for testing only)',
|
|
107
107
|
...booleanConfigHelper(false)
|
|
108
108
|
},
|
|
109
|
+
broadcastInvalidBlockProposal: {
|
|
110
|
+
description: 'Broadcast invalid block proposals with corrupted state (for testing only)',
|
|
111
|
+
...booleanConfigHelper(false)
|
|
112
|
+
},
|
|
109
113
|
injectFakeAttestation: {
|
|
110
114
|
description: 'Inject a fake attestation (for testing only)',
|
|
111
115
|
...booleanConfigHelper(false)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { EthAddress
|
|
1
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type Logger } from '@aztec/aztec.js/log';
|
|
2
3
|
import type { BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
3
4
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
4
5
|
import type { GovernanceProposerContract, PublisherManager, RollupContract } from '@aztec/ethereum';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher-factory.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,MAAM,EAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"sequencer-publisher-factory.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,0BAA0B,EAAmB,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAe,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE3E,MAAM,MAAM,qBAAqB,GAAG;IAClC,eAAe,EAAE,UAAU,CAAC;IAC5B,SAAS,EAAE,kBAAkB,CAAC;CAC/B,CAAC;AAEF,qBAAa,yBAAyB;IASlC,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,IAAI;IATd,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,gFAAgF;IAChF,OAAO,CAAC,WAAW,CAAuC;IAE1D,OAAO,CAAC,MAAM,CAAS;gBAGb,eAAe,EAAE,qBAAqB,EACtC,IAAI,EAAE;QACZ,SAAS,EAAE,eAAe,CAAC;QAC3B,gBAAgB,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QACvD,cAAc,CAAC,EAAE,uBAAuB,CAAC;QACzC,YAAY,EAAE,YAAY,CAAC;QAC3B,UAAU,EAAE,UAAU,CAAC;QACvB,cAAc,EAAE,cAAc,CAAC;QAC/B,0BAA0B,EAAE,0BAA0B,CAAC;QACvD,oBAAoB,EAAE,oBAAoB,CAAC;QAC3C,YAAY,EAAE,mBAAmB,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAKH;;;;OAIG;IACU,MAAM,CAAC,gBAAgB,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAsCnF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createLogger } from '@aztec/aztec.js';
|
|
1
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
2
|
import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
3
3
|
import { SequencerPublisher } from './sequencer-publisher.js';
|
|
4
4
|
export class SequencerPublisherFactory {
|
|
@@ -17,7 +17,7 @@ export declare class SequencerPublisherMetrics {
|
|
|
17
17
|
private readonly blobTxSuccessCounter;
|
|
18
18
|
private readonly blobTxFailureCounter;
|
|
19
19
|
private senderBalance;
|
|
20
|
-
constructor(client: TelemetryClient, name?: string, logger?: import("@aztec/aztec.js").Logger);
|
|
20
|
+
constructor(client: TelemetryClient, name?: string, logger?: import("@aztec/aztec.js/log").Logger);
|
|
21
21
|
recordFailedTx(txType: L1TxType): void;
|
|
22
22
|
recordProcessBlockTx(durationMs: number, stats: L1PublishBlockStats): void;
|
|
23
23
|
recordSenderBalance(wei: bigint, senderAddress: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher-metrics.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher-metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAKL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC;AAEjC,qBAAa,yBAAyB;IAsBlC,OAAO,CAAC,MAAM;IArBhB,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,UAAU,CAAY;IAE9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAY;IACzD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAgB;IAErD,OAAO,CAAC,aAAa,CAAQ;gBAG3B,MAAM,EAAE,eAAe,EACvB,IAAI,SAAuB,EACnB,MAAM,
|
|
1
|
+
{"version":3,"file":"sequencer-publisher-metrics.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher-metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAKL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC;AAEjC,qBAAa,yBAAyB;IAsBlC,OAAO,CAAC,MAAM;IArBhB,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,UAAU,CAAY;IAE9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAY;IACzD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAgB;IAErD,OAAO,CAAC,aAAa,CAAQ;gBAG3B,MAAM,EAAE,eAAe,EACvB,IAAI,SAAuB,EACnB,MAAM,uCAA8C;IAwF9D,cAAc,CAAC,MAAM,EAAE,QAAQ;IAW/B,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;IAcnE,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAOtD,OAAO,CAAC,QAAQ;CAuCjB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { L2Block } from '@aztec/aztec.js/block';
|
|
2
2
|
import { type BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
3
3
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
4
4
|
import { type EmpireSlashingProposerContract, FormattedViemError, type GovernanceProposerContract, type L1BlobInputs, type L1ContractsConfig, type L1TxConfig, type L1TxRequest, RollupContract, type TallySlashingProposerContract, type TransactionStats } from '@aztec/ethereum';
|
|
@@ -11,7 +11,7 @@ import { DateProvider } from '@aztec/foundation/timer';
|
|
|
11
11
|
import { type ProposerSlashAction } from '@aztec/slasher';
|
|
12
12
|
import { CommitteeAttestationsAndSigners, type ValidateBlockResult } from '@aztec/stdlib/block';
|
|
13
13
|
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
14
|
-
import {
|
|
14
|
+
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
15
15
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
16
16
|
import { type TransactionReceipt, type TypedDataDefinition } from 'viem';
|
|
17
17
|
import type { PublisherConfig, TxSenderConfig } from './config.js';
|
|
@@ -117,7 +117,7 @@ export declare class SequencerPublisher {
|
|
|
117
117
|
* It will throw if the block header is invalid.
|
|
118
118
|
* @param header - The block header to validate
|
|
119
119
|
*/
|
|
120
|
-
validateBlockHeader(header:
|
|
120
|
+
validateBlockHeader(header: CheckpointHeader, opts?: {
|
|
121
121
|
forcePendingBlockNumber: number | undefined;
|
|
122
122
|
}): Promise<void>;
|
|
123
123
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Blob } from '@aztec/blob-lib';
|
|
1
|
+
import { Blob, getBlobsPerL1Block, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
|
|
2
2
|
import { createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
3
3
|
import { FormattedViemError, MULTI_CALL_3_ADDRESS, Multicall3, RollupContract, formatViemError, tryExtractEvent } from '@aztec/ethereum';
|
|
4
4
|
import { sumBigint } from '@aztec/foundation/bigint';
|
|
@@ -338,13 +338,13 @@ export class SequencerPublisher {
|
|
|
338
338
|
if (validationResult.valid) {
|
|
339
339
|
throw new Error('Cannot invalidate a valid block');
|
|
340
340
|
}
|
|
341
|
-
const { block, committee, reason
|
|
341
|
+
const { block, committee, reason } = validationResult;
|
|
342
342
|
const logData = {
|
|
343
343
|
...block,
|
|
344
344
|
reason
|
|
345
345
|
};
|
|
346
346
|
this.log.debug(`Simulating invalidate block ${block.blockNumber}`, logData);
|
|
347
|
-
const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations).getPackedAttestations();
|
|
347
|
+
const attestationsAndSigners = new CommitteeAttestationsAndSigners(validationResult.attestations).getPackedAttestations();
|
|
348
348
|
if (reason === 'invalid-attestation') {
|
|
349
349
|
return this.rollupContract.buildInvalidateBadAttestationRequest(block.blockNumber, attestationsAndSigners, committee, validationResult.invalidIndex);
|
|
350
350
|
} else if (reason === 'insufficient-attestations') {
|
|
@@ -375,11 +375,12 @@ export class SequencerPublisher {
|
|
|
375
375
|
}
|
|
376
376
|
attestationsAndSigners.attestations = committee.map((committeeMember)=>CommitteeAttestation.fromAddress(committeeMember));
|
|
377
377
|
}
|
|
378
|
-
const
|
|
379
|
-
const
|
|
378
|
+
const blobFields = block.getCheckpointBlobFields();
|
|
379
|
+
const blobs = getBlobsPerL1Block(blobFields);
|
|
380
|
+
const blobInput = getPrefixedEthBlobCommitments(blobs);
|
|
380
381
|
const args = [
|
|
381
382
|
{
|
|
382
|
-
header: block.
|
|
383
|
+
header: block.getCheckpointHeader().toViem(),
|
|
383
384
|
archive: toHex(block.archive.root.toBuffer()),
|
|
384
385
|
stateReference: block.header.state.toViem(),
|
|
385
386
|
oracleInput: {
|
|
@@ -561,10 +562,11 @@ export class SequencerPublisher {
|
|
|
561
562
|
* @param block - L2 block to propose.
|
|
562
563
|
* @returns True if the tx has been enqueued, throws otherwise. See #9315
|
|
563
564
|
*/ async enqueueProposeL2Block(block, attestationsAndSigners, attestationsAndSignersSignature, opts = {}) {
|
|
564
|
-
const
|
|
565
|
-
const
|
|
565
|
+
const checkpointHeader = block.getCheckpointHeader();
|
|
566
|
+
const blobFields = block.getCheckpointBlobFields();
|
|
567
|
+
const blobs = getBlobsPerL1Block(blobFields);
|
|
566
568
|
const proposeTxArgs = {
|
|
567
|
-
header:
|
|
569
|
+
header: checkpointHeader,
|
|
568
570
|
archive: block.archive.root.toBuffer(),
|
|
569
571
|
stateReference: block.header.state,
|
|
570
572
|
body: block.body.toBuffer(),
|
|
@@ -707,7 +709,7 @@ export class SequencerPublisher {
|
|
|
707
709
|
}
|
|
708
710
|
async prepareProposeTx(encodedData, timestamp, options) {
|
|
709
711
|
const kzg = Blob.getViemKzgInstance();
|
|
710
|
-
const blobInput =
|
|
712
|
+
const blobInput = getPrefixedEthBlobCommitments(encodedData.blobs);
|
|
711
713
|
this.log.debug('Validating blob input', {
|
|
712
714
|
blobInput
|
|
713
715
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_builder.d.ts","sourceRoot":"","sources":["../../src/sequencer/block_builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"block_builder.d.ts","sourceRoot":"","sources":["../../src/sequencer/block_builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,EAAE,YAAY,EAAkB,MAAM,yBAAyB,CAAC;AAGvE,OAAO,EAGL,eAAe,EAEhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,6BAA6B,CAAC;AAE1F,OAAO,KAAK,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF,wBAAsB,UAAU,CAC9B,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,EAC5C,cAAc,EAAE,EAAE,EAAE,EACpB,kBAAkB,EAAE,eAAe,EACnC,IAAI,EAAE,qBAAqB,YAAK,EAChC,cAAc,EAAE,yBAAyB,EACzC,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,wBAAwB,EACnC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,cAAc,CAAC,EACtE,YAAY,EAAE,YAAY,EAC1B,eAAe,GAAE,eAAsC,GACtD,OAAO,CAAC,gBAAgB,CAAC,CA4C3B;AAWD,qBAAa,oBAAqB,YAAW,qBAAqB;IAE9D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;gBAJf,MAAM,EAAE,0BAA0B,EAClC,UAAU,EAAE,sBAAsB,EAClC,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,eAAe,GAAE,eAAsC;IAG1D,SAAS,IAAI,0BAA0B;IAIvC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAIlD,oBAAoB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB;;;;YAyCrF,mBAAmB;IAU3B,UAAU,CACd,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,EAC5C,cAAc,EAAE,EAAE,EAAE,EACpB,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE,qBAAqB,EAC3B,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,gBAAgB,CAAC;IAwC5B,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAGjE"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { MerkleTreeId
|
|
1
|
+
import { MerkleTreeId } from '@aztec/aztec.js/trees';
|
|
2
2
|
import { merge, pick } from '@aztec/foundation/collection';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
5
5
|
import { bufferToHex } from '@aztec/foundation/string';
|
|
6
|
-
import { Timer } from '@aztec/foundation/timer';
|
|
6
|
+
import { Timer, elapsed } from '@aztec/foundation/timer';
|
|
7
7
|
import { getDefaultAllowedSetupFunctions } from '@aztec/p2p/msg_validators';
|
|
8
8
|
import { LightweightBlockFactory } from '@aztec/prover-client/block-factory';
|
|
9
9
|
import { GuardedMerkleTreeOperations, PublicContractsDB, PublicProcessor, TelemetryPublicTxSimulator } from '@aztec/simulator/server';
|
|
@@ -81,7 +81,11 @@ export class FullNodeBlockBuilder {
|
|
|
81
81
|
const txPublicSetupAllowList = this.config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
|
|
82
82
|
const contractsDB = new PublicContractsDB(this.contractDataSource);
|
|
83
83
|
const guardedFork = new GuardedMerkleTreeOperations(fork);
|
|
84
|
-
const publicTxSimulator = new TelemetryPublicTxSimulator(guardedFork, contractsDB, globalVariables,
|
|
84
|
+
const publicTxSimulator = new TelemetryPublicTxSimulator(guardedFork, contractsDB, globalVariables, this.telemetryClient, {
|
|
85
|
+
doMerkleOperations: true,
|
|
86
|
+
skipFeeEnforcement: true,
|
|
87
|
+
clientInitiatedSimulation: false
|
|
88
|
+
});
|
|
85
89
|
const processor = new PublicProcessor(globalVariables, guardedFork, contractsDB, publicTxSimulator, this.dateProvider, this.telemetryClient, undefined, this.config);
|
|
86
90
|
const validator = createValidatorForBlockBuilding(fork, this.contractDataSource, globalVariables, txPublicSetupAllowList);
|
|
87
91
|
return {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import type { RollupContract } from '@aztec/ethereum';
|
|
3
3
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
4
4
|
import { type Hex } from 'viem';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/sequencer/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,gBAAgB;IAwBzB,OAAO,CAAC,MAAM;IAvBhB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,6BAA6B,CAAY;IAGjD,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,8BAA8B,CAAQ;IAC9C,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAgB;IAEnC,OAAO,CAAC,YAAY,CAAC,CAAS;gBAG5B,MAAM,EAAE,eAAe,EACf,MAAM,EAAE,cAAc,EAC9B,IAAI,SAAc;IAkFb,0BAA0B,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IASjF,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAKpE,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAQ3D,iBAAiB;IAMjB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc;IAMvE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAapC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB7F"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { L2Block } from '@aztec/aztec.js/block';
|
|
2
2
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
3
3
|
import { type RollupContract } from '@aztec/ethereum';
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
@@ -77,7 +77,7 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
77
77
|
protected rollupContract: RollupContract;
|
|
78
78
|
protected config: SequencerConfig;
|
|
79
79
|
protected telemetry: TelemetryClient;
|
|
80
|
-
protected log: import("@aztec/
|
|
80
|
+
protected log: import("@aztec/foundation/log").Logger;
|
|
81
81
|
private runningPromise?;
|
|
82
82
|
private pollingIntervalMs;
|
|
83
83
|
private maxTxsPerBlock;
|
|
@@ -94,7 +94,7 @@ export declare class Sequencer extends Sequencer_base {
|
|
|
94
94
|
protected enforceTimeTable: boolean;
|
|
95
95
|
protected publisher: SequencerPublisher | undefined;
|
|
96
96
|
constructor(publisherFactory: SequencerPublisherFactory, validatorClient: ValidatorClient | undefined, // During migration the validator client can be inactive
|
|
97
|
-
globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer, slasherClient: SlasherClientInterface | undefined, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, blockBuilder: IFullNodeBlockBuilder, l1Constants: SequencerRollupConstants, dateProvider: DateProvider, epochCache: EpochCache, rollupContract: RollupContract, config: SequencerConfig, telemetry?: TelemetryClient, log?: import("@aztec/
|
|
97
|
+
globalsBuilder: GlobalVariableBuilder, p2pClient: P2P, worldState: WorldStateSynchronizer, slasherClient: SlasherClientInterface | undefined, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, blockBuilder: IFullNodeBlockBuilder, l1Constants: SequencerRollupConstants, dateProvider: DateProvider, epochCache: EpochCache, rollupContract: RollupContract, config: SequencerConfig, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
|
|
98
98
|
get tracer(): Tracer;
|
|
99
99
|
getValidatorAddresses(): EthAddress[] | undefined;
|
|
100
100
|
getConfig(): SequencerConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,10 @@ import { getSlotAtTimestamp, getSlotStartBuildTimestamp } from '@aztec/stdlib/ep
|
|
|
20
20
|
import { Gas } from '@aztec/stdlib/gas';
|
|
21
21
|
import { SequencerConfigSchema } from '@aztec/stdlib/interfaces/server';
|
|
22
22
|
import { orderAttestations } from '@aztec/stdlib/p2p';
|
|
23
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
23
24
|
import { pickFromSchema } from '@aztec/stdlib/schemas';
|
|
24
25
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
25
|
-
import { ContentCommitment
|
|
26
|
+
import { ContentCommitment } from '@aztec/stdlib/tx';
|
|
26
27
|
import { AttestationTimeoutError } from '@aztec/stdlib/validators';
|
|
27
28
|
import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
28
29
|
import EventEmitter from 'node:events';
|
|
@@ -330,7 +331,7 @@ export { SequencerState };
|
|
|
330
331
|
slot
|
|
331
332
|
});
|
|
332
333
|
// If I created a "partial" header here that should make our job much easier.
|
|
333
|
-
const proposalHeader =
|
|
334
|
+
const proposalHeader = CheckpointHeader.from({
|
|
334
335
|
...newGlobalVariables,
|
|
335
336
|
timestamp: newGlobalVariables.timestamp,
|
|
336
337
|
lastArchiveRoot: chainTipArchive,
|
|
@@ -496,7 +497,7 @@ export { SequencerState };
|
|
|
496
497
|
}
|
|
497
498
|
// TODO(@PhilWindle) We should probably periodically check for things like another
|
|
498
499
|
// block being published before ours instead of just waiting on our block
|
|
499
|
-
await publisher.validateBlockHeader(block.
|
|
500
|
+
await publisher.validateBlockHeader(block.getCheckpointHeader(), invalidateBlock);
|
|
500
501
|
const blockStats = {
|
|
501
502
|
eventName: 'l2-block-built',
|
|
502
503
|
creator: proposerAddress?.toString() ?? publisher.getSenderAddress().toString(),
|
|
@@ -522,7 +523,7 @@ export { SequencerState };
|
|
|
522
523
|
});
|
|
523
524
|
}
|
|
524
525
|
const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations ?? []);
|
|
525
|
-
const attestationsAndSignersSignature = this.validatorClient ? await this.validatorClient.signAttestationsAndSigners(attestationsAndSigners, proposerAddress) : Signature.empty();
|
|
526
|
+
const attestationsAndSignersSignature = this.validatorClient ? await this.validatorClient.signAttestationsAndSigners(attestationsAndSigners, proposerAddress ?? publisher.getSenderAddress()) : Signature.empty();
|
|
526
527
|
await this.enqueuePublishL2Block(block, attestationsAndSigners, attestationsAndSignersSignature, invalidateBlock, publisher);
|
|
527
528
|
this.metrics.recordBuiltBlock(blockBuildDuration, publicGas.l2Gas);
|
|
528
529
|
return block;
|
|
@@ -553,9 +554,10 @@ export { SequencerState };
|
|
|
553
554
|
this.setState(SequencerState.COLLECTING_ATTESTATIONS, slotNumber);
|
|
554
555
|
this.log.debug('Creating block proposal for validators');
|
|
555
556
|
const blockProposalOptions = {
|
|
556
|
-
publishFullTxs: !!this.config.publishTxsWithProposals
|
|
557
|
+
publishFullTxs: !!this.config.publishTxsWithProposals,
|
|
558
|
+
broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal
|
|
557
559
|
};
|
|
558
|
-
const proposal = await this.validatorClient.createBlockProposal(block.header.globalVariables.blockNumber, block.
|
|
560
|
+
const proposal = await this.validatorClient.createBlockProposal(block.header.globalVariables.blockNumber, block.getCheckpointHeader(), block.archive.root, block.header.state, txs, proposerAddress, blockProposalOptions);
|
|
559
561
|
if (!proposal) {
|
|
560
562
|
throw new Error(`Failed to create block proposal`);
|
|
561
563
|
}
|
|
@@ -37,7 +37,7 @@ export declare class SequencerTimetable {
|
|
|
37
37
|
maxL1TxInclusionTimeIntoSlot: number;
|
|
38
38
|
attestationPropagationTime?: number;
|
|
39
39
|
enforce: boolean;
|
|
40
|
-
}, metrics?: SequencerMetrics | undefined, log?: import("@aztec/aztec.js").Logger);
|
|
40
|
+
}, metrics?: SequencerMetrics | undefined, log?: import("@aztec/aztec.js/log").Logger);
|
|
41
41
|
private get afterBlockBuildingTimeNeededWithoutReexec();
|
|
42
42
|
getBlockProposalExecTimeEnd(secondsIntoSlot: number): number;
|
|
43
43
|
private get afterBlockReexecTimeNeeded();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timetable.d.ts","sourceRoot":"","sources":["../../src/sequencer/timetable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM5C,qBAAa,kBAAkB;IA+C3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IA/CtB;;;;OAIG;IACH,SAAgB,kBAAkB,EAAE,MAAM,CAAC;IAE3C;;;;OAIG;IACH,SAAgB,gBAAgB,SAAC;IAEjC,sHAAsH;IACtH,SAAgB,gBAAgB,EAAE,MAAM,CAAsB;IAE9D,uDAAuD;IACvD,SAAgB,gBAAgB,EAAE,MAAM,CAAsB;IAE9D,mGAAmG;IACnG,SAAgB,0BAA0B,EAAE,MAAM,CAAC;IAEnD,mIAAmI;IACnI,SAAgB,mBAAmB,EAAE,MAAM,CAAyB;IAEpE,wCAAwC;IACxC,SAAgB,oBAAoB,EAAE,MAAM,CAAC;IAE7C,kFAAkF;IAClF,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAE1C,2IAA2I;IAC3I,SAAgB,4BAA4B,EAAE,MAAM,CAAC;IAErD,4DAA4D;IAC5D,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAG/B,IAAI,EAAE;QACJ,oBAAoB,EAAE,MAAM,CAAC;QAC7B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,4BAA4B,EAAE,MAAM,CAAC;QACrC,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC;KAClB,EACgB,OAAO,CAAC,EAAE,gBAAgB,YAAA,EAC1B,GAAG,
|
|
1
|
+
{"version":3,"file":"timetable.d.ts","sourceRoot":"","sources":["../../src/sequencer/timetable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM5C,qBAAa,kBAAkB;IA+C3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IA/CtB;;;;OAIG;IACH,SAAgB,kBAAkB,EAAE,MAAM,CAAC;IAE3C;;;;OAIG;IACH,SAAgB,gBAAgB,SAAC;IAEjC,sHAAsH;IACtH,SAAgB,gBAAgB,EAAE,MAAM,CAAsB;IAE9D,uDAAuD;IACvD,SAAgB,gBAAgB,EAAE,MAAM,CAAsB;IAE9D,mGAAmG;IACnG,SAAgB,0BAA0B,EAAE,MAAM,CAAC;IAEnD,mIAAmI;IACnI,SAAgB,mBAAmB,EAAE,MAAM,CAAyB;IAEpE,wCAAwC;IACxC,SAAgB,oBAAoB,EAAE,MAAM,CAAC;IAE7C,kFAAkF;IAClF,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAE1C,2IAA2I;IAC3I,SAAgB,4BAA4B,EAAE,MAAM,CAAC;IAErD,4DAA4D;IAC5D,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAG/B,IAAI,EAAE;QACJ,oBAAoB,EAAE,MAAM,CAAC;QAC7B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,4BAA4B,EAAE,MAAM,CAAC;QACrC,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC;KAClB,EACgB,OAAO,CAAC,EAAE,gBAAgB,YAAA,EAC1B,GAAG,uCAAsC;IA+C5D,OAAO,KAAK,yCAAyC,GAEpD;IAEM,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAenE,OAAO,KAAK,0BAA0B,GAErC;IAEM,yBAAyB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM;IAU3D,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAuB5D,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM;CAkBxE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createLogger } from '@aztec/aztec.js';
|
|
1
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
2
|
import { DEFAULT_ATTESTATION_PROPAGATION_TIME } from '../config.js';
|
|
3
3
|
import { SequencerTooSlowError } from './errors.js';
|
|
4
4
|
import { SequencerState } from './utils.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EACV,cAAc,EACd,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,6BAA6B,GAAG,SAAS,EACnD,EACE,SAAS,EACT,aAAa,EACb,cAAc,EACd,OAAO,EACP,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,YAAY,GACb,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB,GACA,WAAW,CAAC,EAAE,CAAC,CA4BjB;AAED,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAAE,GAC/B,wBAAwB,CAgB1B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
2
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
|
-
import { AggregateTxValidator, ArchiveCache, BlockHeaderTxValidator, DataTxValidator, DoubleSpendTxValidator, GasTxValidator, MetadataTxValidator, PhasesTxValidator, TxPermittedValidator, TxProofValidator } from '@aztec/p2p';
|
|
4
|
-
import { ProtocolContractAddress,
|
|
3
|
+
import { AggregateTxValidator, ArchiveCache, BlockHeaderTxValidator, DataTxValidator, DoubleSpendTxValidator, GasTxValidator, MetadataTxValidator, PhasesTxValidator, TimestampTxValidator, TxPermittedValidator, TxProofValidator } from '@aztec/p2p';
|
|
4
|
+
import { ProtocolContractAddress, protocolContractsHash } from '@aztec/protocol-contracts';
|
|
5
5
|
import { DatabasePublicStateSource } from '@aztec/stdlib/trees';
|
|
6
6
|
import { NullifierCache } from './nullifier_cache.js';
|
|
7
7
|
export function createValidatorForAcceptingTxs(db, contractDataSource, verifier, { l1ChainId, rollupVersion, setupAllowList, gasFees, skipFeeEnforcement, timestamp, blockNumber, txsPermitted }) {
|
|
@@ -11,11 +11,13 @@ export function createValidatorForAcceptingTxs(db, contractDataSource, verifier,
|
|
|
11
11
|
new MetadataTxValidator({
|
|
12
12
|
l1ChainId: new Fr(l1ChainId),
|
|
13
13
|
rollupVersion: new Fr(rollupVersion),
|
|
14
|
-
|
|
15
|
-
blockNumber,
|
|
16
|
-
protocolContractTreeRoot,
|
|
14
|
+
protocolContractsHash,
|
|
17
15
|
vkTreeRoot: getVKTreeRoot()
|
|
18
16
|
}),
|
|
17
|
+
new TimestampTxValidator({
|
|
18
|
+
timestamp,
|
|
19
|
+
blockNumber
|
|
20
|
+
}),
|
|
19
21
|
new DoubleSpendTxValidator(new NullifierCache(db)),
|
|
20
22
|
new PhasesTxValidator(contractDataSource, setupAllowList, timestamp),
|
|
21
23
|
new BlockHeaderTxValidator(new ArchiveCache(db))
|
|
@@ -42,9 +44,10 @@ function preprocessValidator(nullifierCache, archiveCache, publicStateSource, co
|
|
|
42
44
|
return new AggregateTxValidator(new MetadataTxValidator({
|
|
43
45
|
l1ChainId: globalVariables.chainId,
|
|
44
46
|
rollupVersion: globalVariables.version,
|
|
45
|
-
|
|
46
|
-
blockNumber: globalVariables.blockNumber,
|
|
47
|
-
protocolContractTreeRoot,
|
|
47
|
+
protocolContractsHash,
|
|
48
48
|
vkTreeRoot: getVKTreeRoot()
|
|
49
|
+
}), new TimestampTxValidator({
|
|
50
|
+
timestamp: globalVariables.timestamp,
|
|
51
|
+
blockNumber: globalVariables.blockNumber
|
|
49
52
|
}), new DoubleSpendTxValidator(nullifierCache), new PhasesTxValidator(contractDataSource, setupAllowList, globalVariables.timestamp), new GasTxValidator(publicStateSource, ProtocolContractAddress.FeeJuice, globalVariables.gasFees), new BlockHeaderTxValidator(archiveCache));
|
|
50
53
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-devnet.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -26,37 +26,37 @@
|
|
|
26
26
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@aztec/aztec.js": "
|
|
30
|
-
"@aztec/bb-prover": "
|
|
31
|
-
"@aztec/blob-lib": "
|
|
32
|
-
"@aztec/blob-sink": "
|
|
33
|
-
"@aztec/constants": "
|
|
34
|
-
"@aztec/epoch-cache": "
|
|
35
|
-
"@aztec/ethereum": "
|
|
36
|
-
"@aztec/foundation": "
|
|
37
|
-
"@aztec/l1-artifacts": "
|
|
38
|
-
"@aztec/merkle-tree": "
|
|
39
|
-
"@aztec/node-keystore": "
|
|
40
|
-
"@aztec/noir-acvm_js": "
|
|
41
|
-
"@aztec/noir-contracts.js": "
|
|
42
|
-
"@aztec/noir-protocol-circuits-types": "
|
|
43
|
-
"@aztec/noir-types": "
|
|
44
|
-
"@aztec/p2p": "
|
|
45
|
-
"@aztec/protocol-contracts": "
|
|
46
|
-
"@aztec/prover-client": "
|
|
47
|
-
"@aztec/simulator": "
|
|
48
|
-
"@aztec/slasher": "
|
|
49
|
-
"@aztec/stdlib": "
|
|
50
|
-
"@aztec/telemetry-client": "
|
|
51
|
-
"@aztec/validator-client": "
|
|
52
|
-
"@aztec/world-state": "
|
|
29
|
+
"@aztec/aztec.js": "3.0.0-devnet.2",
|
|
30
|
+
"@aztec/bb-prover": "3.0.0-devnet.2",
|
|
31
|
+
"@aztec/blob-lib": "3.0.0-devnet.2",
|
|
32
|
+
"@aztec/blob-sink": "3.0.0-devnet.2",
|
|
33
|
+
"@aztec/constants": "3.0.0-devnet.2",
|
|
34
|
+
"@aztec/epoch-cache": "3.0.0-devnet.2",
|
|
35
|
+
"@aztec/ethereum": "3.0.0-devnet.2",
|
|
36
|
+
"@aztec/foundation": "3.0.0-devnet.2",
|
|
37
|
+
"@aztec/l1-artifacts": "3.0.0-devnet.2",
|
|
38
|
+
"@aztec/merkle-tree": "3.0.0-devnet.2",
|
|
39
|
+
"@aztec/node-keystore": "3.0.0-devnet.2",
|
|
40
|
+
"@aztec/noir-acvm_js": "3.0.0-devnet.2",
|
|
41
|
+
"@aztec/noir-contracts.js": "3.0.0-devnet.2",
|
|
42
|
+
"@aztec/noir-protocol-circuits-types": "3.0.0-devnet.2",
|
|
43
|
+
"@aztec/noir-types": "3.0.0-devnet.2",
|
|
44
|
+
"@aztec/p2p": "3.0.0-devnet.2",
|
|
45
|
+
"@aztec/protocol-contracts": "3.0.0-devnet.2",
|
|
46
|
+
"@aztec/prover-client": "3.0.0-devnet.2",
|
|
47
|
+
"@aztec/simulator": "3.0.0-devnet.2",
|
|
48
|
+
"@aztec/slasher": "3.0.0-devnet.2",
|
|
49
|
+
"@aztec/stdlib": "3.0.0-devnet.2",
|
|
50
|
+
"@aztec/telemetry-client": "3.0.0-devnet.2",
|
|
51
|
+
"@aztec/validator-client": "3.0.0-devnet.2",
|
|
52
|
+
"@aztec/world-state": "3.0.0-devnet.2",
|
|
53
53
|
"lodash.chunk": "^4.2.0",
|
|
54
54
|
"tslib": "^2.4.0",
|
|
55
|
-
"viem": "2.
|
|
55
|
+
"viem": "npm:@spalladino/viem@2.38.2-eip7594.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@aztec/archiver": "
|
|
59
|
-
"@aztec/kv-store": "
|
|
58
|
+
"@aztec/archiver": "3.0.0-devnet.2",
|
|
59
|
+
"@aztec/kv-store": "3.0.0-devnet.2",
|
|
60
60
|
"@jest/globals": "^30.0.0",
|
|
61
61
|
"@types/jest": "^30.0.0",
|
|
62
62
|
"@types/lodash.chunk": "^4.2.7",
|
package/src/config.ts
CHANGED
|
@@ -145,6 +145,10 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
|
|
|
145
145
|
description: 'Do not invalidate the previous block if invalid when we are the proposer (for testing only)',
|
|
146
146
|
...booleanConfigHelper(false),
|
|
147
147
|
},
|
|
148
|
+
broadcastInvalidBlockProposal: {
|
|
149
|
+
description: 'Broadcast invalid block proposals with corrupted state (for testing only)',
|
|
150
|
+
...booleanConfigHelper(false),
|
|
151
|
+
},
|
|
148
152
|
injectFakeAttestation: {
|
|
149
153
|
description: 'Inject a fake attestation (for testing only)',
|
|
150
154
|
...booleanConfigHelper(false),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { EthAddress
|
|
1
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
2
3
|
import type { BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
3
4
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
4
5
|
import type { GovernanceProposerContract, PublisherFilter, PublisherManager, RollupContract } from '@aztec/ethereum';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Blob } from '@aztec/blob-lib';
|
|
1
|
+
import { L2Block } from '@aztec/aztec.js/block';
|
|
2
|
+
import { Blob, getBlobsPerL1Block, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
|
|
3
3
|
import { type BlobSinkClientInterface, createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
4
4
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
5
5
|
import {
|
|
@@ -35,8 +35,9 @@ import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
|
35
35
|
import { type ProposerSlashAction, encodeSlashConsensusVotes } from '@aztec/slasher';
|
|
36
36
|
import { CommitteeAttestation, CommitteeAttestationsAndSigners, type ValidateBlockResult } from '@aztec/stdlib/block';
|
|
37
37
|
import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
38
|
+
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
38
39
|
import type { L1PublishBlockStats } from '@aztec/stdlib/stats';
|
|
39
|
-
import {
|
|
40
|
+
import { StateReference } from '@aztec/stdlib/tx';
|
|
40
41
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
41
42
|
|
|
42
43
|
import { type TransactionReceipt, type TypedDataDefinition, encodeFunctionData, toHex } from 'viem';
|
|
@@ -47,7 +48,7 @@ import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
|
47
48
|
/** Arguments to the process method of the rollup contract */
|
|
48
49
|
type L1ProcessArgs = {
|
|
49
50
|
/** The L2 block header. */
|
|
50
|
-
header:
|
|
51
|
+
header: CheckpointHeader;
|
|
51
52
|
/** A root of the archive tree after the L2 block is applied. */
|
|
52
53
|
archive: Buffer;
|
|
53
54
|
/** State reference after the L2 block is applied. */
|
|
@@ -338,10 +339,7 @@ export class SequencerPublisher {
|
|
|
338
339
|
* It will throw if the block header is invalid.
|
|
339
340
|
* @param header - The block header to validate
|
|
340
341
|
*/
|
|
341
|
-
public async validateBlockHeader(
|
|
342
|
-
header: ProposedBlockHeader,
|
|
343
|
-
opts?: { forcePendingBlockNumber: number | undefined },
|
|
344
|
-
) {
|
|
342
|
+
public async validateBlockHeader(header: CheckpointHeader, opts?: { forcePendingBlockNumber: number | undefined }) {
|
|
345
343
|
const flags = { ignoreDA: true, ignoreSignatures: true };
|
|
346
344
|
|
|
347
345
|
const args = [
|
|
@@ -443,11 +441,13 @@ export class SequencerPublisher {
|
|
|
443
441
|
throw new Error('Cannot invalidate a valid block');
|
|
444
442
|
}
|
|
445
443
|
|
|
446
|
-
const { block, committee, reason
|
|
444
|
+
const { block, committee, reason } = validationResult;
|
|
447
445
|
const logData = { ...block, reason };
|
|
448
446
|
this.log.debug(`Simulating invalidate block ${block.blockNumber}`, logData);
|
|
449
447
|
|
|
450
|
-
const attestationsAndSigners = new CommitteeAttestationsAndSigners(
|
|
448
|
+
const attestationsAndSigners = new CommitteeAttestationsAndSigners(
|
|
449
|
+
validationResult.attestations,
|
|
450
|
+
).getPackedAttestations();
|
|
451
451
|
|
|
452
452
|
if (reason === 'invalid-attestation') {
|
|
453
453
|
return this.rollupContract.buildInvalidateBadAttestationRequest(
|
|
@@ -499,12 +499,13 @@ export class SequencerPublisher {
|
|
|
499
499
|
);
|
|
500
500
|
}
|
|
501
501
|
|
|
502
|
-
const
|
|
503
|
-
const
|
|
502
|
+
const blobFields = block.getCheckpointBlobFields();
|
|
503
|
+
const blobs = getBlobsPerL1Block(blobFields);
|
|
504
|
+
const blobInput = getPrefixedEthBlobCommitments(blobs);
|
|
504
505
|
|
|
505
506
|
const args = [
|
|
506
507
|
{
|
|
507
|
-
header: block.
|
|
508
|
+
header: block.getCheckpointHeader().toViem(),
|
|
508
509
|
archive: toHex(block.archive.root.toBuffer()),
|
|
509
510
|
stateReference: block.header.state.toViem(),
|
|
510
511
|
oracleInput: {
|
|
@@ -766,11 +767,13 @@ export class SequencerPublisher {
|
|
|
766
767
|
attestationsAndSignersSignature: Signature,
|
|
767
768
|
opts: { txTimeoutAt?: Date; forcePendingBlockNumber?: number } = {},
|
|
768
769
|
): Promise<boolean> {
|
|
769
|
-
const
|
|
770
|
+
const checkpointHeader = block.getCheckpointHeader();
|
|
771
|
+
|
|
772
|
+
const blobFields = block.getCheckpointBlobFields();
|
|
773
|
+
const blobs = getBlobsPerL1Block(blobFields);
|
|
770
774
|
|
|
771
|
-
const blobs = await Blob.getBlobsPerBlock(block.body.toBlobFields());
|
|
772
775
|
const proposeTxArgs = {
|
|
773
|
-
header:
|
|
776
|
+
header: checkpointHeader,
|
|
774
777
|
archive: block.archive.root.toBuffer(),
|
|
775
778
|
stateReference: block.header.state,
|
|
776
779
|
body: block.body.toBuffer(),
|
|
@@ -909,7 +912,7 @@ export class SequencerPublisher {
|
|
|
909
912
|
options: { forcePendingBlockNumber?: number },
|
|
910
913
|
) {
|
|
911
914
|
const kzg = Blob.getViemKzgInstance();
|
|
912
|
-
const blobInput =
|
|
915
|
+
const blobInput = getPrefixedEthBlobCommitments(encodedData.blobs);
|
|
913
916
|
this.log.debug('Validating blob input', { blobInput });
|
|
914
917
|
const blobEvaluationGas = await this.l1TxUtils
|
|
915
918
|
.estimateGas(
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { MerkleTreeId
|
|
1
|
+
import { MerkleTreeId } from '@aztec/aztec.js/trees';
|
|
2
2
|
import { merge, pick } from '@aztec/foundation/collection';
|
|
3
3
|
import type { Fr } from '@aztec/foundation/fields';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
6
6
|
import { bufferToHex } from '@aztec/foundation/string';
|
|
7
|
-
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
7
|
+
import { DateProvider, Timer, elapsed } from '@aztec/foundation/timer';
|
|
8
8
|
import { getDefaultAllowedSetupFunctions } from '@aztec/p2p/msg_validators';
|
|
9
9
|
import { LightweightBlockFactory } from '@aztec/prover-client/block-factory';
|
|
10
10
|
import {
|
|
@@ -124,10 +124,12 @@ export class FullNodeBlockBuilder implements IFullNodeBlockBuilder {
|
|
|
124
124
|
guardedFork,
|
|
125
125
|
contractsDB,
|
|
126
126
|
globalVariables,
|
|
127
|
-
/*doMerkleOperations=*/ true,
|
|
128
|
-
/*skipFeeEnforcement=*/ true,
|
|
129
|
-
/*clientInitiatedSimulation=*/ false,
|
|
130
127
|
this.telemetryClient,
|
|
128
|
+
{
|
|
129
|
+
doMerkleOperations: true,
|
|
130
|
+
skipFeeEnforcement: true,
|
|
131
|
+
clientInitiatedSimulation: false,
|
|
132
|
+
},
|
|
131
133
|
);
|
|
132
134
|
|
|
133
135
|
const processor = new PublicProcessor(
|
package/src/sequencer/metrics.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { L2Block } from '@aztec/aztec.js/block';
|
|
2
2
|
import { BLOBS_PER_BLOCK, FIELDS_PER_BLOB, INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
3
3
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
4
4
|
import { FormattedViemError, NoCommitteeError, type RollupContract } from '@aztec/ethereum';
|
|
@@ -28,11 +28,13 @@ import {
|
|
|
28
28
|
type WorldStateSynchronizer,
|
|
29
29
|
} from '@aztec/stdlib/interfaces/server';
|
|
30
30
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
31
|
-
import {
|
|
31
|
+
import type { BlockProposalOptions } from '@aztec/stdlib/p2p';
|
|
32
|
+
import { orderAttestations } from '@aztec/stdlib/p2p';
|
|
33
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
32
34
|
import { pickFromSchema } from '@aztec/stdlib/schemas';
|
|
33
35
|
import type { L2BlockBuiltStats } from '@aztec/stdlib/stats';
|
|
34
36
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
35
|
-
import { ContentCommitment, type FailedTx, GlobalVariables,
|
|
37
|
+
import { ContentCommitment, type FailedTx, GlobalVariables, Tx } from '@aztec/stdlib/tx';
|
|
36
38
|
import { AttestationTimeoutError } from '@aztec/stdlib/validators';
|
|
37
39
|
import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
38
40
|
import type { ValidatorClient } from '@aztec/validator-client';
|
|
@@ -437,7 +439,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
437
439
|
});
|
|
438
440
|
|
|
439
441
|
// If I created a "partial" header here that should make our job much easier.
|
|
440
|
-
const proposalHeader =
|
|
442
|
+
const proposalHeader = CheckpointHeader.from({
|
|
441
443
|
...newGlobalVariables,
|
|
442
444
|
timestamp: newGlobalVariables.timestamp,
|
|
443
445
|
lastArchiveRoot: chainTipArchive,
|
|
@@ -599,7 +601,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
599
601
|
}))
|
|
600
602
|
private async buildBlockAndEnqueuePublish(
|
|
601
603
|
pendingTxs: Iterable<Tx> | AsyncIterable<Tx>,
|
|
602
|
-
proposalHeader:
|
|
604
|
+
proposalHeader: CheckpointHeader,
|
|
603
605
|
newGlobalVariables: GlobalVariables,
|
|
604
606
|
proposerAddress: EthAddress | undefined,
|
|
605
607
|
invalidateBlock: InvalidateBlockRequest | undefined,
|
|
@@ -638,7 +640,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
638
640
|
|
|
639
641
|
// TODO(@PhilWindle) We should probably periodically check for things like another
|
|
640
642
|
// block being published before ours instead of just waiting on our block
|
|
641
|
-
await publisher.validateBlockHeader(block.
|
|
643
|
+
await publisher.validateBlockHeader(block.getCheckpointHeader(), invalidateBlock);
|
|
642
644
|
|
|
643
645
|
const blockStats: L2BlockBuiltStats = {
|
|
644
646
|
eventName: 'l2-block-built',
|
|
@@ -671,7 +673,10 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
671
673
|
|
|
672
674
|
const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations ?? []);
|
|
673
675
|
const attestationsAndSignersSignature = this.validatorClient
|
|
674
|
-
? await this.validatorClient.signAttestationsAndSigners(
|
|
676
|
+
? await this.validatorClient.signAttestationsAndSigners(
|
|
677
|
+
attestationsAndSigners,
|
|
678
|
+
proposerAddress ?? publisher.getSenderAddress(),
|
|
679
|
+
)
|
|
675
680
|
: Signature.empty();
|
|
676
681
|
|
|
677
682
|
await this.enqueuePublishL2Block(
|
|
@@ -725,10 +730,13 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
725
730
|
this.setState(SequencerState.COLLECTING_ATTESTATIONS, slotNumber);
|
|
726
731
|
|
|
727
732
|
this.log.debug('Creating block proposal for validators');
|
|
728
|
-
const blockProposalOptions: BlockProposalOptions = {
|
|
733
|
+
const blockProposalOptions: BlockProposalOptions = {
|
|
734
|
+
publishFullTxs: !!this.config.publishTxsWithProposals,
|
|
735
|
+
broadcastInvalidBlockProposal: this.config.broadcastInvalidBlockProposal,
|
|
736
|
+
};
|
|
729
737
|
const proposal = await this.validatorClient.createBlockProposal(
|
|
730
738
|
block.header.globalVariables.blockNumber,
|
|
731
|
-
block.
|
|
739
|
+
block.getCheckpointHeader(),
|
|
732
740
|
block.archive.root,
|
|
733
741
|
block.header.state,
|
|
734
742
|
txs,
|
|
@@ -9,10 +9,11 @@ import {
|
|
|
9
9
|
GasTxValidator,
|
|
10
10
|
MetadataTxValidator,
|
|
11
11
|
PhasesTxValidator,
|
|
12
|
+
TimestampTxValidator,
|
|
12
13
|
TxPermittedValidator,
|
|
13
14
|
TxProofValidator,
|
|
14
15
|
} from '@aztec/p2p';
|
|
15
|
-
import { ProtocolContractAddress,
|
|
16
|
+
import { ProtocolContractAddress, protocolContractsHash } from '@aztec/protocol-contracts';
|
|
16
17
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
17
18
|
import type { GasFees } from '@aztec/stdlib/gas';
|
|
18
19
|
import type {
|
|
@@ -57,10 +58,12 @@ export function createValidatorForAcceptingTxs(
|
|
|
57
58
|
new MetadataTxValidator({
|
|
58
59
|
l1ChainId: new Fr(l1ChainId),
|
|
59
60
|
rollupVersion: new Fr(rollupVersion),
|
|
61
|
+
protocolContractsHash,
|
|
62
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
63
|
+
}),
|
|
64
|
+
new TimestampTxValidator({
|
|
60
65
|
timestamp,
|
|
61
66
|
blockNumber,
|
|
62
|
-
protocolContractTreeRoot,
|
|
63
|
-
vkTreeRoot: getVKTreeRoot(),
|
|
64
67
|
}),
|
|
65
68
|
new DoubleSpendTxValidator(new NullifierCache(db)),
|
|
66
69
|
new PhasesTxValidator(contractDataSource, setupAllowList, timestamp),
|
|
@@ -114,10 +117,12 @@ function preprocessValidator(
|
|
|
114
117
|
new MetadataTxValidator({
|
|
115
118
|
l1ChainId: globalVariables.chainId,
|
|
116
119
|
rollupVersion: globalVariables.version,
|
|
120
|
+
protocolContractsHash,
|
|
121
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
122
|
+
}),
|
|
123
|
+
new TimestampTxValidator({
|
|
117
124
|
timestamp: globalVariables.timestamp,
|
|
118
125
|
blockNumber: globalVariables.blockNumber,
|
|
119
|
-
protocolContractTreeRoot,
|
|
120
|
-
vkTreeRoot: getVKTreeRoot(),
|
|
121
126
|
}),
|
|
122
127
|
new DoubleSpendTxValidator(nullifierCache),
|
|
123
128
|
new PhasesTxValidator(contractDataSource, setupAllowList, globalVariables.timestamp),
|