hardhat-simple-storage/README.md
2024-08-06 20:52:02 +08:00

5.8 KiB

Practical Sample With Hardhat + Solidity

A fully functional Smart Contract wrriten with solidity, node.js and using Hardhat to show usage of all kinds of standard development features, including:

  • running blockchain node in localhost - hardhat & ganache
  • solidity prettier code beautifier setup
  • standard of developing Smart Contract with solidity
  • standard of developing node.js script to use hardhat library efficiently
  • check gas fee & gas price in real-time, with usage of coverage
  • auto verify contract on Etherscan.io
  • creating automate test cases - unit test & staging test
  • creating tasks etc.
  • refactor codes to reduce gas fee
  • write code in best practice, with usage of solhint
  • prettier solidity & node.js code
  • gitea version control

This project mainly to keep as a reference for future Web 3.0 Developments.


Success Deploy & Verified Of This Smart Contract To Sepolia Testnet

0xc2022b56eBC140B5FebCf9FBaB14c17db4C315C4 https://sepolia.etherscan.io/address/0xc2022b56eBC140B5FebCf9FBaB14c17db4C315C4#code Via deploy.js https://sepolia.etherscan.io/address/0x3a827C119e1D746bb3C7bcbbf95c55246C8CcBdd#code Via yarn hardhat deploy --network sepolia

Public Reported Hacked Code References:

This website is records of all kind previous hacked smart contract:

https://rekt.news/leaderboard/

1. Git Version Control

First time initialize:

git config --global user.name "hoelee"
git config --global user.email "me@hoelee.com"
git init .
git add .
git checkout -b main
git commit -m "Initial Commit"
git remote set-url origin https://username:accessToken@git.hoelee.com/hoelee/ethers-simple-storage.git
git credential-cache exit // Fix Credential Error

Standard Update:

git add .
git commit -m "Describe what changes"
git push -u origin main
    // After set this, later easier usage via below line
git push
git pull

Development need exlude file can create root file with name .gitignore

node_modules
package.json
img
artifacts
cache
coverage
.env
.*
README.md
coverage.json

2. Setup Visual Studio Code Development Environment

Windows need to download install WSL

wsl --set-default Ubuntu-22.04
mkdir theProjectFolderName
cd theProjectFolderName
code .
// Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm install 16.14.2
nvm install node.js
nvm install 18 // Update node JS to v18

Visual Studio need to update code setting

"[solidity]": {
        "editor.defaultFormatter":"NomicFoundation.hardhat-solidity"
    }

Preparing of solidity development environment:

corepack enable // Enable yarn
yarn install solc
yarn add solc@0.8.7fixed
yarn solcjs --bin --abi --include-path node_modules/ --base-path . -o . SimpleStorage.sol
yarn add ethers // Compiler Error, Downgraded to v5.7.2
yarn add fs-extra
yarn add dotenv
yarn add prettier
yarn add prettier-plugin-solidity

Preparing of Hardhat Development Environment

yarn init 
// Manual delete main: index.js in package.json
yarn add --dev hardhat // Production no need --dev
nvm install 18
nvm use 18
nvm alias default 18
corepack enable // Enable yarn
yarn hardhat
yarn add --dev prettier prettier-plugin-solidity
yarn add --dev dotenv
yarn add --dev @nomiclabs/hardhat-etherscan // Auto verify Etherscan Samrt Contract
yarn add --dev @nomiclabs/hardhat-waffle
yarn add --dev solhint
yarn add --dev @nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers ethers
yarn add --dev hardhat-gas-reporter
yarn add --dev solidity-coverage
yarn add --dev solhint

Other Terminal Useful Command 1:

// For Debuging Hardhat
npx hardhat --versose

// For Recompile
yarn hardhat clean // Or manual delete artifacts & cache folder
npm install

// For Listing Hardhat Local Blockchain node
yarn hardhat accounts
yarn hardhat node  // Run in Dedicated Terminal, Getting Blockchain server
yarn hardhat console --network localhost // Short Life To Test Solidity Code In Terminal
yarn hardhat compile
yarn hardhat run scripts/deploy.js --network localhost
yarn hardhat custom-task-name
    // Need create file in /tasks/custom-task-name.js
    // Add import in hardhat.config.js -> requir("/tasks/custom-task-name");
yarn hardhat test
yarn hardhat test --grep customSearchKeyword
    // Only will run the test with describe test that contain "customSearchKeyword"

Other Terminal Useful Command 2:

// For Getting Gas Used & Gas Price
yarn hardhat test
    // Will create a file in ./gas-report.txt
    // With .env of etherscan API key
// For Getting Coverage
yarn hardhat coverage
    // Checking code usage & tested percentage
// For Checking Code Best Practice
yarn solhint contracts/*.sol
// For Get Fake Price Feed On Localhost & Ganache
yarn hardhat deploy --tags mocks --network localhost

Debug Node.js need to open Javascript Debug Terminal first, via ctrl + shift + p

Reduce Gas Used:

  • Prioritize use private instead of public
  • Use constant which declare once in constructor
  • Use immutable which declare once only

This is because blockchain will have higher read and store gas fee on storage block, lesser in bytes code block.

3. Known Issue

  • Dependencies combination is old, need update...
  • ...

Find a bug?

If you found an issue or would like to submit an improvement to this demo project, please submit an issue using the issues tab above.

4. Looking Web 3.0 Developer For Your Project?

Mr Hoelee is Welcome Web 3.0 Remote Job, Contact Me Immediately Via WhatsApp +60175885290 .

Or You can email me@hoelee.com now. Thanks.

5. Like this project?

If you are feeling generous, buy me a coffee! - buymeacoffee.com/hoelee