@aztec/stdlib 2.1.2 → 2.1.3-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,16 @@
1
1
  import type { ViemCommitteeAttestations } from '@aztec/ethereum';
2
2
  import { z } from 'zod';
3
3
  import type { Signable, SignatureDomainSeparator } from '../../p2p/signature_utils.js';
4
- import { CommitteeAttestation } from './committee_attestation.js';
4
+ import { CommitteeAttestation, EthAddress } from './committee_attestation.js';
5
5
  export declare class CommitteeAttestationsAndSigners implements Signable {
6
6
  attestations: CommitteeAttestation[];
7
7
  constructor(attestations: CommitteeAttestation[]);
8
8
  static get schema(): z.ZodEffects<z.ZodObject<{
9
9
  attestations: z.ZodArray<z.ZodEffects<z.ZodObject<{
10
- address: z.ZodType<import("./committee_attestation.js").EthAddress, any, string>;
10
+ address: z.ZodType<EthAddress, any, string>;
11
11
  signature: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, `0x${string}`, string>, `0x${string}`, string>, import("./committee_attestation.js").Signature, string>;
12
12
  }, "strip", z.ZodTypeAny, {
13
- address: import("./committee_attestation.js").EthAddress;
13
+ address: EthAddress;
14
14
  signature: import("./committee_attestation.js").Signature;
15
15
  }, {
16
16
  address: string;
@@ -35,7 +35,7 @@ export declare class CommitteeAttestationsAndSigners implements Signable {
35
35
  getPayloadToSign(domainSeparator: SignatureDomainSeparator): Buffer;
36
36
  static empty(): CommitteeAttestationsAndSigners;
37
37
  toString(): string;
38
- getSigners(): import("./committee_attestation.js").EthAddress[];
38
+ getSigners(): EthAddress[];
39
39
  getSignedAttestations(): CommitteeAttestation[];
40
40
  /**
41
41
  * Packs an array of committee attestations into the format expected by the Solidity contract
@@ -45,4 +45,15 @@ export declare class CommitteeAttestationsAndSigners implements Signable {
45
45
  */
46
46
  getPackedAttestations(): ViemCommitteeAttestations;
47
47
  }
48
+ /**
49
+ * Malicious extension of CommitteeAttestationsAndSigners that keeps separate attestations and
50
+ * signers. Used for tricking the L1 contract into accepting attestations by reconstructing
51
+ * the correct committee commitment (which relies on the signers, ignoring the signatures)
52
+ * with an invalid set of attestation signatures.
53
+ */
54
+ export declare class MaliciousCommitteeAttestationsAndSigners extends CommitteeAttestationsAndSigners {
55
+ private signers;
56
+ constructor(attestations: CommitteeAttestation[], signers: EthAddress[]);
57
+ getSigners(): EthAddress[];
58
+ }
48
59
  //# sourceMappingURL=attestations_and_signers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attestations_and_signers.d.ts","sourceRoot":"","sources":["../../../src/block/proposal/attestations_and_signers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAIjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,qBAAa,+BAAgC,YAAW,QAAQ;IAC3C,YAAY,EAAE,oBAAoB,EAAE;gBAApC,YAAY,EAAE,oBAAoB,EAAE;IAEvD,MAAM,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;OAMhB;IAED,gBAAgB,CAAC,eAAe,EAAE,wBAAwB,GAAG,MAAM;IAanE,MAAM,CAAC,KAAK,IAAI,+BAA+B;IAI/C,QAAQ;IAIR,UAAU;IAIV,qBAAqB;IAIrB;;;;;OAKG;IACH,qBAAqB,IAAI,yBAAyB;CAiEnD"}
1
+ {"version":3,"file":"attestations_and_signers.d.ts","sourceRoot":"","sources":["../../../src/block/proposal/attestations_and_signers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAIjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE9E,qBAAa,+BAAgC,YAAW,QAAQ;IAC3C,YAAY,EAAE,oBAAoB,EAAE;gBAApC,YAAY,EAAE,oBAAoB,EAAE;IAEvD,MAAM,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;OAMhB;IAED,gBAAgB,CAAC,eAAe,EAAE,wBAAwB,GAAG,MAAM;IAanE,MAAM,CAAC,KAAK,IAAI,+BAA+B;IAI/C,QAAQ;IAIR,UAAU;IAIV,qBAAqB;IAIrB;;;;;OAKG;IACH,qBAAqB,IAAI,yBAAyB;CAiEnD;AAED;;;;;GAKG;AACH,qBAAa,wCAAyC,SAAQ,+BAA+B;IAGzF,OAAO,CAAC,OAAO;gBADf,YAAY,EAAE,oBAAoB,EAAE,EAC5B,OAAO,EAAE,UAAU,EAAE;IAKtB,UAAU,IAAI,UAAU,EAAE;CAGpC"}
@@ -97,3 +97,17 @@ export class CommitteeAttestationsAndSigners {
97
97
  };
98
98
  }
99
99
  }
100
+ /**
101
+ * Malicious extension of CommitteeAttestationsAndSigners that keeps separate attestations and
102
+ * signers. Used for tricking the L1 contract into accepting attestations by reconstructing
103
+ * the correct committee commitment (which relies on the signers, ignoring the signatures)
104
+ * with an invalid set of attestation signatures.
105
+ */ export class MaliciousCommitteeAttestationsAndSigners extends CommitteeAttestationsAndSigners {
106
+ signers;
107
+ constructor(attestations, signers){
108
+ super(attestations), this.signers = signers;
109
+ }
110
+ getSigners() {
111
+ return this.signers;
112
+ }
113
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/file-store/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAUlE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,qBAAa,aAAc,YAAW,iBAAiB;IAKnD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+D;gBAGlE,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAA+C;IAc1D,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUxD,OAAO,CAAC,MAAM;CAGf"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/file-store/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAUlE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,qBAAa,aAAc,YAAW,iBAAiB;IAKnD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+D;gBAGlE,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAA+C;IAc1D,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUxD,OAAO,CAAC,MAAM;CAGf"}
@@ -4,7 +4,7 @@ import axios from 'axios';
4
4
  import { createWriteStream } from 'fs';
5
5
  import { mkdir } from 'fs/promises';
6
6
  import { dirname } from 'path';
7
- import { finished } from 'stream/promises';
7
+ import { pipeline } from 'stream/promises';
8
8
  export class HttpFileStore {
9
9
  baseUrl;
10
10
  log;
@@ -38,17 +38,22 @@ export class HttpFileStore {
38
38
  async download(pathOrUrl, destPath) {
39
39
  const url = this.getUrl(pathOrUrl);
40
40
  try {
41
+ this.log.debug(`Downloading file from ${url} to ${destPath}`);
41
42
  const response = await this.fetch({
42
43
  url,
43
44
  method: 'GET',
44
45
  responseType: 'stream'
45
46
  });
47
+ this.log.debug(`Response ${response.status} (${response.statusText}) from ${url}, writing to ${destPath}`);
46
48
  await mkdir(dirname(destPath), {
47
49
  recursive: true
48
50
  });
49
- await finished(response.data.pipe(createWriteStream(destPath)));
51
+ await pipeline(response.data, createWriteStream(destPath));
52
+ this.log.debug(`Download of ${url} to ${destPath} complete`);
50
53
  } catch (error) {
51
- throw new Error(`Error fetching file from ${url}: ${error instanceof Error ? error.message : String(error)}`);
54
+ throw new Error(`Error fetching file from ${url}`, {
55
+ cause: error
56
+ });
52
57
  }
53
58
  }
54
59
  async exists(pathOrUrl) {
@@ -1 +1 @@
1
- {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../src/file-store/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAiBlE,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,qBAAa,WAAY,YAAW,SAAS;IAOzC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAEzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;gBAGrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EACjC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EAClC,GAAG,GAAE,MAA6C;IAiBxD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBlF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6D3F,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW3C,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe3D,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,WAAW;CAKpB"}
1
+ {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../src/file-store/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAiBlE,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,qBAAa,WAAY,YAAW,SAAS;IAOzC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAEzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;gBAGrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EACjC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EAClC,GAAG,GAAE,MAA6C;IAiBxD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBlF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IA0D3F,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW3C,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/D,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe3D,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,WAAW;CAKpB"}
@@ -4,7 +4,7 @@ import { createReadStream, createWriteStream } from 'fs';
4
4
  import { mkdir, mkdtemp, stat, unlink } from 'fs/promises';
5
5
  import { tmpdir } from 'os';
6
6
  import { basename, dirname, join } from 'path';
7
- import { finished } from 'stream/promises';
7
+ import { pipeline } from 'stream/promises';
8
8
  import { createGzip } from 'zlib';
9
9
  function normalizeBasePath(path) {
10
10
  return path?.replace(/^\/+|\/+$/g, '') ?? '';
@@ -72,11 +72,8 @@ export class S3FileStore {
72
72
  // Pre-gzip to a temp file so we know the exact length for R2/S3 headers
73
73
  const tmpDir = await mkdtemp(join(tmpdir(), 's3-upload-'));
74
74
  const gzPath = join(tmpDir, `${basename(srcPath)}.gz`);
75
- const source = createReadStream(srcPath);
76
- const gz = createGzip();
77
- const out = createWriteStream(gzPath);
78
75
  try {
79
- await finished(source.pipe(gz).pipe(out));
76
+ await pipeline(createReadStream(srcPath), createGzip(), createWriteStream(gzPath));
80
77
  const st = await stat(gzPath);
81
78
  contentLength = st.size;
82
79
  bodyPath = gzPath;
@@ -133,8 +130,7 @@ export class S3FileStore {
133
130
  await mkdir(dirname(destPath), {
134
131
  recursive: true
135
132
  });
136
- const write = createWriteStream(destPath);
137
- await finished(out.Body.pipe(write));
133
+ await pipeline(out.Body, createWriteStream(destPath));
138
134
  }
139
135
  async exists(pathOrUrlStr) {
140
136
  try {
@@ -23,6 +23,8 @@ export type ArchiverSpecificConfig = {
23
23
  archiverStoreMapSizeKb?: number;
24
24
  /** Whether to skip validating block attestations (use only for testing). */
25
25
  skipValidateBlockAttestations?: boolean;
26
+ /** Maximum allowed drift in seconds between the Ethereum client and current time. */
27
+ maxAllowedEthClientDriftSeconds?: number;
26
28
  };
27
29
  export declare const ArchiverSpecificConfigSchema: z.ZodObject<{
28
30
  archiverPollingIntervalMS: z.ZodOptional<z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>>;
@@ -31,6 +33,7 @@ export declare const ArchiverSpecificConfigSchema: z.ZodObject<{
31
33
  maxLogs: z.ZodOptional<z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>>;
32
34
  archiverStoreMapSizeKb: z.ZodOptional<z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>>;
33
35
  skipValidateBlockAttestations: z.ZodOptional<z.ZodBoolean>;
36
+ maxAllowedEthClientDriftSeconds: z.ZodOptional<z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>>;
34
37
  }, "strip", z.ZodTypeAny, {
35
38
  archiverPollingIntervalMS?: number | undefined;
36
39
  archiverBatchSize?: number | undefined;
@@ -38,6 +41,7 @@ export declare const ArchiverSpecificConfigSchema: z.ZodObject<{
38
41
  maxLogs?: number | undefined;
39
42
  archiverStoreMapSizeKb?: number | undefined;
40
43
  skipValidateBlockAttestations?: boolean | undefined;
44
+ maxAllowedEthClientDriftSeconds?: number | undefined;
41
45
  }, {
42
46
  archiverPollingIntervalMS?: string | number | bigint | undefined;
43
47
  archiverBatchSize?: string | number | bigint | undefined;
@@ -45,6 +49,7 @@ export declare const ArchiverSpecificConfigSchema: z.ZodObject<{
45
49
  maxLogs?: string | number | bigint | undefined;
46
50
  archiverStoreMapSizeKb?: string | number | bigint | undefined;
47
51
  skipValidateBlockAttestations?: boolean | undefined;
52
+ maxAllowedEthClientDriftSeconds?: string | number | bigint | undefined;
48
53
  }>;
49
54
  export type ArchiverApi = Omit<L2BlockSource & L2LogsSource & ContractDataSource & L1ToL2MessageSource, 'start' | 'stop'>;
50
55
  export declare const ArchiverApiSchema: ApiSchemaFor<ArchiverApi>;
@@ -1 +1 @@
1
- {"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/interfaces/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAOnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,kFAAkF;IAClF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,yCAAyC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IAEjC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qGAAqG;IACrG,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,4EAA4E;IAC5E,6BAA6B,CAAC,EAAE,OAAO,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;EAOvC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,aAAa,GAAG,YAAY,GAAG,kBAAkB,GAAG,mBAAmB,EACvE,OAAO,GAAG,MAAM,CACjB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,WAAW,CAyDvD,CAAC"}
1
+ {"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/interfaces/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAOnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,kFAAkF;IAClF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,yCAAyC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IAEjC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qGAAqG;IACrG,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,4EAA4E;IAC5E,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC,qFAAqF;IACrF,+BAA+B,CAAC,EAAE,MAAM,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;EAQvC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,aAAa,GAAG,YAAY,GAAG,kBAAkB,GAAG,mBAAmB,EACvE,OAAO,GAAG,MAAM,CACjB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,WAAW,CAyDvD,CAAC"}
@@ -20,7 +20,8 @@ export const ArchiverSpecificConfigSchema = z.object({
20
20
  viemPollingIntervalMS: schemas.Integer.optional(),
21
21
  maxLogs: schemas.Integer.optional(),
22
22
  archiverStoreMapSizeKb: schemas.Integer.optional(),
23
- skipValidateBlockAttestations: z.boolean().optional()
23
+ skipValidateBlockAttestations: z.boolean().optional(),
24
+ maxAllowedEthClientDriftSeconds: schemas.Integer.optional()
24
25
  });
25
26
  export const ArchiverApiSchema = {
26
27
  getRollupAddress: z.function().args().returns(schemas.EthAddress),
@@ -65,6 +65,7 @@ export declare const AztecNodeAdminConfigSchema: z.ZodObject<{
65
65
  secondsBeforeInvalidatingBlockAsCommitteeMember: z.ZodNumber;
66
66
  secondsBeforeInvalidatingBlockAsNonCommitteeMember: z.ZodNumber;
67
67
  injectFakeAttestation: z.ZodOptional<z.ZodBoolean>;
68
+ shuffleAttestationOrdering: z.ZodOptional<z.ZodBoolean>;
68
69
  nodeUrl: z.ZodOptional<z.ZodString>;
69
70
  realProofs: z.ZodBoolean;
70
71
  proverId: z.ZodOptional<import("../schemas/schemas.js").ZodFor<import("@aztec/foundation/schemas").EthAddress>>;
@@ -138,6 +139,7 @@ export declare const AztecNodeAdminConfigSchema: z.ZodObject<{
138
139
  maxLogs: z.ZodOptional<z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>>;
139
140
  archiverStoreMapSizeKb: z.ZodOptional<z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>>;
140
141
  skipValidateBlockAttestations: z.ZodOptional<z.ZodBoolean>;
142
+ maxAllowedEthClientDriftSeconds: z.ZodOptional<z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>>;
141
143
  }, "archiverPollingIntervalMS" | "archiverBatchSize" | "skipValidateBlockAttestations"> & {
142
144
  maxTxPoolSize: z.ZodNumber;
143
145
  }, "strip", z.ZodTypeAny, {
@@ -200,6 +202,7 @@ export declare const AztecNodeAdminConfigSchema: z.ZodObject<{
200
202
  attestationPropagationTime?: number | undefined;
201
203
  skipCollectingAttestations?: boolean | undefined;
202
204
  injectFakeAttestation?: boolean | undefined;
205
+ shuffleAttestationOrdering?: boolean | undefined;
203
206
  proverId?: import("@aztec/foundation/schemas").EthAddress | undefined;
204
207
  archiverPollingIntervalMS?: number | undefined;
205
208
  archiverBatchSize?: number | undefined;
@@ -270,6 +273,7 @@ export declare const AztecNodeAdminConfigSchema: z.ZodObject<{
270
273
  attestationPropagationTime?: number | undefined;
271
274
  skipCollectingAttestations?: boolean | undefined;
272
275
  injectFakeAttestation?: boolean | undefined;
276
+ shuffleAttestationOrdering?: boolean | undefined;
273
277
  proverId?: any;
274
278
  archiverPollingIntervalMS?: string | number | bigint | undefined;
275
279
  archiverBatchSize?: string | number | bigint | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"aztec-node-admin.d.ts","sourceRoot":"","sources":["../../src/interfaces/aztec-node-admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAE1F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,KAAK,OAAO,EAAiB,KAAK,iBAAiB,EAA2B,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAE,KAAK,kBAAkB,EAAgC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,KAAK,sBAAsB,EAAgC,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,KAAK,eAAe,EAAyB,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,KAAK,aAAa,EAAuB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,KAAK,yBAAyB,EAAmC,MAAM,gBAAgB,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE3C;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;;;OAIG;IACH,UAAU,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE,+CAA+C;IAC/C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,gDAAgD;IAChD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,2EAA2E;IAC3E,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEjD,2DAA2D;IAC3D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CACzE;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAC1D,eAAe,GACf,YAAY,GACZ,aAAa,GACb,IAAI,CAAC,sBAAsB,EAAE,2BAA2B,GAAG,+BAA+B,GAAG,mBAAmB,CAAC,GAAG;IAClH,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEJ,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUU,CAAC;AAElD,eAAO,MAAM,uBAAuB,EAAE,YAAY,CAAC,cAAc,CAYhE,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,OAAO,CAAC,kBAAkB,CAAM,EAC1C,KAAK,sBAAe,GACnB,cAAc,CAMhB"}
1
+ {"version":3,"file":"aztec-node-admin.d.ts","sourceRoot":"","sources":["../../src/interfaces/aztec-node-admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAE1F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,KAAK,OAAO,EAAiB,KAAK,iBAAiB,EAA2B,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAE,KAAK,kBAAkB,EAAgC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,KAAK,sBAAsB,EAAgC,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,KAAK,eAAe,EAAyB,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,KAAK,aAAa,EAAuB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,KAAK,yBAAyB,EAAmC,MAAM,gBAAgB,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE3C;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;;;OAIG;IACH,UAAU,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE,+CAA+C;IAC/C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,gDAAgD;IAChD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,2EAA2E;IAC3E,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEjD,2DAA2D;IAC3D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CACzE;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAC1D,eAAe,GACf,YAAY,GACZ,aAAa,GACb,IAAI,CAAC,sBAAsB,EAAE,2BAA2B,GAAG,+BAA+B,GAAG,mBAAmB,CAAC,GAAG;IAClH,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEJ,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUU,CAAC;AAElD,eAAO,MAAM,uBAAuB,EAAE,YAAY,CAAC,cAAc,CAYhE,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,OAAO,CAAC,kBAAkB,CAAM,EAC1C,KAAK,sBAAe,GACnB,cAAc,CAMhB"}
@@ -51,6 +51,8 @@ export interface SequencerConfig {
51
51
  skipInvalidateBlockAsProposer?: boolean;
52
52
  /** Inject a fake attestation (for testing only) */
53
53
  injectFakeAttestation?: boolean;
54
+ /** Shuffle attestation ordering to create invalid ordering (for testing only) */
55
+ shuffleAttestationOrdering?: boolean;
54
56
  }
55
57
  export declare const SequencerConfigSchema: z.ZodObject<{
56
58
  transactionPollingIntervalMS: z.ZodOptional<z.ZodNumber>;
@@ -104,6 +106,7 @@ export declare const SequencerConfigSchema: z.ZodObject<{
104
106
  secondsBeforeInvalidatingBlockAsCommitteeMember: z.ZodNumber;
105
107
  secondsBeforeInvalidatingBlockAsNonCommitteeMember: z.ZodNumber;
106
108
  injectFakeAttestation: z.ZodOptional<z.ZodBoolean>;
109
+ shuffleAttestationOrdering: z.ZodOptional<z.ZodBoolean>;
107
110
  }, "strip", z.ZodTypeAny, {
108
111
  secondsBeforeInvalidatingBlockAsCommitteeMember: number;
109
112
  secondsBeforeInvalidatingBlockAsNonCommitteeMember: number;
@@ -136,6 +139,7 @@ export declare const SequencerConfigSchema: z.ZodObject<{
136
139
  attestationPropagationTime?: number | undefined;
137
140
  skipCollectingAttestations?: boolean | undefined;
138
141
  injectFakeAttestation?: boolean | undefined;
142
+ shuffleAttestationOrdering?: boolean | undefined;
139
143
  }, {
140
144
  secondsBeforeInvalidatingBlockAsCommitteeMember: number;
141
145
  secondsBeforeInvalidatingBlockAsNonCommitteeMember: number;
@@ -168,5 +172,6 @@ export declare const SequencerConfigSchema: z.ZodObject<{
168
172
  attestationPropagationTime?: number | undefined;
169
173
  skipCollectingAttestations?: boolean | undefined;
170
174
  injectFakeAttestation?: boolean | undefined;
175
+ shuffleAttestationOrdering?: boolean | undefined;
171
176
  }>;
172
177
  //# sourceMappingURL=configs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../../src/interfaces/configs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,sBAAsB,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1C,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,yBAAyB,CAAC,EAAE,UAAU,CAAC;IACvC,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,0EAA0E;IAC1E,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,wGAAwG;IACxG,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oGAAoG;IACpG,+CAA+C,CAAC,EAAE,MAAM,CAAC;IACzD,wGAAwG;IACxG,kDAAkD,CAAC,EAAE,MAAM,CAAC;IAC5D,sDAAsD;IACtD,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,kGAAkG;IAClG,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,mDAAmD;IACnD,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBE,CAAC"}
1
+ {"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../../src/interfaces/configs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,cAAc,EAAwB,MAAM,sBAAsB,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1C,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,yBAAyB,CAAC,EAAE,UAAU,CAAC;IACvC,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,0EAA0E;IAC1E,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,wGAAwG;IACxG,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oGAAoG;IACpG,+CAA+C,CAAC,EAAE,MAAM,CAAC;IACzD,wGAAwG;IACxG,kDAAkD,CAAC,EAAE,MAAM,CAAC;IAC5D,sDAAsD;IACtD,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,kGAAkG;IAClG,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,mDAAmD;IACnD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iFAAiF;IACjF,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBE,CAAC"}
@@ -22,5 +22,6 @@ export const SequencerConfigSchema = z.object({
22
22
  skipCollectingAttestations: z.boolean().optional(),
23
23
  secondsBeforeInvalidatingBlockAsCommitteeMember: z.number(),
24
24
  secondsBeforeInvalidatingBlockAsNonCommitteeMember: z.number(),
25
- injectFakeAttestation: z.boolean().optional()
25
+ injectFakeAttestation: z.boolean().optional(),
26
+ shuffleAttestationOrdering: z.boolean().optional()
26
27
  });
@@ -20,7 +20,7 @@ export declare abstract class Gossipable {
20
20
  * A digest of the message information **used for logging only**.
21
21
  * The identifier used for deduplication is `getMsgIdFn` as defined in `encoding.ts` which is a hash over topic and data.
22
22
  */
23
- p2pMessageIdentifier(): Promise<Buffer32>;
23
+ p2pMessageLoggingIdentifier(): Promise<Buffer32>;
24
24
  abstract generateP2PMessageIdentifier(): Promise<Buffer32>;
25
25
  abstract toBuffer(): Buffer;
26
26
  toMessage(): Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"gossipable.d.ts","sourceRoot":"","sources":["../../src/p2p/gossipable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,UAAU;aACO,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;IAE3C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAItD,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU;IAMvD,aAAa,IAAI,MAAM;CAGxB;AAED;;;;GAIG;AACH,8BAAsB,UAAU;IAC9B,OAAO,CAAC,QAAQ,CAAuB;IACvC,2EAA2E;IAC3E,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;IAE3B;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAQ/C,QAAQ,CAAC,4BAA4B,IAAI,OAAO,CAAC,QAAQ,CAAC;IAE1D,QAAQ,CAAC,QAAQ,IAAI,MAAM;IAE3B,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;CAC3B"}
1
+ {"version":3,"file":"gossipable.d.ts","sourceRoot":"","sources":["../../src/p2p/gossipable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,UAAU;aACO,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;IAE3C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAItD,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU;IAMvD,aAAa,IAAI,MAAM;CAGxB;AAED;;;;GAIG;AACH,8BAAsB,UAAU;IAC9B,OAAO,CAAC,QAAQ,CAAuB;IACvC,2EAA2E;IAC3E,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;IAE3B;;;OAGG;IACG,2BAA2B,IAAI,OAAO,CAAC,QAAQ,CAAC;IAQtD,QAAQ,CAAC,4BAA4B,IAAI,OAAO,CAAC,QAAQ,CAAC;IAE1D,QAAQ,CAAC,QAAQ,IAAI,MAAM;IAE3B,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;CAC3B"}
@@ -28,7 +28,7 @@ export class P2PMessage {
28
28
  /**
29
29
  * A digest of the message information **used for logging only**.
30
30
  * The identifier used for deduplication is `getMsgIdFn` as defined in `encoding.ts` which is a hash over topic and data.
31
- */ async p2pMessageIdentifier() {
31
+ */ async p2pMessageLoggingIdentifier() {
32
32
  if (this.cachedId) {
33
33
  return this.cachedId;
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/tx/tx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/tx/tx.ts"],"names":[],"mappings":"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"}
package/dest/tx/tx.js CHANGED
@@ -224,12 +224,12 @@ import { TxHash } from './tx_hash.js';
224
224
  * Helper class to handle Serialization and Deserialization of Txs array.
225
225
  */ export class TxArray extends Array {
226
226
  static fromBuffer(buffer) {
227
+ const reader = BufferReader.asReader(buffer);
227
228
  try {
228
- const reader = BufferReader.asReader(buffer);
229
229
  const txs = reader.readVector(Tx);
230
230
  return new TxArray(...txs);
231
231
  } catch {
232
- return new TxArray();
232
+ throw new Error('Failed to deserialize TxArray from buffer');
233
233
  }
234
234
  }
235
235
  toBuffer() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/stdlib",
3
- "version": "2.1.2",
3
+ "version": "2.1.3-rc.1",
4
4
  "type": "module",
5
5
  "inherits": [
6
6
  "../package.common.json",
@@ -70,13 +70,13 @@
70
70
  },
71
71
  "dependencies": {
72
72
  "@aws-sdk/client-s3": "^3.892.0",
73
- "@aztec/bb.js": "2.1.2",
74
- "@aztec/blob-lib": "2.1.2",
75
- "@aztec/constants": "2.1.2",
76
- "@aztec/ethereum": "2.1.2",
77
- "@aztec/foundation": "2.1.2",
78
- "@aztec/l1-artifacts": "2.1.2",
79
- "@aztec/noir-noirc_abi": "2.1.2",
73
+ "@aztec/bb.js": "2.1.3-rc.1",
74
+ "@aztec/blob-lib": "2.1.3-rc.1",
75
+ "@aztec/constants": "2.1.3-rc.1",
76
+ "@aztec/ethereum": "2.1.3-rc.1",
77
+ "@aztec/foundation": "2.1.3-rc.1",
78
+ "@aztec/l1-artifacts": "2.1.3-rc.1",
79
+ "@aztec/noir-noirc_abi": "2.1.3-rc.1",
80
80
  "@google-cloud/storage": "^7.15.0",
81
81
  "axios": "^1.12.0",
82
82
  "json-stringify-deterministic": "1.0.12",
@@ -5,7 +5,7 @@ import { encodeAbiParameters, parseAbiParameters } from 'viem';
5
5
  import { z } from 'zod';
6
6
 
7
7
  import type { Signable, SignatureDomainSeparator } from '../../p2p/signature_utils.js';
8
- import { CommitteeAttestation } from './committee_attestation.js';
8
+ import { CommitteeAttestation, EthAddress } from './committee_attestation.js';
9
9
 
10
10
  export class CommitteeAttestationsAndSigners implements Signable {
11
11
  constructor(public attestations: CommitteeAttestation[]) {}
@@ -119,3 +119,22 @@ export class CommitteeAttestationsAndSigners implements Signable {
119
119
  };
120
120
  }
121
121
  }
122
+
123
+ /**
124
+ * Malicious extension of CommitteeAttestationsAndSigners that keeps separate attestations and
125
+ * signers. Used for tricking the L1 contract into accepting attestations by reconstructing
126
+ * the correct committee commitment (which relies on the signers, ignoring the signatures)
127
+ * with an invalid set of attestation signatures.
128
+ */
129
+ export class MaliciousCommitteeAttestationsAndSigners extends CommitteeAttestationsAndSigners {
130
+ constructor(
131
+ attestations: CommitteeAttestation[],
132
+ private signers: EthAddress[],
133
+ ) {
134
+ super(attestations);
135
+ }
136
+
137
+ override getSigners(): EthAddress[] {
138
+ return this.signers;
139
+ }
140
+ }
@@ -6,7 +6,7 @@ import { createWriteStream } from 'fs';
6
6
  import { mkdir } from 'fs/promises';
7
7
  import { dirname } from 'path';
8
8
  import { Readable } from 'stream';
9
- import { finished } from 'stream/promises';
9
+ import { pipeline } from 'stream/promises';
10
10
 
11
11
  import type { ReadOnlyFileStore } from './interface.js';
12
12
 
@@ -43,11 +43,14 @@ export class HttpFileStore implements ReadOnlyFileStore {
43
43
  public async download(pathOrUrl: string, destPath: string): Promise<void> {
44
44
  const url = this.getUrl(pathOrUrl);
45
45
  try {
46
+ this.log.debug(`Downloading file from ${url} to ${destPath}`);
46
47
  const response = await this.fetch<Readable>({ url, method: 'GET', responseType: 'stream' });
48
+ this.log.debug(`Response ${response.status} (${response.statusText}) from ${url}, writing to ${destPath}`);
47
49
  await mkdir(dirname(destPath), { recursive: true });
48
- await finished(response.data.pipe(createWriteStream(destPath)));
50
+ await pipeline(response.data, createWriteStream(destPath));
51
+ this.log.debug(`Download of ${url} to ${destPath} complete`);
49
52
  } catch (error) {
50
- throw new Error(`Error fetching file from ${url}: ${error instanceof Error ? error.message : String(error)}`);
53
+ throw new Error(`Error fetching file from ${url}`, { cause: error });
51
54
  }
52
55
  }
53
56
 
@@ -12,7 +12,7 @@ import { mkdir, mkdtemp, stat, unlink } from 'fs/promises';
12
12
  import { tmpdir } from 'os';
13
13
  import { basename, dirname, join } from 'path';
14
14
  import { Readable } from 'stream';
15
- import { finished } from 'stream/promises';
15
+ import { pipeline } from 'stream/promises';
16
16
  import { createGzip } from 'zlib';
17
17
 
18
18
  import type { FileStore, FileStoreSaveOptions } from './interface.js';
@@ -88,11 +88,8 @@ export class S3FileStore implements FileStore {
88
88
  // Pre-gzip to a temp file so we know the exact length for R2/S3 headers
89
89
  const tmpDir = await mkdtemp(join(tmpdir(), 's3-upload-'));
90
90
  const gzPath = join(tmpDir, `${basename(srcPath)}.gz`);
91
- const source = createReadStream(srcPath);
92
- const gz = createGzip();
93
- const out = createWriteStream(gzPath);
94
91
  try {
95
- await finished(source.pipe(gz).pipe(out));
92
+ await pipeline(createReadStream(srcPath), createGzip(), createWriteStream(gzPath));
96
93
  const st = await stat(gzPath);
97
94
  contentLength = st.size;
98
95
  bodyPath = gzPath;
@@ -144,8 +141,7 @@ export class S3FileStore implements FileStore {
144
141
  const { bucket, key } = this.getBucketAndKey(pathOrUrlStr);
145
142
  const out: GetObjectCommandOutput = await this.s3.send(new GetObjectCommand({ Bucket: bucket, Key: key }));
146
143
  await mkdir(dirname(destPath), { recursive: true });
147
- const write = createWriteStream(destPath);
148
- await finished((out.Body as Readable).pipe(write));
144
+ await pipeline(out.Body as Readable, createWriteStream(destPath));
149
145
  }
150
146
 
151
147
  public async exists(pathOrUrlStr: string): Promise<boolean> {
@@ -49,6 +49,9 @@ export type ArchiverSpecificConfig = {
49
49
 
50
50
  /** Whether to skip validating block attestations (use only for testing). */
51
51
  skipValidateBlockAttestations?: boolean;
52
+
53
+ /** Maximum allowed drift in seconds between the Ethereum client and current time. */
54
+ maxAllowedEthClientDriftSeconds?: number;
52
55
  };
53
56
 
54
57
  export const ArchiverSpecificConfigSchema = z.object({
@@ -58,6 +61,7 @@ export const ArchiverSpecificConfigSchema = z.object({
58
61
  maxLogs: schemas.Integer.optional(),
59
62
  archiverStoreMapSizeKb: schemas.Integer.optional(),
60
63
  skipValidateBlockAttestations: z.boolean().optional(),
64
+ maxAllowedEthClientDriftSeconds: schemas.Integer.optional(),
61
65
  });
62
66
 
63
67
  export type ArchiverApi = Omit<
@@ -54,6 +54,8 @@ export interface SequencerConfig {
54
54
  skipInvalidateBlockAsProposer?: boolean;
55
55
  /** Inject a fake attestation (for testing only) */
56
56
  injectFakeAttestation?: boolean;
57
+ /** Shuffle attestation ordering to create invalid ordering (for testing only) */
58
+ shuffleAttestationOrdering?: boolean;
57
59
  }
58
60
 
59
61
  export const SequencerConfigSchema = z.object({
@@ -78,4 +80,5 @@ export const SequencerConfigSchema = z.object({
78
80
  secondsBeforeInvalidatingBlockAsCommitteeMember: z.number(),
79
81
  secondsBeforeInvalidatingBlockAsNonCommitteeMember: z.number(),
80
82
  injectFakeAttestation: z.boolean().optional(),
83
+ shuffleAttestationOrdering: z.boolean().optional(),
81
84
  }) satisfies ZodFor<SequencerConfig>;
@@ -35,7 +35,7 @@ export abstract class Gossipable {
35
35
  * A digest of the message information **used for logging only**.
36
36
  * The identifier used for deduplication is `getMsgIdFn` as defined in `encoding.ts` which is a hash over topic and data.
37
37
  */
38
- async p2pMessageIdentifier(): Promise<Buffer32> {
38
+ async p2pMessageLoggingIdentifier(): Promise<Buffer32> {
39
39
  if (this.cachedId) {
40
40
  return this.cachedId;
41
41
  }
package/src/tx/tx.ts CHANGED
@@ -308,13 +308,12 @@ export class Tx extends Gossipable {
308
308
  */
309
309
  export class TxArray extends Array<Tx> {
310
310
  static fromBuffer(buffer: Buffer | BufferReader): TxArray {
311
+ const reader = BufferReader.asReader(buffer);
311
312
  try {
312
- const reader = BufferReader.asReader(buffer);
313
313
  const txs = reader.readVector(Tx);
314
-
315
314
  return new TxArray(...txs);
316
315
  } catch {
317
- return new TxArray();
316
+ throw new Error('Failed to deserialize TxArray from buffer');
318
317
  }
319
318
  }
320
319