> For the complete documentation index, see [llms.txt](https://docs.tan.live/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tan.live/getting-started/developer-guide/deploy-smart-contracts/tep-20/using-hardhat.md).

# Using Hardhat

Here is a detailed explanation of what Hardhat is and a step-by-step guide on how to deploy a TEP20 contract using hardhat:

## What is Hardhat ?

***Hardhat*** is a development environment for Ethereum and Ethereum-compatible blockchains. It provides a comprehensive toolset for smart contract development, testing, debugging, and deployment.

## Step-by-Step Guide to Deploy Contract

Follow these steps to deploy a TEP20 contract using Hardhat:

## 1.Install Hardhat

Ensure you have Node.js and npm installed. Then, create a new directory for your project and initialize it with Hardhat:

```
mkdir TEP20TokenProject
cd TEP20TokenProject
npm init -y
npm install --save-dev hardhat
```

## 2.Initialize Hardhat Project

Run the following command to initialize a Hardhat project:

```
npx hardhat
```

Follow the prompts to create a new Hardhat project, selecting the appropriate options for your needs.

## 3.Write the Contract

Create a new file `TEP20Token.sol` in the `contracts` directory and add your TEP20 token code:

```
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract TEP20Token is ERC20, Ownable {
    constructor()
        ERC20("MyToken", "MTK")
        Ownable(msg.sender)
    {}

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }
}
```

## **4.Write the Deployment Script**

Create a new file `deploy.js` in the `scripts` directory to write your deployment script:

```
async function main() {

  const [deployer] = await ethers.getSigners();
  console.log("Deploying the contracts with the account:",await deployer.getAddress());
  console.log("Account balance:", (await deployer.getBalance()).toString());
  
  const TEP20Token = await ethers.getContractFactory("TEP20Token");
  const token = await TEP20Token.deploy();
  await token.deployed({ gasLimit: 6000000 });

  console.log("TEP20Token address:", token.address);
}
main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });
```

## **5.Configure Network**

Make sure to install the suggested versions of the packages:

```
npm install --save-dev @nomiclabs/hardhat-ethers@^2.2.3 @nomiclabs/hardhat-waffle@^2.0.6 @openzeppelin/contracts@^5.0.2 @uniswap/v3-periphery@^1.0.1 bignumber.js@^9.1.2 dotenv@^16.4.5 ethereum-waffle@^4.0.10 ethers@5.4 hardhat@^2.22.4
```

**Create a \``` .env` `` file** in the root of your project directory to store your private key.

```
// In .env file

YOUR_PRIVATE_KEY = "YOUR_PRIVATE_KEY"
```

Update the `hardhat.config.js` file to include network configurations:

```
require("@nomiclabs/hardhat-waffle");

/** @type import('hardhat/config').HardhatUserConfig */
const privateKey = process.env.YOUR_PRIVATE_KEY;;
module.exports = {
  solidity: {
   version: "0.8.20",
   settings: {
    optimizer:{
      enabled:true,
      runs:1000,
      details:{yul:false},  
    }
   }
  },
  networks: {
    taral: {
      chainId: 4442,
      url: "https://devnet-rpc1.tanledger.com",
      accounts: [privateKey],
    },
  },
};
```

## 6.Deploy the Contract

Run the deployment script with Hardhat:

```
npx hardhat run scripts/deploy.js --network tan
```

***Congratulations!!*** You have successfully deployed your TEP20 token contract using Hardhat. This guide covered the entire process from setting up the Hardhat project to deploying the contract.
