Bläddra i källkod

docs: polish README, add new sections like "Features"

build: rename package to "@prb/hardhat-template"
build: upgrado to yarn v3.2.1
ci: add dummy CI workflow
docs: add badges in README
docs: add "Sensible Defaults" section
docs: change license to MIT
docs: nest "Syntax Highlighting" under new "Tips" section
docs: reorder comments in "Usage" section
refactor: refer to repo as "Hardhat Template"
refactor: upgrade to solidity v0.8.15
Paul Razvan Berg 3 år sedan
förälder
incheckning
b78764ce99
9 ändrade filer med 161 tillägg och 55 borttagningar
  1. 48 0
      .github/workflows/ci.yml
  2. 0 3
      .yarn/releases/yarn-3.2.0.cjs
  3. 3 0
      .yarn/releases/yarn-3.2.1.cjs
  4. 2 2
      .yarnrc.yml
  5. 17 20
      LICENSE.md
  6. 77 20
      README.md
  7. 2 2
      hardhat.config.ts
  8. 8 4
      package.json
  9. 4 4
      yarn.lock

+ 48 - 0
.github/workflows/ci.yml

@@ -0,0 +1,48 @@
+name: "CI"
+
+env:
+  INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }}
+  MNEMONIC: ${{ secrets.MNEMONIC }}
+
+on:
+  pull_request:
+    branches:
+      - "main"
+  push:
+    branches:
+      - "main"
+
+jobs:
+  ci:
+    runs-on: "ubuntu-latest"
+    steps:
+      - name: "Check out the repo"
+        uses: "actions/checkout@v3"
+
+      - name: "Install Node.js"
+        uses: "actions/setup-node@v3"
+        with:
+          cache: "yarn"
+          node-version: "16"
+
+      - name: "Install the dependencies"
+        run: "yarn install --immutable"
+
+      - name: "Lint the code"
+        run: "yarn lint:contracts"
+
+      - 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: "yarn generate:types"
+
+      - name: "Test the contracts and generate the coverage report"
+        run: "yarn coverage:contracts"
+
+      - name: "Add test summary"
+        run: |
+          echo "## Test results" >> $GITHUB_STEP_SUMMARY
+          echo "✅ Passed" >> $GITHUB_STEP_SUMMARY

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 3
.yarn/releases/yarn-3.2.0.cjs


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3 - 0
.yarn/releases/yarn-3.2.1.cjs


+ 2 - 2
.yarnrc.yml

@@ -1,7 +1,7 @@
 nodeLinker: node-modules
 
 plugins:
-  - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
+  - path: ".yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs"
     spec: "@yarnpkg/plugin-interactive-tools"
 
-yarnPath: .yarn/releases/yarn-3.2.0.cjs
+yarnPath: .yarn/releases/yarn-3.2.1.cjs

+ 17 - 20
LICENSE.md

@@ -1,24 +1,21 @@
-This is free and unencumbered software released into the public domain.
+MIT License
 
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
+Copyright (c) 2022 Paul Razvan Berg
 
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
 
-For more information, please refer to <http://unlicense.org/>
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 77 - 20
README.md

@@ -1,22 +1,77 @@
-# Solidity Template
+# Hardhat Template [![Github Actions][gha-badge]][gha] [![Hardhat][hardhat-badge]][hardhat] [![License: MIT][license-badge]][license]
 
-My favorite setup for writing Solidity smart contracts.
+[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
 
-- [Hardhat](https://github.com/nomiclabs/hardhat): compile and run the smart contracts on a local development network
-- [TypeChain](https://github.com/ethereum-ts/TypeChain): generate TypeScript types for smart contracts
+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): linter
+- [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
 
-This repo is a GitHub template, so to start using it, click the "Use this template" button at the top of the page.
+## 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
+├── .commitlintrc.yml
+├── .editorconfig
+├── .eslintignore
+├── .eslintrc.yml
+├── .gitignore
+├── .prettierignore
+├── .prettierrc.yml
+├── .solcover.js
+├── .solhintignore
+├── .solhint.json
+├── .yarnrc.yml
+└── hardhat.config.ts
+```
+
+### 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 se your `INFURA_API_KEY` and your `MNEMONIC` as GitHub secrets.
+
+You can edit the CI script in [.github/workflows/ci.yml](./.github/workflows/ci.yml).
+
+### Conventional Commits
+
+This template enforces the [Conventional Commits](https://www.conventionalcommits.org/) standard for git commit messages.
+This is a lightweight convention that creates an explicit commit history, which makes it easier to write automated
+tools on top of.
+
+### Git Hooks
+
+This template uses [Husky](https://github.com/typicode/husky) to run automated checks on commit messages, and [Lint Staged](https://github.com/okonet/lint-staged) to automatically format the code with Prettier when making a git commit.
 
 ## Usage
 
 ### Pre Requisites
 
-Before running any command, you need to create a `.env` file and set a BIP-39 compatible mnemonic as an environment
-variable. Follow the example in `.env.example`. If you don't already have a mnemonic, use this [website](https://iancoleman.io/bip39/) to generate one.
+Before being able to run any command, you need to create a `.env` file and set a BIP-39 compatible mnemonic as an environment
+variable. You can follow the example in `.env.example`. If you don't already have a mnemonic, you can use this [website](https://iancoleman.io/bip39/) to generate one.
 
 Then, proceed with installing dependencies:
 
@@ -34,12 +89,20 @@ $ yarn compile
 
 ### TypeChain
 
-Compile the smart contracts and generate TypeChain artifacts:
+Compile the smart contracts and generate TypeChain bindings:
 
 ```sh
 $ yarn typechain
 ```
 
+### Test
+
+Run the tests with Hardhat:
+
+```sh
+$ yarn test
+```
+
 ### Lint Solidity
 
 Lint the Solidity code:
@@ -56,14 +119,6 @@ Lint the TypeScript code:
 $ yarn lint:ts
 ```
 
-### Test
-
-Run the Mocha tests:
-
-```sh
-$ yarn test
-```
-
 ### Coverage
 
 Generate the code coverage report:
@@ -96,10 +151,12 @@ Deploy the contracts to Hardhat Network:
 $ yarn deploy --greeting "Bonjour, le monde!"
 ```
 
-## Syntax Highlighting
+## Tips
+
+### Syntax Highlighting
 
-If you use VSCode, you can get Solidity syntax highlighting via the [vscode-solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) extension.
+If you use VSCode, you can get Solidity syntax highlighting with the [vscode-solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) extension.
 
 ## License
 
-[Unlicense](./LICENSE.md)
+[MIT](./LICENSE.md) © Paul Razvan Berg

+ 2 - 2
hardhat.config.ts

@@ -98,11 +98,11 @@ const config: HardhatUserConfig = {
     tests: "./test",
   },
   solidity: {
-    version: "0.8.13",
+    version: "0.8.15",
     settings: {
       metadata: {
         // Not including the metadata hash
-        // https://github.com/paulrberg/solidity-template/issues/31
+        // https://github.com/paulrberg/hardhat-template/issues/31
         bytecodeHash: "none",
       },
       // Disable the optimizer when debugging

+ 8 - 4
package.json

@@ -1,6 +1,6 @@
 {
-  "name": "@prb/solidity-template",
-  "description": "Template for writing Solidity smart contracts",
+  "name": "@prb/hardhat-template",
+  "description": "Hardhat-based template for developing Solidity smart contracts",
   "version": "1.0.0",
   "author": {
     "name": "Paul Razvan Berg",
@@ -61,12 +61,16 @@
   ],
   "keywords": [
     "blockchain",
+    "ethers",
     "ethereum",
     "hardhat",
     "smart-contracts",
-    "solidity"
+    "solidity",
+    "template",
+    "typescript",
+    "typechain"
   ],
-  "packageManager": "yarn@3.2.0",
+  "packageManager": "yarn@3.2.1",
   "publishConfig": {
     "access": "public"
   },

+ 4 - 4
yarn.lock

@@ -1213,9 +1213,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@prb/solidity-template@workspace:.":
+"@prb/hardhat-template@workspace:.":
   version: 0.0.0-use.local
-  resolution: "@prb/solidity-template@workspace:."
+  resolution: "@prb/hardhat-template@workspace:."
   dependencies:
     "@commitlint/cli": ^17.0.3
     "@commitlint/config-conventional": ^17.0.3
@@ -10748,11 +10748,11 @@ __metadata:
 
 "typescript@patch:typescript@^4.6.4#~builtin<compat/typescript>, typescript@patch:typescript@^4.7.4#~builtin<compat/typescript>":
   version: 4.7.4
-  resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=bda367"
+  resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"
   bin:
     tsc: bin/tsc
     tsserver: bin/tsserver
-  checksum: 96d3030cb01143570567cb4f3a616b10df65f658f0e74e853e77a089a6a954e35c800be7db8b9bfe9a1ae05d9c2897e281359f65e4caa1caf266368e1c4febd3
+  checksum: 9096d8f6c16cb80ef3bf96fcbbd055bf1c4a43bd14f3b7be45a9fbe7ada46ec977f604d5feed3263b4f2aa7d4c7477ce5f9cd87de0d6feedec69a983f3a4f93e
   languageName: node
   linkType: hard
 

Vissa filer visades inte eftersom för många filer har ändrats