@aztec/sequencer-client 2.0.3-rc.19 → 2.0.3-rc.20

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.
@@ -4,13 +4,14 @@ import type { EpochCache } from '@aztec/epoch-cache';
4
4
  import { type EmpireSlashingProposerContract, FormattedViemError, type GasPrice, type GovernanceProposerContract, type L1BlobInputs, type L1ContractsConfig, type L1GasConfig, type L1TxRequest, RollupContract, type TallySlashingProposerContract, type TransactionStats } from '@aztec/ethereum';
5
5
  import type { L1TxUtilsWithBlobs } from '@aztec/ethereum/l1-tx-utils-with-blobs';
6
6
  import { EthAddress } from '@aztec/foundation/eth-address';
7
+ import { Signature } from '@aztec/foundation/eth-signature';
7
8
  import type { Fr } from '@aztec/foundation/fields';
8
9
  import { type Logger } from '@aztec/foundation/log';
9
10
  import { DateProvider } from '@aztec/foundation/timer';
10
11
  import { type ProposerSlashAction } from '@aztec/slasher';
11
- import { CommitteeAttestation, type ValidateBlockResult } from '@aztec/stdlib/block';
12
+ import { CommitteeAttestationsAndSigners, type ValidateBlockResult } from '@aztec/stdlib/block';
12
13
  import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
13
- import { type ProposedBlockHeader, TxHash } from '@aztec/stdlib/tx';
14
+ import { type ProposedBlockHeader } from '@aztec/stdlib/tx';
14
15
  import { type TelemetryClient } from '@aztec/telemetry-client';
15
16
  import { type TransactionReceipt, type TypedDataDefinition } from 'viem';
16
17
  import type { PublisherConfig, TxSenderConfig } from './config.js';
@@ -138,10 +139,7 @@ export declare class SequencerPublisher {
138
139
  * @param attestationData - The block's attestation data
139
140
  *
140
141
  */
141
- validateBlockForSubmission(block: L2Block, attestationData: {
142
- digest: Buffer;
143
- attestations: CommitteeAttestation[];
144
- } | undefined, options: {
142
+ validateBlockForSubmission(block: L2Block, attestationsAndSigners: CommitteeAttestationsAndSigners, attestationsAndSignersSignature: Signature, options: {
145
143
  forcePendingBlockNumber?: number;
146
144
  }): Promise<bigint>;
147
145
  private enqueueCastSignalHelper;
@@ -160,7 +158,7 @@ export declare class SequencerPublisher {
160
158
  * @param block - L2 block to propose.
161
159
  * @returns True if the tx has been enqueued, throws otherwise. See #9315
162
160
  */
163
- enqueueProposeL2Block(block: L2Block, attestations?: CommitteeAttestation[], txHashes?: TxHash[], opts?: {
161
+ enqueueProposeL2Block(block: L2Block, attestationsAndSigners: CommitteeAttestationsAndSigners, attestationsAndSignersSignature: Signature, opts?: {
164
162
  txTimeoutAt?: Date;
165
163
  forcePendingBlockNumber?: number;
166
164
  }): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,13 @@ import { FormattedViemError, MULTI_CALL_3_ADDRESS, Multicall3, RollupContract, f
4
4
  import { sumBigint } from '@aztec/foundation/bigint';
5
5
  import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
6
6
  import { EthAddress } from '@aztec/foundation/eth-address';
7
+ import { Signature } from '@aztec/foundation/eth-signature';
7
8
  import { createLogger } from '@aztec/foundation/log';
8
9
  import { bufferToHex } from '@aztec/foundation/string';
9
10
  import { Timer } from '@aztec/foundation/timer';
10
11
  import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
11
12
  import { encodeSlashConsensusVotes } from '@aztec/slasher';
12
- import { CommitteeAttestation } from '@aztec/stdlib/block';
13
- import { ConsensusPayload, SignatureDomainSeparator, getHashedSignaturePayload } from '@aztec/stdlib/p2p';
13
+ import { CommitteeAttestation, CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
14
14
  import { getTelemetryClient } from '@aztec/telemetry-client';
15
15
  import pick from 'lodash.pick';
16
16
  import { encodeFunctionData, toHex } from 'viem';
@@ -243,8 +243,9 @@ export class SequencerPublisher {
243
243
  };
244
244
  const args = [
245
245
  header.toViem(),
246
- RollupContract.packAttestations([]),
246
+ CommitteeAttestationsAndSigners.empty().getPackedAttestations(),
247
247
  [],
248
+ Signature.empty().toViemSignature(),
248
249
  `0x${'0'.repeat(64)}`,
249
250
  header.contentCommitment.blobsHash.toString(),
250
251
  flags
@@ -352,10 +353,11 @@ export class SequencerPublisher {
352
353
  reason
353
354
  };
354
355
  this.log.debug(`Simulating invalidate block ${block.blockNumber}`, logData);
356
+ const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations).getPackedAttestations();
355
357
  if (reason === 'invalid-attestation') {
356
- return this.rollupContract.buildInvalidateBadAttestationRequest(block.blockNumber, attestations.map((a)=>a.toViem()), committee, validationResult.invalidIndex);
358
+ return this.rollupContract.buildInvalidateBadAttestationRequest(block.blockNumber, attestationsAndSigners, committee, validationResult.invalidIndex);
357
359
  } else if (reason === 'insufficient-attestations') {
358
- return this.rollupContract.buildInvalidateInsufficientAttestationsRequest(block.blockNumber, attestations.map((a)=>a.toViem()), committee);
360
+ return this.rollupContract.buildInvalidateInsufficientAttestationsRequest(block.blockNumber, attestationsAndSigners, committee);
359
361
  } else {
360
362
  const _ = reason;
361
363
  throw new Error(`Unknown reason for invalidation`);
@@ -369,38 +371,33 @@ export class SequencerPublisher {
369
371
  * @param block - The block to propose
370
372
  * @param attestationData - The block's attestation data
371
373
  *
372
- */ async validateBlockForSubmission(block, attestationData = {
373
- digest: Buffer.alloc(32),
374
- attestations: []
375
- }, options) {
374
+ */ async validateBlockForSubmission(block, attestationsAndSigners, attestationsAndSignersSignature, options) {
376
375
  const ts = BigInt((await this.l1TxUtils.getBlock()).timestamp + this.ethereumSlotDuration);
377
376
  // If we have no attestations, we still need to provide the empty attestations
378
377
  // so that the committee is recalculated correctly
379
- const ignoreSignatures = attestationData.attestations.length === 0;
378
+ const ignoreSignatures = attestationsAndSigners.attestations.length === 0;
380
379
  if (ignoreSignatures) {
381
380
  const { committee } = await this.epochCache.getCommittee(block.header.globalVariables.slotNumber.toBigInt());
382
381
  if (!committee) {
383
382
  this.log.warn(`No committee found for slot ${block.header.globalVariables.slotNumber.toBigInt()}`);
384
383
  throw new Error(`No committee found for slot ${block.header.globalVariables.slotNumber.toBigInt()}`);
385
384
  }
386
- attestationData.attestations = committee.map((committeeMember)=>CommitteeAttestation.fromAddress(committeeMember));
385
+ attestationsAndSigners.attestations = committee.map((committeeMember)=>CommitteeAttestation.fromAddress(committeeMember));
387
386
  }
388
387
  const blobs = await Blob.getBlobsPerBlock(block.body.toBlobFields());
389
388
  const blobInput = Blob.getPrefixedEthBlobCommitments(blobs);
390
- const formattedAttestations = attestationData.attestations.map((attest)=>attest.toViem());
391
- const signers = attestationData.attestations.filter((attest)=>!attest.signature.isEmpty()).map((attest)=>attest.address.toString());
392
389
  const args = [
393
390
  {
394
391
  header: block.header.toPropose().toViem(),
395
392
  archive: toHex(block.archive.root.toBuffer()),
396
393
  stateReference: block.header.state.toViem(),
397
- txHashes: block.body.txEffects.map((txEffect)=>txEffect.txHash.toString()),
398
394
  oracleInput: {
399
395
  feeAssetPriceModifier: 0n
400
396
  }
401
397
  },
402
- RollupContract.packAttestations(formattedAttestations),
403
- signers,
398
+ attestationsAndSigners.getPackedAttestations(),
399
+ attestationsAndSigners.getSigners().map((signer)=>signer.toString()),
400
+ attestationsAndSignersSignature.toViemSignature(),
404
401
  blobInput
405
402
  ];
406
403
  await this.simulateProposeTx(args, ts, options);
@@ -572,10 +569,8 @@ export class SequencerPublisher {
572
569
  *
573
570
  * @param block - L2 block to propose.
574
571
  * @returns True if the tx has been enqueued, throws otherwise. See #9315
575
- */ async enqueueProposeL2Block(block, attestations, txHashes, opts = {}) {
572
+ */ async enqueueProposeL2Block(block, attestationsAndSigners, attestationsAndSignersSignature, opts = {}) {
576
573
  const proposedBlockHeader = block.header.toPropose();
577
- const consensusPayload = ConsensusPayload.fromBlock(block);
578
- const digest = getHashedSignaturePayload(consensusPayload, SignatureDomainSeparator.blockAttestation);
579
574
  const blobs = await Blob.getBlobsPerBlock(block.body.toBlobFields());
580
575
  const proposeTxArgs = {
581
576
  header: proposedBlockHeader,
@@ -583,8 +578,8 @@ export class SequencerPublisher {
583
578
  stateReference: block.header.state,
584
579
  body: block.body.toBuffer(),
585
580
  blobs,
586
- attestations,
587
- txHashes: txHashes ?? []
581
+ attestationsAndSigners,
582
+ attestationsAndSignersSignature
588
583
  };
589
584
  let ts;
590
585
  try {
@@ -592,12 +587,8 @@ export class SequencerPublisher {
592
587
  // This means that we can avoid the simulation issues in later checks.
593
588
  // By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which
594
589
  // make time consistency checks break.
595
- const attestationData = {
596
- digest: digest.toBuffer(),
597
- attestations: attestations ?? []
598
- };
599
590
  // TODO(palla): Check whether we're validating twice, once here and once within addProposeTx, since we call simulateProposeTx in both places.
600
- ts = await this.validateBlockForSubmission(block, attestationData, opts);
591
+ ts = await this.validateBlockForSubmission(block, attestationsAndSigners, attestationsAndSignersSignature, opts);
601
592
  } catch (err) {
602
593
  this.log.error(`Block validation failed. ${err instanceof Error ? err.message : 'No error message'}`, err, {
603
594
  ...block.getStats(),
@@ -746,9 +737,7 @@ export class SequencerPublisher {
746
737
  });
747
738
  throw new Error('Failed to validate blobs');
748
739
  });
749
- const attestations = encodedData.attestations ? encodedData.attestations.map((attest)=>attest.toViem()) : [];
750
- const txHashes = encodedData.txHashes ? encodedData.txHashes.map((txHash)=>txHash.toString()) : [];
751
- const signers = encodedData.attestations?.filter((attest)=>!attest.signature.isEmpty()).map((attest)=>attest.address.toString());
740
+ const signers = encodedData.attestationsAndSigners.getSigners().map((signer)=>signer.toString());
752
741
  const args = [
753
742
  {
754
743
  header: encodedData.header.toViem(),
@@ -757,11 +746,11 @@ export class SequencerPublisher {
757
746
  oracleInput: {
758
747
  // We are currently not modifying these. See #9963
759
748
  feeAssetPriceModifier: 0n
760
- },
761
- txHashes
749
+ }
762
750
  },
763
- RollupContract.packAttestations(attestations),
764
- signers ?? [],
751
+ encodedData.attestationsAndSigners.getPackedAttestations(),
752
+ signers,
753
+ encodedData.attestationsAndSignersSignature.toViemSignature(),
765
754
  blobInput
766
755
  ];
767
756
  const { rollupData, simulationResult } = await this.simulateProposeTx(args, timestamp, options);
@@ -2,16 +2,17 @@ import type { L2Block } from '@aztec/aztec.js';
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';
5
+ import { Signature } from '@aztec/foundation/eth-signature';
5
6
  import { Fr } from '@aztec/foundation/fields';
6
7
  import { type DateProvider } from '@aztec/foundation/timer';
7
8
  import type { TypedEventEmitter } from '@aztec/foundation/types';
8
9
  import type { P2P } from '@aztec/p2p';
9
10
  import type { SlasherClientInterface } from '@aztec/slasher';
10
- import type { CommitteeAttestation, L2BlockSource, ValidateBlockResult } from '@aztec/stdlib/block';
11
+ import { type CommitteeAttestation, CommitteeAttestationsAndSigners, type L2BlockSource, type ValidateBlockResult } from '@aztec/stdlib/block';
11
12
  import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
12
13
  import { type IFullNodeBlockBuilder, type PublicProcessorLimits, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
13
14
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
14
- import { Tx, type TxHash } from '@aztec/stdlib/tx';
15
+ import { Tx } from '@aztec/stdlib/tx';
15
16
  import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
16
17
  import type { ValidatorClient } from '@aztec/validator-client';
17
18
  import type { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
@@ -160,7 +161,7 @@ export declare class Sequencer extends Sequencer_base {
160
161
  * Publishes the L2Block to the rollup contract.
161
162
  * @param block - The L2Block to be published.
162
163
  */
163
- protected enqueuePublishL2Block(block: L2Block, attestations: CommitteeAttestation[] | undefined, txHashes: TxHash[], invalidateBlock: InvalidateBlockRequest | undefined, publisher: SequencerPublisher): Promise<void>;
164
+ protected enqueuePublishL2Block(block: L2Block, attestationsAndSigners: CommitteeAttestationsAndSigners, attestationsAndSignersSignature: Signature, invalidateBlock: InvalidateBlockRequest | undefined, publisher: SequencerPublisher): Promise<void>;
164
165
  /**
165
166
  * Returns whether all dependencies have caught up.
166
167
  * We don't check against the previous block submitted since it may have been reorg'd out.
@@ -1 +1 @@
1
- {"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,12 @@ import { BLOBS_PER_BLOCK, FIELDS_PER_BLOB, INITIAL_L2_BLOCK_NUM } from '@aztec/c
8
8
  import { FormattedViemError, NoCommitteeError } from '@aztec/ethereum';
9
9
  import { omit, pick } from '@aztec/foundation/collection';
10
10
  import { EthAddress } from '@aztec/foundation/eth-address';
11
+ import { Signature } from '@aztec/foundation/eth-signature';
11
12
  import { Fr } from '@aztec/foundation/fields';
12
13
  import { createLogger } from '@aztec/foundation/log';
13
14
  import { RunningPromise } from '@aztec/foundation/running-promise';
14
15
  import { Timer } from '@aztec/foundation/timer';
16
+ import { CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
15
17
  import { getSlotAtTimestamp } from '@aztec/stdlib/epoch-helpers';
16
18
  import { Gas } from '@aztec/stdlib/gas';
17
19
  import { SequencerConfigSchema } from '@aztec/stdlib/interfaces/server';
@@ -510,7 +512,9 @@ export { SequencerState };
510
512
  blockNumber
511
513
  });
512
514
  }
513
- await this.enqueuePublishL2Block(block, attestations, txHashes, invalidateBlock, publisher);
515
+ const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations ?? []);
516
+ const attestationsAndSignersSignature = this.validatorClient ? await this.validatorClient.signAttestationsAndSigners(attestationsAndSigners, proposerAddress) : Signature.empty();
517
+ await this.enqueuePublishL2Block(block, attestationsAndSigners, attestationsAndSignersSignature, invalidateBlock, publisher);
514
518
  this.metrics.recordBuiltBlock(blockBuildDuration, publicGas.l2Gas);
515
519
  return block;
516
520
  } catch (err) {
@@ -556,32 +560,32 @@ export { SequencerState };
556
560
  const attestationTimeAllowed = this.enforceTimeTable ? this.timetable.getMaxAllowedTime(SequencerState.PUBLISHING_BLOCK) : this.aztecSlotDuration;
557
561
  this.metrics.recordRequiredAttestations(numberOfRequiredAttestations, attestationTimeAllowed);
558
562
  const timer = new Timer();
559
- let collectedAttestionsCount = 0;
563
+ let collectedAttestationsCount = 0;
560
564
  try {
561
565
  const attestationDeadline = new Date(this.dateProvider.now() + attestationTimeAllowed * 1000);
562
566
  const attestations = await this.validatorClient.collectAttestations(proposal, numberOfRequiredAttestations, attestationDeadline);
563
- collectedAttestionsCount = attestations.length;
567
+ collectedAttestationsCount = attestations.length;
564
568
  // note: the smart contract requires that the signatures are provided in the order of the committee
565
569
  return orderAttestations(attestations, committee);
566
570
  } catch (err) {
567
571
  if (err && err instanceof AttestationTimeoutError) {
568
- collectedAttestionsCount = err.collectedCount;
572
+ collectedAttestationsCount = err.collectedCount;
569
573
  }
570
574
  throw err;
571
575
  } finally{
572
- this.metrics.recordCollectedAttestations(collectedAttestionsCount, timer.ms());
576
+ this.metrics.recordCollectedAttestations(collectedAttestationsCount, timer.ms());
573
577
  }
574
578
  }
575
579
  /**
576
580
  * Publishes the L2Block to the rollup contract.
577
581
  * @param block - The L2Block to be published.
578
- */ async enqueuePublishL2Block(block, attestations, txHashes, invalidateBlock, publisher) {
582
+ */ async enqueuePublishL2Block(block, attestationsAndSigners, attestationsAndSignersSignature, invalidateBlock, publisher) {
579
583
  // Publishes new block to the network and awaits the tx to be mined
580
584
  this.setState(SequencerState.PUBLISHING_BLOCK, block.header.globalVariables.slotNumber.toBigInt());
581
585
  // Time out tx at the end of the slot
582
586
  const slot = block.header.globalVariables.slotNumber.toNumber();
583
587
  const txTimeoutAt = new Date((this.getSlotStartBuildTimestamp(slot) + this.aztecSlotDuration) * 1000);
584
- const enqueued = await publisher.enqueueProposeL2Block(block, attestations, txHashes, {
588
+ const enqueued = await publisher.enqueueProposeL2Block(block, attestationsAndSigners, attestationsAndSignersSignature, {
585
589
  txTimeoutAt,
586
590
  forcePendingBlockNumber: invalidateBlock?.forcePendingBlockNumber
587
591
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "2.0.3-rc.19",
3
+ "version": "2.0.3-rc.20",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -26,38 +26,38 @@
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": "2.0.3-rc.19",
30
- "@aztec/bb-prover": "2.0.3-rc.19",
31
- "@aztec/blob-lib": "2.0.3-rc.19",
32
- "@aztec/blob-sink": "2.0.3-rc.19",
33
- "@aztec/constants": "2.0.3-rc.19",
34
- "@aztec/epoch-cache": "2.0.3-rc.19",
35
- "@aztec/ethereum": "2.0.3-rc.19",
36
- "@aztec/foundation": "2.0.3-rc.19",
37
- "@aztec/l1-artifacts": "2.0.3-rc.19",
38
- "@aztec/merkle-tree": "2.0.3-rc.19",
39
- "@aztec/node-keystore": "2.0.3-rc.19",
40
- "@aztec/noir-acvm_js": "2.0.3-rc.19",
41
- "@aztec/noir-contracts.js": "2.0.3-rc.19",
42
- "@aztec/noir-protocol-circuits-types": "2.0.3-rc.19",
43
- "@aztec/noir-types": "2.0.3-rc.19",
44
- "@aztec/p2p": "2.0.3-rc.19",
45
- "@aztec/protocol-contracts": "2.0.3-rc.19",
46
- "@aztec/prover-client": "2.0.3-rc.19",
47
- "@aztec/simulator": "2.0.3-rc.19",
48
- "@aztec/slasher": "2.0.3-rc.19",
49
- "@aztec/stdlib": "2.0.3-rc.19",
50
- "@aztec/telemetry-client": "2.0.3-rc.19",
51
- "@aztec/validator-client": "2.0.3-rc.19",
52
- "@aztec/world-state": "2.0.3-rc.19",
29
+ "@aztec/aztec.js": "2.0.3-rc.20",
30
+ "@aztec/bb-prover": "2.0.3-rc.20",
31
+ "@aztec/blob-lib": "2.0.3-rc.20",
32
+ "@aztec/blob-sink": "2.0.3-rc.20",
33
+ "@aztec/constants": "2.0.3-rc.20",
34
+ "@aztec/epoch-cache": "2.0.3-rc.20",
35
+ "@aztec/ethereum": "2.0.3-rc.20",
36
+ "@aztec/foundation": "2.0.3-rc.20",
37
+ "@aztec/l1-artifacts": "2.0.3-rc.20",
38
+ "@aztec/merkle-tree": "2.0.3-rc.20",
39
+ "@aztec/node-keystore": "2.0.3-rc.20",
40
+ "@aztec/noir-acvm_js": "2.0.3-rc.20",
41
+ "@aztec/noir-contracts.js": "2.0.3-rc.20",
42
+ "@aztec/noir-protocol-circuits-types": "2.0.3-rc.20",
43
+ "@aztec/noir-types": "2.0.3-rc.20",
44
+ "@aztec/p2p": "2.0.3-rc.20",
45
+ "@aztec/protocol-contracts": "2.0.3-rc.20",
46
+ "@aztec/prover-client": "2.0.3-rc.20",
47
+ "@aztec/simulator": "2.0.3-rc.20",
48
+ "@aztec/slasher": "2.0.3-rc.20",
49
+ "@aztec/stdlib": "2.0.3-rc.20",
50
+ "@aztec/telemetry-client": "2.0.3-rc.20",
51
+ "@aztec/validator-client": "2.0.3-rc.20",
52
+ "@aztec/world-state": "2.0.3-rc.20",
53
53
  "lodash.chunk": "^4.2.0",
54
54
  "lodash.pick": "^4.4.0",
55
55
  "tslib": "^2.4.0",
56
56
  "viem": "2.23.7"
57
57
  },
58
58
  "devDependencies": {
59
- "@aztec/archiver": "2.0.3-rc.19",
60
- "@aztec/kv-store": "2.0.3-rc.19",
59
+ "@aztec/archiver": "2.0.3-rc.20",
60
+ "@aztec/kv-store": "2.0.3-rc.20",
61
61
  "@jest/globals": "^30.0.0",
62
62
  "@types/jest": "^30.0.0",
63
63
  "@types/lodash.chunk": "^4.2.7",
@@ -27,17 +27,17 @@ import type { L1TxUtilsWithBlobs } from '@aztec/ethereum/l1-tx-utils-with-blobs'
27
27
  import { sumBigint } from '@aztec/foundation/bigint';
28
28
  import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
29
29
  import { EthAddress } from '@aztec/foundation/eth-address';
30
+ import { Signature, type ViemSignature } from '@aztec/foundation/eth-signature';
30
31
  import type { Fr } from '@aztec/foundation/fields';
31
32
  import { type Logger, createLogger } from '@aztec/foundation/log';
32
33
  import { bufferToHex } from '@aztec/foundation/string';
33
34
  import { DateProvider, Timer } from '@aztec/foundation/timer';
34
35
  import { EmpireBaseAbi, ErrorsAbi, RollupAbi } from '@aztec/l1-artifacts';
35
36
  import { type ProposerSlashAction, encodeSlashConsensusVotes } from '@aztec/slasher';
36
- import { CommitteeAttestation, type ValidateBlockResult } from '@aztec/stdlib/block';
37
+ import { CommitteeAttestation, CommitteeAttestationsAndSigners, type ValidateBlockResult } from '@aztec/stdlib/block';
37
38
  import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
38
- import { ConsensusPayload, SignatureDomainSeparator, getHashedSignaturePayload } from '@aztec/stdlib/p2p';
39
39
  import type { L1PublishBlockStats } from '@aztec/stdlib/stats';
40
- import { type ProposedBlockHeader, StateReference, TxHash } from '@aztec/stdlib/tx';
40
+ import { type ProposedBlockHeader, StateReference } from '@aztec/stdlib/tx';
41
41
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
42
42
 
43
43
  import pick from 'lodash.pick';
@@ -56,10 +56,10 @@ type L1ProcessArgs = {
56
56
  stateReference: StateReference;
57
57
  /** L2 block blobs containing all tx effects. */
58
58
  blobs: Blob[];
59
- /** L2 block tx hashes */
60
- txHashes: TxHash[];
61
59
  /** Attestations */
62
- attestations?: CommitteeAttestation[];
60
+ attestationsAndSigners: CommitteeAttestationsAndSigners;
61
+ /** Attestations and signers signature */
62
+ attestationsAndSignersSignature: Signature;
63
63
  };
64
64
 
65
65
  export const Actions = [
@@ -355,8 +355,9 @@ export class SequencerPublisher {
355
355
 
356
356
  const args = [
357
357
  header.toViem(),
358
- RollupContract.packAttestations([]),
358
+ CommitteeAttestationsAndSigners.empty().getPackedAttestations(),
359
359
  [], // no signers
360
+ Signature.empty().toViemSignature(),
360
361
  `0x${'0'.repeat(64)}`, // 32 empty bytes
361
362
  header.contentCommitment.blobsHash.toString(),
362
363
  flags,
@@ -455,17 +456,19 @@ export class SequencerPublisher {
455
456
  const logData = { ...block, reason };
456
457
  this.log.debug(`Simulating invalidate block ${block.blockNumber}`, logData);
457
458
 
459
+ const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations).getPackedAttestations();
460
+
458
461
  if (reason === 'invalid-attestation') {
459
462
  return this.rollupContract.buildInvalidateBadAttestationRequest(
460
463
  block.blockNumber,
461
- attestations.map(a => a.toViem()),
464
+ attestationsAndSigners,
462
465
  committee,
463
466
  validationResult.invalidIndex,
464
467
  );
465
468
  } else if (reason === 'insufficient-attestations') {
466
469
  return this.rollupContract.buildInvalidateInsufficientAttestationsRequest(
467
470
  block.blockNumber,
468
- attestations.map(a => a.toViem()),
471
+ attestationsAndSigners,
469
472
  committee,
470
473
  );
471
474
  } else {
@@ -485,24 +488,22 @@ export class SequencerPublisher {
485
488
  */
486
489
  public async validateBlockForSubmission(
487
490
  block: L2Block,
488
- attestationData: { digest: Buffer; attestations: CommitteeAttestation[] } = {
489
- digest: Buffer.alloc(32),
490
- attestations: [],
491
- },
491
+ attestationsAndSigners: CommitteeAttestationsAndSigners,
492
+ attestationsAndSignersSignature: Signature,
492
493
  options: { forcePendingBlockNumber?: number },
493
494
  ): Promise<bigint> {
494
495
  const ts = BigInt((await this.l1TxUtils.getBlock()).timestamp + this.ethereumSlotDuration);
495
496
 
496
497
  // If we have no attestations, we still need to provide the empty attestations
497
498
  // so that the committee is recalculated correctly
498
- const ignoreSignatures = attestationData.attestations.length === 0;
499
+ const ignoreSignatures = attestationsAndSigners.attestations.length === 0;
499
500
  if (ignoreSignatures) {
500
501
  const { committee } = await this.epochCache.getCommittee(block.header.globalVariables.slotNumber.toBigInt());
501
502
  if (!committee) {
502
503
  this.log.warn(`No committee found for slot ${block.header.globalVariables.slotNumber.toBigInt()}`);
503
504
  throw new Error(`No committee found for slot ${block.header.globalVariables.slotNumber.toBigInt()}`);
504
505
  }
505
- attestationData.attestations = committee.map(committeeMember =>
506
+ attestationsAndSigners.attestations = committee.map(committeeMember =>
506
507
  CommitteeAttestation.fromAddress(committeeMember),
507
508
  );
508
509
  }
@@ -510,23 +511,18 @@ export class SequencerPublisher {
510
511
  const blobs = await Blob.getBlobsPerBlock(block.body.toBlobFields());
511
512
  const blobInput = Blob.getPrefixedEthBlobCommitments(blobs);
512
513
 
513
- const formattedAttestations = attestationData.attestations.map(attest => attest.toViem());
514
- const signers = attestationData.attestations
515
- .filter(attest => !attest.signature.isEmpty())
516
- .map(attest => attest.address.toString());
517
-
518
514
  const args = [
519
515
  {
520
516
  header: block.header.toPropose().toViem(),
521
517
  archive: toHex(block.archive.root.toBuffer()),
522
518
  stateReference: block.header.state.toViem(),
523
- txHashes: block.body.txEffects.map(txEffect => txEffect.txHash.toString()),
524
519
  oracleInput: {
525
520
  feeAssetPriceModifier: 0n,
526
521
  },
527
522
  },
528
- RollupContract.packAttestations(formattedAttestations),
529
- signers,
523
+ attestationsAndSigners.getPackedAttestations(),
524
+ attestationsAndSigners.getSigners().map(signer => signer.toString()),
525
+ attestationsAndSignersSignature.toViemSignature(),
530
526
  blobInput,
531
527
  ] as const;
532
528
 
@@ -775,15 +771,12 @@ export class SequencerPublisher {
775
771
  */
776
772
  public async enqueueProposeL2Block(
777
773
  block: L2Block,
778
- attestations?: CommitteeAttestation[],
779
- txHashes?: TxHash[],
774
+ attestationsAndSigners: CommitteeAttestationsAndSigners,
775
+ attestationsAndSignersSignature: Signature,
780
776
  opts: { txTimeoutAt?: Date; forcePendingBlockNumber?: number } = {},
781
777
  ): Promise<boolean> {
782
778
  const proposedBlockHeader = block.header.toPropose();
783
779
 
784
- const consensusPayload = ConsensusPayload.fromBlock(block);
785
- const digest = getHashedSignaturePayload(consensusPayload, SignatureDomainSeparator.blockAttestation);
786
-
787
780
  const blobs = await Blob.getBlobsPerBlock(block.body.toBlobFields());
788
781
  const proposeTxArgs = {
789
782
  header: proposedBlockHeader,
@@ -791,8 +784,8 @@ export class SequencerPublisher {
791
784
  stateReference: block.header.state,
792
785
  body: block.body.toBuffer(),
793
786
  blobs,
794
- attestations,
795
- txHashes: txHashes ?? [],
787
+ attestationsAndSigners,
788
+ attestationsAndSignersSignature,
796
789
  };
797
790
 
798
791
  let ts: bigint;
@@ -802,9 +795,8 @@ export class SequencerPublisher {
802
795
  // This means that we can avoid the simulation issues in later checks.
803
796
  // By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which
804
797
  // make time consistency checks break.
805
- const attestationData = { digest: digest.toBuffer(), attestations: attestations ?? [] };
806
798
  // TODO(palla): Check whether we're validating twice, once here and once within addProposeTx, since we call simulateProposeTx in both places.
807
- ts = await this.validateBlockForSubmission(block, attestationData, opts);
799
+ ts = await this.validateBlockForSubmission(block, attestationsAndSigners, attestationsAndSignersSignature, opts);
808
800
  } catch (err: any) {
809
801
  this.log.error(`Block validation failed. ${err instanceof Error ? err.message : 'No error message'}`, err, {
810
802
  ...block.getStats(),
@@ -950,12 +942,7 @@ export class SequencerPublisher {
950
942
  throw new Error('Failed to validate blobs');
951
943
  });
952
944
 
953
- const attestations = encodedData.attestations ? encodedData.attestations.map(attest => attest.toViem()) : [];
954
- const txHashes = encodedData.txHashes ? encodedData.txHashes.map(txHash => txHash.toString()) : [];
955
-
956
- const signers = encodedData.attestations
957
- ?.filter(attest => !attest.signature.isEmpty())
958
- .map(attest => attest.address.toString());
945
+ const signers = encodedData.attestationsAndSigners.getSigners().map(signer => signer.toString());
959
946
 
960
947
  const args = [
961
948
  {
@@ -966,10 +953,10 @@ export class SequencerPublisher {
966
953
  // We are currently not modifying these. See #9963
967
954
  feeAssetPriceModifier: 0n,
968
955
  },
969
- txHashes,
970
956
  },
971
- RollupContract.packAttestations(attestations),
972
- signers ?? [],
957
+ encodedData.attestationsAndSigners.getPackedAttestations(),
958
+ signers,
959
+ encodedData.attestationsAndSignersSignature.toViemSignature(),
973
960
  blobInput,
974
961
  ] as const;
975
962
 
@@ -990,13 +977,13 @@ export class SequencerPublisher {
990
977
  readonly header: ViemHeader;
991
978
  readonly archive: `0x${string}`;
992
979
  readonly stateReference: ViemStateReference;
993
- readonly txHashes: `0x${string}`[];
994
980
  readonly oracleInput: {
995
981
  readonly feeAssetPriceModifier: 0n;
996
982
  };
997
983
  },
998
984
  ViemCommitteeAttestations,
999
- `0x${string}`[],
985
+ `0x${string}`[], // Signers
986
+ ViemSignature,
1000
987
  `0x${string}`,
1001
988
  ],
1002
989
  timestamp: bigint,
@@ -4,6 +4,7 @@ import type { EpochCache } from '@aztec/epoch-cache';
4
4
  import { FormattedViemError, NoCommitteeError, type RollupContract } from '@aztec/ethereum';
5
5
  import { omit, pick } from '@aztec/foundation/collection';
6
6
  import { EthAddress } from '@aztec/foundation/eth-address';
7
+ import { Signature } from '@aztec/foundation/eth-signature';
7
8
  import { Fr } from '@aztec/foundation/fields';
8
9
  import { createLogger } from '@aztec/foundation/log';
9
10
  import { RunningPromise } from '@aztec/foundation/running-promise';
@@ -11,7 +12,12 @@ import { type DateProvider, Timer } from '@aztec/foundation/timer';
11
12
  import type { TypedEventEmitter } from '@aztec/foundation/types';
12
13
  import type { P2P } from '@aztec/p2p';
13
14
  import type { SlasherClientInterface } from '@aztec/slasher';
14
- import type { CommitteeAttestation, L2BlockSource, ValidateBlockResult } from '@aztec/stdlib/block';
15
+ import {
16
+ type CommitteeAttestation,
17
+ CommitteeAttestationsAndSigners,
18
+ type L2BlockSource,
19
+ type ValidateBlockResult,
20
+ } from '@aztec/stdlib/block';
15
21
  import { type L1RollupConstants, getSlotAtTimestamp } from '@aztec/stdlib/epoch-helpers';
16
22
  import { Gas } from '@aztec/stdlib/gas';
17
23
  import {
@@ -21,19 +27,11 @@ import {
21
27
  type WorldStateSynchronizer,
22
28
  } from '@aztec/stdlib/interfaces/server';
23
29
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
24
- import type { BlockProposalOptions } from '@aztec/stdlib/p2p';
25
- import { orderAttestations } from '@aztec/stdlib/p2p';
30
+ import { type BlockProposalOptions, orderAttestations } from '@aztec/stdlib/p2p';
26
31
  import { pickFromSchema } from '@aztec/stdlib/schemas';
27
32
  import type { L2BlockBuiltStats } from '@aztec/stdlib/stats';
28
33
  import { MerkleTreeId } from '@aztec/stdlib/trees';
29
- import {
30
- ContentCommitment,
31
- type FailedTx,
32
- GlobalVariables,
33
- ProposedBlockHeader,
34
- Tx,
35
- type TxHash,
36
- } from '@aztec/stdlib/tx';
34
+ import { ContentCommitment, type FailedTx, GlobalVariables, ProposedBlockHeader, Tx } from '@aztec/stdlib/tx';
37
35
  import { AttestationTimeoutError } from '@aztec/stdlib/validators';
38
36
  import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
39
37
  import type { ValidatorClient } from '@aztec/validator-client';
@@ -665,7 +663,18 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
665
663
  this.log.verbose(`Collected ${attestations.length} attestations`, { blockHash, blockNumber });
666
664
  }
667
665
 
668
- await this.enqueuePublishL2Block(block, attestations, txHashes, invalidateBlock, publisher);
666
+ const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations ?? []);
667
+ const attestationsAndSignersSignature = this.validatorClient
668
+ ? await this.validatorClient.signAttestationsAndSigners(attestationsAndSigners, proposerAddress)
669
+ : Signature.empty();
670
+
671
+ await this.enqueuePublishL2Block(
672
+ block,
673
+ attestationsAndSigners,
674
+ attestationsAndSignersSignature,
675
+ invalidateBlock,
676
+ publisher,
677
+ );
669
678
  this.metrics.recordBuiltBlock(blockBuildDuration, publicGas.l2Gas);
670
679
  return block;
671
680
  } catch (err) {
@@ -741,7 +750,7 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
741
750
  this.metrics.recordRequiredAttestations(numberOfRequiredAttestations, attestationTimeAllowed);
742
751
 
743
752
  const timer = new Timer();
744
- let collectedAttestionsCount: number = 0;
753
+ let collectedAttestationsCount: number = 0;
745
754
  try {
746
755
  const attestationDeadline = new Date(this.dateProvider.now() + attestationTimeAllowed * 1000);
747
756
  const attestations = await this.validatorClient.collectAttestations(
@@ -750,17 +759,17 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
750
759
  attestationDeadline,
751
760
  );
752
761
 
753
- collectedAttestionsCount = attestations.length;
762
+ collectedAttestationsCount = attestations.length;
754
763
 
755
764
  // note: the smart contract requires that the signatures are provided in the order of the committee
756
765
  return orderAttestations(attestations, committee);
757
766
  } catch (err) {
758
767
  if (err && err instanceof AttestationTimeoutError) {
759
- collectedAttestionsCount = err.collectedCount;
768
+ collectedAttestationsCount = err.collectedCount;
760
769
  }
761
770
  throw err;
762
771
  } finally {
763
- this.metrics.recordCollectedAttestations(collectedAttestionsCount, timer.ms());
772
+ this.metrics.recordCollectedAttestations(collectedAttestationsCount, timer.ms());
764
773
  }
765
774
  }
766
775
 
@@ -773,8 +782,8 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
773
782
  }))
774
783
  protected async enqueuePublishL2Block(
775
784
  block: L2Block,
776
- attestations: CommitteeAttestation[] | undefined,
777
- txHashes: TxHash[],
785
+ attestationsAndSigners: CommitteeAttestationsAndSigners,
786
+ attestationsAndSignersSignature: Signature,
778
787
  invalidateBlock: InvalidateBlockRequest | undefined,
779
788
  publisher: SequencerPublisher,
780
789
  ): Promise<void> {
@@ -785,10 +794,15 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
785
794
  const slot = block.header.globalVariables.slotNumber.toNumber();
786
795
  const txTimeoutAt = new Date((this.getSlotStartBuildTimestamp(slot) + this.aztecSlotDuration) * 1000);
787
796
 
788
- const enqueued = await publisher.enqueueProposeL2Block(block, attestations, txHashes, {
789
- txTimeoutAt,
790
- forcePendingBlockNumber: invalidateBlock?.forcePendingBlockNumber,
791
- });
797
+ const enqueued = await publisher.enqueueProposeL2Block(
798
+ block,
799
+ attestationsAndSigners,
800
+ attestationsAndSignersSignature,
801
+ {
802
+ txTimeoutAt,
803
+ forcePendingBlockNumber: invalidateBlock?.forcePendingBlockNumber,
804
+ },
805
+ );
792
806
 
793
807
  if (!enqueued) {
794
808
  throw new Error(`Failed to enqueue publish of block ${block.number}`);