# Solidity Template My favorite setup for writing Solidity smart contracts. - [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 - [Ethers](https://github.com/ethers-io/ethers.js/): renowned Ethereum library and wallet implementation - [Waffle](https://github.com/EthWorks/Waffle): tooling for writing comprehensive smart contract tests - [Solhint](https://github.com/protofire/solhint): 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. ## 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. Then, proceed with installing dependencies: ```sh $ yarn install ``` ### Compile Compile the smart contracts with Hardhat: ```sh $ yarn compile ``` ### TypeChain Compile the smart contracts and generate TypeChain artifacts: ```sh $ yarn typechain ``` ### Lint Solidity Lint the Solidity code: ```sh $ yarn lint:sol ``` ### Lint TypeScript Lint the TypeScript code: ```sh $ yarn lint:ts ``` ### Test Run the Mocha tests: ```sh $ yarn test ``` ### Coverage Generate the code coverage report: ```sh $ yarn coverage ``` ### Report Gas See the gas usage per unit test and average gas per method call: ```sh $ REPORT_GAS=true yarn test ``` ### Clean Delete the smart contract artifacts, the coverage reports and the Hardhat cache: ```sh $ yarn clean ``` ### Deploy Deploy the contracts to Hardhat Network: ```sh $ yarn deploy --greeting "Bonjour, le monde!" ``` ## 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. ## Caveats ### Ethers and Waffle If you can't get the [Waffle matchers](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html) to work, try to make your `ethers` package version match the version used by the `@ethereum-waffle/chai` package. Seem [#111](https://github.com/paulrberg/solidity-template/issues/111) for more details. ## License [Unlicense](./LICENSE.md)