# 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}
```
