# Deploy a contract using Hardhat

## What is Hardhat?

[**Hardhat**](https://hardhat.org/tutorial/setting-up-the-environment) is an automatic task builder for Ethereum-based blockchains. With its abundant features it can help developers to manage and automate repetitive tasks in building smart contracts and Dapps.

**Hardhat** has a built-in network called **Hardhat Network**. It is a local Ethereum network for developers to deploy, test, and debug **contracts**.

## Prepare the environment

### Install Node.js

Hardhat is written in JavaScript. So we should make sure that Node.js (>=12.0) is installed.

{% tabs %}
{% tab title="macOS" %}

```shell
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.2/install.sh | bash
nvm install 12
nvm use 12
nvm alias default 12
npm install npm --global 
```

{% endtab %}

{% tab title="Ubuntu" %}

```shell
sudo apt update
sudo apt install curl git
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install nodejs
```

{% endtab %}
{% endtabs %}

#### Install Hardhat

We can start installing Hardhat after the Node environment is ready.

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

## Contract deployment

### Download

Clone the repository from GitHub

```
git clone git@github.com:relationlabs/relation-sbt.git
```

### Prepare the compilation environment

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

### Compile the contract

```
cd relation-sbt
npm install
npx hardhat compile
```

### Deploy the contract

We can deploy the contract on different environment by specifying the parameter “network”, which can be set to localhost, testnet or mainnet environment.

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


---

# 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://relationlabs.gitbook.io/protocol/appendix/deploy-a-contract-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.
