# Deploying to ZONA with Hardhat

**Hardhat** is one of the most popular development environments for Ethereum. Since ZONA is EVM-compatible, you can use Hardhat to compile, test, and deploy your smart contracts to **ZONA Testnet or Mainnet**  with minimal configuration changes.

***

#### ✅ Prerequisites

Make sure you have:

* Node.js installed (v14+)
* A wallet with ZONA testnet tokens
* `MetaMask` or a private key ready
* RPC/Chain ID details (once available)

***

#### 1. 📦 Create a Hardhat Project

If you haven’t already, initialize a new Hardhat project:

```bash
mkdir zona-hardhat && cd zona-hardhat
npm init -y
npm install --save-dev hardhat
npx hardhat
```

Choose **“Create a basic sample project”** when prompted.

***

#### 2. 🧱 Install Dependencies

For deploying and interacting with contracts:

```bash
npm install --save-dev @nomicfoundation/hardhat-toolbox dotenv
```

Create a `.env` file:

```env
PRIVATE_KEY=your_private_key_without_0x
```

***

#### 3. ⚙️ Configure ZONA Network

In your `hardhat.config.js` file, add the ZONA network:

```js
jrequire("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

module.exports = {
  solidity: "0.8.20",
  networks: {
    zonaTestnet: {
      url: "https://rpc-testnet.zonaprotocol.org", // Replace with actual RPC
      chainId: 9999,                                // Replace with actual Chain ID
      accounts: [`0x${process.env.PRIVATE_KEY}`]
    }
  }
};
```

> Replace the RPC URL and chain ID once ZONA Testnet details are finalized.

***

#### 4. ✍️ Write Your Contract

In `contracts/`, create `ZonaToken.sol`:

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

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

contract ZonaToken is ERC20 {
    constructor(uint256 initialSupply) ERC20("ZonaToken", "ZONA") {
        _mint(msg.sender, initialSupply);
    }
}
```

***

#### 5. 📜 Create a Deployment Script

In `scripts/deploy.js`:

```js
async function main() {
  const ZonaToken = await ethers.getContractFactory("ZonaToken");
  const token = await ZonaToken.deploy(ethers.utils.parseEther("1000000"));
  await token.deployed();
  console.log(`ZonaToken deployed to: ${token.address}`);
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});
```

***

#### 6. 🚀 Deploy to ZONA Testnet

Run:

```bash
npx hardhat run scripts/deploy.js --network zonaTestnet
```

If successful, you'll see:

```bash
ZonaToken deployed to: 0xYourContractAddress
```

***

#### ✅ What’s Next?

* Verify your contract on ZONA Explorer *(Coming Soon)*
* Interact with your contract via CLI, Web3.js, or front-end
* Share testnet contract with your community

***

> You're now building on ZONA  fast, scalable, and developer-first.


---

# 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://zona-protocol.gitbook.io/About-us/smart-contract-development/deploying-to-zona-with-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.
