prool 0.2.6 → 0.2.8

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 +1 @@
1
- {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAI1C,wBAAgB,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,MAAM,EAAE,CA4D9D;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK;;;QAqEd;;WAEG;oBACS,MAAM,GAAG,SAAS;QAC9B;;WAEG;+BACoB,MAAM,GAAG,SAAS;QACzC;;WAEG;iBACM,MAAM,GAAG,SAAS;QAC3B;;;;;;;;WAQG;gBACK,MAAM,GAAG,SAAS;QAC1B;;WAEG;kBACO,MAAM,GAAG,SAAS;QAC5B;;WAEG;iBAEC;YACE;;eAEG;YACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC3B;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;YAC7B;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAChC,GACD,SAAS;QAcb;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;;WAGG;mBACQ,MAAM,GAAG,SAAS;QAC7B;;WAEG;eACI,MAAM,GAAG,SAAS;;;yCAxF3B,CAAA;AAEF,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG;QACvB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B;;WAEG;QACH,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzC;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;;;;;;;WAQG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B;;WAEG;QACH,MAAM,CAAC,EACH;YACE;;eAEG;YACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC3B;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;YAC7B;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAChC,GACD,SAAS,CAAA;QACb;;;WAGG;QACH,GAAG,CAAC,EACA,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,CAAC,MAAM,GAAG,EAAE,CAAC,GACb,OAAO,GACP,SAAS,CAAA;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;;WAGG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5B"}
1
+ {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAI1C,wBAAgB,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,MAAM,EAAE,CAuE9D;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK;;;QAqEd;;WAEG;oBACS,MAAM,GAAG,SAAS;QAC9B;;WAEG;+BACoB,MAAM,GAAG,SAAS;QACzC;;WAEG;iBACM,MAAM,GAAG,SAAS;QAC3B;;;;;;;;WAQG;gBACK,MAAM,GAAG,SAAS;QAC1B;;WAEG;kBACO,MAAM,GAAG,SAAS;QAC5B;;WAEG;iBAEC;YACE;;eAEG;YACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC3B;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;YAC7B;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAChC,GACD,SAAS;QAcb;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;;WAGG;mBACQ,MAAM,GAAG,SAAS;QAC7B;;WAEG;eACI,MAAM,GAAG,SAAS;;;yCAxF3B,CAAA;AAEF,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG;QACvB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B;;WAEG;QACH,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzC;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;;;;;;;WAQG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B;;WAEG;QACH,MAAM,CAAC,EACH;YACE;;eAEG;YACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC3B;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;YAC7B;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAChC,GACD,SAAS,CAAA;QACb;;;WAGG;QACH,GAAG,CAAC,EACA,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,CAAC,MAAM,GAAG,EAAE,CAAC,GACb,OAAO,GACP,SAAS,CAAA;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;;WAGG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5B"}
@@ -41,9 +41,13 @@ export function command(parameters) {
41
41
  port: port,
42
42
  },
43
43
  port: port + 10,
44
- ws: {
45
- port: port + 20,
46
- },
44
+ ws: [
45
+ true,
46
+ {
47
+ addr: '0.0.0.0',
48
+ api: 'all',
49
+ },
50
+ ],
47
51
  };
48
52
  const args = deepAssign(defaultParameters, rest);
49
53
  // Faucet submits funding transactions over RPC; point it at the resolved http port (node default: 8545).
@@ -51,6 +55,12 @@ export function command(parameters) {
51
55
  const http = args['http'];
52
56
  if (faucet?.enabled && !faucet.nodeAddress)
53
57
  faucet.nodeAddress = `http://localhost:${http.port}`;
58
+ // WS defaults to the http port: one endpoint (and one proxied server port) serves both protocols.
59
+ const ws = args['ws'];
60
+ if (Array.isArray(ws) && ws[0] === true) {
61
+ ws[1] ??= {};
62
+ ws[1].port ??= http.port;
63
+ }
54
64
  return [
55
65
  'node',
56
66
  ...toArgs(args, {
@@ -1 +1 @@
1
- {"version":3,"file":"tempo.js","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tempo.js","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@ export declare function command(parameters: tempoZone.Parameters): string[];
4
4
  * Defines a Tempo Zone instance.
5
5
  *
6
6
  * Provisions a fresh zone against a Tempo dev L1 (`tempo-zone dev`) and runs
7
- * the zone node. Requires a reachable Tempo dev L1 websocket RPC (`l1.rpcUrl`).
7
+ * the zone node. The L1 must mine canonical Tempo headers, and the dev key
8
+ * must hold pathUSD.
8
9
  *
9
10
  * @example
10
11
  * ```ts
@@ -54,6 +55,7 @@ export declare const tempoZone: Instance.define.ReturnType<{
54
55
  factoryAddress?: string | undefined;
55
56
  /**
56
57
  * Tempo L1 WebSocket RPC URL.
58
+ * Anvil requires Foundry 1.8 or newer.
57
59
  * @default "ws://localhost:8546"
58
60
  */
59
61
  rpcUrl?: string | undefined;
@@ -119,6 +121,7 @@ export declare namespace tempoZone {
119
121
  factoryAddress?: string | undefined;
120
122
  /**
121
123
  * Tempo L1 WebSocket RPC URL.
124
+ * Anvil requires Foundry 1.8 or newer.
122
125
  * @default "ws://localhost:8546"
123
126
  */
124
127
  rpcUrl?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"tempoZone.d.ts","sourceRoot":"","sources":["../../src/instances/tempoZone.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAM1C,wBAAgB,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,GAAG,MAAM,EAAE,CAgClE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS;;;QAuElB;;WAEG;kBACO,MAAM,GAAG,SAAS;QAC5B;;WAEG;cAEC;YACE;;;eAGG;YACH,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACxB;;;eAGG;YACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC3B,GACD,SAAS;QACb;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;WAEG;aAEC;YACE;;;eAGG;YACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACnC;;;eAGG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC5B,GACD,SAAS;QAcb;;WAEG;mBACQ,MAAM,EAAE,GAAG,SAAS;QAC/B;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;WAEG;qBAEC;YACE;;;eAGG;YACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC1B,GACD,SAAS;;;6CAlFhB,CAAA;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAY,UAAU,GAAG;QACvB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B;;WAEG;QACH,GAAG,CAAC,EACA;YACE;;;eAGG;YACH,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACxB;;;eAGG;YACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC3B,GACD,SAAS,CAAA;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,EAAE,CAAC,EACC;YACE;;;eAGG;YACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACnC;;;eAGG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC5B,GACD,SAAS,CAAA;QACb;;;WAGG;QACH,GAAG,CAAC,EACA,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,CAAC,MAAM,GAAG,EAAE,CAAC,GACb,OAAO,GACP,SAAS,CAAA;QACb;;WAEG;QACH,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QAC/B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,UAAU,CAAC,EACP;YACE;;;eAGG;YACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC1B,GACD,SAAS,CAAA;KACd,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5B"}
1
+ {"version":3,"file":"tempoZone.d.ts","sourceRoot":"","sources":["../../src/instances/tempoZone.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAM1C,wBAAgB,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,GAAG,MAAM,EAAE,CAmClE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS;;;QAwElB;;WAEG;kBACO,MAAM,GAAG,SAAS;QAC5B;;WAEG;cAEC;YACE;;;eAGG;YACH,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACxB;;;eAGG;YACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC3B,GACD,SAAS;QACb;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;WAEG;aAEC;YACE;;;eAGG;YACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACnC;;;;eAIG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC5B,GACD,SAAS;QAcb;;WAEG;mBACQ,MAAM,EAAE,GAAG,SAAS;QAC/B;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;WAEG;qBAEC;YACE;;;eAGG;YACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC1B,GACD,SAAS;;;6CAnFhB,CAAA;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAY,UAAU,GAAG;QACvB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B;;WAEG;QACH,GAAG,CAAC,EACA;YACE;;;eAGG;YACH,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACxB;;;eAGG;YACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC3B,GACD,SAAS,CAAA;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,EAAE,CAAC,EACC;YACE;;;eAGG;YACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YACnC;;;;eAIG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC5B,GACD,SAAS,CAAA;QACb;;;WAGG;QACH,GAAG,CAAC,EACA,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,CAAC,MAAM,GAAG,EAAE,CAAC,GACb,OAAO,GACP,SAAS,CAAA;QACb;;WAEG;QACH,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QAC/B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,UAAU,CAAC,EACP;YACE;;;eAGG;YACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC1B,GACD,SAAS,CAAA;KACd,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5B"}
@@ -4,9 +4,15 @@ import * as Instance from '../Instance.js';
4
4
  import { deepAssign, toArgs } from '../internal/utils.js';
5
5
  import { execa } from '../processes/execa.js';
6
6
  // `tempo-zone dev` derives the WS RPC (port + 1) and P2P (port + 2) ports from
7
- // `http.port`. Each instance occupies the compact block [port, port + 4].
7
+ // `http.port`. Each instance occupies the compact block [port, port + 3].
8
8
  export function command(parameters) {
9
- const { nodeArgs, port, ...rest } = parameters;
9
+ const { nodeArgs, port } = parameters;
10
+ const options = { ...parameters };
11
+ delete options.binary;
12
+ delete options.host;
13
+ delete options.log;
14
+ delete options.nodeArgs;
15
+ delete options.port;
10
16
  const datadir = path.join(os.tmpdir(), '.prool', `tempo-zone.${port}`);
11
17
  const defaultParameters = {
12
18
  datadir,
@@ -21,16 +27,13 @@ export function command(parameters) {
21
27
  port: port + 3,
22
28
  },
23
29
  };
24
- const args = deepAssign(defaultParameters, rest);
30
+ const args = deepAssign(defaultParameters, options);
25
31
  return [
26
32
  'dev',
27
33
  ...toArgs(args, {
28
34
  arraySeparator: null,
29
35
  }),
30
- // Forwarded to `tempo-zone node`; keeps concurrent instances from colliding.
31
36
  '--',
32
- '--authrpc.port',
33
- String(port + 4),
34
37
  '--ipcdisable',
35
38
  ...(nodeArgs ?? []),
36
39
  ];
@@ -39,7 +42,8 @@ export function command(parameters) {
39
42
  * Defines a Tempo Zone instance.
40
43
  *
41
44
  * Provisions a fresh zone against a Tempo dev L1 (`tempo-zone dev`) and runs
42
- * the zone node. Requires a reachable Tempo dev L1 websocket RPC (`l1.rpcUrl`).
45
+ * the zone node. The L1 must mine canonical Tempo headers, and the dev key
46
+ * must hold pathUSD.
43
47
  *
44
48
  * @example
45
49
  * ```ts
@@ -62,7 +66,7 @@ export const tempoZone = Instance.define((parameters) => {
62
66
  return log_;
63
67
  }
64
68
  })();
65
- const RUST_LOG = log && typeof log !== 'boolean' ? log : '';
69
+ const RUST_LOG = log && typeof log !== 'boolean' ? `${log},reth::cli=info` : '';
66
70
  const name = 'tempo-zone';
67
71
  const process = execa({ name });
68
72
  return {
@@ -76,20 +80,20 @@ export const tempoZone = Instance.define((parameters) => {
76
80
  name,
77
81
  port: args.port ?? 9545,
78
82
  async start({ port = args.port }, options) {
83
+ const httpPort = port ?? 9545;
79
84
  return await process.start(($) => $({
80
85
  env: {
81
86
  RUST_LOG,
82
87
  },
83
- }) `${[binary, ...command({ ...args, port })]}`, {
88
+ }) `${[binary, ...command({ ...args, port: httpPort })]}`, {
84
89
  ...options,
85
- // Resolve when the zone RPC server is listening (fires after provisioning).
86
90
  resolver({ process, reject, resolve }) {
87
91
  let stderr = '';
88
92
  process.stdout.on('data', (data) => {
89
93
  const message = data.toString();
90
94
  if (log)
91
95
  console.log(message);
92
- if (message.includes('RPC HTTP server started'))
96
+ if (message.includes('Private zone RPC server started'))
93
97
  resolve();
94
98
  if (message.includes('shutting down'))
95
99
  reject('shutting down');
@@ -100,7 +104,6 @@ export const tempoZone = Instance.define((parameters) => {
100
104
  console.error(message);
101
105
  stderr += message;
102
106
  });
103
- // Provisioning failures (e.g. unreachable L1) exit non-zero before the RPC starts.
104
107
  process.once('exit', (code) => {
105
108
  if (code)
106
109
  reject(stderr || `exited with code ${code}`);
@@ -1 +1 @@
1
- {"version":3,"file":"tempoZone.js","sourceRoot":"","sources":["../../src/instances/tempoZone.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tempoZone.js","sourceRoot":"","sources":["../../src/instances/tempoZone.ts"],"names":[],"mappings":"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"}
@@ -50,10 +50,9 @@ export declare namespace tempo {
50
50
  /**
51
51
  * Defines a Tempo Zone instance.
52
52
  *
53
- * Starts a Tempo dev L1 container and a zone container (`tempo-zone dev`) on a
54
- * shared network, provisioning a fresh zone against the L1. Pass `l1.rpcUrl`
55
- * to attach to an existing L1 instead (the URL must be reachable from inside
56
- * the container, e.g. `ws://host.docker.internal:8546`).
53
+ * Starts a Tempo dev L1 and `tempo-zone dev` on a shared network. An external
54
+ * `l1.rpcUrl` must be container-reachable, mine canonical headers, and fund
55
+ * the configured dev key with pathUSD.
57
56
  *
58
57
  * @example
59
58
  * ```ts
@@ -80,17 +79,27 @@ export declare const tempoZone: Instance.define.ReturnType<{
80
79
  port: number;
81
80
  wsPort: number;
82
81
  } | undefined;
82
+ readonly privateRpc: {
83
+ host: string;
84
+ port: number;
85
+ } | undefined;
83
86
  }, tempoZone.Parameters | undefined>;
84
87
  export declare namespace tempoZone {
85
- type Parameters = Omit<core_tempoZone.Parameters, 'binary' | 'l1'> & ContainerOptions.Parameters & {
88
+ type Parameters = Omit<core_tempoZone.Parameters, 'binary' | 'l1'> & Omit<ContainerOptions.Parameters, 'startupTimeout'> & {
86
89
  /**
87
90
  * Name of the container.
88
91
  */
89
92
  containerName?: string | undefined;
90
93
  /**
91
94
  * Docker image to use for the zone node.
95
+ * @default "ghcr.io/tempoxyz/tempo-zone:latest"
92
96
  */
93
97
  image?: string | undefined;
98
+ /**
99
+ * Startup timeout for each L1 and zone readiness check, in milliseconds.
100
+ * @default 120_000
101
+ */
102
+ startupTimeout?: number | undefined;
94
103
  /**
95
104
  * Host the server will listen on.
96
105
  */
@@ -107,6 +116,7 @@ export declare namespace tempoZone {
107
116
  * Existing Tempo L1 WebSocket RPC URL, reachable from inside the
108
117
  * container (e.g. `ws://host.docker.internal:8546`). Starts a
109
118
  * dev L1 container when omitted.
119
+ * Anvil requires Foundry 1.8 or newer.
110
120
  */
111
121
  rpcUrl?: string | undefined;
112
122
  }) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../src/testcontainers/Instance.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAW,KAAK,KAAK,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EACL,KAAK,SAAS,IAAI,cAAc,EAEjC,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AAEzD,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK;;;QAoGZ;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;WAEG;eACI,MAAM,GAAG,SAAS;;gCApB7B,CAAA;AAEF,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,GAC5D,gBAAgB,CAAC,UAAU,GAAG;QAC5B;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACJ;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,SAAS;;;QAgLhB;;WAEG;eACI,MAAM,GAAG,SAAS;QAkBzB;;WAEG;eACI,MAAM,GAAG,SAAS;;;;;;;oCArC9B,CAAA;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAY,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC,GACvE,gBAAgB,CAAC,UAAU,GAAG;QAC5B;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,EAAE,CAAC,EACC,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG;YAC9C;;eAEG;YACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC1B;;;;eAIG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC5B,CAAC,GACF,SAAS,CAAA;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACJ"}
1
+ {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../src/testcontainers/Instance.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAW,KAAK,KAAK,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EACL,KAAK,SAAS,IAAI,cAAc,EAEjC,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AAEzD,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK;;;QAoGZ;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;WAEG;eACI,MAAM,GAAG,SAAS;;gCApB7B,CAAA;AAEF,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,GAC5D,gBAAgB,CAAC,UAAU,GAAG;QAC5B;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACJ;AAID;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS;;;QAqNhB;;WAEG;eACI,MAAM,GAAG,SAAS;QAmBzB;;WAEG;eACI,MAAM,GAAG,SAAS;;;;;;;;;;;oCA5C9B,CAAA;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAY,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC,GACvE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,GAAG;QACpD;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC;;;WAGG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;;WAGG;QACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACnC;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,EAAE,CAAC,EACC,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG;YAC9C;;eAEG;YACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC1B;;;;;eAKG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAC5B,CAAC,GACF,SAAS,CAAA;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACJ"}
@@ -87,13 +87,13 @@ export const tempo = Instance.define((parameters) => {
87
87
  },
88
88
  };
89
89
  });
90
+ const tempoZoneStartupTimeout = 120_000;
90
91
  /**
91
92
  * Defines a Tempo Zone instance.
92
93
  *
93
- * Starts a Tempo dev L1 container and a zone container (`tempo-zone dev`) on a
94
- * shared network, provisioning a fresh zone against the L1. Pass `l1.rpcUrl`
95
- * to attach to an existing L1 instead (the URL must be reachable from inside
96
- * the container, e.g. `ws://host.docker.internal:8546`).
94
+ * Starts a Tempo dev L1 and `tempo-zone dev` on a shared network. An external
95
+ * `l1.rpcUrl` must be container-reachable, mine canonical headers, and fund
96
+ * the configured dev key with pathUSD.
97
97
  *
98
98
  * @example
99
99
  * ```ts
@@ -114,6 +114,9 @@ export const tempoZone = Instance.define((parameters) => {
114
114
  }
115
115
  })();
116
116
  const RUST_LOG = log && typeof log !== 'boolean' ? log : '';
117
+ const L1_RUST_LOG = RUST_LOG
118
+ ? `${RUST_LOG},reth_node_events=info`
119
+ : RUST_LOG;
117
120
  // L1 ports inside the container (only reachable over the shared network).
118
121
  const l1HttpPort = 8545;
119
122
  const l1WsPort = 8546;
@@ -121,6 +124,7 @@ export const tempoZone = Instance.define((parameters) => {
121
124
  let container;
122
125
  let l1Container;
123
126
  let network;
127
+ let privateRpcPort;
124
128
  async function teardown() {
125
129
  if (container)
126
130
  await container.stop().catch(() => { });
@@ -131,6 +135,7 @@ export const tempoZone = Instance.define((parameters) => {
131
135
  container = undefined;
132
136
  l1Container = undefined;
133
137
  network = undefined;
138
+ privateRpcPort = undefined;
134
139
  }
135
140
  return {
136
141
  _internal: {
@@ -144,16 +149,35 @@ export const tempoZone = Instance.define((parameters) => {
144
149
  wsPort: l1Container.getMappedPort(l1WsPort),
145
150
  };
146
151
  },
152
+ get privateRpc() {
153
+ if (!container || !privateRpcPort)
154
+ return undefined;
155
+ return {
156
+ host: container.getHost(),
157
+ port: container.getMappedPort(privateRpcPort),
158
+ };
159
+ },
147
160
  },
148
161
  host: args.host ?? 'localhost',
149
162
  name,
150
163
  port: args.port ?? 9545,
151
164
  async start({ port = args.port }, { emitter, setEndpoint }) {
152
165
  const containerPort = port ?? 9545;
153
- const timeout = ContainerOptions.resolveStartupTimeout(startupTimeout);
154
- const logConsumer = (reject) => (stream) => {
166
+ // Mirrors the `zoneCommand` default; serves authenticated `eth_*` + `zone_*`.
167
+ privateRpcPort =
168
+ args['privateRpc']?.port ??
169
+ containerPort + 3;
170
+ const timeout = startupTimeout ?? tempoZoneStartupTimeout;
171
+ const includeL1Log = (message) => {
172
+ if (log !== 'warn' && log !== 'error')
173
+ return true;
174
+ return !/INFO.*reth_node_events::node/.test(message);
175
+ };
176
+ const logConsumer = (reject, include = () => true) => (stream) => {
155
177
  stream.on('data', (data) => {
156
178
  const message = data.toString();
179
+ if (!include(message))
180
+ return;
157
181
  emitter.emit('message', message);
158
182
  emitter.emit('stdout', message);
159
183
  if (log)
@@ -176,12 +200,12 @@ export const tempoZone = Instance.define((parameters) => {
176
200
  network = await new Network().start();
177
201
  l1Container = await new GenericContainer(l1Parameters?.image ?? 'ghcr.io/tempoxyz/tempo:latest')
178
202
  .withPullPolicy(PullPolicy.alwaysPull())
179
- .withPlatform('linux/x86_64')
203
+ .withPlatform('linux/amd64')
180
204
  .withNetwork(network)
181
205
  .withNetworkAliases('l1')
182
206
  .withExposedPorts(l1HttpPort, l1WsPort)
183
207
  .withName(`${containerName}.l1`)
184
- .withEnvironment({ RUST_LOG })
208
+ .withEnvironment({ RUST_LOG: L1_RUST_LOG })
185
209
  .withCommand(command({
186
210
  port: l1HttpPort,
187
211
  // The zone anchors to the L1 over WebSocket.
@@ -190,7 +214,7 @@ export const tempoZone = Instance.define((parameters) => {
190
214
  .withWaitStrategy(Wait.forLogMessage(/Received (block|new payload) from consensus engine/))
191
215
  .withLogConsumer(logConsumer(() => {
192
216
  // L1 shutdown surfaces via the zone container failing to start.
193
- }))
217
+ }, includeL1Log))
194
218
  .withStartupTimeout(timeout)
195
219
  .start();
196
220
  l1RpcUrl = `ws://l1:${l1WsPort}`;
@@ -198,8 +222,9 @@ export const tempoZone = Instance.define((parameters) => {
198
222
  const promise = Promise.withResolvers();
199
223
  let c = new GenericContainer(image)
200
224
  .withPullPolicy(PullPolicy.alwaysPull())
201
- .withPlatform('linux/x86_64')
202
- .withExposedPorts(containerPort)
225
+ // The public image currently publishes only linux/amd64.
226
+ .withPlatform('linux/amd64')
227
+ .withExposedPorts(containerPort, privateRpcPort)
203
228
  .withExtraHosts([
204
229
  { host: 'host.docker.internal', ipAddress: 'host-gateway' },
205
230
  ])
@@ -215,7 +240,11 @@ export const tempoZone = Instance.define((parameters) => {
215
240
  },
216
241
  port: containerPort,
217
242
  }))
218
- .withWaitStrategy(Wait.forLogMessage('RPC HTTP server started'))
243
+ .withWaitStrategy(Wait.forHttp('/', privateRpcPort, {
244
+ abortOnContainerExit: true,
245
+ })
246
+ .withMethod('POST')
247
+ .forStatusCode(401))
219
248
  .withLogConsumer(logConsumer(promise.reject))
220
249
  .withStartupTimeout(timeout);
221
250
  if (network)
@@ -1 +1 @@
1
- {"version":3,"file":"Instance.js","sourceRoot":"","sources":["../../src/testcontainers/Instance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Instance.js","sourceRoot":"","sources":["../../src/testcontainers/Instance.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "prool",
3
3
  "description": "HTTP testing instances for Ethereum",
4
- "version": "0.2.6",
4
+ "version": "0.2.8",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "files": [
@@ -2,6 +2,7 @@ import * as os from 'node:os'
2
2
  import getPort from 'get-port'
3
3
  import { Instance } from 'prool'
4
4
  import { afterEach, expect, test } from 'vitest'
5
+ import { type MessageEvent, WebSocket } from 'ws'
5
6
  import { command } from './tempo.js'
6
7
 
7
8
  const instances: Instance.Instance[] = []
@@ -140,12 +141,34 @@ test(
140
141
  },
141
142
  )
142
143
 
144
+ test(
145
+ 'behavior: serves websocket on http port',
146
+ { timeout: slowTestTimeout },
147
+ async () => {
148
+ const instance = defineInstance()
149
+ await instance.start()
150
+
151
+ const ws = new WebSocket(`ws://localhost:${port}`)
152
+ await new Promise((resolve, reject) => {
153
+ ws.addEventListener('open', resolve)
154
+ ws.addEventListener('error', reject)
155
+ })
156
+ ws.send(JSON.stringify({ id: 0, jsonrpc: '2.0', method: 'eth_chainId' }))
157
+ const { data } = await new Promise<MessageEvent>((resolve) =>
158
+ ws.addEventListener('message', resolve),
159
+ )
160
+ ws.close()
161
+
162
+ expect(JSON.parse(data.toString()).result).toBeDefined()
163
+ },
164
+ )
165
+
143
166
  const redact = (args: string[]) =>
144
167
  args.join(' ').replaceAll(os.tmpdir(), '<tmpdir>')
145
168
 
146
169
  test('command: default', () => {
147
170
  expect(redact(command({ port: 8545 }))).toMatchInlineSnapshot(
148
- `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:8545 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws.port 8565"`,
171
+ `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:8545 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws --ws.addr 0.0.0.0 --ws.api all --ws.port 8545"`,
149
172
  )
150
173
  })
151
174
 
@@ -155,7 +178,7 @@ test('command: behavior: faucet node address', () => {
155
178
  command({ faucet: { nodeAddress: 'http://localhost:1337' }, port: 8545 }),
156
179
  ),
157
180
  ).toMatchInlineSnapshot(
158
- `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:1337 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws.port 8565"`,
181
+ `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:1337 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws --ws.addr 0.0.0.0 --ws.api all --ws.port 8545"`,
159
182
  )
160
183
  })
161
184
 
@@ -163,7 +186,15 @@ test('command: behavior: faucet disabled', () => {
163
186
  expect(
164
187
  redact(command({ faucet: { enabled: false }, port: 8545 })),
165
188
  ).toMatchInlineSnapshot(
166
- `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled false --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws.port 8565"`,
189
+ `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled false --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws --ws.addr 0.0.0.0 --ws.api all --ws.port 8545"`,
190
+ )
191
+ })
192
+
193
+ test('command: behavior: ws port override', () => {
194
+ expect(
195
+ redact(command({ port: 8545, ws: [true, { port: 8565 }] })),
196
+ ).toMatchInlineSnapshot(
197
+ `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:8545 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws --ws.port 8565"`,
167
198
  )
168
199
  })
169
200
 
@@ -171,6 +202,6 @@ test('command: behavior: http port override', () => {
171
202
  expect(
172
203
  redact(command({ http: { port: 1337 }, port: 8545 })),
173
204
  ).toMatchInlineSnapshot(
174
- `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:1337 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 1337 --port 8555 --ws.port 8565"`,
205
+ `"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:1337 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 1337 --port 8555 --ws --ws.addr 0.0.0.0 --ws.api all --ws.port 1337"`,
175
206
  )
176
207
  })
@@ -45,9 +45,13 @@ export function command(parameters: tempo.Parameters): string[] {
45
45
  port: port!,
46
46
  },
47
47
  port: port! + 10,
48
- ws: {
49
- port: port! + 20,
50
- },
48
+ ws: [
49
+ true,
50
+ {
51
+ addr: '0.0.0.0',
52
+ api: 'all',
53
+ },
54
+ ],
51
55
  }
52
56
 
53
57
  const args = deepAssign(defaultParameters, rest)
@@ -58,6 +62,13 @@ export function command(parameters: tempo.Parameters): string[] {
58
62
  if (faucet?.enabled && !faucet.nodeAddress)
59
63
  faucet.nodeAddress = `http://localhost:${http.port}`
60
64
 
65
+ // WS defaults to the http port: one endpoint (and one proxied server port) serves both protocols.
66
+ const ws = args['ws'] as [true, { port?: number | undefined }?] | undefined
67
+ if (Array.isArray(ws) && ws[0] === true) {
68
+ ws[1] ??= {}
69
+ ws[1].port ??= http.port
70
+ }
71
+
61
72
  return [
62
73
  'node',
63
74
  ...toArgs(args, {
@@ -7,7 +7,7 @@ const redact = (args: string[]) =>
7
7
 
8
8
  test('command: default', () => {
9
9
  expect(redact(command({ port: 9545 }))).toMatchInlineSnapshot(
10
- `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 9548 -- --authrpc.port 9549 --ipcdisable"`,
10
+ `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 9548 -- --ipcdisable"`,
11
11
  )
12
12
  })
13
13
 
@@ -23,7 +23,7 @@ test('command: behavior: l1 options', () => {
23
23
  }),
24
24
  ),
25
25
  ).toMatchInlineSnapshot(
26
- `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://l1:8546 --l1.factory-address 0x00000000000000000000000000000000000fac70 --private-rpc.port 9548 -- --authrpc.port 9549 --ipcdisable"`,
26
+ `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://l1:8546 --l1.factory-address 0x00000000000000000000000000000000000fac70 --private-rpc.port 9548 -- --ipcdisable"`,
27
27
  )
28
28
  })
29
29
 
@@ -39,7 +39,7 @@ test('command: behavior: dev options', () => {
39
39
  }),
40
40
  ),
41
41
  ).toMatchInlineSnapshot(
42
- `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 9548 --dev.key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --dev.token 0x20c0000000000000000000000000000000000001 -- --authrpc.port 9549 --ipcdisable"`,
42
+ `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 9548 --dev.key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --dev.token 0x20c0000000000000000000000000000000000001 -- --ipcdisable"`,
43
43
  )
44
44
  })
45
45
 
@@ -47,7 +47,7 @@ test('command: behavior: node args', () => {
47
47
  expect(
48
48
  redact(command({ nodeArgs: ['--full'], port: 9545 })),
49
49
  ).toMatchInlineSnapshot(
50
- `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 9548 -- --authrpc.port 9549 --ipcdisable --full"`,
50
+ `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 9548 -- --ipcdisable --full"`,
51
51
  )
52
52
  })
53
53
 
@@ -55,6 +55,21 @@ test('command: behavior: private rpc port override', () => {
55
55
  expect(
56
56
  redact(command({ port: 9545, privateRpc: { port: 1337 } })),
57
57
  ).toMatchInlineSnapshot(
58
- `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 1337 -- --authrpc.port 9549 --ipcdisable"`,
58
+ `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 1337 -- --ipcdisable"`,
59
+ )
60
+ })
61
+
62
+ test('command: behavior: instance options are not forwarded', () => {
63
+ expect(
64
+ redact(
65
+ command({
66
+ binary: '/usr/local/bin/tempo-zone',
67
+ host: '127.0.0.1',
68
+ log: 'error',
69
+ port: 9545,
70
+ }),
71
+ ),
72
+ ).toMatchInlineSnapshot(
73
+ `"dev --datadir <tmpdir>/.prool/tempo-zone.9545 --http.addr 0.0.0.0 --http.port 9545 --l1.rpc-url ws://localhost:8546 --private-rpc.port 9548 -- --ipcdisable"`,
59
74
  )
60
75
  })
@@ -5,9 +5,15 @@ import { deepAssign, toArgs } from '../internal/utils.js'
5
5
  import { execa } from '../processes/execa.js'
6
6
 
7
7
  // `tempo-zone dev` derives the WS RPC (port + 1) and P2P (port + 2) ports from
8
- // `http.port`. Each instance occupies the compact block [port, port + 4].
8
+ // `http.port`. Each instance occupies the compact block [port, port + 3].
9
9
  export function command(parameters: tempoZone.Parameters): string[] {
10
- const { nodeArgs, port, ...rest } = parameters
10
+ const { nodeArgs, port } = parameters
11
+ const options = { ...parameters }
12
+ delete options.binary
13
+ delete options.host
14
+ delete options.log
15
+ delete options.nodeArgs
16
+ delete options.port
11
17
 
12
18
  const datadir = path.join(os.tmpdir(), '.prool', `tempo-zone.${port}`)
13
19
  const defaultParameters = {
@@ -24,17 +30,14 @@ export function command(parameters: tempoZone.Parameters): string[] {
24
30
  },
25
31
  }
26
32
 
27
- const args = deepAssign(defaultParameters, rest)
33
+ const args = deepAssign(defaultParameters, options)
28
34
 
29
35
  return [
30
36
  'dev',
31
37
  ...toArgs(args, {
32
38
  arraySeparator: null,
33
39
  }),
34
- // Forwarded to `tempo-zone node`; keeps concurrent instances from colliding.
35
40
  '--',
36
- '--authrpc.port',
37
- String(port! + 4),
38
41
  '--ipcdisable',
39
42
  ...((nodeArgs as string[] | undefined) ?? []),
40
43
  ]
@@ -44,7 +47,8 @@ export function command(parameters: tempoZone.Parameters): string[] {
44
47
  * Defines a Tempo Zone instance.
45
48
  *
46
49
  * Provisions a fresh zone against a Tempo dev L1 (`tempo-zone dev`) and runs
47
- * the zone node. Requires a reachable Tempo dev L1 websocket RPC (`l1.rpcUrl`).
50
+ * the zone node. The L1 must mine canonical Tempo headers, and the dev key
51
+ * must hold pathUSD.
48
52
  *
49
53
  * @example
50
54
  * ```ts
@@ -68,7 +72,8 @@ export const tempoZone = Instance.define(
68
72
  return log_
69
73
  }
70
74
  })()
71
- const RUST_LOG = log && typeof log !== 'boolean' ? log : ''
75
+ const RUST_LOG =
76
+ log && typeof log !== 'boolean' ? `${log},reth::cli=info` : ''
72
77
 
73
78
  const name = 'tempo-zone'
74
79
  const process = execa({ name })
@@ -84,22 +89,23 @@ export const tempoZone = Instance.define(
84
89
  name,
85
90
  port: args.port ?? 9545,
86
91
  async start({ port = args.port }, options) {
92
+ const httpPort = port ?? 9545
87
93
  return await process.start(
88
94
  ($) =>
89
95
  $({
90
96
  env: {
91
97
  RUST_LOG,
92
98
  },
93
- })`${[binary, ...command({ ...args, port })]}`,
99
+ })`${[binary, ...command({ ...args, port: httpPort })]}`,
94
100
  {
95
101
  ...options,
96
- // Resolve when the zone RPC server is listening (fires after provisioning).
97
102
  resolver({ process, reject, resolve }) {
98
103
  let stderr = ''
99
104
  process.stdout.on('data', (data) => {
100
105
  const message = data.toString()
101
106
  if (log) console.log(message)
102
- if (message.includes('RPC HTTP server started')) resolve()
107
+ if (message.includes('Private zone RPC server started'))
108
+ resolve()
103
109
  if (message.includes('shutting down')) reject('shutting down')
104
110
  })
105
111
  process.stderr.on('data', (data) => {
@@ -107,7 +113,6 @@ export const tempoZone = Instance.define(
107
113
  if (log) console.error(message)
108
114
  stderr += message
109
115
  })
110
- // Provisioning failures (e.g. unreachable L1) exit non-zero before the RPC starts.
111
116
  process.once('exit', (code) => {
112
117
  if (code) reject(stderr || `exited with code ${code}`)
113
118
  })
@@ -165,6 +170,7 @@ export declare namespace tempoZone {
165
170
  factoryAddress?: string | undefined
166
171
  /**
167
172
  * Tempo L1 WebSocket RPC URL.
173
+ * Anvil requires Foundry 1.8 or newer.
168
174
  * @default "ws://localhost:8546"
169
175
  */
170
176
  rpcUrl?: string | undefined
@@ -126,27 +126,22 @@ test('behavior: faucet funds address', { timeout: 120_000 }, async () => {
126
126
  expect(balance).toBeGreaterThan(0n)
127
127
  })
128
128
 
129
- // Requires a `tempo-zone` image with the `dev` command and GHCR access
130
- // (the package is private), e.g. `VITE_TEMPO_ZONE_IMAGE=ghcr.io/tempoxyz/tempo-zone:latest`.
131
- const tempoZoneImage = process.env['VITE_TEMPO_ZONE_IMAGE']
132
129
  const zonePort = await getPort()
133
130
 
134
- describe.runIf(tempoZoneImage)('tempoZone', () => {
131
+ describe('tempoZone', () => {
135
132
  const defineZoneInstance = (
136
133
  parameters: Instance.tempoZone.Parameters = {},
137
134
  ) => {
138
135
  const instance = Instance.tempoZone({
139
- image: tempoZoneImage,
140
136
  port: zonePort,
141
- startupTimeout: 120_000,
142
137
  ...parameters,
143
138
  })
144
139
  instances.push(instance)
145
140
  return instance
146
141
  }
147
142
 
148
- test('default', { timeout: 300_000 }, async () => {
149
- const instance = defineZoneInstance()
143
+ test('default image with quiet logs', { timeout: 600_000 }, async () => {
144
+ const instance = defineZoneInstance({ log: 'warn' })
150
145
 
151
146
  await instance.start()
152
147
  expect(instance.status).toEqual('started')
@@ -167,6 +162,30 @@ describe.runIf(tempoZoneImage)('tempoZone', () => {
167
162
  const { result: blockNumber } = await rpc('eth_blockNumber', [])
168
163
  expect(blockNumber).toBeDefined()
169
164
 
165
+ const { result: pathUsdCode } = await rpc('eth_getCode', [
166
+ '0x20c0000000000000000000000000000000000000',
167
+ 'latest',
168
+ ])
169
+ expect(pathUsdCode).toMatch(/^0x[0-9a-f]{2,}$/)
170
+
171
+ // Private RPC rejects unauthenticated requests after becoming reachable.
172
+ const { privateRpc } = instance._internal
173
+ expect(privateRpc).toBeDefined()
174
+ const response = await fetch(
175
+ `http://${privateRpc!.host}:${privateRpc!.port}`,
176
+ {
177
+ body: JSON.stringify({
178
+ id: 0,
179
+ jsonrpc: '2.0',
180
+ method: 'zone_getZoneInfo',
181
+ params: [],
182
+ }),
183
+ headers: { 'Content-Type': 'application/json' },
184
+ method: 'POST',
185
+ },
186
+ )
187
+ expect(response.status).toBe(401)
188
+
170
189
  await instance.stop()
171
190
  expect(instance.status).toEqual('stopped')
172
191
  })
@@ -138,13 +138,14 @@ export declare namespace tempo {
138
138
  }
139
139
  }
140
140
 
141
+ const tempoZoneStartupTimeout = 120_000
142
+
141
143
  /**
142
144
  * Defines a Tempo Zone instance.
143
145
  *
144
- * Starts a Tempo dev L1 container and a zone container (`tempo-zone dev`) on a
145
- * shared network, provisioning a fresh zone against the L1. Pass `l1.rpcUrl`
146
- * to attach to an existing L1 instead (the URL must be reachable from inside
147
- * the container, e.g. `ws://host.docker.internal:8546`).
146
+ * Starts a Tempo dev L1 and `tempo-zone dev` on a shared network. An external
147
+ * `l1.rpcUrl` must be container-reachable, mine canonical headers, and fund
148
+ * the configured dev key with pathUSD.
148
149
  *
149
150
  * @example
150
151
  * ```ts
@@ -173,6 +174,9 @@ export const tempoZone = Instance.define(
173
174
  }
174
175
  })()
175
176
  const RUST_LOG = log && typeof log !== 'boolean' ? log : ''
177
+ const L1_RUST_LOG = RUST_LOG
178
+ ? `${RUST_LOG},reth_node_events=info`
179
+ : RUST_LOG
176
180
 
177
181
  // L1 ports inside the container (only reachable over the shared network).
178
182
  const l1HttpPort = 8545
@@ -182,6 +186,7 @@ export const tempoZone = Instance.define(
182
186
  let container: StartedTestContainer | undefined
183
187
  let l1Container: StartedTestContainer | undefined
184
188
  let network: StartedNetwork | undefined
189
+ let privateRpcPort: number | undefined
185
190
 
186
191
  async function teardown() {
187
192
  if (container) await container.stop().catch(() => {})
@@ -190,6 +195,7 @@ export const tempoZone = Instance.define(
190
195
  container = undefined
191
196
  l1Container = undefined
192
197
  network = undefined
198
+ privateRpcPort = undefined
193
199
  }
194
200
 
195
201
  return {
@@ -203,19 +209,38 @@ export const tempoZone = Instance.define(
203
209
  wsPort: l1Container.getMappedPort(l1WsPort),
204
210
  }
205
211
  },
212
+ get privateRpc() {
213
+ if (!container || !privateRpcPort) return undefined
214
+ return {
215
+ host: container.getHost(),
216
+ port: container.getMappedPort(privateRpcPort),
217
+ }
218
+ },
206
219
  },
207
220
  host: args.host ?? 'localhost',
208
221
  name,
209
222
  port: args.port ?? 9545,
210
223
  async start({ port = args.port }, { emitter, setEndpoint }) {
211
224
  const containerPort = port ?? 9545
212
- const timeout = ContainerOptions.resolveStartupTimeout(startupTimeout)
225
+ // Mirrors the `zoneCommand` default; serves authenticated `eth_*` + `zone_*`.
226
+ privateRpcPort =
227
+ (args['privateRpc'] as { port?: number } | undefined)?.port ??
228
+ containerPort + 3
229
+ const timeout = startupTimeout ?? tempoZoneStartupTimeout
230
+ const includeL1Log = (message: string) => {
231
+ if (log !== 'warn' && log !== 'error') return true
232
+ return !/INFO.*reth_node_events::node/.test(message)
233
+ }
213
234
 
214
235
  const logConsumer =
215
- (reject: (error: Error) => void) =>
236
+ (
237
+ reject: (error: Error) => void,
238
+ include: (message: string) => boolean = () => true,
239
+ ) =>
216
240
  (stream: NodeJS.ReadableStream) => {
217
241
  stream.on('data', (data) => {
218
242
  const message = data.toString()
243
+ if (!include(message)) return
219
244
  emitter.emit('message', message)
220
245
  emitter.emit('stdout', message)
221
246
  if (log) console.log(message)
@@ -239,12 +264,12 @@ export const tempoZone = Instance.define(
239
264
  l1Parameters?.image ?? 'ghcr.io/tempoxyz/tempo:latest',
240
265
  )
241
266
  .withPullPolicy(PullPolicy.alwaysPull())
242
- .withPlatform('linux/x86_64')
267
+ .withPlatform('linux/amd64')
243
268
  .withNetwork(network)
244
269
  .withNetworkAliases('l1')
245
270
  .withExposedPorts(l1HttpPort, l1WsPort)
246
271
  .withName(`${containerName}.l1`)
247
- .withEnvironment({ RUST_LOG })
272
+ .withEnvironment({ RUST_LOG: L1_RUST_LOG })
248
273
  .withCommand(
249
274
  command({
250
275
  port: l1HttpPort,
@@ -260,7 +285,7 @@ export const tempoZone = Instance.define(
260
285
  .withLogConsumer(
261
286
  logConsumer(() => {
262
287
  // L1 shutdown surfaces via the zone container failing to start.
263
- }),
288
+ }, includeL1Log),
264
289
  )
265
290
  .withStartupTimeout(timeout)
266
291
  .start()
@@ -271,8 +296,9 @@ export const tempoZone = Instance.define(
271
296
 
272
297
  let c = new GenericContainer(image)
273
298
  .withPullPolicy(PullPolicy.alwaysPull())
274
- .withPlatform('linux/x86_64')
275
- .withExposedPorts(containerPort)
299
+ // The public image currently publishes only linux/amd64.
300
+ .withPlatform('linux/amd64')
301
+ .withExposedPorts(containerPort, privateRpcPort)
276
302
  .withExtraHosts([
277
303
  { host: 'host.docker.internal', ipAddress: 'host-gateway' },
278
304
  ])
@@ -290,7 +316,13 @@ export const tempoZone = Instance.define(
290
316
  port: containerPort,
291
317
  }),
292
318
  )
293
- .withWaitStrategy(Wait.forLogMessage('RPC HTTP server started'))
319
+ .withWaitStrategy(
320
+ Wait.forHttp('/', privateRpcPort, {
321
+ abortOnContainerExit: true,
322
+ })
323
+ .withMethod('POST')
324
+ .forStatusCode(401),
325
+ )
294
326
  .withLogConsumer(logConsumer(promise.reject))
295
327
  .withStartupTimeout(timeout)
296
328
  if (network) c = c.withNetwork(network)
@@ -321,15 +353,21 @@ export const tempoZone = Instance.define(
321
353
 
322
354
  export declare namespace tempoZone {
323
355
  export type Parameters = Omit<core_tempoZone.Parameters, 'binary' | 'l1'> &
324
- ContainerOptions.Parameters & {
356
+ Omit<ContainerOptions.Parameters, 'startupTimeout'> & {
325
357
  /**
326
358
  * Name of the container.
327
359
  */
328
360
  containerName?: string | undefined
329
361
  /**
330
362
  * Docker image to use for the zone node.
363
+ * @default "ghcr.io/tempoxyz/tempo-zone:latest"
331
364
  */
332
365
  image?: string | undefined
366
+ /**
367
+ * Startup timeout for each L1 and zone readiness check, in milliseconds.
368
+ * @default 120_000
369
+ */
370
+ startupTimeout?: number | undefined
333
371
  /**
334
372
  * Host the server will listen on.
335
373
  */
@@ -347,6 +385,7 @@ export declare namespace tempoZone {
347
385
  * Existing Tempo L1 WebSocket RPC URL, reachable from inside the
348
386
  * container (e.g. `ws://host.docker.internal:8546`). Starts a
349
387
  * dev L1 container when omitted.
388
+ * Anvil requires Foundry 1.8 or newer.
350
389
  */
351
390
  rpcUrl?: string | undefined
352
391
  })