Deploying a Smart Contract With Hardhat and Alchemy on an Ethereum Network
Tags: hardhat, solidity, web3, alchemy
Published: 2022-03-25 13:42:49

So, you've written your smart contract and maybe even played around with it a little on remix. But now you want to share it with all your friends and possibly even the world so that they can marvel at the wonder you've just created. 

I personally write my contracts on [Remix IDM](https://remix.ethereum.org/), compile it, deploy on the javascript machine, play around with it a little, and test out the functions. 

But Remix could be unreliable sometimes and you might want a more elaborate way of writing your contracts, including test and deployment scripts. For that, I personally like to use Hardhat and Alchemy. They are very easy to setup and use, but could be a little bit of a hassle if you have not used them before.

Because of that, i'll be sharing the documented steps that I have been using to get my dApps out there through Hardhat and Alchemy.

**Alchemy** Helps us broadcast our transaction on the blockchain when we deploy our contract. So, it is kind of like telling all the other nodes "hey everyone! A new contract has just been deployed and it's over here!!" 

To get started with Alchemy, just head on over to their [website](https://dashboard.alchemyapi.io/) and create an account with them. 

After you have done that and have gotten logged in to your dashboard, click on **Create App** button. It's near the top to your right. ![Alchemy dashboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z1kqj7rbajtc4hxmwiwb.png)

A pop up will come up and you can go ahead and enter the name of the app you want to create, and add some description of the application. This is for you, by the way. To help you remember what the application is about.  

For the environment, I usually leave it as development. You can select the chain you'd be working on. I've personally worked with ethereum and polygon. The last dropdown is the network selection. You can either choose the main net of your network(where real money is paid and used, by the way) or choose from a test net(where it's free and fake money is used). 

![choosing your environment on alchemy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmr01ljwjuwigfqivo1n.png) 

Next, copy the Key to your app and save it somewhere, we're going to need it later. You want to copy the HTTP option for this. 

![Alchemy API keys](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uzqc8et8jbhlwowldkav.png)

Now that we're done with Alchemy, open up your terminal and create a new directory with your project name, then cd into the directory. 

In your project directory, run the following command; 
```sh
npm init -y
```

You'll need npm installed for that to work, by the way. You can learn about installing npm [here](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/)

Then run 
```sh
npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers
```

To make sure that everything is running just fine, go ahead and run
```sh
npx hardhat compile
npx hardhat test
```
It should show you that your test has passed 

When you check the contracts, test, and scripts folder you'd find some test files already there. You can go on and delete those. But don't delete the whole folders please, just the files inside of them.

Create a new file in your contracts folder and name it with the name of the contract you want to create. This is where you will write your contract code in solidity. So, you can just go ahead and do that. Alternatively, you could also copy your code from somewhere and paste it here. I usually first try out my contract code in Remix before transferring it here.

When you are done writing your contract, the next thing you'll have to do is write a 'deploy' script in your scripts folder. You can name the file 'deploy.js' This is what we are going to use to deploy your contract and get it on the blockchain for the world to see 🏄‍♂️ 

Here's an example of a simple contract script i've written

![smart contract file](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5k9lpym1mppv12rrd4kk.png)

And the deployment script here 👇

![deployment script](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ke9nqmmiez3k78n9t3lv.png) 

The last thing you'd need to do before deploying your contract is going to your 'hardhat.config.js' file and change it to this 
```js
require("@nomiclabs/hardhat-waffle");

module.exports = {
  solidity: "0.8.0",
  networks: {
    rinkeby: {
      url: "YOUR_ALCHEMY_API_URL",
      accounts: ["YOUR_PRIVATE_ACCOUNT_KEY"]
    },
  },
};
```
Edit the file and add your alchemy url for the app. Also you'll need to add your private account key. 

Finally, deploy your application to the blockchain by running this on your terminal 👇
```sh
npx hardhat run scripts/deploy.js --network {your blockchain network}
```

Note: you need to replace "{your blockchain network}" with the actual name of your network. So, if i'm deploying to rinkeby for example, it will look like this. 
```sh
npx hardhat run scripts/deploy.js --network rinkeby
```

That's it!!! you've successfully deployed your app 🎉 🎉 🎊