@aztec/end-to-end 3.0.0-nightly.20251119 → 3.0.0-nightly.20251121

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.
@@ -10,14 +10,14 @@ export declare const ATTESTER_PRIVATE_KEYS_START_INDEX = 3;
10
10
  export declare function generatePrivateKeys(startIndex: number, numberOfKeys: number): `0x${string}`[];
11
11
  export declare function createNodes(config: AztecNodeConfig & {
12
12
  dontStartSequencer?: boolean;
13
- }, dateProvider: DateProvider, bootstrapNodeEnr: string, numNodes: number, bootNodePort: number, prefilledPublicData?: PublicDataTreeLeaf[], dataDirectory?: string, metricsPort?: number, indexOffset?: number): Promise<AztecNodeService[]>;
13
+ }, dateProvider: DateProvider, bootstrapNodeEnr: string, numNodes: number, bootNodePort: number, prefilledPublicData?: PublicDataTreeLeaf[], dataDirectory?: string, metricsPort?: number, indexOffset?: number, validatorsPerNode?: number): Promise<AztecNodeService[]>;
14
14
  /** Creates a P2P enabled instance of Aztec Node Service with a validator */
15
15
  export declare function createNode(config: AztecNodeConfig & {
16
16
  dontStartSequencer?: boolean;
17
- }, dateProvider: DateProvider, tcpPort: number, bootstrapNode: string | undefined, addressIndex: number, prefilledPublicData?: PublicDataTreeLeaf[], dataDirectory?: string, metricsPort?: number, loggerIdStorage?: AsyncLocalStorage<string>): Promise<AztecNodeService>;
17
+ }, dateProvider: DateProvider, tcpPort: number, bootstrapNode: string | undefined, addressIndex: number | number[], prefilledPublicData?: PublicDataTreeLeaf[], dataDirectory?: string, metricsPort?: number, loggerIdStorage?: AsyncLocalStorage<string>): Promise<AztecNodeService>;
18
18
  /** Creates a P2P enabled instance of Aztec Node Service without a validator */
19
19
  export declare function createNonValidatorNode(baseConfig: AztecNodeConfig, dateProvider: DateProvider, tcpPort: number, bootstrapNode: string | undefined, prefilledPublicData?: PublicDataTreeLeaf[], dataDirectory?: string, metricsPort?: number, loggerIdStorage?: AsyncLocalStorage<string>): Promise<AztecNodeService>;
20
20
  export declare function createProverNode(config: AztecNodeConfig, tcpPort: number, bootstrapNode: string | undefined, addressIndex: number, proverNodeDeps: ProverNodeDeps & Required<Pick<ProverNodeDeps, 'dateProvider'>>, prefilledPublicData?: PublicDataTreeLeaf[], dataDirectory?: string, metricsPort?: number, loggerIdStorage?: AsyncLocalStorage<string>): Promise<import("@aztec/prover-node").ProverNode>;
21
21
  export declare function createP2PConfig(config: AztecNodeConfig, bootstrapNodeEnr?: string, port?: number, dataDirectory?: string): Promise<AztecNodeConfig>;
22
- export declare function createValidatorConfig(config: AztecNodeConfig, bootstrapNodeEnr?: string, port?: number, addressIndex?: number, dataDirectory?: string): Promise<AztecNodeConfig>;
22
+ export declare function createValidatorConfig(config: AztecNodeConfig, bootstrapNodeEnr?: string, port?: number, addressIndex?: number | number[], dataDirectory?: string): Promise<AztecNodeConfig>;
23
23
  //# sourceMappingURL=setup_p2p_test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup_p2p_test.d.ts","sourceRoot":"","sources":["../../src/fixtures/setup_p2p_test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,EAAE,CAO7F;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,eAAe,GAAG;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1D,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAC1C,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,SAAI,GACd,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoC7B;AAED,4EAA4E;AAC5E,wBAAsB,UAAU,CAC9B,MAAM,EAAE,eAAe,GAAG;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1D,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,EACpB,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAC1C,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,6BAY5C;AAED,+EAA+E;AAC/E,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAC1C,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,6BAc5C;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,EAC/E,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAC1C,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,oDAwB5C;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,gBAAgB,CAAC,EAAE,MAAM,EACzB,IAAI,CAAC,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,4BAgBvB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,gBAAgB,CAAC,EAAE,MAAM,EACzB,IAAI,CAAC,EAAE,MAAM,EACb,YAAY,GAAE,MAAU,EACxB,aAAa,CAAC,EAAE,MAAM,4BAYvB"}
1
+ {"version":3,"file":"setup_p2p_test.d.ts","sourceRoot":"","sources":["../../src/fixtures/setup_p2p_test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,EAAE,CAO7F;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,eAAe,GAAG;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1D,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAC1C,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,SAAI,EACf,iBAAiB,SAAI,GACpB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyC7B;AAED,4EAA4E;AAC5E,wBAAsB,UAAU,CAC9B,MAAM,EAAE,eAAe,GAAG;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1D,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,EAC/B,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAC1C,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,6BAY5C;AAED,+EAA+E;AAC/E,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAC1C,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,6BAc5C;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,EAC/E,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAC1C,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,oDAwB5C;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,gBAAgB,CAAC,EAAE,MAAM,EACzB,IAAI,CAAC,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,4BAgBvB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,gBAAgB,CAAC,EAAE,MAAM,EACzB,IAAI,CAAC,EAAE,MAAM,EACb,YAAY,GAAE,MAAM,GAAG,MAAM,EAAM,EACnC,aAAa,CAAC,EAAE,MAAM,4BAmBvB"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Test fixtures and utilities to set up and run a test using multiple validators
3
3
  */ import { AztecNodeService } from '@aztec/aztec-node';
4
+ import { range } from '@aztec/foundation/array';
4
5
  import { SecretValue } from '@aztec/foundation/config';
5
6
  import { addLogNameHandler, removeLogNameHandler } from '@aztec/foundation/log';
6
7
  import { bufferToHex } from '@aztec/foundation/string';
@@ -21,7 +22,7 @@ export function generatePrivateKeys(startIndex, numberOfKeys) {
21
22
  }
22
23
  return privateKeys;
23
24
  }
24
- export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNodes, bootNodePort, prefilledPublicData, dataDirectory, metricsPort, indexOffset = 0) {
25
+ export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNodes, bootNodePort, prefilledPublicData, dataDirectory, metricsPort, indexOffset = 0, validatorsPerNode = 1) {
25
26
  const nodePromises = [];
26
27
  const loggerIdStorage = new AsyncLocalStorage();
27
28
  const logNameHandler = (module)=>loggerIdStorage.getStore() ? `${module}:${loggerIdStorage.getStore()}` : module;
@@ -30,8 +31,11 @@ export async function createNodes(config, dateProvider, bootstrapNodeEnr, numNod
30
31
  const index = indexOffset + i;
31
32
  // We run on ports from the bootnode upwards
32
33
  const port = bootNodePort + 1 + index;
34
+ // Determine validator indices for this node
35
+ const validatorIndices = validatorsPerNode === 1 ? index : range(validatorsPerNode, validatorsPerNode * index);
36
+ // Assign data directory
33
37
  const dataDir = dataDirectory ? `${dataDirectory}-${index}` : undefined;
34
- const nodePromise = createNode(config, dateProvider, port, bootstrapNodeEnr, index, prefilledPublicData, dataDir, metricsPort, loggerIdStorage);
38
+ const nodePromise = createNode(config, dateProvider, port, bootstrapNodeEnr, validatorIndices, prefilledPublicData, dataDir, metricsPort, loggerIdStorage);
35
39
  nodePromises.push(nodePromise);
36
40
  }
37
41
  const nodes = await Promise.all(nodePromises);
@@ -109,16 +113,20 @@ export async function createP2PConfig(config, bootstrapNodeEnr, port, dataDirect
109
113
  return nodeConfig;
110
114
  }
111
115
  export async function createValidatorConfig(config, bootstrapNodeEnr, port, addressIndex = 1, dataDirectory) {
112
- const attesterPrivateKey = bufferToHex(getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + addressIndex));
116
+ const addressIndices = Array.isArray(addressIndex) ? addressIndex : [
117
+ addressIndex
118
+ ];
119
+ if (addressIndices.length === 0) {
120
+ throw new Error('At least one address index must be provided to create a validator config');
121
+ }
122
+ const attesterPrivateKeys = addressIndices.map((index)=>bufferToHex(getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + index)));
113
123
  const p2pConfig = await createP2PConfig(config, bootstrapNodeEnr, port, dataDirectory);
114
124
  const nodeConfig = {
115
125
  ...config,
116
126
  ...p2pConfig,
117
- validatorPrivateKeys: new SecretValue([
118
- attesterPrivateKey
119
- ]),
127
+ validatorPrivateKeys: new SecretValue(attesterPrivateKeys),
120
128
  publisherPrivateKeys: [
121
- new SecretValue(attesterPrivateKey)
129
+ new SecretValue(attesterPrivateKeys[0])
122
130
  ]
123
131
  };
124
132
  return nodeConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/end-to-end",
3
- "version": "3.0.0-nightly.20251119",
3
+ "version": "3.0.0-nightly.20251121",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "inherits": [
@@ -25,43 +25,43 @@
25
25
  "formatting": "run -T prettier --check ./src && run -T eslint ./src"
26
26
  },
27
27
  "dependencies": {
28
- "@aztec/accounts": "3.0.0-nightly.20251119",
29
- "@aztec/archiver": "3.0.0-nightly.20251119",
30
- "@aztec/aztec": "3.0.0-nightly.20251119",
31
- "@aztec/aztec-node": "3.0.0-nightly.20251119",
32
- "@aztec/aztec.js": "3.0.0-nightly.20251119",
33
- "@aztec/bb-prover": "3.0.0-nightly.20251119",
34
- "@aztec/bb.js": "3.0.0-nightly.20251119",
35
- "@aztec/blob-lib": "3.0.0-nightly.20251119",
36
- "@aztec/blob-sink": "3.0.0-nightly.20251119",
37
- "@aztec/bot": "3.0.0-nightly.20251119",
38
- "@aztec/cli": "3.0.0-nightly.20251119",
39
- "@aztec/constants": "3.0.0-nightly.20251119",
40
- "@aztec/entrypoints": "3.0.0-nightly.20251119",
41
- "@aztec/epoch-cache": "3.0.0-nightly.20251119",
42
- "@aztec/ethereum": "3.0.0-nightly.20251119",
43
- "@aztec/foundation": "3.0.0-nightly.20251119",
44
- "@aztec/kv-store": "3.0.0-nightly.20251119",
45
- "@aztec/l1-artifacts": "3.0.0-nightly.20251119",
46
- "@aztec/merkle-tree": "3.0.0-nightly.20251119",
47
- "@aztec/node-keystore": "3.0.0-nightly.20251119",
48
- "@aztec/noir-contracts.js": "3.0.0-nightly.20251119",
49
- "@aztec/noir-noirc_abi": "3.0.0-nightly.20251119",
50
- "@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251119",
51
- "@aztec/noir-test-contracts.js": "3.0.0-nightly.20251119",
52
- "@aztec/p2p": "3.0.0-nightly.20251119",
53
- "@aztec/protocol-contracts": "3.0.0-nightly.20251119",
54
- "@aztec/prover-client": "3.0.0-nightly.20251119",
55
- "@aztec/prover-node": "3.0.0-nightly.20251119",
56
- "@aztec/pxe": "3.0.0-nightly.20251119",
57
- "@aztec/sequencer-client": "3.0.0-nightly.20251119",
58
- "@aztec/simulator": "3.0.0-nightly.20251119",
59
- "@aztec/slasher": "3.0.0-nightly.20251119",
60
- "@aztec/stdlib": "3.0.0-nightly.20251119",
61
- "@aztec/telemetry-client": "3.0.0-nightly.20251119",
62
- "@aztec/test-wallet": "3.0.0-nightly.20251119",
63
- "@aztec/validator-client": "3.0.0-nightly.20251119",
64
- "@aztec/world-state": "3.0.0-nightly.20251119",
28
+ "@aztec/accounts": "3.0.0-nightly.20251121",
29
+ "@aztec/archiver": "3.0.0-nightly.20251121",
30
+ "@aztec/aztec": "3.0.0-nightly.20251121",
31
+ "@aztec/aztec-node": "3.0.0-nightly.20251121",
32
+ "@aztec/aztec.js": "3.0.0-nightly.20251121",
33
+ "@aztec/bb-prover": "3.0.0-nightly.20251121",
34
+ "@aztec/bb.js": "3.0.0-nightly.20251121",
35
+ "@aztec/blob-lib": "3.0.0-nightly.20251121",
36
+ "@aztec/blob-sink": "3.0.0-nightly.20251121",
37
+ "@aztec/bot": "3.0.0-nightly.20251121",
38
+ "@aztec/cli": "3.0.0-nightly.20251121",
39
+ "@aztec/constants": "3.0.0-nightly.20251121",
40
+ "@aztec/entrypoints": "3.0.0-nightly.20251121",
41
+ "@aztec/epoch-cache": "3.0.0-nightly.20251121",
42
+ "@aztec/ethereum": "3.0.0-nightly.20251121",
43
+ "@aztec/foundation": "3.0.0-nightly.20251121",
44
+ "@aztec/kv-store": "3.0.0-nightly.20251121",
45
+ "@aztec/l1-artifacts": "3.0.0-nightly.20251121",
46
+ "@aztec/merkle-tree": "3.0.0-nightly.20251121",
47
+ "@aztec/node-keystore": "3.0.0-nightly.20251121",
48
+ "@aztec/noir-contracts.js": "3.0.0-nightly.20251121",
49
+ "@aztec/noir-noirc_abi": "3.0.0-nightly.20251121",
50
+ "@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251121",
51
+ "@aztec/noir-test-contracts.js": "3.0.0-nightly.20251121",
52
+ "@aztec/p2p": "3.0.0-nightly.20251121",
53
+ "@aztec/protocol-contracts": "3.0.0-nightly.20251121",
54
+ "@aztec/prover-client": "3.0.0-nightly.20251121",
55
+ "@aztec/prover-node": "3.0.0-nightly.20251121",
56
+ "@aztec/pxe": "3.0.0-nightly.20251121",
57
+ "@aztec/sequencer-client": "3.0.0-nightly.20251121",
58
+ "@aztec/simulator": "3.0.0-nightly.20251121",
59
+ "@aztec/slasher": "3.0.0-nightly.20251121",
60
+ "@aztec/stdlib": "3.0.0-nightly.20251121",
61
+ "@aztec/telemetry-client": "3.0.0-nightly.20251121",
62
+ "@aztec/test-wallet": "3.0.0-nightly.20251121",
63
+ "@aztec/validator-client": "3.0.0-nightly.20251121",
64
+ "@aztec/world-state": "3.0.0-nightly.20251121",
65
65
  "@iarna/toml": "^2.2.5",
66
66
  "@jest/globals": "^30.0.0",
67
67
  "@noble/curves": "=1.0.0",
@@ -2,6 +2,7 @@
2
2
  * Test fixtures and utilities to set up and run a test using multiple validators
3
3
  */
4
4
  import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
5
+ import { range } from '@aztec/foundation/array';
5
6
  import { SecretValue } from '@aztec/foundation/config';
6
7
  import { addLogNameHandler, removeLogNameHandler } from '@aztec/foundation/log';
7
8
  import { bufferToHex } from '@aztec/foundation/string';
@@ -40,6 +41,7 @@ export async function createNodes(
40
41
  dataDirectory?: string,
41
42
  metricsPort?: number,
42
43
  indexOffset = 0,
44
+ validatorsPerNode = 1,
43
45
  ): Promise<AztecNodeService[]> {
44
46
  const nodePromises: Promise<AztecNodeService>[] = [];
45
47
  const loggerIdStorage = new AsyncLocalStorage<string>();
@@ -52,13 +54,18 @@ export async function createNodes(
52
54
  // We run on ports from the bootnode upwards
53
55
  const port = bootNodePort + 1 + index;
54
56
 
57
+ // Determine validator indices for this node
58
+ const validatorIndices = validatorsPerNode === 1 ? index : range(validatorsPerNode, validatorsPerNode * index);
59
+
60
+ // Assign data directory
55
61
  const dataDir = dataDirectory ? `${dataDirectory}-${index}` : undefined;
62
+
56
63
  const nodePromise = createNode(
57
64
  config,
58
65
  dateProvider,
59
66
  port,
60
67
  bootstrapNodeEnr,
61
- index,
68
+ validatorIndices,
62
69
  prefilledPublicData,
63
70
  dataDir,
64
71
  metricsPort,
@@ -84,7 +91,7 @@ export async function createNode(
84
91
  dateProvider: DateProvider,
85
92
  tcpPort: number,
86
93
  bootstrapNode: string | undefined,
87
- addressIndex: number,
94
+ addressIndex: number | number[],
88
95
  prefilledPublicData?: PublicDataTreeLeaf[],
89
96
  dataDirectory?: string,
90
97
  metricsPort?: number,
@@ -188,16 +195,23 @@ export async function createValidatorConfig(
188
195
  config: AztecNodeConfig,
189
196
  bootstrapNodeEnr?: string,
190
197
  port?: number,
191
- addressIndex: number = 1,
198
+ addressIndex: number | number[] = 1,
192
199
  dataDirectory?: string,
193
200
  ) {
194
- const attesterPrivateKey = bufferToHex(getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + addressIndex)!);
201
+ const addressIndices = Array.isArray(addressIndex) ? addressIndex : [addressIndex];
202
+ if (addressIndices.length === 0) {
203
+ throw new Error('At least one address index must be provided to create a validator config');
204
+ }
205
+
206
+ const attesterPrivateKeys = addressIndices.map(index =>
207
+ bufferToHex(getPrivateKeyFromIndex(ATTESTER_PRIVATE_KEYS_START_INDEX + index)!),
208
+ );
195
209
  const p2pConfig = await createP2PConfig(config, bootstrapNodeEnr, port, dataDirectory);
196
210
  const nodeConfig: AztecNodeConfig = {
197
211
  ...config,
198
212
  ...p2pConfig,
199
- validatorPrivateKeys: new SecretValue([attesterPrivateKey]),
200
- publisherPrivateKeys: [new SecretValue(attesterPrivateKey)],
213
+ validatorPrivateKeys: new SecretValue(attesterPrivateKeys),
214
+ publisherPrivateKeys: [new SecretValue(attesterPrivateKeys[0])],
201
215
  };
202
216
 
203
217
  return nodeConfig;