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.
hardhat
: Development toolkit- SolidityX: A fork of the Solidity compiler that supports Quai Network's QRC20 and QRC721 token standards
- Nodejs: Javascript runtime engine
@nomicfoundation/hardhat-toolbox
: Hardhat utilsquais
andquais-polling
: Javascript SDK for interacting with Quai Networkquai-hardhat-plugin
: A plugin that installs the SolidityX compiler for use with Hardhat.dotenv
: A zero-dependency module that securely loads environment variables.
- Clone
hardhat-example
git clone https://github.com/dominant-strategies/hardhat-example
- Install package dependencies
npm i
There are two methods of installing the SolidityX compiler for use with Hardhat:
- Install the SolidityX compiler via
quai-hardhat-plugin
(Recommended) - Install and build the SolidityX compiler from source
If you've installed quai-hardhat-plugin
already, the SolidityX compiler will be installed automatically when you run npx hardhat compile
for MacOS and Linux users. Windows is not currently supported by the plugin.
Note: Building the compiler from source still requires the quai-hardhat-plugin
to be installed.
Visit 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.dist
to.env
.
cp .env.dist .env
- Define network variables inside of the
.env
file.- 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
CHAINID
variable 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
- The
deploy.js
script is configured to deploy thegreeter.sol
contract by default.- Pass the name of the greeter contract into the hardhat runtime contract definition
- Pass the initial greeting constructor argument into the deploy command
- Compile greeter contract using
npx hardhat compile
- Deploy greeter to a single chain using
npx hardhat run scripts/deploy.js
- This will deploy to the
defaultNetwork
specified in yourhardhat.config.js
- You can specify a network other than the
defaultNetwork
by passing the--network networkName
flag to the deploy command. ReplacenetworkName
with one of the options below. - Available
networkName
are:cyprus1
cyprus2
cyprus3
paxos1
paxos2
paxos3
hydra1
hydra2
hydra3
- This will deploy to the
The 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 the constructorArgs
object in the deploy script. Then compile the contract via npx hardhat compile
and deploy via npx hardhat run scripts/deployQRC20.js
or npx hardhat run scripts/deployQRC721.js
.
Hardhat has a number of other useful CLI commands.
npx hardhat compile
npx hardhat clean
npx hardhat test
npx hardhat help