/contracts-base-hardhat

Primary LanguageTypeScriptMIT LicenseMIT

Smart contract development base - Hardhat

The setup in this repository can be used as a quick starting point for smart contract development.

A version using Truffle is available here.

Setup

To run the project you need Node.js development environment.

Pull the repository from GitHub, then install its dependencies by executing this command:

npm install

Certain actions, like deploying to a public network or verifying source code on block explorers, need environment variables in a file named .env. See .env.example for more info.

Contract deployment

To deploy the smart contracts to a network, replace [networkName] with the name of the network and [scriptName] with the name of the script you wish to run in this command:

npx hardhat run scripts/[scriptName] --network [networkName]

Networks can be configured in hardhat.config.ts. We've preconfigured the following:

  • hardhat (for local testing, default)
  • ethereum (Ethereum Mainnet)
  • goerli (Görli Ethereum Testnet)
  • sepolia (Sepolia Ethereum Testnet)
  • bsc (BNB Smart Chain)
  • bsctest (BNB Smart Chain Testnet)
  • polygon (Polygon Mainnet (formerly Matic))
  • mumbai (Matic Mumbai Testnet)
  • gnosis (Gnosis Chain (formerly xDai Chain))
  • arbitrum (Arbitrum One (Mainnet))
  • base (Base Mainnet)
  • optimism (Optimism Mainnet)
  • cronos (Cronos Mainnet)
  • mantle (Mantle Network Mainnet)
  • ontology (Ontology EVM Mainnet)
  • linea (Linea Mainnet)
  • cyber (Cyber Mainnet)
  • taiko (Taiko Mainnet)
  • blast (Blast)
  • xlayer (X Layer Mainnet)
  • coredao (Core Blockchain Mainnet)
  • metis (Metis Andromeda Mainnet)
  • neon (Neon EVM Mainnet)
  • polygonzk (Polygon zkEVM)
  • scroll (Scroll)
  • zeta (ZetaChain Mainnet)
  • mint (Mint Blockchain Mainnet)
  • mode (Mode Network Mainnet)
  • avalanche (Avalanche C-Chain)
  • lisk (Lisk Mainnet)

Verification

For source code verification on block explorers, you can use the Verify plugin:

npx hardhat verify [contractAddress] [constructorArguments] --network [networkName]

For more detailed instructions, check out it's documentation here.

Linting

The project uses Solhint for Solidity smart contracts and ESLint for TypeScript files. To lint all files, simply execute:

npm run lint

To lint only the Solidity files:

npm run lint-contracts

To lint only the TypeScript files:

npm run lint-ts

Tests

To run the unit tests written for this project, execute this command in a terminal:

npm test

To run the unit tests only in a specific file, just append the path to the command. For example, to run tests just for Greeter:

npm test test/Greeter.spec.ts

Documentation

The documentation for the contracts is generated via the solidity-docgen package. Run the tool via the following command:

npm run docgen

The output can be found in the docs folder.