From 525de7a2fa90f76a186621856bc3cbfeec134a6f Mon Sep 17 00:00:00 2001 From: karthiks373 Date: Sun, 25 Feb 2024 00:40:22 +0530 Subject: [PATCH] v1: fork from PaulRBerg --- .czrc | 3 + .editorconfig | 16 +++ .eslintignore | 22 ++++ .eslintrc.yml | 21 ++++ .github/FUNDING.yml | 2 + .github/scripts/rename.sh | 38 +++++++ .github/workflows/ci.yml | 55 ++++++++++ .github/workflows/create.yml | 52 +++++++++ .gitignore | 22 ++++ .prettierignore | 22 ++++ .prettierrc.yml | 23 ++++ .solcover.js | 4 + .solhint.json | 19 ++++ .solhintignore | 3 + .vscode/extensions.json | 3 + .vscode/settings.json | 7 ++ README.md | 206 +++++++++++++++++++++++++++++++++++ bun.lockb | Bin 0 -> 287912 bytes contracts/Lock.sol | 36 ++++++ deploy/deploy.ts | 23 ++++ hardhat.config.ts | 124 +++++++++++++++++++++ package.json | 74 +++++++++++++ tasks/accounts.ts | 9 ++ tasks/lock.ts | 63 +++++++++++ test/lock/Lock.fixture.ts | 22 ++++ test/lock/Lock.ts | 102 +++++++++++++++++ test/types.ts | 17 +++ tsconfig.json | 22 ++++ 28 files changed, 1010 insertions(+) create mode 100644 .czrc create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.yml create mode 100644 .github/FUNDING.yml create mode 100755 .github/scripts/rename.sh create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/create.yml create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc.yml create mode 100644 .solcover.js create mode 100644 .solhint.json create mode 100644 .solhintignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 contracts/Lock.sol create mode 100644 deploy/deploy.ts create mode 100644 hardhat.config.ts create mode 100644 package.json create mode 100644 tasks/accounts.ts create mode 100644 tasks/lock.ts create mode 100644 test/lock/Lock.fixture.ts create mode 100644 test/lock/Lock.ts create mode 100644 test/types.ts create mode 100644 tsconfig.json diff --git a/.czrc b/.czrc new file mode 100644 index 0000000..d1bcc20 --- /dev/null +++ b/.czrc @@ -0,0 +1,3 @@ +{ + "path": "cz-conventional-changelog" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6fd96c1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# EditorConfig http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# All files +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.sol] +indent_size = 4 diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..a57b767 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,22 @@ +# directories +.coverage_artifacts +.coverage_cache +.coverage_contracts +artifacts +build +cache +coverage +dist +node_modules +types + +# files +*.env +*.log +.DS_Store +.pnp.* +bun.lockb +coverage.json +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..27672a3 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,21 @@ +extends: + - "eslint:recommended" + - "plugin:@typescript-eslint/eslint-recommended" + - "plugin:@typescript-eslint/recommended" + - "prettier" +parser: "@typescript-eslint/parser" +parserOptions: + project: "tsconfig.json" +plugins: + - "@typescript-eslint" +root: true +rules: + "@typescript-eslint/no-floating-promises": + - error + - ignoreIIFE: true + ignoreVoid: true + "@typescript-eslint/no-inferrable-types": "off" + "@typescript-eslint/no-unused-vars": + - error + - argsIgnorePattern: "_" + varsIgnorePattern: "_" diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..b763d0f --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +custom: "https://omo.so/prberg" +github: "PaulRBerg" diff --git a/.github/scripts/rename.sh b/.github/scripts/rename.sh new file mode 100755 index 0000000..62e37dd --- /dev/null +++ b/.github/scripts/rename.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +# https://gist.github.com/vncsna/64825d5609c146e80de8b1fd623011ca +set -euo pipefail + +# Define the input vars +GITHUB_REPOSITORY=${1?Error: Please pass username/repo, e.g. prb/foundry-template} +GITHUB_REPOSITORY_OWNER=${2?Error: Please pass username, e.g. prb} +GITHUB_REPOSITORY_DESCRIPTION=${3:-""} # If null then replace with empty string + +echo "GITHUB_REPOSITORY: $GITHUB_REPOSITORY" +echo "GITHUB_REPOSITORY_OWNER: $GITHUB_REPOSITORY_OWNER" +echo "GITHUB_REPOSITORY_DESCRIPTION: $GITHUB_REPOSITORY_DESCRIPTION" + +# jq is like sed for JSON data +JQ_OUTPUT=`jq \ + --arg NAME "@$GITHUB_REPOSITORY" \ + --arg AUTHOR_NAME "$GITHUB_REPOSITORY_OWNER" \ + --arg URL "https://github.com/$GITHUB_REPOSITORY_OWNER" \ + --arg DESCRIPTION "$GITHUB_REPOSITORY_DESCRIPTION" \ + '.name = $NAME | .description = $DESCRIPTION | .author |= ( .name = $AUTHOR_NAME | .url = $URL )' \ + package.json +` + +# Overwrite package.json +echo "$JQ_OUTPUT" > package.json + +# Make sed command compatible in both Mac and Linux environments +# Reference: https://stackoverflow.com/a/38595160/8696958 +sedi () { + sed --version >/dev/null 2>&1 && sed -i -- "$@" || sed -i "" "$@" +} + +# Rename instances of "PaulRBerg/foundry-template" to the new repo name in README.md for badges only +sedi "/gitpod/ s|PaulRBerg/foundry-template|"${GITHUB_REPOSITORY}"|;" "README.md" +sedi "/gitpod-badge/ s|PaulRBerg/foundry-template|"${GITHUB_REPOSITORY}"|;" "README.md" +sedi "/gha/ s|PaulRBerg/foundry-template|"${GITHUB_REPOSITORY}"|;" "README.md" +sedi "/gha-badge/ s|PaulRBerg/foundry-template|"${GITHUB_REPOSITORY}"|;" "README.md" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ec79e63 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,55 @@ +name: "CI" + +env: + HARDHAT_VAR_MNEMONIC: "test test test test test test test test test test test junk" + HARDHAT_VAR_INFURA_API_KEY: "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" + # Uncomment the following lines to set your configuration variables using + # GitHub secrets (https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions) + # + # HARDHAT_VAR_MNEMONIC: ${{ secrets.Mnemonic }} + # HARDHAT_VAR_INFURA_API_KEY: ${{ secrets.InfuraApiKey }} + # HARDHAT_VAR_ARBISCAN_API_KEY: ${{ secrets.ArbiscanApiKey }} + # HARDHAT_VAR_BSCSCAN_API_KEY: ${{ secrets.BscscanApiKey }} + # HARDHAT_VAR_ETHERSCAN_API_KEY: ${{ secrets.EtherscanApiKey }} + # HARDHAT_VAR_OPTIMISM_API_KEY: ${{ secrets.OptimismApiKey }} + # HARDHAT_VAR_POLYGONSCAN_API_KEY: ${{ secrets.PolygonscanApiKey }} + # HARDHAT_VAR_SNOWTRACE_API_KEY: ${{ secrets.SnowtraceApiKey }} + +on: + workflow_dispatch: + pull_request: + push: + branches: + - main + +jobs: + ci: + runs-on: "ubuntu-latest" + steps: + - name: "Check out the repo" + uses: "actions/checkout@v4" + + - name: "Install Bun" + uses: "oven-sh/setup-bun@v1" + + - name: "Install the dependencies" + run: "bun install" + + - name: "Lint the code" + run: "bun run lint" + + - name: "Add lint summary" + run: | + echo "## Lint results" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + + - name: "Compile the contracts and generate the TypeChain bindings" + run: "bun run typechain" + + - name: "Test the contracts and generate the coverage report" + run: "bun run coverage" + + - name: "Add test summary" + run: | + echo "## Test results" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/create.yml b/.github/workflows/create.yml new file mode 100644 index 0000000..e0e9369 --- /dev/null +++ b/.github/workflows/create.yml @@ -0,0 +1,52 @@ +name: "Create" + +# The workflow will run only when the "Use this template" button is used +on: + create: + +jobs: + create: + # We only run this action when the repository isn't the template repository. References: + # - https://docs.github.com/en/actions/learn-github-actions/contexts + # - https://docs.github.com/en/actions/learn-github-actions/expressions + if: ${{ !github.event.repository.is_template }} + permissions: "write-all" + runs-on: "ubuntu-latest" + steps: + - name: "Check out the repo" + uses: "actions/checkout@v4" + + - name: "Update package.json" + env: + GITHUB_REPOSITORY_DESCRIPTION: ${{ github.event.repository.description }} + run: + ./.github/scripts/rename.sh "$GITHUB_REPOSITORY" "$GITHUB_REPOSITORY_OWNER" "$GITHUB_REPOSITORY_DESCRIPTION" + + - name: "Add rename summary" + run: | + echo "## Commit result" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + + - name: "Remove files not needed in the user's copy of the template" + run: | + rm -f "./.github/FUNDING.yml" + rm -f "./.github/scripts/rename.sh" + rm -f "./.github/workflows/create.yml" + + - name: "Add remove summary" + run: | + echo "## Remove result" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY + + - name: "Update commit" + uses: "stefanzweifel/git-auto-commit-action@v4" + with: + commit_message: "feat: initial commit" + commit_options: "--amend" + push_options: "--force" + skip_fetch: true + + - name: "Add commit summary" + run: | + echo "## Commit result" >> $GITHUB_STEP_SUMMARY + echo "✅ Passed" >> $GITHUB_STEP_SUMMARY diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c3995b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +# directories +.coverage_artifacts +.coverage_cache +.coverage_contracts +artifacts +build +cache +coverage +dist +node_modules +types +deployments + +# files +*.env +*.log +.DS_Store +.pnp.* +coverage.json +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..a57b767 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,22 @@ +# directories +.coverage_artifacts +.coverage_cache +.coverage_contracts +artifacts +build +cache +coverage +dist +node_modules +types + +# files +*.env +*.log +.DS_Store +.pnp.* +bun.lockb +coverage.json +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 0000000..3b6e085 --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1,23 @@ +bracketSpacing: true +plugins: + - "@trivago/prettier-plugin-sort-imports" + - "prettier-plugin-solidity" +printWidth: 120 +proseWrap: "always" +singleQuote: false +tabWidth: 2 +trailingComma: "all" + +overrides: + - files: "*.sol" + options: + compiler: "0.8.17" + parser: "solidity-parse" + tabWidth: 4 + - files: "*.ts" + options: + importOrder: ["", "^[./]"] + importOrderParserPlugins: ["typescript"] + importOrderSeparation: true + importOrderSortSpecifiers: true + parser: "typescript" diff --git a/.solcover.js b/.solcover.js new file mode 100644 index 0000000..c61d16c --- /dev/null +++ b/.solcover.js @@ -0,0 +1,4 @@ +module.exports = { + istanbulReporter: ["html", "lcov"], + skipFiles: ["test"], +}; diff --git a/.solhint.json b/.solhint.json new file mode 100644 index 0000000..122f1f6 --- /dev/null +++ b/.solhint.json @@ -0,0 +1,19 @@ +{ + "extends": "solhint:recommended", + "plugins": ["prettier"], + "rules": { + "code-complexity": ["error", 8], + "compiler-version": ["error", ">=0.8.4"], + "func-visibility": ["error", { "ignoreConstructors": true }], + "max-line-length": ["error", 120], + "named-parameters-mapping": "warn", + "no-console": "off", + "not-rely-on-time": "off", + "prettier/prettier": [ + "error", + { + "endOfLine": "auto" + } + ] + } +} diff --git a/.solhintignore b/.solhintignore new file mode 100644 index 0000000..16dc0c0 --- /dev/null +++ b/.solhintignore @@ -0,0 +1,3 @@ +# directories +**/artifacts +**/node_modules diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..9a51b72 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode", "NomicFoundation.hardhat-solidity"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b7be98a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "prettier.documentSelectors": ["**/*.sol"], + "solidity.formatter": "prettier", + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..04dd3ea --- /dev/null +++ b/README.md @@ -0,0 +1,206 @@ +# Hardhat Template [![Open in Gitpod][gitpod-badge]][gitpod] [![Github Actions][gha-badge]][gha] [![Hardhat][hardhat-badge]][hardhat] [![License: MIT][license-badge]][license] + +[gitpod]: https://gitpod.io/#https://github.com/paulrberg/hardhat-template +[gitpod-badge]: https://img.shields.io/badge/Gitpod-Open%20in%20Gitpod-FFB45B?logo=gitpod +[gha]: https://github.com/paulrberg/hardhat-template/actions +[gha-badge]: https://github.com/paulrberg/hardhat-template/actions/workflows/ci.yml/badge.svg +[hardhat]: https://hardhat.org/ +[hardhat-badge]: https://img.shields.io/badge/Built%20with-Hardhat-FFDB1C.svg +[license]: https://opensource.org/licenses/MIT +[license-badge]: https://img.shields.io/badge/License-MIT-blue.svg + +A Hardhat-based template for developing Solidity smart contracts, with sensible defaults. + +- [Hardhat](https://github.com/nomiclabs/hardhat): compile, run and test smart contracts +- [TypeChain](https://github.com/ethereum-ts/TypeChain): generate TypeScript bindings for smart contracts +- [Ethers](https://github.com/ethers-io/ethers.js/): renowned Ethereum library and wallet implementation +- [Solhint](https://github.com/protofire/solhint): code linter +- [Solcover](https://github.com/sc-forks/solidity-coverage): code coverage +- [Prettier Plugin Solidity](https://github.com/prettier-solidity/prettier-plugin-solidity): code formatter + +## Getting Started + +Click the [`Use this template`](https://github.com/paulrberg/hardhat-template/generate) button at the top of the page to +create a new repository with this repo as the initial state. + +## Features + +This template builds upon the frameworks and libraries mentioned above, so for details about their specific features, +please consult their respective documentations. + +For example, for Hardhat, you can refer to the [Hardhat Tutorial](https://hardhat.org/tutorial) and the +[Hardhat Docs](https://hardhat.org/docs). You might be in particular interested in reading the +[Testing Contracts](https://hardhat.org/tutorial/testing-contracts) section. + +### Sensible Defaults + +This template comes with sensible default configurations in the following files: + +```text +├── .editorconfig +├── .eslintignore +├── .eslintrc.yml +├── .gitignore +├── .prettierignore +├── .prettierrc.yml +├── .solcover.js +├── .solhint.json +└── hardhat.config.ts +``` + +### VSCode Integration + +This template is IDE agnostic, but for the best user experience, you may want to use it in VSCode alongside Nomic +Foundation's [Solidity extension](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity). + +### GitHub Actions + +This template comes with GitHub Actions pre-configured. Your contracts will be linted and tested on every push and pull +request made to the `main` branch. + +Note though that to make this work, you must use your `INFURA_API_KEY` and your `MNEMONIC` as GitHub secrets. + +For more information on how to set up GitHub secrets, check out the +[docs](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions). + +You can edit the CI script in [.github/workflows/ci.yml](./.github/workflows/ci.yml). + +## Usage + +### Pre Requisites + +First, you need to install the dependencies: + +```sh +bun install +``` + +Then, you need to set up all the required +[Hardhat Configuration Variables](https://hardhat.org/hardhat-runner/docs/guides/configuration-variables). You might +also want to install some that are optional. + +To assist with the setup process, run `bunx hardhat vars setup`. To set a particular value, such as a BIP-39 mnemonic +variable, execute this: + +```sh +bunx hardhat vars set MNEMONIC +? Enter value: ‣ here is where your twelve words mnemonic should be put my friend +``` + +If you do not already have a mnemonic, you can generate one using this [website](https://iancoleman.io/bip39/). + +### Compile + +Compile the smart contracts with Hardhat: + +```sh +bun run compile +``` + +### TypeChain + +Compile the smart contracts and generate TypeChain bindings: + +```sh +bun run typechain +``` + +### Test + +Run the tests with Hardhat: + +```sh +bun run test +``` + +### Lint Solidity + +Lint the Solidity code: + +```sh +bun run lint:sol +``` + +### Lint TypeScript + +Lint the TypeScript code: + +```sh +bun run lint:ts +``` + +### Coverage + +Generate the code coverage report: + +```sh +bun run coverage +``` + +### Report Gas + +See the gas usage per unit test and average gas per method call: + +```sh +REPORT_GAS=true bun run test +``` + +### Clean + +Delete the smart contract artifacts, the coverage reports and the Hardhat cache: + +```sh +bun run clean +``` + +### Deploy + +Deploy the contracts to Hardhat Network: + +```sh +bun run deploy:contracts +``` + +### Tasks + +#### Deploy Lock + +Deploy a new instance of the Lock contract via a task: + +```sh +bun run task:deployLock --unlock 100 --value 0.1 +``` + +### Syntax Highlighting + +If you use VSCode, you can get Solidity syntax highlighting with the +[hardhat-solidity](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) extension. + +## Using GitPod + +[GitPod](https://www.gitpod.io/) is an open-source developer platform for remote development. + +To view the coverage report generated by `bun run coverage`, just click `Go Live` from the status bar to turn the server +on/off. + +## Local development with Ganache + +### Install Ganache + +```sh +npm i -g ganache +``` + +### Run a Development Blockchain + +```sh +ganache -s test +``` + +> The `-s test` passes a seed to the local chain and makes it deterministic + +Make sure to set the mnemonic in your `.env` file to that of the instance running with Ganache. + +## License + +This project is licensed under MIT. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..6c50570dfd996549199ed11a4c41f1600c4730ad GIT binary patch literal 287912 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 literal 0 HcmV?d00001 diff --git a/contracts/Lock.sol b/contracts/Lock.sol new file mode 100644 index 0000000..c236c27 --- /dev/null +++ b/contracts/Lock.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.8.9; + +error InvalidUnlockTime(uint256 unlockTime); +error NotOwner(address owner); +error UnlockTimeNotReached(uint256 unlockTime); + +contract Lock { + uint256 public unlockTime; + address payable public owner; + + event Withdrawal(uint256 amount, uint256 when); + + constructor(uint256 _unlockTime) payable { + if (block.timestamp >= _unlockTime) { + revert InvalidUnlockTime(_unlockTime); + } + + unlockTime = _unlockTime; + owner = payable(msg.sender); + } + + function withdraw() public { + if (block.timestamp < unlockTime) { + revert UnlockTimeNotReached(unlockTime); + } + + if (msg.sender != owner) { + revert NotOwner(owner); + } + + emit Withdrawal(address(this).balance, block.timestamp); + + owner.transfer(address(this).balance); + } +} diff --git a/deploy/deploy.ts b/deploy/deploy.ts new file mode 100644 index 0000000..ab022ca --- /dev/null +++ b/deploy/deploy.ts @@ -0,0 +1,23 @@ +import { HardhatRuntimeEnvironment } from "hardhat/types"; + +const DAY_IN_SECONDS = 60 * 60 * 24; +const NOW_IN_SECONDS = Math.round(Date.now() / 1000); +const UNLOCK_IN_X_DAYS = NOW_IN_SECONDS + DAY_IN_SECONDS * 1; // 1 DAY + +const func = async function (hre: HardhatRuntimeEnvironment) { + const { deployer } = await hre.getNamedAccounts(); + const { deploy } = hre.deployments; + const lockedAmount = hre.ethers.parseEther("0.01").toString(); + + const lock = await deploy("Lock", { + from: deployer, + args: [UNLOCK_IN_X_DAYS], + log: true, + value: lockedAmount, + }); + + console.log(`Lock contract: `, lock.address); +}; +export default func; +func.id = "deploy_lock"; // id required to prevent reexecution +func.tags = ["Lock"]; diff --git a/hardhat.config.ts b/hardhat.config.ts new file mode 100644 index 0000000..0d85b5b --- /dev/null +++ b/hardhat.config.ts @@ -0,0 +1,124 @@ +import "@nomicfoundation/hardhat-toolbox"; +import type { HardhatUserConfig } from "hardhat/config"; +import { vars } from "hardhat/config"; +import type { NetworkUserConfig } from "hardhat/types"; + +import "./tasks/accounts"; +import "./tasks/lock"; + +// Run 'npx hardhat vars setup' to see the list of variables that need to be set + +const mnemonic: string = vars.get("MNEMONIC"); +const infuraApiKey: string = vars.get("INFURA_API_KEY"); + +const chainIds = { + "arbitrum-mainnet": 42161, + avalanche: 43114, + bsc: 56, + ganache: 1337, + hardhat: 31337, + mainnet: 1, + "optimism-mainnet": 10, + "polygon-mainnet": 137, + "polygon-mumbai": 80001, + sepolia: 11155111, +}; + +function getChainConfig(chain: keyof typeof chainIds): NetworkUserConfig { + let jsonRpcUrl: string; + switch (chain) { + case "avalanche": + jsonRpcUrl = "https://api.avax.network/ext/bc/C/rpc"; + break; + case "bsc": + jsonRpcUrl = "https://bsc-dataseed1.binance.org"; + break; + default: + jsonRpcUrl = "https://" + chain + ".infura.io/v3/" + infuraApiKey; + } + return { + accounts: { + count: 10, + mnemonic, + path: "m/44'/60'/0'/0", + }, + chainId: chainIds[chain], + url: jsonRpcUrl, + }; +} + +const config: HardhatUserConfig = { + defaultNetwork: "hardhat", + namedAccounts: { + deployer: 0, + }, + etherscan: { + apiKey: { + arbitrumOne: vars.get("ARBISCAN_API_KEY", ""), + avalanche: vars.get("SNOWTRACE_API_KEY", ""), + bsc: vars.get("BSCSCAN_API_KEY", ""), + mainnet: vars.get("ETHERSCAN_API_KEY", ""), + optimisticEthereum: vars.get("OPTIMISM_API_KEY", ""), + polygon: vars.get("POLYGONSCAN_API_KEY", ""), + polygonMumbai: vars.get("POLYGONSCAN_API_KEY", ""), + sepolia: vars.get("ETHERSCAN_API_KEY", ""), + }, + }, + gasReporter: { + currency: "USD", + enabled: process.env.REPORT_GAS ? true : false, + excludeContracts: [], + src: "./contracts", + }, + networks: { + hardhat: { + accounts: { + mnemonic, + }, + chainId: chainIds.hardhat, + }, + ganache: { + accounts: { + mnemonic, + }, + chainId: chainIds.ganache, + url: "http://localhost:8545", + }, + arbitrum: getChainConfig("arbitrum-mainnet"), + avalanche: getChainConfig("avalanche"), + bsc: getChainConfig("bsc"), + mainnet: getChainConfig("mainnet"), + optimism: getChainConfig("optimism-mainnet"), + "polygon-mainnet": getChainConfig("polygon-mainnet"), + "polygon-mumbai": getChainConfig("polygon-mumbai"), + sepolia: getChainConfig("sepolia"), + }, + paths: { + artifacts: "./artifacts", + cache: "./cache", + sources: "./contracts", + tests: "./test", + }, + solidity: { + version: "0.8.19", + settings: { + metadata: { + // Not including the metadata hash + // https://github.com/paulrberg/hardhat-template/issues/31 + bytecodeHash: "none", + }, + // Disable the optimizer when debugging + // https://hardhat.org/hardhat-network/#solidity-optimizer-support + optimizer: { + enabled: true, + runs: 800, + }, + }, + }, + typechain: { + outDir: "types", + target: "ethers-v6", + }, +}; + +export default config; diff --git a/package.json b/package.json new file mode 100644 index 0000000..a4f3582 --- /dev/null +++ b/package.json @@ -0,0 +1,74 @@ +{ + "name": "hardhat-template", + "description": "Hardhat-based template for developing Solidity smart contracts", + "version": "1.0.0", + "devDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.2", + "@nomicfoundation/hardhat-ethers": "^3.0.5", + "@nomicfoundation/hardhat-network-helpers": "^1.0.10", + "@nomicfoundation/hardhat-toolbox": "^4.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.2", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.3.11", + "@types/fs-extra": "^11.0.4", + "@types/mocha": "^10.0.6", + "@types/node": "^20.10.4", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", + "chai": "^4.3.10", + "cross-env": "^7.0.3", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "ethers": "^6.9.0", + "fs-extra": "^11.2.0", + "hardhat": "^2.19.2", + "hardhat-gas-reporter": "^1.0.9", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "prettier": "^3.1.1", + "prettier-plugin-solidity": "^1.2.0", + "rimraf": "^5.0.5", + "solhint": "^4.0.0", + "solhint-plugin-prettier": "^0.1.0", + "solidity-coverage": "^0.8.5", + "ts-generator": "^0.1.1", + "ts-node": "^10.9.2", + "typechain": "^8.3.2", + "typescript": "^5.3.3" + }, + "files": [ + "contracts" + ], + "keywords": [ + "blockchain", + "ethers", + "ethereum", + "hardhat", + "smart-contracts", + "solidity", + "template", + "typescript", + "typechain" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "clean": "rimraf ./artifacts ./cache ./coverage ./types ./coverage.json && bun run typechain", + "compile": "cross-env TS_NODE_TRANSPILE_ONLY=true hardhat compile", + "coverage": "hardhat coverage --solcoverjs ./.solcover.js --temp artifacts --testfiles \"test/**/*.ts\" && bun run typechain", + "deploy:contracts": "hardhat deploy", + "lint": "bun run lint:sol && bun run lint:ts && bun run prettier:check", + "lint:sol": "solhint --max-warnings 0 \"contracts/**/*.sol\"", + "lint:ts": "eslint --ignore-path ./.eslintignore --ext .js,.ts .", + "postcompile": "bun run typechain", + "prettier:check": "prettier --check \"**/*.{js,json,md,sol,ts,yml}\"", + "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"", + "task:deployLock": "hardhat task:deployLock", + "task:withdraw": "hardhat task:withdraw", + "test": "hardhat test", + "typechain": "cross-env TS_NODE_TRANSPILE_ONLY=true hardhat typechain" + } +} diff --git a/tasks/accounts.ts b/tasks/accounts.ts new file mode 100644 index 0000000..9174751 --- /dev/null +++ b/tasks/accounts.ts @@ -0,0 +1,9 @@ +import { task } from "hardhat/config"; + +task("accounts", "Prints the list of accounts", async (_taskArgs, hre) => { + const accounts = await hre.ethers.getSigners(); + + for (const account of accounts) { + console.log(account.address); + } +}); diff --git a/tasks/lock.ts b/tasks/lock.ts new file mode 100644 index 0000000..47aa8c2 --- /dev/null +++ b/tasks/lock.ts @@ -0,0 +1,63 @@ +import { task } from "hardhat/config"; +import type { TaskArguments } from "hardhat/types"; + +function distance(past: number, future: number): string { + // get total seconds between the times + let delta = future - past; + + // calculate (and subtract) whole days + const days = Math.floor(delta / 86400); + delta -= days * 86400; + + // calculate (and subtract) whole hours + const hours = Math.floor(delta / 3600) % 24; + delta -= hours * 3600; + + // calculate (and subtract) whole minutes + const minutes = Math.floor(delta / 60) % 60; + delta -= minutes * 60; + + // what's left is seconds + const seconds = delta % 60; // in theory the modulus is not required + + return `${days} day(s), ${hours} hour(s), ${minutes} minute(s) and ${seconds} second(s)`; +} + +task("task:withdraw", "Calls the withdraw function of Lock Contract") + .addOptionalParam("address", "Optionally specify the Lock address to withdraw") + .addParam("account", "Specify which account [0, 9]") + .setAction(async function (taskArguments: TaskArguments, hre) { + const { ethers, deployments } = hre; + + const Lock = taskArguments.address ? { address: taskArguments.address } : await deployments.get("Lock"); + + const signers = await ethers.getSigners(); + console.log(taskArguments.address); + + const lock = await ethers.getContractAt("Lock", Lock.address); + + const initialBalance = await ethers.provider.getBalance(Lock.address); + await lock.connect(signers[taskArguments.account]).withdraw(); + const finalBalance = await ethers.provider.getBalance(Lock.address); + + console.log("Contract balance before withdraw", ethers.formatEther(initialBalance)); + console.log("Contract balance after withdraw", ethers.formatEther(finalBalance)); + + console.log("Lock Withdraw Success"); + }); + +task("task:deployLock", "Deploys Lock Contract") + .addParam("unlock", "When to unlock funds in seconds (number of seconds into the futrue)") + .addParam("value", "How much ether you intend locking (in ether not wei, e.g., 0.1)") + .setAction(async function (taskArguments: TaskArguments, { ethers }) { + const NOW_IN_SECONDS = Math.round(Date.now() / 1000); + + const signers = await ethers.getSigners(); + const lockedAmount = ethers.parseEther(taskArguments.value); + const unlockTime = NOW_IN_SECONDS + parseInt(taskArguments.unlock); + const lockFactory = await ethers.getContractFactory("Lock"); + console.log(`Deploying Lock and locking ${taskArguments.value} ETH for ${distance(NOW_IN_SECONDS, unlockTime)}`); + const lock = await lockFactory.connect(signers[0]).deploy(unlockTime, { value: lockedAmount }); + await lock.waitForDeployment(); + console.log("Lock deployed to: ", await lock.getAddress()); + }); diff --git a/test/lock/Lock.fixture.ts b/test/lock/Lock.fixture.ts new file mode 100644 index 0000000..4ffe253 --- /dev/null +++ b/test/lock/Lock.fixture.ts @@ -0,0 +1,22 @@ +import { time } from "@nomicfoundation/hardhat-network-helpers"; +import { ethers } from "hardhat"; + +import type { Lock } from "../../types/Lock"; +import type { Lock__factory } from "../../types/factories/Lock__factory"; + +export async function deployLockFixture() { + const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60; + const ONE_GWEI = 1_000_000_000; + + const lockedAmount = ONE_GWEI; + const unlockTime = (await time.latest()) + ONE_YEAR_IN_SECS; + + // Contracts are deployed using the first signer/account by default + const [owner, otherAccount] = await ethers.getSigners(); + + const Lock = (await ethers.getContractFactory("Lock")) as Lock__factory; + const lock = (await Lock.deploy(unlockTime, { value: lockedAmount })) as Lock; + const lock_address = await lock.getAddress(); + + return { lock, lock_address, unlockTime, lockedAmount, owner, otherAccount }; +} diff --git a/test/lock/Lock.ts b/test/lock/Lock.ts new file mode 100644 index 0000000..932df74 --- /dev/null +++ b/test/lock/Lock.ts @@ -0,0 +1,102 @@ +import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; +import { loadFixture, time } from "@nomicfoundation/hardhat-network-helpers"; +import { expect } from "chai"; +import { ethers } from "hardhat"; + +import type { Signers } from "../types"; +import { deployLockFixture } from "./Lock.fixture"; + +describe("Lock", function () { + before(async function () { + this.signers = {} as Signers; + + const signers = await ethers.getSigners(); + this.signers.admin = signers[0]; + + this.loadFixture = loadFixture; + }); + + describe("Deployment", function () { + beforeEach(async function () { + const { lock, lock_address, unlockTime, owner, lockedAmount } = await this.loadFixture(deployLockFixture); + this.lock = lock; + this.lock_address = lock_address; + this.unlockTime = unlockTime; + this.owner = owner; + this.lockedAmount = lockedAmount; + }); + + it("Should fail if the unlockTime is not in the future", async function () { + // We don't use the fixture here because we want a different deployment + const latestTime = await time.latest(); + const Lock = await ethers.getContractFactory("Lock"); + await expect(Lock.deploy(latestTime, { value: 1 })).to.be.revertedWithCustomError(Lock, "InvalidUnlockTime"); + }); + + it("Should set the right unlockTime", async function () { + expect(await this.lock.unlockTime()).to.equal(this.unlockTime); + }); + + it("Should set the right owner", async function () { + expect(await this.lock.owner()).to.equal(this.owner.address); + }); + + it("Should receive and store the funds to lock", async function () { + expect(await ethers.provider.getBalance(this.lock_address)).to.equal(this.lockedAmount); + }); + }); + + describe("Withdrawals", function () { + beforeEach(async function () { + const { lock, unlockTime, owner, lockedAmount, otherAccount } = await this.loadFixture(deployLockFixture); + this.lock = lock; + this.unlockTime = unlockTime; + this.owner = owner; + this.lockedAmount = lockedAmount; + this.otherAccount = otherAccount; + }); + + describe("Validations", function () { + it("Should revert with the right error if called too soon", async function () { + await expect(this.lock.withdraw()).to.be.revertedWithCustomError(this.lock, "UnlockTimeNotReached"); + }); + + it("Should revert with the right error if called from another account", async function () { + // We can increase the time in Hardhat Network + await time.increaseTo(this.unlockTime); + + // We use lock.connect() to send a transaction from another account + await expect(this.lock.connect(this.otherAccount).withdraw()).to.be.revertedWithCustomError( + this.lock, + "NotOwner", + ); + }); + + it("Shouldn't fail if the unlockTime has arrived and the owner calls it", async function () { + // Transactions are sent using the first signer by default + await time.increaseTo(this.unlockTime); + + await expect(this.lock.withdraw()).not.to.be.reverted; + }); + }); + + describe("Events", function () { + it("Should emit an event on withdrawals", async function () { + await time.increaseTo(this.unlockTime); + + await expect(this.lock.withdraw()).to.emit(this.lock, "Withdrawal").withArgs(this.lockedAmount, anyValue); // We accept any value as `when` arg + }); + }); + + describe("Transfers", function () { + it("Should transfer the funds to the owner", async function () { + await time.increaseTo(this.unlockTime); + + await expect(this.lock.withdraw()).to.changeEtherBalances( + [this.owner, this.lock], + [this.lockedAmount, -this.lockedAmount], + ); + }); + }); + }); +}); diff --git a/test/types.ts b/test/types.ts new file mode 100644 index 0000000..645314e --- /dev/null +++ b/test/types.ts @@ -0,0 +1,17 @@ +import type { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/dist/src/signer-with-address"; + +import type { Lock } from "../types/Lock"; + +type Fixture = () => Promise; + +declare module "mocha" { + export interface Context { + lock: Lock; + loadFixture: (fixture: Fixture) => Promise; + signers: Signers; + } +} + +export interface Signers { + admin: SignerWithAddress; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..734e21a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es2020"], + "module": "commonjs", + "moduleResolution": "node", + "noImplicitAny": true, + "removeComments": true, + "resolveJsonModule": true, + "sourceMap": true, + "strict": true, + "target": "es2020" + }, + "exclude": ["node_modules"], + "files": ["./hardhat.config.ts"], + "include": ["src/**/*", "tasks/**/*", "test/**/*", "deploy/**/*", "types/"] +}