@aztec/sequencer-client 0.0.1-commit.96dac018d → 0.0.1-commit.993d52e

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.
Files changed (38) hide show
  1. package/dest/config.d.ts +1 -1
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +12 -7
  4. package/dest/publisher/config.d.ts +1 -5
  5. package/dest/publisher/config.d.ts.map +1 -1
  6. package/dest/publisher/config.js +1 -6
  7. package/dest/publisher/index.d.ts +1 -2
  8. package/dest/publisher/index.d.ts.map +1 -1
  9. package/dest/publisher/sequencer-publisher.d.ts +2 -8
  10. package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
  11. package/dest/publisher/sequencer-publisher.js +8 -217
  12. package/dest/sequencer/checkpoint_proposal_job.d.ts +1 -1
  13. package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -1
  14. package/dest/sequencer/checkpoint_proposal_job.js +13 -5
  15. package/dest/sequencer/sequencer.d.ts +3 -1
  16. package/dest/sequencer/sequencer.d.ts.map +1 -1
  17. package/package.json +28 -28
  18. package/src/config.ts +12 -6
  19. package/src/publisher/config.ts +0 -9
  20. package/src/publisher/index.ts +0 -3
  21. package/src/publisher/sequencer-publisher.ts +8 -178
  22. package/src/sequencer/checkpoint_proposal_job.ts +30 -4
  23. package/dest/publisher/l1_tx_failed_store/factory.d.ts +0 -11
  24. package/dest/publisher/l1_tx_failed_store/factory.d.ts.map +0 -1
  25. package/dest/publisher/l1_tx_failed_store/factory.js +0 -22
  26. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts +0 -59
  27. package/dest/publisher/l1_tx_failed_store/failed_tx_store.d.ts.map +0 -1
  28. package/dest/publisher/l1_tx_failed_store/failed_tx_store.js +0 -1
  29. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts +0 -15
  30. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.d.ts.map +0 -1
  31. package/dest/publisher/l1_tx_failed_store/file_store_failed_tx_store.js +0 -34
  32. package/dest/publisher/l1_tx_failed_store/index.d.ts +0 -4
  33. package/dest/publisher/l1_tx_failed_store/index.d.ts.map +0 -1
  34. package/dest/publisher/l1_tx_failed_store/index.js +0 -2
  35. package/src/publisher/l1_tx_failed_store/factory.ts +0 -32
  36. package/src/publisher/l1_tx_failed_store/failed_tx_store.ts +0 -55
  37. package/src/publisher/l1_tx_failed_store/file_store_failed_tx_store.ts +0 -46
  38. package/src/publisher/l1_tx_failed_store/index.ts +0 -3
@@ -440,7 +440,7 @@ import { NUM_CHECKPOINT_END_MARKER_FIELDS, getNumBlockEndBlobFields } from '@azt
440
440
  import { BLOBS_PER_CHECKPOINT, FIELDS_PER_BLOB } from '@aztec/constants';
441
441
  import { BlockNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
442
442
  import { randomInt } from '@aztec/foundation/crypto/random';
443
- import { Signature } from '@aztec/foundation/eth-signature';
443
+ import { flipSignature, generateRecoverableSignature, generateUnrecoverableSignature } from '@aztec/foundation/crypto/secp256k1-signer';
444
444
  import { filter } from '@aztec/foundation/iterator';
445
445
  import { createLogger } from '@aztec/foundation/log';
446
446
  import { sleep, sleepUntil } from '@aztec/foundation/sleep';
@@ -1082,7 +1082,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
1082
1082
  // Rollup contract requires that the signatures are provided in the order of the committee
1083
1083
  const sorted = orderAttestations(trimmed, committee);
1084
1084
  // Manipulate the attestations if we've been configured to do so
1085
- if (this.config.injectFakeAttestation || this.config.shuffleAttestationOrdering) {
1085
+ if (this.config.injectFakeAttestation || this.config.injectHighSValueAttestation || this.config.injectUnrecoverableSignatureAttestation || this.config.shuffleAttestationOrdering) {
1086
1086
  return this.manipulateAttestations(proposal.slotNumber, epoch, seed, committee, sorted);
1087
1087
  }
1088
1088
  return new CommitteeAttestationsAndSigners(sorted);
@@ -1099,7 +1099,7 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
1099
1099
  // Compute the proposer index in the committee, since we dont want to tweak it.
1100
1100
  // Otherwise, the L1 rollup contract will reject the block outright.
1101
1101
  const proposerIndex = Number(this.epochCache.computeProposerIndex(slotNumber, epoch, seed, BigInt(committee.length)));
1102
- if (this.config.injectFakeAttestation) {
1102
+ if (this.config.injectFakeAttestation || this.config.injectHighSValueAttestation || this.config.injectUnrecoverableSignatureAttestation) {
1103
1103
  // Find non-empty attestations that are not from the proposer
1104
1104
  const nonProposerIndices = [];
1105
1105
  for(let i = 0; i < attestations.length; i++){
@@ -1109,8 +1109,16 @@ _dec = trackSpan('CheckpointProposalJob.execute'), _dec1 = trackSpan('Checkpoint
1109
1109
  }
1110
1110
  if (nonProposerIndices.length > 0) {
1111
1111
  const targetIndex = nonProposerIndices[randomInt(nonProposerIndices.length)];
1112
- this.log.warn(`Injecting fake attestation in checkpoint for slot ${slotNumber} at index ${targetIndex}`);
1113
- unfreeze(attestations[targetIndex]).signature = Signature.random();
1112
+ if (this.config.injectHighSValueAttestation) {
1113
+ this.log.warn(`Injecting high-s value attestation in checkpoint for slot ${slotNumber} at index ${targetIndex}`);
1114
+ unfreeze(attestations[targetIndex]).signature = flipSignature(attestations[targetIndex].signature);
1115
+ } else if (this.config.injectUnrecoverableSignatureAttestation) {
1116
+ this.log.warn(`Injecting unrecoverable signature attestation in checkpoint for slot ${slotNumber} at index ${targetIndex}`);
1117
+ unfreeze(attestations[targetIndex]).signature = generateUnrecoverableSignature();
1118
+ } else {
1119
+ this.log.warn(`Injecting fake attestation in checkpoint for slot ${slotNumber} at index ${targetIndex}`);
1120
+ unfreeze(attestations[targetIndex]).signature = generateRecoverableSignature();
1121
+ }
1114
1122
  }
1115
1123
  return new CommitteeAttestationsAndSigners(attestations);
1116
1124
  }
@@ -175,6 +175,8 @@ export declare class Sequencer extends Sequencer_base {
175
175
  skipInvalidateBlockAsProposer: boolean;
176
176
  broadcastInvalidBlockProposal: boolean;
177
177
  injectFakeAttestation: boolean;
178
+ injectHighSValueAttestation: boolean;
179
+ injectUnrecoverableSignatureAttestation: boolean;
178
180
  fishermanMode: boolean;
179
181
  shuffleAttestationOrdering: boolean;
180
182
  blockDurationMs?: number | undefined;
@@ -194,4 +196,4 @@ type SequencerSyncCheckResult = {
194
196
  l1Timestamp: bigint;
195
197
  pendingChainValidationStatus: ValidateCheckpointResult;
196
198
  };
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQW9CLEtBQUssY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0csT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUNMLEtBQUssdUJBQXVCLEVBQzVCLEtBQUssZUFBZSxFQUVwQixLQUFLLHNCQUFzQixFQUM1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsT0FBTyxFQUFjLEtBQUssZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFpQyxNQUFNLHlCQUF5QixDQUFD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
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3NlcXVlbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQW9CLEtBQUssY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0csT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUNMLEtBQUssdUJBQXVCLEVBQzVCLEtBQUssZUFBZSxFQUVwQixLQUFLLHNCQUFzQixFQUM1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsT0FBTyxFQUFjLEtBQUssZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFpQyxNQUFNLHlCQUF5QixDQUFD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
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "0.0.1-commit.96dac018d",
3
+ "version": "0.0.1-commit.993d52e",
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": "0.0.1-commit.96dac018d",
30
- "@aztec/bb-prover": "0.0.1-commit.96dac018d",
31
- "@aztec/blob-client": "0.0.1-commit.96dac018d",
32
- "@aztec/blob-lib": "0.0.1-commit.96dac018d",
33
- "@aztec/constants": "0.0.1-commit.96dac018d",
34
- "@aztec/epoch-cache": "0.0.1-commit.96dac018d",
35
- "@aztec/ethereum": "0.0.1-commit.96dac018d",
36
- "@aztec/foundation": "0.0.1-commit.96dac018d",
37
- "@aztec/l1-artifacts": "0.0.1-commit.96dac018d",
38
- "@aztec/merkle-tree": "0.0.1-commit.96dac018d",
39
- "@aztec/node-keystore": "0.0.1-commit.96dac018d",
40
- "@aztec/noir-acvm_js": "0.0.1-commit.96dac018d",
41
- "@aztec/noir-contracts.js": "0.0.1-commit.96dac018d",
42
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.96dac018d",
43
- "@aztec/noir-types": "0.0.1-commit.96dac018d",
44
- "@aztec/p2p": "0.0.1-commit.96dac018d",
45
- "@aztec/protocol-contracts": "0.0.1-commit.96dac018d",
46
- "@aztec/prover-client": "0.0.1-commit.96dac018d",
47
- "@aztec/simulator": "0.0.1-commit.96dac018d",
48
- "@aztec/slasher": "0.0.1-commit.96dac018d",
49
- "@aztec/stdlib": "0.0.1-commit.96dac018d",
50
- "@aztec/telemetry-client": "0.0.1-commit.96dac018d",
51
- "@aztec/validator-client": "0.0.1-commit.96dac018d",
52
- "@aztec/validator-ha-signer": "0.0.1-commit.96dac018d",
53
- "@aztec/world-state": "0.0.1-commit.96dac018d",
29
+ "@aztec/aztec.js": "0.0.1-commit.993d52e",
30
+ "@aztec/bb-prover": "0.0.1-commit.993d52e",
31
+ "@aztec/blob-client": "0.0.1-commit.993d52e",
32
+ "@aztec/blob-lib": "0.0.1-commit.993d52e",
33
+ "@aztec/constants": "0.0.1-commit.993d52e",
34
+ "@aztec/epoch-cache": "0.0.1-commit.993d52e",
35
+ "@aztec/ethereum": "0.0.1-commit.993d52e",
36
+ "@aztec/foundation": "0.0.1-commit.993d52e",
37
+ "@aztec/l1-artifacts": "0.0.1-commit.993d52e",
38
+ "@aztec/merkle-tree": "0.0.1-commit.993d52e",
39
+ "@aztec/node-keystore": "0.0.1-commit.993d52e",
40
+ "@aztec/noir-acvm_js": "0.0.1-commit.993d52e",
41
+ "@aztec/noir-contracts.js": "0.0.1-commit.993d52e",
42
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.993d52e",
43
+ "@aztec/noir-types": "0.0.1-commit.993d52e",
44
+ "@aztec/p2p": "0.0.1-commit.993d52e",
45
+ "@aztec/protocol-contracts": "0.0.1-commit.993d52e",
46
+ "@aztec/prover-client": "0.0.1-commit.993d52e",
47
+ "@aztec/simulator": "0.0.1-commit.993d52e",
48
+ "@aztec/slasher": "0.0.1-commit.993d52e",
49
+ "@aztec/stdlib": "0.0.1-commit.993d52e",
50
+ "@aztec/telemetry-client": "0.0.1-commit.993d52e",
51
+ "@aztec/validator-client": "0.0.1-commit.993d52e",
52
+ "@aztec/validator-ha-signer": "0.0.1-commit.993d52e",
53
+ "@aztec/world-state": "0.0.1-commit.993d52e",
54
54
  "lodash.chunk": "^4.2.0",
55
55
  "tslib": "^2.4.0",
56
56
  "viem": "npm:@aztec/viem@2.38.2"
57
57
  },
58
58
  "devDependencies": {
59
- "@aztec/archiver": "0.0.1-commit.96dac018d",
60
- "@aztec/kv-store": "0.0.1-commit.96dac018d",
59
+ "@aztec/archiver": "0.0.1-commit.993d52e",
60
+ "@aztec/kv-store": "0.0.1-commit.993d52e",
61
61
  "@electric-sql/pglite": "^0.3.14",
62
62
  "@jest/globals": "^30.0.0",
63
63
  "@types/jest": "^30.0.0",
package/src/config.ts CHANGED
@@ -13,6 +13,7 @@ import { type P2PConfig, p2pConfigMappings } from '@aztec/p2p/config';
13
13
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
14
14
  import {
15
15
  type ChainConfig,
16
+ DEFAULT_MAX_TXS_PER_BLOCK,
16
17
  type SequencerConfig,
17
18
  chainConfigMappings,
18
19
  sharedSequencerConfigMappings,
@@ -37,7 +38,7 @@ export type { SequencerConfig };
37
38
  */
38
39
  export const DefaultSequencerConfig: ResolvedSequencerConfig = {
39
40
  sequencerPollingIntervalMS: 500,
40
- maxTxsPerBlock: 32,
41
+ maxTxsPerBlock: DEFAULT_MAX_TXS_PER_BLOCK,
41
42
  minTxsPerBlock: 1,
42
43
  buildCheckpointIfEmpty: false,
43
44
  publishTxsWithProposals: false,
@@ -52,6 +53,8 @@ export const DefaultSequencerConfig: ResolvedSequencerConfig = {
52
53
  skipInvalidateBlockAsProposer: false,
53
54
  broadcastInvalidBlockProposal: false,
54
55
  injectFakeAttestation: false,
56
+ injectHighSValueAttestation: false,
57
+ injectUnrecoverableSignatureAttestation: false,
55
58
  fishermanMode: false,
56
59
  shuffleAttestationOrdering: false,
57
60
  skipPushProposedBlocksToArchiver: false,
@@ -77,11 +80,6 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
77
80
  description: 'The number of ms to wait between polling for checking to build on the next slot.',
78
81
  ...numberConfigHelper(DefaultSequencerConfig.sequencerPollingIntervalMS),
79
82
  },
80
- maxTxsPerBlock: {
81
- env: 'SEQ_MAX_TX_PER_BLOCK',
82
- description: 'The maximum number of txs to include in a block.',
83
- ...numberConfigHelper(DefaultSequencerConfig.maxTxsPerBlock),
84
- },
85
83
  minTxsPerBlock: {
86
84
  env: 'SEQ_MIN_TX_PER_BLOCK',
87
85
  description: 'The minimum number of txs to include in a block.',
@@ -186,6 +184,14 @@ export const sequencerConfigMappings: ConfigMappingsType<SequencerConfig> = {
186
184
  description: 'Inject a fake attestation (for testing only)',
187
185
  ...booleanConfigHelper(DefaultSequencerConfig.injectFakeAttestation),
188
186
  },
187
+ injectHighSValueAttestation: {
188
+ description: 'Inject a malleable attestation with a high-s value (for testing only)',
189
+ ...booleanConfigHelper(DefaultSequencerConfig.injectHighSValueAttestation),
190
+ },
191
+ injectUnrecoverableSignatureAttestation: {
192
+ description: 'Inject an attestation with an unrecoverable signature (for testing only)',
193
+ ...booleanConfigHelper(DefaultSequencerConfig.injectUnrecoverableSignatureAttestation),
194
+ },
189
195
  fishermanMode: {
190
196
  env: 'FISHERMAN_MODE',
191
197
  description:
@@ -48,8 +48,6 @@ export type PublisherConfig = L1TxUtilsConfig &
48
48
  fishermanMode?: boolean;
49
49
  /** Address of the forwarder contract to wrap all L1 transactions through (for testing purposes only) */
50
50
  publisherForwarderAddress?: EthAddress;
51
- /** Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path */
52
- l1TxFailedStore?: string;
53
51
  };
54
52
 
55
53
  export type ProverPublisherConfig = L1TxUtilsConfig &
@@ -64,8 +62,6 @@ export type SequencerPublisherConfig = L1TxUtilsConfig &
64
62
  fishermanMode?: boolean;
65
63
  sequencerPublisherAllowInvalidStates?: boolean;
66
64
  sequencerPublisherForwarderAddress?: EthAddress;
67
- /** Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path */
68
- l1TxFailedStore?: string;
69
65
  };
70
66
 
71
67
  export function getPublisherConfigFromProverConfig(config: ProverPublisherConfig): PublisherConfig {
@@ -81,7 +77,6 @@ export function getPublisherConfigFromSequencerConfig(config: SequencerPublisher
81
77
  ...config,
82
78
  publisherAllowInvalidStates: config.sequencerPublisherAllowInvalidStates,
83
79
  publisherForwarderAddress: config.sequencerPublisherForwarderAddress,
84
- l1TxFailedStore: config.l1TxFailedStore,
85
80
  };
86
81
  }
87
82
 
@@ -138,10 +133,6 @@ export const sequencerPublisherConfigMappings: ConfigMappingsType<SequencerPubli
138
133
  description: 'Address of the forwarder contract to wrap all L1 transactions through (for testing purposes only)',
139
134
  parseEnv: (val: string) => (val ? EthAddress.fromString(val) : undefined),
140
135
  },
141
- l1TxFailedStore: {
142
- env: 'L1_TX_FAILED_STORE',
143
- description: 'Store for failed L1 transaction inputs (test networks only). Format: gs://bucket/path',
144
- },
145
136
  };
146
137
 
147
138
  export const proverPublisherConfigMappings: ConfigMappingsType<ProverPublisherConfig & L1TxUtilsConfig> = {
@@ -3,6 +3,3 @@ export { SequencerPublisherFactory } from './sequencer-publisher-factory.js';
3
3
 
4
4
  // Used for tests
5
5
  export { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
6
-
7
- // Failed L1 tx store (optional, for test networks)
8
- export { type FailedL1Tx, type FailedL1TxUri, type L1TxFailedStore } from './l1_tx_failed_store/index.js';
@@ -45,19 +45,9 @@ import type { CheckpointHeader } from '@aztec/stdlib/rollup';
45
45
  import type { L1PublishCheckpointStats } from '@aztec/stdlib/stats';
46
46
  import { type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
47
47
 
48
- import {
49
- type Hex,
50
- type StateOverride,
51
- type TransactionReceipt,
52
- type TypedDataDefinition,
53
- encodeFunctionData,
54
- keccak256,
55
- multicall3Abi,
56
- toHex,
57
- } from 'viem';
48
+ import { type StateOverride, type TransactionReceipt, type TypedDataDefinition, encodeFunctionData, toHex } from 'viem';
58
49
 
59
50
  import type { SequencerPublisherConfig } from './config.js';
60
- import { type FailedL1Tx, type L1TxFailedStore, createL1TxFailedStore } from './l1_tx_failed_store/index.js';
61
51
  import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
62
52
 
63
53
  /** Arguments to the process method of the rollup contract */
@@ -119,7 +109,6 @@ export class SequencerPublisher {
119
109
  private interrupted = false;
120
110
  private metrics: SequencerPublisherMetrics;
121
111
  public epochCache: EpochCache;
122
- private failedTxStore?: Promise<L1TxFailedStore | undefined>;
123
112
 
124
113
  protected governanceLog = createLogger('sequencer:publisher:governance');
125
114
  protected slashingLog = createLogger('sequencer:publisher:slashing');
@@ -160,7 +149,7 @@ export class SequencerPublisher {
160
149
  protected requests: RequestWithExpiry[] = [];
161
150
 
162
151
  constructor(
163
- private config: Pick<SequencerPublisherConfig, 'fishermanMode' | 'l1TxFailedStore'> &
152
+ private config: Pick<SequencerPublisherConfig, 'fishermanMode'> &
164
153
  Pick<L1ContractsConfig, 'ethereumSlotDuration'> & { l1ChainId: number },
165
154
  deps: {
166
155
  telemetry?: TelemetryClient;
@@ -216,31 +205,6 @@ export class SequencerPublisher {
216
205
  this.rollupContract,
217
206
  createLogger('sequencer:publisher:price-oracle'),
218
207
  );
219
-
220
- // Initialize failed L1 tx store (optional, for test networks)
221
- this.failedTxStore = createL1TxFailedStore(config.l1TxFailedStore, this.log);
222
- }
223
-
224
- /**
225
- * Backs up a failed L1 transaction to the configured store for debugging.
226
- * Does nothing if no store is configured.
227
- */
228
- private backupFailedTx(failedTx: Omit<FailedL1Tx, 'timestamp'>): void {
229
- if (!this.failedTxStore) {
230
- return;
231
- }
232
-
233
- const tx: FailedL1Tx = {
234
- ...failedTx,
235
- timestamp: Date.now(),
236
- };
237
-
238
- // Fire and forget - don't block on backup
239
- void this.failedTxStore
240
- .then(store => store?.saveFailedTx(tx))
241
- .catch(err => {
242
- this.log.warn(`Failed to backup failed L1 tx to store`, err);
243
- });
244
208
  }
245
209
 
246
210
  public getRollupContract(): RollupContract {
@@ -422,21 +386,6 @@ export class SequencerPublisher {
422
386
  validRequests.sort((a, b) => compareActions(a.action, b.action));
423
387
 
424
388
  try {
425
- // Capture context for failed tx backup before sending
426
- const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
427
- const multicallData = encodeFunctionData({
428
- abi: multicall3Abi,
429
- functionName: 'aggregate3',
430
- args: [
431
- validRequests.map(r => ({
432
- target: r.request.to!,
433
- callData: r.request.data!,
434
- allowFailure: true,
435
- })),
436
- ],
437
- });
438
- const blobDataHex = blobConfig?.blobs?.map(b => toHex(b)) as Hex[] | undefined;
439
-
440
389
  this.log.debug('Forwarding transactions', {
441
390
  validRequests: validRequests.map(request => request.action),
442
391
  txConfig,
@@ -449,12 +398,7 @@ export class SequencerPublisher {
449
398
  this.rollupContract.address,
450
399
  this.log,
451
400
  );
452
- const txContext = { multicallData, blobData: blobDataHex, l1BlockNumber };
453
- const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(
454
- validRequests,
455
- result,
456
- txContext,
457
- );
401
+ const { successfulActions = [], failedActions = [] } = this.callbackBundledTransactions(validRequests, result);
458
402
  return { result, expiredActions, sentActions: validActions, successfulActions, failedActions };
459
403
  } catch (err) {
460
404
  const viemError = formatViemError(err);
@@ -474,25 +418,11 @@ export class SequencerPublisher {
474
418
 
475
419
  private callbackBundledTransactions(
476
420
  requests: RequestWithExpiry[],
477
- result: { receipt: TransactionReceipt; errorMsg?: string } | FormattedViemError | undefined,
478
- txContext: { multicallData: Hex; blobData?: Hex[]; l1BlockNumber: bigint },
421
+ result?: { receipt: TransactionReceipt } | FormattedViemError,
479
422
  ) {
480
423
  const actionsListStr = requests.map(r => r.action).join(', ');
481
424
  if (result instanceof FormattedViemError) {
482
425
  this.log.error(`Failed to publish bundled transactions (${actionsListStr})`, result);
483
- this.backupFailedTx({
484
- id: keccak256(txContext.multicallData),
485
- failureType: 'send-error',
486
- request: { to: MULTI_CALL_3_ADDRESS, data: txContext.multicallData },
487
- blobData: txContext.blobData,
488
- l1BlockNumber: txContext.l1BlockNumber.toString(),
489
- error: { message: result.message, name: result.name },
490
- context: {
491
- actions: requests.map(r => r.action),
492
- requests: requests.map(r => ({ action: r.action, to: r.request.to! as Hex, data: r.request.data! })),
493
- sender: this.getSenderAddress().toString(),
494
- },
495
- });
496
426
  return { failedActions: requests.map(r => r.action) };
497
427
  } else {
498
428
  this.log.verbose(`Published bundled transactions (${actionsListStr})`, { result, requests });
@@ -505,30 +435,6 @@ export class SequencerPublisher {
505
435
  failedActions.push(request.action);
506
436
  }
507
437
  }
508
- // Single backup for the whole reverted tx
509
- if (failedActions.length > 0 && result?.receipt?.status === 'reverted') {
510
- this.backupFailedTx({
511
- id: result.receipt.transactionHash,
512
- failureType: 'revert',
513
- request: { to: MULTI_CALL_3_ADDRESS, data: txContext.multicallData },
514
- blobData: txContext.blobData,
515
- l1BlockNumber: result.receipt.blockNumber.toString(),
516
- receipt: {
517
- transactionHash: result.receipt.transactionHash,
518
- blockNumber: result.receipt.blockNumber.toString(),
519
- gasUsed: (result.receipt.gasUsed ?? 0n).toString(),
520
- status: 'reverted',
521
- },
522
- error: { message: result.errorMsg ?? 'Transaction reverted' },
523
- context: {
524
- actions: failedActions,
525
- requests: requests
526
- .filter(r => failedActions.includes(r.action))
527
- .map(r => ({ action: r.action, to: r.request.to! as Hex, data: r.request.data! })),
528
- sender: this.getSenderAddress().toString(),
529
- },
530
- });
531
- }
532
438
  return { successfulActions, failedActions };
533
439
  }
534
440
  }
@@ -640,8 +546,6 @@ export class SequencerPublisher {
640
546
  const request = this.buildInvalidateCheckpointRequest(validationResult);
641
547
  this.log.debug(`Simulating invalidate checkpoint ${checkpointNumber}`, { ...logData, request });
642
548
 
643
- const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
644
-
645
549
  try {
646
550
  const { gasUsed } = await this.l1TxUtils.simulate(
647
551
  request,
@@ -693,18 +597,6 @@ export class SequencerPublisher {
693
597
 
694
598
  // Otherwise, throw. We cannot build the next checkpoint if we cannot invalidate the previous one.
695
599
  this.log.error(`Simulation for invalidate checkpoint ${checkpointNumber} failed`, viemError, logData);
696
- this.backupFailedTx({
697
- id: keccak256(request.data!),
698
- failureType: 'simulation',
699
- request: { to: request.to!, data: request.data!, value: request.value?.toString() },
700
- l1BlockNumber: l1BlockNumber.toString(),
701
- error: { message: viemError.message, name: viemError.name },
702
- context: {
703
- actions: [`invalidate-${reason}`],
704
- checkpointNumber,
705
- sender: this.getSenderAddress().toString(),
706
- },
707
- });
708
600
  throw new Error(`Failed to simulate invalidate checkpoint ${checkpointNumber}`, { cause: viemError });
709
601
  }
710
602
  }
@@ -852,26 +744,11 @@ export class SequencerPublisher {
852
744
  lastValidL2Slot: slotNumber,
853
745
  });
854
746
 
855
- const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
856
-
857
747
  try {
858
748
  await this.l1TxUtils.simulate(request, { time: timestamp }, [], mergeAbis([request.abi ?? [], ErrorsAbi]));
859
749
  this.log.debug(`Simulation for ${action} at slot ${slotNumber} succeeded`, { request });
860
750
  } catch (err) {
861
- const viemError = formatViemError(err);
862
- this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, viemError);
863
- this.backupFailedTx({
864
- id: keccak256(request.data!),
865
- failureType: 'simulation',
866
- request: { to: request.to!, data: request.data!, value: request.value?.toString() },
867
- l1BlockNumber: l1BlockNumber.toString(),
868
- error: { message: viemError.message, name: viemError.name },
869
- context: {
870
- actions: [action],
871
- slot: slotNumber,
872
- sender: this.getSenderAddress().toString(),
873
- },
874
- });
751
+ this.log.error(`Failed simulation for ${action} at slot ${slotNumber} (enqueuing the action anyway)`, err);
875
752
  // Yes, we enqueue the request anyway, in case there was a bug with the simulation itself
876
753
  }
877
754
 
@@ -1167,8 +1044,6 @@ export class SequencerPublisher {
1167
1044
 
1168
1045
  this.log.debug(`Simulating ${action} for slot ${slotNumber}`, logData);
1169
1046
 
1170
- const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1171
-
1172
1047
  let gasUsed: bigint;
1173
1048
  const simulateAbi = mergeAbis([request.abi ?? [], ErrorsAbi]);
1174
1049
  try {
@@ -1178,19 +1053,6 @@ export class SequencerPublisher {
1178
1053
  const viemError = formatViemError(err, simulateAbi);
1179
1054
  this.log.error(`Simulation for ${action} at ${slotNumber} failed`, viemError, logData);
1180
1055
 
1181
- this.backupFailedTx({
1182
- id: keccak256(request.data!),
1183
- failureType: 'simulation',
1184
- request: { to: request.to!, data: request.data!, value: request.value?.toString() },
1185
- l1BlockNumber: l1BlockNumber.toString(),
1186
- error: { message: viemError.message, name: viemError.name },
1187
- context: {
1188
- actions: [action],
1189
- slot: slotNumber,
1190
- sender: this.getSenderAddress().toString(),
1191
- },
1192
- });
1193
-
1194
1056
  return false;
1195
1057
  }
1196
1058
 
@@ -1274,27 +1136,9 @@ export class SequencerPublisher {
1274
1136
  kzg,
1275
1137
  },
1276
1138
  )
1277
- .catch(async err => {
1278
- const viemError = formatViemError(err);
1279
- this.log.error(`Failed to validate blobs`, viemError.message, { metaMessages: viemError.metaMessages });
1280
- const validateBlobsData = encodeFunctionData({
1281
- abi: RollupAbi,
1282
- functionName: 'validateBlobs',
1283
- args: [blobInput],
1284
- });
1285
- const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1286
- this.backupFailedTx({
1287
- id: keccak256(validateBlobsData),
1288
- failureType: 'simulation',
1289
- request: { to: this.rollupContract.address as Hex, data: validateBlobsData },
1290
- blobData: encodedData.blobs.map(b => toHex(b.data)) as Hex[],
1291
- l1BlockNumber: l1BlockNumber.toString(),
1292
- error: { message: viemError.message, name: viemError.name },
1293
- context: {
1294
- actions: ['validate-blobs'],
1295
- sender: this.getSenderAddress().toString(),
1296
- },
1297
- });
1139
+ .catch(err => {
1140
+ const { message, metaMessages } = formatViemError(err);
1141
+ this.log.error(`Failed to validate blobs`, message, { metaMessages });
1298
1142
  throw new Error('Failed to validate blobs');
1299
1143
  });
1300
1144
  }
@@ -1373,8 +1217,6 @@ export class SequencerPublisher {
1373
1217
  });
1374
1218
  }
1375
1219
 
1376
- const l1BlockNumber = await this.l1TxUtils.getBlockNumber();
1377
-
1378
1220
  const simulationResult = await this.l1TxUtils
1379
1221
  .simulate(
1380
1222
  {
@@ -1408,18 +1250,6 @@ export class SequencerPublisher {
1408
1250
  };
1409
1251
  }
1410
1252
  this.log.error(`Failed to simulate propose tx`, viemError);
1411
- this.backupFailedTx({
1412
- id: keccak256(rollupData),
1413
- failureType: 'simulation',
1414
- request: { to: this.rollupContract.address, data: rollupData },
1415
- l1BlockNumber: l1BlockNumber.toString(),
1416
- error: { message: viemError.message, name: viemError.name },
1417
- context: {
1418
- actions: ['propose'],
1419
- slot: Number(args[0].header.slotNumber),
1420
- sender: this.getSenderAddress().toString(),
1421
- },
1422
- });
1423
1253
  throw err;
1424
1254
  });
1425
1255
 
@@ -9,6 +9,11 @@ import {
9
9
  SlotNumber,
10
10
  } from '@aztec/foundation/branded-types';
11
11
  import { randomInt } from '@aztec/foundation/crypto/random';
12
+ import {
13
+ flipSignature,
14
+ generateRecoverableSignature,
15
+ generateUnrecoverableSignature,
16
+ } from '@aztec/foundation/crypto/secp256k1-signer';
12
17
  import { Fr } from '@aztec/foundation/curves/bn254';
13
18
  import { EthAddress } from '@aztec/foundation/eth-address';
14
19
  import { Signature } from '@aztec/foundation/eth-signature';
@@ -759,7 +764,12 @@ export class CheckpointProposalJob implements Traceable {
759
764
  const sorted = orderAttestations(trimmed, committee);
760
765
 
761
766
  // Manipulate the attestations if we've been configured to do so
762
- if (this.config.injectFakeAttestation || this.config.shuffleAttestationOrdering) {
767
+ if (
768
+ this.config.injectFakeAttestation ||
769
+ this.config.injectHighSValueAttestation ||
770
+ this.config.injectUnrecoverableSignatureAttestation ||
771
+ this.config.shuffleAttestationOrdering
772
+ ) {
763
773
  return this.manipulateAttestations(proposal.slotNumber, epoch, seed, committee, sorted);
764
774
  }
765
775
 
@@ -788,7 +798,11 @@ export class CheckpointProposalJob implements Traceable {
788
798
  this.epochCache.computeProposerIndex(slotNumber, epoch, seed, BigInt(committee.length)),
789
799
  );
790
800
 
791
- if (this.config.injectFakeAttestation) {
801
+ if (
802
+ this.config.injectFakeAttestation ||
803
+ this.config.injectHighSValueAttestation ||
804
+ this.config.injectUnrecoverableSignatureAttestation
805
+ ) {
792
806
  // Find non-empty attestations that are not from the proposer
793
807
  const nonProposerIndices: number[] = [];
794
808
  for (let i = 0; i < attestations.length; i++) {
@@ -798,8 +812,20 @@ export class CheckpointProposalJob implements Traceable {
798
812
  }
799
813
  if (nonProposerIndices.length > 0) {
800
814
  const targetIndex = nonProposerIndices[randomInt(nonProposerIndices.length)];
801
- this.log.warn(`Injecting fake attestation in checkpoint for slot ${slotNumber} at index ${targetIndex}`);
802
- unfreeze(attestations[targetIndex]).signature = Signature.random();
815
+ if (this.config.injectHighSValueAttestation) {
816
+ this.log.warn(
817
+ `Injecting high-s value attestation in checkpoint for slot ${slotNumber} at index ${targetIndex}`,
818
+ );
819
+ unfreeze(attestations[targetIndex]).signature = flipSignature(attestations[targetIndex].signature);
820
+ } else if (this.config.injectUnrecoverableSignatureAttestation) {
821
+ this.log.warn(
822
+ `Injecting unrecoverable signature attestation in checkpoint for slot ${slotNumber} at index ${targetIndex}`,
823
+ );
824
+ unfreeze(attestations[targetIndex]).signature = generateUnrecoverableSignature();
825
+ } else {
826
+ this.log.warn(`Injecting fake attestation in checkpoint for slot ${slotNumber} at index ${targetIndex}`);
827
+ unfreeze(attestations[targetIndex]).signature = generateRecoverableSignature();
828
+ }
803
829
  }
804
830
  return new CommitteeAttestationsAndSigners(attestations);
805
831
  }