prool 0.2.4 → 0.2.5
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.
- package/dist/instances/tempo.d.ts +20 -0
- package/dist/instances/tempo.d.ts.map +1 -1
- package/dist/instances/tempo.js +7 -1
- package/dist/instances/tempo.js.map +1 -1
- package/dist/processes/execa.d.ts.map +1 -1
- package/dist/processes/execa.js +4 -3
- package/dist/processes/execa.js.map +1 -1
- package/package.json +1 -1
- package/src/instances/tempo.test.ts +87 -0
- package/src/instances/tempo.ts +19 -1
- package/src/processes/execa.ts +4 -3
- package/src/testcontainers/Instance.test.ts +46 -0
|
@@ -52,6 +52,16 @@ export declare const tempo: Instance.define.ReturnType<{
|
|
|
52
52
|
* Amount for each faucet funding transaction
|
|
53
53
|
*/
|
|
54
54
|
amount?: bigint | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Whether the faucet is enabled
|
|
57
|
+
* @default true
|
|
58
|
+
*/
|
|
59
|
+
enabled?: boolean | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Node RPC address the faucet submits funding transactions to
|
|
62
|
+
* @default `http://localhost:${port}`
|
|
63
|
+
*/
|
|
64
|
+
nodeAddress?: string | undefined;
|
|
55
65
|
/**
|
|
56
66
|
* Faucet funding mnemonic
|
|
57
67
|
*/
|
|
@@ -117,6 +127,16 @@ export declare namespace tempo {
|
|
|
117
127
|
* Amount for each faucet funding transaction
|
|
118
128
|
*/
|
|
119
129
|
amount?: bigint | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Whether the faucet is enabled
|
|
132
|
+
* @default true
|
|
133
|
+
*/
|
|
134
|
+
enabled?: boolean | undefined;
|
|
135
|
+
/**
|
|
136
|
+
* Node RPC address the faucet submits funding transactions to
|
|
137
|
+
* @default `http://localhost:${port}`
|
|
138
|
+
*/
|
|
139
|
+
nodeAddress?: string | undefined;
|
|
120
140
|
/**
|
|
121
141
|
* Faucet funding mnemonic
|
|
122
142
|
*/
|
|
@@ -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,
|
|
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"}
|
package/dist/instances/tempo.js
CHANGED
|
@@ -45,9 +45,15 @@ export function command(parameters) {
|
|
|
45
45
|
port: port + 20,
|
|
46
46
|
},
|
|
47
47
|
};
|
|
48
|
+
const args = deepAssign(defaultParameters, rest);
|
|
49
|
+
// Faucet submits funding transactions over RPC; point it at the resolved http port (node default: 8545).
|
|
50
|
+
const faucet = args['faucet'];
|
|
51
|
+
const http = args['http'];
|
|
52
|
+
if (faucet?.enabled && !faucet.nodeAddress)
|
|
53
|
+
faucet.nodeAddress = `http://localhost:${http.port}`;
|
|
48
54
|
return [
|
|
49
55
|
'node',
|
|
50
|
-
...toArgs(
|
|
56
|
+
...toArgs(args, {
|
|
51
57
|
arraySeparator: null,
|
|
52
58
|
}),
|
|
53
59
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tempo.js","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAE7C,MAAM,UAAU,OAAO,CAAC,UAA4B;IAClD,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAChE,UAAU,CAAA;IAEZ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;IACjE,MAAM,iBAAiB,GAAG;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,IAAK,GAAG,EAAE;SACjB;QACD,OAAO;QACP,GAAG,EAAE;YACH,IAAI;YACJ;gBACE,SAAS,EAAE,SAAS,IAAI,MAAM;gBAC9B,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClC;SACF;QACD,MAAM,EAAE;YACN,sBAAsB,EAAE,IAAI;YAC5B,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C;aAC7C;YACD,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,IAAI;YACb,UAAU,EACR,oEAAoE;SACvE;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,KAAK;YACV,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,IAAK;SACZ;QACD,IAAI,EAAE,IAAK,GAAG,EAAE;QAChB,EAAE,EAAE;YACF,IAAI,EAAE,IAAK,GAAG,EAAE;SACjB;KACF,CAAA;IAED,
|
|
1
|
+
{"version":3,"file":"tempo.js","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execa.d.ts","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG/C,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAE9E,MAAM,MAAM,iBAAiB,GAC3B,QAAQ,CAAC,MAAM,CAAC,6BAA6B,GAAG;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAChB,OAAO,EAAE,gBAAgB,CAAA;QACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,IAAI,CAAA;KAChB,GAAG,IAAI,CAAA;CACT,CAAA;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE;QACT,OAAO,EAAE,gBAAgB,CAAA;KAC1B,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CACH,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,KAAK,IAAI,EACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D,CAAA;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"execa.d.ts","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG/C,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAE9E,MAAM,MAAM,iBAAiB,GAC3B,QAAQ,CAAC,MAAM,CAAC,6BAA6B,GAAG;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAChB,OAAO,EAAE,gBAAgB,CAAA;QACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,IAAI,CAAA;KAChB,GAAG,IAAI,CAAA;CACT,CAAA;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE;QACT,OAAO,EAAE,gBAAgB,CAAA;KAC1B,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CACH,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,KAAK,IAAI,EACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D,CAAA;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAoFpE;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAEzC,KAAY,UAAU,GAAG,OAAO,CAAA;CACjC"}
|
package/dist/processes/execa.js
CHANGED
|
@@ -5,10 +5,11 @@ export function execa(parameters) {
|
|
|
5
5
|
const errorMessages = [];
|
|
6
6
|
let process;
|
|
7
7
|
async function stop(signal) {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
process.kill(signal);
|
|
9
|
+
// Process may have exited on its own; 'exit' will not re-fire.
|
|
10
|
+
if (process.exitCode !== null || process.signalCode !== null)
|
|
10
11
|
return;
|
|
11
|
-
return new Promise((resolve) => process.
|
|
12
|
+
return new Promise((resolve) => process.once('exit', resolve));
|
|
12
13
|
}
|
|
13
14
|
return {
|
|
14
15
|
_internal: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execa.js","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,IAAI,EAAsB,MAAM,OAAO,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAyBlD,MAAM,UAAU,KAAK,CAAC,UAA4B;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAA;IAE3B,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,IAAI,OAAyB,CAAA;IAE7B,KAAK,UAAU,IAAI,CAAC,MAAuC;QACzD,
|
|
1
|
+
{"version":3,"file":"execa.js","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import * as os from 'node:os'
|
|
1
2
|
import getPort from 'get-port'
|
|
2
3
|
import { Instance } from 'prool'
|
|
3
4
|
import { afterEach, expect, test } from 'vitest'
|
|
5
|
+
import { command } from './tempo.js'
|
|
4
6
|
|
|
5
7
|
const instances: Instance.Instance[] = []
|
|
6
8
|
const slowTestTimeout = 30_000
|
|
@@ -87,3 +89,88 @@ test('behavior: can subscribe to stderr', async () => {
|
|
|
87
89
|
instance_2.on('stderr', (message) => messages.push(message))
|
|
88
90
|
await expect(instance_2.start()).rejects.toThrow('Failed to start')
|
|
89
91
|
})
|
|
92
|
+
|
|
93
|
+
test(
|
|
94
|
+
'behavior: faucet funds address',
|
|
95
|
+
{ timeout: slowTestTimeout },
|
|
96
|
+
async () => {
|
|
97
|
+
const instance = defineInstance()
|
|
98
|
+
await instance.start()
|
|
99
|
+
|
|
100
|
+
const rpc = async (method: string, params: unknown[]) => {
|
|
101
|
+
const response = await fetch(`http://localhost:${port}`, {
|
|
102
|
+
body: JSON.stringify({ id: 0, jsonrpc: '2.0', method, params }),
|
|
103
|
+
headers: { 'Content-Type': 'application/json' },
|
|
104
|
+
method: 'POST',
|
|
105
|
+
})
|
|
106
|
+
return await response.json()
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Funding races the first wall-clock block; expiring-nonce validation rejects until one exists.
|
|
110
|
+
let json: { result?: string[] } = {}
|
|
111
|
+
for (let i = 0; i < 50; i++) {
|
|
112
|
+
json = await rpc('tempo_fundAddress', [
|
|
113
|
+
'0x000000000000000000000000000000000000beef',
|
|
114
|
+
])
|
|
115
|
+
if (json.result) break
|
|
116
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
expect(
|
|
120
|
+
JSON.stringify(json).replaceAll(/0x[0-9a-f]{64}/g, '<hash>'),
|
|
121
|
+
).toMatchInlineSnapshot(
|
|
122
|
+
`"{"jsonrpc":"2.0","id":0,"result":["<hash>","<hash>","<hash>","<hash>"]}"`,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
// balanceOf(0x...beef) on the first faucet token.
|
|
126
|
+
let balance = 0n
|
|
127
|
+
for (let i = 0; i < 50; i++) {
|
|
128
|
+
const { result } = await rpc('eth_call', [
|
|
129
|
+
{
|
|
130
|
+
data: '0x70a08231000000000000000000000000000000000000000000000000000000000000beef',
|
|
131
|
+
to: '0x20c0000000000000000000000000000000000000',
|
|
132
|
+
},
|
|
133
|
+
'latest',
|
|
134
|
+
])
|
|
135
|
+
balance = BigInt(result ?? 0)
|
|
136
|
+
if (balance > 0n) break
|
|
137
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
138
|
+
}
|
|
139
|
+
expect(balance).toBeGreaterThan(0n)
|
|
140
|
+
},
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
const redact = (args: string[]) =>
|
|
144
|
+
args.join(' ').replaceAll(os.tmpdir(), '<tmpdir>')
|
|
145
|
+
|
|
146
|
+
test('command: default', () => {
|
|
147
|
+
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"`,
|
|
149
|
+
)
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
test('command: behavior: faucet node address', () => {
|
|
153
|
+
expect(
|
|
154
|
+
redact(
|
|
155
|
+
command({ faucet: { nodeAddress: 'http://localhost:1337' }, port: 8545 }),
|
|
156
|
+
),
|
|
157
|
+
).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"`,
|
|
159
|
+
)
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
test('command: behavior: faucet disabled', () => {
|
|
163
|
+
expect(
|
|
164
|
+
redact(command({ faucet: { enabled: false }, port: 8545 })),
|
|
165
|
+
).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"`,
|
|
167
|
+
)
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
test('command: behavior: http port override', () => {
|
|
171
|
+
expect(
|
|
172
|
+
redact(command({ http: { port: 1337 }, port: 8545 })),
|
|
173
|
+
).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"`,
|
|
175
|
+
)
|
|
176
|
+
})
|
package/src/instances/tempo.ts
CHANGED
|
@@ -50,9 +50,17 @@ export function command(parameters: tempo.Parameters): string[] {
|
|
|
50
50
|
},
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
const args = deepAssign(defaultParameters, rest)
|
|
54
|
+
|
|
55
|
+
// Faucet submits funding transactions over RPC; point it at the resolved http port (node default: 8545).
|
|
56
|
+
const faucet = args['faucet'] as tempo.Parameters['faucet']
|
|
57
|
+
const http = args['http'] as { port: number }
|
|
58
|
+
if (faucet?.enabled && !faucet.nodeAddress)
|
|
59
|
+
faucet.nodeAddress = `http://localhost:${http.port}`
|
|
60
|
+
|
|
53
61
|
return [
|
|
54
62
|
'node',
|
|
55
|
-
...toArgs(
|
|
63
|
+
...toArgs(args, {
|
|
56
64
|
arraySeparator: null,
|
|
57
65
|
}),
|
|
58
66
|
]
|
|
@@ -177,6 +185,16 @@ export declare namespace tempo {
|
|
|
177
185
|
* Amount for each faucet funding transaction
|
|
178
186
|
*/
|
|
179
187
|
amount?: bigint | undefined
|
|
188
|
+
/**
|
|
189
|
+
* Whether the faucet is enabled
|
|
190
|
+
* @default true
|
|
191
|
+
*/
|
|
192
|
+
enabled?: boolean | undefined
|
|
193
|
+
/**
|
|
194
|
+
* Node RPC address the faucet submits funding transactions to
|
|
195
|
+
* @default `http://localhost:${port}`
|
|
196
|
+
*/
|
|
197
|
+
nodeAddress?: string | undefined
|
|
180
198
|
/**
|
|
181
199
|
* Faucet funding mnemonic
|
|
182
200
|
*/
|
package/src/processes/execa.ts
CHANGED
|
@@ -33,9 +33,10 @@ export function execa(parameters: execa.Parameters): execa.ReturnType {
|
|
|
33
33
|
let process: Process_internal
|
|
34
34
|
|
|
35
35
|
async function stop(signal?: keyof SignalConstants | number) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
process.kill(signal)
|
|
37
|
+
// Process may have exited on its own; 'exit' will not re-fire.
|
|
38
|
+
if (process.exitCode !== null || process.signalCode !== null) return
|
|
39
|
+
return new Promise((resolve) => process.once('exit', resolve))
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
return {
|
|
@@ -79,3 +79,49 @@ test('behavior: can subscribe to stdout', async () => {
|
|
|
79
79
|
})
|
|
80
80
|
|
|
81
81
|
test.skip('behavior: can subscribe to stderr', () => {})
|
|
82
|
+
|
|
83
|
+
test('behavior: faucet funds address', { timeout: 120_000 }, async () => {
|
|
84
|
+
const instance = defineInstance({ startupTimeout: 60_000 })
|
|
85
|
+
await instance.start()
|
|
86
|
+
|
|
87
|
+
const rpc = async (method: string, params: unknown[]) => {
|
|
88
|
+
const response = await fetch(`http://${instance.host}:${instance.port}`, {
|
|
89
|
+
body: JSON.stringify({ id: 0, jsonrpc: '2.0', method, params }),
|
|
90
|
+
headers: { 'Content-Type': 'application/json' },
|
|
91
|
+
method: 'POST',
|
|
92
|
+
})
|
|
93
|
+
return await response.json()
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Funding races the first wall-clock block; expiring-nonce validation rejects until one exists.
|
|
97
|
+
let json: { result?: string[] } = {}
|
|
98
|
+
for (let i = 0; i < 100; i++) {
|
|
99
|
+
json = await rpc('tempo_fundAddress', [
|
|
100
|
+
'0x000000000000000000000000000000000000beef',
|
|
101
|
+
])
|
|
102
|
+
if (json.result) break
|
|
103
|
+
await new Promise((resolve) => setTimeout(resolve, 500))
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
expect(
|
|
107
|
+
JSON.stringify(json).replaceAll(/0x[0-9a-f]{64}/g, '<hash>'),
|
|
108
|
+
).toMatchInlineSnapshot(
|
|
109
|
+
`"{"jsonrpc":"2.0","id":0,"result":["<hash>","<hash>","<hash>","<hash>"]}"`,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
// balanceOf(0x...beef) on the first faucet token.
|
|
113
|
+
let balance = 0n
|
|
114
|
+
for (let i = 0; i < 100; i++) {
|
|
115
|
+
const { result } = await rpc('eth_call', [
|
|
116
|
+
{
|
|
117
|
+
data: '0x70a08231000000000000000000000000000000000000000000000000000000000000beef',
|
|
118
|
+
to: '0x20c0000000000000000000000000000000000000',
|
|
119
|
+
},
|
|
120
|
+
'latest',
|
|
121
|
+
])
|
|
122
|
+
balance = BigInt(result ?? 0)
|
|
123
|
+
if (balance > 0n) break
|
|
124
|
+
await new Promise((resolve) => setTimeout(resolve, 500))
|
|
125
|
+
}
|
|
126
|
+
expect(balance).toBeGreaterThan(0n)
|
|
127
|
+
})
|