Skip to content

Commit f230b45

Browse files
authored
Merge pull request #65 from paritytech/anp-add-init-cli
feat: add initialization command
2 parents 6f3052d + 89ceb1f commit f230b45

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+4652
-639
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# Allow a dummy project in this directory for testing purposes
2+
dummy-project
3+
14
# Dependency directories
25
node_modules/
36
pnpm-lock.json

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
},
1414
"bugs": "https://github.com/paritytech/hardhat-polkadot/issues",
1515
"scripts": {
16-
"build": "tsc --build packages/hardhat-polkadot packages/hardhat-polkadot-node packages/hardhat-polkadot-resolc",
16+
"build": "tsc --build packages/hardhat-polkadot-resolc packages/hardhat-polkadot-node packages/hardhat-polkadot ",
1717
"prettier:check": "pnpm run --recursive prettier:check && npx prettier --check '{.examples}/**/*.{md,yml,ts,js,json}'",
1818
"prettier:write": "pnpm run --recursive prettier:check && npx prettier --write '{.examples}/**/*.{md,yml,ts,js,json}'",
1919
"eslint:check": "pnpm run --recursive eslint:check"

packages/hardhat-polkadot-node/LICENSE

Lines changed: 661 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
1-
import globals from 'globals'
2-
import pluginJs from '@eslint/js'
3-
import tseslint from 'typescript-eslint'
1+
import globals from 'globals';
2+
import pluginJs from '@eslint/js';
3+
import tseslint from 'typescript-eslint';
44

55
/** @type {import('eslint').Linter.Config[]} */
66
export default [
7-
{ files: ['**/*.{mjs,ts}'] },
7+
{
8+
files: ['**/*.{mjs,ts}'],
9+
rules: {
10+
"@typescript-eslint/no-unused-vars": [
11+
"warn",
12+
{
13+
argsIgnorePattern: "^_",
14+
varsIgnorePattern: "^_",
15+
caughtErrorsIgnorePattern: '^_'
16+
}
17+
]
18+
}
19+
},
820
{ languageOptions: { globals: globals.browser } },
921
pluginJs.configs.recommended,
1022
...tseslint.configs.recommended,
11-
]
23+
];

packages/hardhat-polkadot-node/src/core/global-interceptor.ts

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import { RunSuperFunction, TaskArguments } from "hardhat/types"
1+
import { HardhatRuntimeEnvironment, RunSuperFunction, TaskArguments } from "hardhat/types"
22
import { GlobalWithHardhatContext } from "hardhat/src/internal/context"
33
import { HARDHAT_NETWORK_NAME } from "hardhat/plugins"
44
import { configureNetwork, startServer, waitForNodeToBeReady } from "../utils"
55
import { PolkaVMTasksWithWrappedNode } from "./global-task"
6+
import { Environment } from "hardhat/internal/core/runtime-environment"
67

78
export function interceptAndWrapTasksWithNode() {
89
const polkaVMGlobal = global as PolkaVMTasksWithWrappedNode & GlobalWithHardhatContext
@@ -37,30 +38,31 @@ export function interceptAndWrapTasksWithNode() {
3738

3839
async function wrapTaskWithNode(
3940
taskArgs: TaskArguments,
40-
env: any,
41+
env: HardhatRuntimeEnvironment,
4142
runSuper: RunSuperFunction<TaskArguments>,
4243
) {
4344
if (env.network.polkavm !== true || env.network.name !== HARDHAT_NETWORK_NAME) {
4445
return await runSuper(taskArgs)
4546
}
46-
const polkaVMGlobal = global as PolkaVMTasksWithWrappedNode
47+
const polkaVMGlobal = global as PolkaVMTasksWithWrappedNode;
48+
4749
const { commandArgs, server, port } = await startServer({
4850
forking: env.config.networks.hardhat.forking,
49-
forkBlockNumber: env.config.networks.hardhat.forking.blockNumber,
50-
nodeCommands: env.userConfig.networks.hardhat.nodeConfig,
51-
adapterCommands: env.userConfig.networks.hardhat.adapterConfig,
52-
})
51+
forkBlockNumber: env.config.networks.hardhat.forking?.blockNumber,
52+
nodeCommands: env.userConfig.networks?.hardhat?.nodeConfig,
53+
adapterCommands: env.userConfig.networks?.hardhat?.adapterConfig,
54+
});
5355
try {
54-
await server.listen(commandArgs.nodeCommands, commandArgs.adapterCommands, false)
55-
await waitForNodeToBeReady(port)
56-
const oldNetwork = env.network
57-
await configureNetwork(env.config, env.network, port)
58-
env.injectToGlobal()
59-
polkaVMGlobal._polkaVMNodeNetwork = env.network
60-
const result = await runSuper(taskArgs)
61-
env.network = oldNetwork
62-
delete polkaVMGlobal._polkaVMNodeNetwork
63-
env.injectToGlobal()
56+
await server.listen(commandArgs.nodeCommands, commandArgs.adapterCommands, false);
57+
await waitForNodeToBeReady(port);
58+
const oldNetwork = env.network;
59+
await configureNetwork(env.config, env.network, port);
60+
(env as unknown as Environment).injectToGlobal();
61+
polkaVMGlobal._polkaVMNodeNetwork = env.network;
62+
const result = await runSuper(taskArgs);
63+
(env as unknown as Environment).network = oldNetwork;
64+
delete polkaVMGlobal._polkaVMNodeNetwork;
65+
(env as unknown as Environment).injectToGlobal();
6466
return result
6567
} finally {
6668
await server.stop()

packages/hardhat-polkadot-node/src/core/register.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import { createProvider } from "hardhat/internal/core/providers/construction"
1616
import { Artifacts } from "hardhat/internal/artifacts"
1717
import { BASE_URL, POLKAVM_TEST_NODE_NETWORK_NAME } from "../constants"
1818
import { getNetworkConfig } from "../utils"
19+
import "source-map-support/register";
1920

2021
if (!HardhatContext.isCreated()) {
21-
require("source-map-support/register")
2222

2323
const ctx = HardhatContext.createHardhatContext()
2424

@@ -59,9 +59,10 @@ if (!HardhatContext.isCreated()) {
5959
const artifacts = new Artifacts(resolvedConfig.paths.artifacts)
6060

6161
const provider = new LazyInitializationProviderAdapter(async () => {
62-
log(`Creating provider for network ${networkName}`)
63-
return createProvider(resolvedConfig, networkName, artifacts, ctx.providerExtenders)
64-
})
62+
log(`Creating provider for network ${networkName}`);
63+
return createProvider(resolvedConfig, networkName, artifacts, ctx.providerExtenders);
64+
});
65+
6566

6667
env.network.provider = provider
6768
ctx.setHardhatRuntimeEnvironment(env)

packages/hardhat-polkadot-node/src/core/script-runner.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ export async function runScriptWithHardhat(
5858
config,
5959
scriptPath,
6060
scriptArgs,
61-
[...extraNodeArgs, "--require", path.join(__dirname, "register")],
61+
[...extraNodeArgs, '--require', path.join(__dirname, 'register')],
6262
{
6363
...getEnvVariablesMap(hardhatArguments),
6464
...extraEnvVars,
6565
},
66-
)
66+
);
6767
}
6868

6969
function withFixedInspectArg(argv: string[]) {

packages/hardhat-polkadot-node/src/index.ts

Lines changed: 51 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -49,87 +49,40 @@ task(TASK_RUN).setAction(async (args, hre, runSuper) => {
4949
},
5050
hre.hardhatArguments,
5151
path.resolve(args.script),
52-
)
53-
})
52+
);
53+
});
5454

55-
subtask(TASK_NODE_POLKAVM_CREATE_SERVER, "Creates a JSON-RPC server for PolkaVM node")
56-
.addOptionalParam("nodePath", "Path to the node binary file", undefined, types.string)
57-
.addOptionalParam(
58-
"adapterPath",
59-
"Path to the Eth Rpc Adapter binary file",
60-
undefined,
61-
types.string,
62-
)
55+
subtask(TASK_NODE_POLKAVM_CREATE_SERVER, 'Creates a JSON-RPC server for PolkaVM node')
56+
.addOptionalParam('nodePath', 'Path to the node binary file', undefined, types.string)
57+
.addOptionalParam('adapterPath', 'Path to the Eth Rpc Adapter binary file', undefined, types.string)
6358
.setAction(async ({ nodePath, adapterPath }: { nodePath: string; adapterPath: string }) => {
64-
const server: JsonRpcServer = new JsonRpcServer(nodePath, adapterPath)
65-
return server
66-
})
59+
const server: JsonRpcServer = new JsonRpcServer(nodePath, adapterPath);
60+
return server;
61+
});
6762

68-
task(TASK_NODE, "Start a PolkaVM Node").setAction(
69-
async (args: TaskArguments, { network, run }, runSuper) => {
70-
if (network.polkavm !== true || network.name !== HARDHAT_NETWORK_NAME) {
71-
return await runSuper()
72-
}
63+
task(TASK_NODE, 'Start a PolkaVM Node').setAction(async (args: TaskArguments, { network, run }, runSuper) => {
64+
if (network.polkavm !== true || network.name !== HARDHAT_NETWORK_NAME) {
65+
return await runSuper();
66+
}
7367

74-
await run(TASK_NODE_POLKAVM, args)
75-
},
76-
)
68+
await run(TASK_NODE_POLKAVM, args);
69+
});
7770

78-
task(TASK_NODE_POLKAVM, "Starts a JSON-RPC server for PolkaVM node")
79-
.addOptionalParam(
80-
"nodeBinaryPath",
81-
"Path to the substrate node binary",
82-
undefined,
83-
types.string,
84-
)
85-
.addOptionalParam(
86-
"rpcPort",
87-
"Port where the node will listen on - default: 8000",
88-
undefined,
89-
types.int,
90-
)
91-
.addOptionalParam(
92-
"adapterBinaryPath",
93-
"Path to the eth-rpc-adapter binary",
94-
undefined,
95-
types.string,
96-
)
97-
.addOptionalParam(
98-
"adapterEndpoint",
99-
"Endpoint to which the adapter will connect to - default: ws://localhost:8000",
100-
undefined,
101-
types.string,
102-
)
103-
.addOptionalParam(
104-
"adapterPort",
105-
"Port where the adapter will listen on - default: 8545 ",
106-
undefined,
107-
types.int,
108-
)
109-
.addOptionalParam(
110-
"dev",
111-
"Whether to run the adapter in dev mode - default: false",
112-
undefined,
113-
types.boolean,
114-
)
115-
.addOptionalParam(
116-
"buildBlockMode",
117-
"Build block mode for @acala-network/chopsticks",
118-
undefined,
119-
types.string,
120-
)
121-
.addOptionalParam(
122-
"fork",
123-
"Endpoint to fork a live chain using @acala-network/chopsticks",
124-
undefined,
125-
types.string,
126-
)
71+
task(TASK_NODE_POLKAVM, 'Starts a JSON-RPC server for PolkaVM node')
72+
.addOptionalParam('nodeBinaryPath', 'Path to the substrate node binary', undefined, types.string)
73+
.addOptionalParam('rpcPort', 'Port where the node will listen on - default: 8000', undefined, types.int)
74+
.addOptionalParam('adapterBinaryPath', 'Path to the eth-rpc-adapter binary', undefined, types.string)
12775
.addOptionalParam(
128-
"forkBlockNumber",
129-
"Block hash or block number from where to fork",
76+
'adapterEndpoint',
77+
'Endpoint to which the adapter will connect to - default: ws://localhost:8000',
13078
undefined,
13179
types.string,
13280
)
81+
.addOptionalParam('adapterPort', 'Port where the adapter will listen on - default: 8545 ', undefined, types.int)
82+
.addOptionalParam('dev', 'Whether to run the adapter in dev mode - default: false', undefined, types.boolean)
83+
.addOptionalParam('buildBlockMode', 'Build block mode for @acala-network/chopsticks', undefined, types.string)
84+
.addOptionalParam('fork', 'Endpoint to fork a live chain using @acala-network/chopsticks', undefined, types.string)
85+
.addOptionalParam('forkBlockNumber', 'Block hash or block number from where to fork', undefined, types.string)
13386
.setAction(
13487
async (
13588
{
@@ -143,15 +96,15 @@ task(TASK_NODE_POLKAVM, "Starts a JSON-RPC server for PolkaVM node")
14396
fork,
14497
forkBlockNumber,
14598
}: {
146-
nodeBinaryPath: string
147-
rpcPort: number
148-
adapterBinaryPath: string
149-
adapterEndpoint: string
150-
adapterPort: number
151-
dev: boolean
152-
buildBlockMode: "Instant" | "Manual" | "Batch"
153-
fork: string
154-
forkBlockNumber: string
99+
nodeBinaryPath: string;
100+
rpcPort: number;
101+
adapterBinaryPath: string;
102+
adapterEndpoint: string;
103+
adapterPort: number;
104+
dev: boolean;
105+
buildBlockMode: 'Instant' | 'Manual' | 'Batch';
106+
fork: string;
107+
forkBlockNumber: string;
155108
},
156109
{ run, config, userConfig },
157110
) => {
@@ -173,14 +126,12 @@ task(TASK_NODE_POLKAVM, "Starts a JSON-RPC server for PolkaVM node")
173126
fork,
174127
forkBlockNumber,
175128
},
176-
)
129+
);
177130

178-
const nodePath = nodeBinaryPath
179-
? nodeBinaryPath
180-
: userConfig.networks?.hardhat?.nodeConfig?.nodeBinaryPath
131+
const nodePath = nodeBinaryPath ? nodeBinaryPath : userConfig.networks?.hardhat?.nodeConfig?.nodeBinaryPath;
181132
const adapterPath = adapterBinaryPath
182133
? adapterBinaryPath
183-
: userConfig.networks?.hardhat?.adapterConfig?.adapterBinaryPath
134+
: userConfig.networks?.hardhat?.adapterConfig?.adapterBinaryPath;
184135

185136
const server: RpcServer = await run(TASK_NODE_POLKAVM_CREATE_SERVER, {
186137
nodePath,
@@ -189,6 +140,7 @@ task(TASK_NODE_POLKAVM, "Starts a JSON-RPC server for PolkaVM node")
189140

190141
try {
191142
await server.listen(commandArgs.nodeCommands, commandArgs.adapterCommands)
143+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
192144
} catch (error: any) {
193145
throw new PolkaVMNodePluginError(`Failed when running node: ${error.message}`)
194146
}
@@ -248,33 +200,35 @@ task(
248200
? userConfig.networks.hardhat.nodeConfig.rpcPort
249201
: NODE_START_PORT,
250202
MAX_PORT_ATTEMPTS,
251-
)
203+
);
204+
252205
const currentAdapterPort = await getAvailablePort(
253206
userConfig.networks?.hardhat?.adapterConfig?.adapterPort
254207
? userConfig.networks.hardhat.adapterConfig.adapterPort
255208
: ETH_RPC_ADAPTER_START_PORT,
256209
MAX_PORT_ATTEMPTS,
257-
)
210+
);
258211

259212
const nCommands: NodeConfig = Object.assign({}, userConfig.networks?.hardhat?.nodeConfig, {
260213
port: currentNodePort,
261-
})
262-
const aCommands: AdapterConfig = Object.assign(
263-
{},
264-
userConfig.networks?.hardhat?.adapterConfig,
265-
{ adapterPort: currentAdapterPort },
266-
)
214+
});
215+
const aCommands: AdapterConfig = Object.assign({}, userConfig.networks?.hardhat?.adapterConfig, {
216+
adapterPort: currentAdapterPort,
217+
});
218+
267219
const commandArgs = constructCommandArgs({
268220
forking: config.networks.hardhat.forking,
269221
forkBlockNumber: config.networks.hardhat.forking?.blockNumber,
270222
nodeCommands: nCommands,
271223
adapterCommands: aCommands,
272-
})
224+
});
225+
273226

274227
const server = new JsonRpcServer(
275228
userConfig.networks?.hardhat?.nodeConfig?.nodeBinaryPath,
276229
userConfig.networks?.hardhat?.adapterConfig?.adapterBinaryPath,
277-
)
230+
);
231+
278232

279233
try {
280234
await server.listen(commandArgs.nodeCommands, commandArgs.adapterCommands, false)
@@ -300,6 +254,7 @@ task(
300254

301255
process.exitCode = testFailures
302256
return testFailures
257+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
303258
} catch (error: any) {
304259
throw new PolkaVMNodePluginError(`Failed when running node: ${error.message}`)
305260
}

0 commit comments

Comments
 (0)