# Hardhat

## What is Hardhat <a href="#what-is-hardhat" id="what-is-hardhat"></a>

Hardhat is a development environment to compile, deploy, test, and debug your smart contract.

## Installation

Hardhat is used through a local installation in your project.

To install it, you need to create an npm project by going to an empty folder, running `npm init`, and following its instructions. Once your project is ready, you should run

```
npm install --save-dev hardhat
```

To use your local installation of Hardhat, you need to use `npx` to run it (i.e. `npx hardhat`).<br>

Hardhat will let you know how, but, in case you missed it, you can install them with `npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers`

## Quick Start

To create your Hardhat project run `npx hardhat` in your project folder:

```
$ npx hardhat
888    888                      888 888               888
888    888                      888 888               888
888    888                      888 888               888
8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888

Welcome to Hardhat v2.0.8

? What do you want to do? …
❯ Create a sample project
  Create an advanced sample project
  Create an advanced sample project that uses TypeScript
  Create an empty hardhat.config.js
  Quit
```

If you select *Create a sample project* a simple project creation wizard will ask you some questions and create a project with the following structure:<br>

```
contracts/
scripts/
test/
hardhat.config.js
```

* `contracts/` is where the source files for your contracts should be.
* `test/` is where your tests should go.
* `scripts/` is where simple automation scripts go

### Create Contract

You can write your own smart contract or download any contract written by Solidity.

### Config Hardhat for Mainnet

* Go to hardhat.config.js
* Update the config with crendentials.

```
module.exports = {
  defaultNetwork: "mcpnet",
  networks: {
    hardhat: {
    },
    mcpnet: {
      url: "https://mainnet.ccn.org",
      accounts: [privateKey1, privateKey2, ...]
    }
  },
  solidity: {
    version: "0.5.15",
    settings: {
      optimizer: {
        enabled: true,
        runs: 200
      }
    }
  },
  paths: {
    sources: "./contracts",
    tests: "./test",
    cache: "./cache",
    artifacts: "./artifacts"
  },
  mocha: {
    timeout: 40000
  }
}
```

### Compile

To compile your contracts in your Hardhat project, use the built-in `compile` task:

```
$ npx hardhat compile
Compiling...
Compiled 1 contract successfully
```

## Deploying your contract

You can deploy the `Greeter` contract from the sample project with a deploy script `scripts/deploy.js` like this:

```
async function main() {
  // We get the contract to deploy
  const Greeter = await ethers.getContractFactory("Greeter");
  const greeter = await Greeter.deploy("Hello, Hardhat!");

  await greeter.deployed();

  console.log("Greeter deployed to:", greeter.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });
```

As general rule, you can target any network configured in the `hardhat.config.js`

```
$npx hardhat run --network mcpnet scripts/deploy.js
```

## Reference

{% embed url="<https://hardhat.org/getting-started>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.oortech.com/oort/developers/mainnet-developers/smart-contract-developers/hardhat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
