Creating a custom task
Let’s now define a task that prints the myAccount address of the network Hardhat is connected to, with a customizable title.
Defining the task in your HardhatPlugin object
Section titled “Defining the task in your HardhatPlugin object”Tasks are defined in the tasks property of the HardhatPlugin object.
If you open packages/plugin/src/index.ts, you’ll find the tasks property, an array of task definitions. You already have one:
task("my-task", "Prints a greeting.") .addOption({ name: "who", description: "Who is receiving the greeting.", type: ArgumentType.STRING, defaultValue: "Hardhat", }) .setAction(() => import("./tasks/my-task.js")) .build();Replace it with this code:
task("my-account", "Prints your account.") .addOption({ name: "title", description: "The title to use before printing the account.", type: ArgumentType.STRING, defaultValue: "My account:", }) .setAction(() => import("./tasks/my-account.js")) .build(),You’ll get an error in the highlighted line because a file is missing. We’ll create it in the next section.
Creating a task action file
Section titled “Creating a task action file”The task action is defined in a separate file that’s only imported when the task runs.
Create the file packages/plugin/src/tasks/my-account.ts with this code:
import { HardhatRuntimeEnvironment } from "hardhat/types/hre";
interface MyAccountTaskArguments { title: string;}
export default async function ( taskArguments: MyAccountTaskArguments, hre: HardhatRuntimeEnvironment,) { const conn = await hre.network.connect(); console.log(taskArguments.title); console.log(conn.myAccount);}Here we define the task arguments interface and action (the function that executes when the task runs).
The task action must be an async function and exported as default.
You can remove packages/plugin/src/tasks/my-task.ts, as it’s no longer needed.
Trying out your task
Section titled “Trying out your task”To try out your task, build the plugin and run this in the example project:
pnpm hardhat my-account --title MiCuentaMiCuenta0x70997970c51812dc3a010c7d01b50e0d17dc79c8