Deploy a contract with Hardhat
Hardhat is one of the popular smart contract development frameworks. It is the ZKFair’s preferred framework, and therefore used in the ZKFair as a default for deploying and automatically verifying smart contracts.
This document is a guide on how to deploy a smart contract on the ZKFair network using Hardhat.
Hardhat smart contract
mkdir <project-name>;cd <project-name>Initialize a project with Hardhat:
npx hardhat.Next, (… To avoid failure … please go slow with this cli dialogue…),
So then,
Press
<ENTER>to set the project root.Press
<ENTER>again to accept addition of.gitignore.Type
nto reject installingsample project's dependencies.The idea here is to postpone installing dependencies to later steps due to a possible version-related bug.
Open the
hardhat.config.jsfile and paste the below code:require("dotenv").config(); require("@nomicfoundation/hardhat-toolbox"); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { solidity: "0.8.9", paths: { artifacts: "./src", }, networks: { zkEVM: { url: `https://testnet-rpc.zkfair.io`, accounts: [process.env.ACCOUNT_PRIVATE_KEY], }, }, };Note that a different path to artifacts is added so that the React app will be able to read the contract ABI within the
srcfolder.
Add scripts
Create a new file, in the contracts folder, named
Counter.sol:touch contracts/Counter.sol.Copy the below code and paste it in the Counter contract code:
Create a new file in the scripts folder
deploy-counter.js:touch scripts/deploy-counter.js.Add the code below to the
deploy-counter.jsfile:Before compiling the contract, you need to install the toolbox. You may need to change directory to install outside the project. Use this command:
Compile your contract code (i.e., go back to the project root in the CLI):
Now run the scripts:
Here’s an output example:
Counter contract deployed tohttps://explorer.public.zkevm-test.net/address/0x5FbDB2315678afecb367f032d93F642f64180aa3
Update frontend
The next step is to turn Counter.sol into a dApp by importing the ethers and the Counter file, as well as logging the contract’s ABI.
Include the below code in the
App.jsfile:Update the
counterAddressto your deployed address.It is the hexadecimal number found at the tail-end of the output of the last
npx hardhat run ...command and looks like this0x5FbDB2315678afecb367f032d93F642f64180aa3.It must be pasted in the
App.jsto replaceyour-contract-address. Be sure to use the deployed address from your own implementation!
Update frontend counter to read from blockchain. Include the below code in the
App.jsfile:Also, to import
useEffect, insert it like this:To be able to track a loader, add this to your state:
This is within the
App()function.
Let frontend counter write to the blockchain by adding the below
requestAccountandupdateCounterfunctions:Place these two functions above the
readCounterValue()function in theApp.jsfile.Replace the
incrementCounterfunction with this one:Update the increment button code to:
Now, run the Counter dApp by simply using npm start in CLI at the project root.
Congratulations for reaching this far. You have successfully deployed a dApp on the ZKFair testnet.
Last updated