# Using Hardhat

Here is a detailed explanation of what Hardhat is and a step-by-step guide on how to deploy a TEP1155 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 TEP1155 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 TEP1155Project
cd TEP1155Project
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 TEP1155NFT`.sol` in the `contracts` directory and add your TEP1155NFT code:

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

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

contract TEP1155NFT is ERC1155, Ownable {
    constructor(address initialOwner) ERC1155("") Ownable(initialOwner) {}

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }
}
```

## 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 TEP1155NFT = await ethers.getContractFactory("TEP1155NFT");
  const token = await TEP1155NFT.deploy();
  await token.deployed({ gasLimit: 6000000 });

  console.log("TEP1155NFT 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.coms",
      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 TEP1155 token contract using Hardhat. This guide covered the entire process from setting up the Hardhat project to deploying the contract.


---

# 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.tan.live/getting-started/developer-guide/deploy-smart-contracts/tep-1155/using-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.
