hardhat-example provides a simple smart contract deployment framework using the Hardhat development kit on Quai Network.
This project demonstrates a basic Hardhat use case. It comes with a few sample contracts, and a script that deploys a contract.
- quai-hardhat development toolkit
- SolidityX
- nodejs
@nomicfoundation/hardhat-toolboxquaisandquais-pollingdotenvchild-processif you intend to use thedeployAllChains.jsscript
- Clone
hardhat-example
git clone https://github.com/dominant-strategies/hardhat-example- Install package dependencies
npm iVisit the SolidityX Repository for instructions on how to clone and build the SolidityX compiler for your specific operating system.
Once you've built the SolidityX compiler, you'll need to add path to your solc binary into the customCompilerPath variable in the hardhat.config.js file. The file already includes common paths for MacOS and Linux as comments.
- Copy
.env.distto.env.
cp .env.dist .env- Define network variables inside of the
.envfile.- Private Keys
- The sample environment file is configured with a placeholder private key for each chain.
- Replace the placeholder private key for each chain with your own private key that corresponds to the address you want to deploy from.
- You cannot use the same private key for each chain.
- Chain ID
- Depending on the network you're deploying to, you'll need to set the
CHAINIDvariable to the correct chain ID.- Local:
1337 - Testnet:
9000 - Devnet:
12000
- Local:
- Depending on the network you're deploying to, you'll need to set the
- RPC Endpoints
- Private Keys
- Configure the
deploy.jsscript to specify the contract you'd like to deploy- Pass the name of the contract into the hardhat runtime contract definition
- Pass relevant constructor arguments into the deploy command (i.e. the intial greeting for the
greeter.solcontract)
- Compile contracts using
npx hardhat compile - Deploy contract to a single chain using
npx hardhat run scripts/deploy.js- This will deploy to the
defaultNetworkspecified in yourhardhat.config.js - You can specify a network other than the
defaultNetworkby passing the--network networkNameflag to the deploy command. ReplacenetworkNamewith one of the options below. - Available
networkNameare:cyprus1cyprus2cyprus3paxos1paxos2paxos3hydra1hydra2hydra3
- This will deploy to the
The deployAllChains.js script has been included as a simple method of automating deployments across all chains within Quai Network. It utilizes the child-process package to run the deploy.js script for each chain.
You can specify which chains you'd like to multi-deploy to by modifying the deployAllChains.js script. Contract and deployment specific configuration should be done in the deploy.js script.
You can run the multi-deploy script using:
npx hardhat run scripts/deployAllChains.jsThe deployQRC20.js and deployQRC721.js scripts have been included as a simple method of deploying QRC20 and QRC721 contracts to a single chain within Quai Network.
To specify token details (token name, ticker, supply, etc) for either the QRC20 or QRC721 contract, modify constructor args inside of the contracts before compiling.
The deployAllChains.js script can be configured to run either of the QRC scripts for each chain by changing scripts/deploy.js to scripts/deployQRC20.js or scripts/deployQRC721.js in this line:
const deployProcess = spawn('npx', ['hardhat', 'run', '--network', chain, 'scripts/deploy.js'])Hardhat has a number of other useful CLI commands.
npx hardhat compile
npx hardhat clean
npx hardhat test
npx hardhat help