How to use the command 'hardhat' (with examples)
Hardhat is a comprehensive development environment designed for Ethereum software development. It assists developers by streamlining the process of building, testing, and deploying smart contracts on the Ethereum blockchain. Hardhat provides a range of functionalities that include compiling contracts, running tests, and managing Ethereum nodes. This tool is essential for developers aiming to create robust, scalable, and efficient Ethereum-based applications.
Use case 1: List available subcommands (or create a new project if no configuration exists)
Code:
hardhat
Motivation:
The initial step when using any development tool is understanding its capabilities and subcommands. By running this simple command, developers can familiarize themselves with the various options provided by Hardhat. If a Hardhat project hasn’t been set up yet, this command also directs users towards creating a new project, serving as a foundation for further development.
Explanation:
hardhat
: The base command for interacting with the Hardhat environment. Without additional arguments or flags, it lists all available subcommands unless no configuration exists, in which case it offers the option to create a new project.
Example Output:
When executed within an existing Hardhat project:
Available subcommands:
clean Deletes the cache and all artifacts
compile Compiles the entire project, building all artifacts
console Opens a node.js REPL context with the Hardhat runtime
run Executes a user-provided script after compiling the project
test Runs Mocha tests
node Starts a local Ethereum node for testing
Without a configuration:
Welcome to Hardhat v2.x.x
? What do you want to do? …
❯ Create a new JavaScript project
Create a TypeScript project
Use case 2: Compile the current project and build all artifacts
Code:
hardhat compile
Motivation:
Compiling is a crucial step in the development process as it transforms the high-level Solidity code into machine-readable bytecode and generates necessary artifacts for interaction. This command ensures developers have the latest state of compiled contracts, ready for deployment or testing.
Explanation:
hardhat compile
: This command instructs Hardhat to compile all smart contracts within the project’s ‘contracts’ directory. It automatically detects changes and recompiles only what has been altered since the last compile, saving time.
Example Output:
Compiling 2 files with 0.8.0
Compiled 2 out of 2 files successfully
Use case 3: Run a user-defined script after compiling the project
Code:
hardhat run path/to/script.js
Motivation:
Scripts help automate tasks such as deploying contracts, interacting with them, or performing complex operations that might need a sequence of blockchain transactions. This command is ideal for executing custom scripts created by developers to streamline their workflow.
Explanation:
hardhat run
: This command specifies that a script should be executed.path/to/script.js
: This argument denotes the path to the script file that developers want to run. The script should be written in JavaScript (or TypeScript if configured) and include the logic for interacting with compiled contracts.
Example Output:
Assuming the script deploys a contract to a local network, you might see:
Contract successfully deployed to address: 0x123456789abcdef...
Use case 4: Run Mocha tests
Code:
hardhat test
Motivation:
Testing is a cornerstone of reliable software development, especially in blockchain where bugs can have costly consequences. Hardhat integrates with Mocha, a feature-rich JavaScript testing framework, allowing developers to write and execute tests for their smart contracts to ensure correctness and robustness.
Explanation:
hardhat test
: This command runs all test files located in the default test directory, ensuring that all written tests execute to verify that smart contracts behave as expected.
Example Output:
Contract: Token
✓ Should return the correct name (45ms)
✓ Should initialize with the correct token supply (33ms)
2 passing (78ms)
Use case 5: Run all given test files
Code:
hardhat test path/to/file1.js path/to/file2.js
Motivation:
In a larger codebase, developers may want to run specific test files rather than the entire suite, especially when focusing on a particular feature or bug fix. This allows for targeted testing and faster iterations during development.
Explanation:
hardhat test
: Initiates the testing process.path/to/file1.js path/to/file2.js
: These are the paths to specific test files that the developer wants to run. This option helps in targeting and isolating tests for certain contracts or functionalities.
Example Output:
Contract: Crowdsale
✓ Should accept payments (50ms)
✓ Should allocate tokens (60ms)
2 passing (110ms)
Use case 6: Start a local Ethereum JSON-RPC node for development
Code:
hardhat node
Motivation:
A local Ethereum node is invaluable for testing and development as it simulates real blockchain conditions without incurring costs on actual networks. This is essential for developers to test their contracts in a safe and controlled environment.
Explanation:
hardhat node
: Launches a local Ethereum node. This node replicates Ethereum’s mainnet-like function, offering a sandbox for developers where they can deploy contracts, run tests, and simulate transactions as if on a real blockchain.
Example Output:
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/
Use case 7: Start a local Ethereum JSON-RPC node with a specific hostname and port
Code:
hardhat node --hostname hostname --port port
Motivation:
Customizing the network settings is sometimes necessary, especially in complex setups where nodes might need specific configurations to interact correctly with other services or tools. This command allows developers to tailor the node’s network interface to fit their unique requirements.
Explanation:
hardhat node
: Starts the Ethereum node.--hostname hostname
: Specifies the hostname for the JSON-RPC server.--port port
: Specifies the port number on which the server will listen.
Example Output:
Started JSON-RPC server at http://custom-hostname:30303/
Use case 8: Clean the cache and all artifacts
Code:
hardhat clean
Motivation:
Over time, a development project accumulates various compiled artifacts and cached files. This can lead to discrepancies or build errors if the environment becomes cluttered. Cleaning the cache and artifacts helps ensure a fresh build environment and can resolve issues related to stale or corrupted data.
Explanation:
hardhat clean
: This command removes all static artifacts and cache files generated during the compilation and testing processes. It effectively resets the build environment to ensure everything is up to date and built from scratch on the next operation.
Example Output:
Artifacts and cache cleaned
Conclusion:
Hardhat is an essential tool for Ethereum developers, providing a robust environment for managing the entire development lifecycle of smart contracts. From compiling and testing to node management and cleanup, Hardhat ensures developers have everything they need to build efficient, secure Ethereum applications. These examples showcase the versatility and comprehensiveness of Hardhat in streamlining the development process.