# Hardhat

## Using Hardhat <a href="#using-hardhat" id="using-hardhat"></a>

### 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.

### Setting up the development environment <a href="#setting-up-the-development-environment" id="setting-up-the-development-environment"></a>

There are a few technical requirements before we start. Please install the following: Requirements:

### Installing <a href="#installing" id="installing"></a>

There are a few technical requirements before we start. Please install the following: Requirements:

* Windows, Linux or Mac OS X
* [Node.js v8.9.4 LTS or later](https://nodejs.org/en/)
* [Git](https://git-scm.com/)

First, you need to create an empty project `npm init --yes`

Once your project is ready, you should run

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

It's recommeded to install some dependencies.

```
npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers
```

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

### Create A Project <a href="#create-a-project" id="create-a-project"></a>

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

```
mkdir DogeLoop
cd DogeLoop
```

* Intialize your project:

```
$ 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 empty hardhat.config.js
  Quit
```

Once this project is initialized, you'll now have a project structure with the following items:

* contracts/: Directory for Solidity contracts
* scripts/: Directory for scriptable deployment files
* test/: Directory for test files for testing your application and contracts
* hardhat-config.js: Hardhat configuration file

#### Create Contract <a href="#create-contract" id="create-contract"></a>

You can write your own smart contract or download the LRC20 token smart contract template.

#### Config Hardhat for TC <a href="#config-hardhat-for-tc" id="config-hardhat-for-tc"></a>

* Go to hardhat.config.js
* Update the config with nc-network-crendentials.

```
require("@nomiclabs/hardhat-waffle");
require('@nomiclabs/hardhat-ethers');
const { mnemonic } = require('./secrets.json');

// This is a sample Hardhat task. To learn how to create your own go to
// https://hardhat.org/guides/create-task.html
task("accounts", "Prints the list of accounts", async () => {
  const accounts = await ethers.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

// You need to export an object to set up your config
// Go to https://hardhat.org/config/ to learn more

/**
 * @type import('hardhat/config').HardhatUserConfig
 */
module.exports = {
  defaultNetwork: "mainnet",
  networks: {
    localhost: {
      url: "http://127.0.0.1:8545"
    },
    hardhat: {
    },
    testnet: {
      url: "https://api.testnetloop.com",
      chainId: 14441,
      gasPrice: 20000000000,
      accounts: {mnemonic: mnemonic}
    },
    mainnet: {
      url: "https://api.mainnetloop.com/",
      chainId: 155551,
      gasPrice: 20000000000,
      accounts: {mnemonic: mnemonic}
    }
  },
  solidity: {
  version: "0.5.16",
  settings: {
    optimizer: {
      enabled: true
    }
   }
  },
  paths: {
    sources: "./contracts",
    tests: "./test",
    cache: "./cache",
    artifacts: "./artifacts"
  },
  mocha: {
    timeout: 20000
  }
};
```

Note

It requires mnemonic to be passed in for Provider, this is the seed phrase for the account you'd like to deploy from. Create a new `.secret` file in root directory and enter your 12 word mnemonic seed phrase to get started. To get the seedwords from metamask wallet you can go to Metamask Settings, then from the menu choose Security and Privacy where you will see a button that says reveal seed words.

#### Compile Contract <a href="#compile-contract" id="compile-contract"></a>

To compile a Hardhat project, change to the root of the directory where the project is located and then type the following into a terminal:

```
npx hardhat compile
```

### Deploying on LOOP Network <a href="#deploying-on-loop-network" id="deploying-on-loop-network"></a>

Run this command in root of the project directory:

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

> Remember your address, transaction\_hash and other details provided would differ, Above is just to provide an idea of structure.

**Congratulations!** You have successfully deployed LRC20 Smart Contract. Now you can interact with the Smart Contract.

You can check the deployment status here: [https://explorer.testnetloop.com](https://explorer.testnetloop.com) or [https://explorer.mainnetloop.com/](https://explorer.mainnetloop.com/)
