Deploy and Verify Smart Contracts with Hardhat Deploy plugin
** Refer to this repository for project setup. **
Hardhat is a development environment to compile, deploy, test, and debug smart contracts for EVM compatible blockchains.
This tutorial will cover how to use the hardhat-deploy plugin and verify deployed contracts on the Telos explorer on mainnet.
- Setup Hardhat project with the Hardhat-deploy plug-in
- Deploy contracts using the plug-in
- Verify the contracts on sourcify
Setup Local Environment
The first step is to set up the local environment. If you are not familiar with how to set up a local hardhat project, refer to this page.
- Add a deploy folder in the primary directory
Insert the following code block into the deploy folder under filename - deploy.js
module.exports = async ({ getNamedAccounts, deployments }) => {
const { deploy } = deployments;
const { deployer } = await getNamedAccounts();
await deploy("Greeter", {
from: deployer,
args: ["Hello"],
log: true,
});
};
- Add a blank deployment folder in root directory. The JSON ABI and byte will be pasted here automatically when a deploy command is executed.
Installations
Package Checklist
** Make sure these packages are included in your package.json list before running a deploy command.**
- @nomiclabs/hardhat-ethers
- @nomiclabs/hardhat-waffle
- chai
- ethereum-waffle
- ethers
- hardhat
- @openzeppelin/contracts
- dotenv
Run npm install <package_name>
if any of the above packages are missing.
Hardhat Plug-in
npm install -D hardhat-deploy
Import the plug-in in your hardhat.config.js file
require("hardhat-deploy");
When taking into account that Hardhat-deploy-ethers is a fork of @nomiclabs/hardhat-ethers, and other plug-ins may have have an hardcoded dependency on @nomiclabs/hardhat-ethers, the best method to install hardhat-deploy-ethers and ensure compatibility is the following:
npm install --save-dev @nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers ethers
Remember to add: require("@nomiclabs/hardhat-ethers");
at the top of your hardhat.config.js file.
Deploy
The following is what the Hardhat config file should like:
require("@nomiclabs/hardhat-waffle");
require("dotenv").config({ path: ".env" });
require("hardhat-deploy");
require("@nomiclabs/hardhat-ethers");
module.exports = {
solidity: "0.8.1",
defaultNetwork: "telos_testnet",
namedAccounts: {
deployer: 0,
},
networks: {
telos_testnet: {
url: "https://testnet.telos.net/evm",
accounts: [process.env.TELOS_TESTNET_PRIVATE_KEY],
chainId: 41,
},
},
};
Run Deploy command
npx hardhat --network telos_testnet deploy
Output
deploying "Greeter" (tx: 0xc800f2bfa3ef75768045d885210a8dfc4148ba2f9838f27113d40db7d26e0024)...: deployed at 0x5C94BA8feC1a9FedE0a1Fdd55f2a860Ad97467ce with 496906 gas
Verify
You can easily verify smart contracts with the hardhat deploy sourcify command from the plugin.
npx hardhat --network telos_testnet sourcify
Console output should result in contract printed and green verification text printed.
Following these steps will enable you to successfully verify the contract.