diff --git a/README.md b/README.md index f63c082..106cf24 100644 --- a/README.md +++ b/README.md @@ -1,103 +1,14 @@ -# Foundry Template [![Open in Gitpod][gitpod-badge]][gitpod] [![Github Actions][gha-badge]][gha] [![Foundry][foundry-badge]][foundry] [![License: MIT][license-badge]][license] +# lpETH [![Open in Gitpod][gitpod-badge]][gitpod] [![Github Actions][gha-badge]][gha] [![Foundry][foundry-badge]][foundry] [![License: MIT][license-badge]][license] -[gitpod]: https://gitpod.io/#https://github.com/PaulRBerg/foundry-template +[gitpod]: https://gitpod.io/#https://github.com/Tenderize/lpeth [gitpod-badge]: https://img.shields.io/badge/Gitpod-Open%20in%20Gitpod-FFB45B?logo=gitpod -[gha]: https://github.com/PaulRBerg/foundry-template/actions +[gha]: https://github.com/Tenderize/lpeth/actions [gha-badge]: https://github.com/PaulRBerg/foundry-template/actions/workflows/ci.yml/badge.svg [foundry]: https://getfoundry.sh/ [foundry-badge]: https://img.shields.io/badge/Built%20with-Foundry-FFDB1C.svg [license]: https://opensource.org/licenses/MIT [license-badge]: https://img.shields.io/badge/License-MIT-blue.svg -A Foundry-based template for developing Solidity smart contracts, with sensible defaults. - -## What's Inside - -- [Forge](https://github.com/foundry-rs/foundry/blob/master/forge): compile, test, fuzz, format, and deploy smart - contracts -- [Forge Std](https://github.com/foundry-rs/forge-std): collection of helpful contracts and utilities for testing -- [Prettier](https://github.com/prettier/prettier): code formatter for non-Solidity files -- [Solhint](https://github.com/protofire/solhint): linter for Solidity code - -## Getting Started - -Click the [`Use this template`](https://github.com/PaulRBerg/foundry-template/generate) button at the top of the page to -create a new repository with this repo as the initial state. - -Or, if you prefer to install the template manually: - -```sh -$ mkdir my-project -$ cd my-project -$ forge init --template PaulRBerg/foundry-template -$ bun install # install Solhint, Prettier, and other Node.js deps -``` - -If this is your first time with Foundry, check out the -[installation](https://github.com/foundry-rs/foundry#installation) instructions. - -## Features - -This template builds upon the frameworks and libraries mentioned above, so please consult their respective documentation -for details about their specific features. - -For example, if you're interested in exploring Foundry in more detail, you should look at the -[Foundry Book](https://book.getfoundry.sh/). In particular, you may be interested in reading the -[Writing Tests](https://book.getfoundry.sh/forge/writing-tests.html) tutorial. - -### Sensible Defaults - -This template comes with a set of sensible default configurations for you to use. These defaults can be found in the -following files: - -```text -├── .editorconfig -├── .gitignore -├── .prettierignore -├── .prettierrc.yml -├── .solhint.json -├── foundry.toml -└── remappings.txt -``` - -### 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). - -For guidance on how to integrate a Foundry project in VSCode, please refer to this -[guide](https://book.getfoundry.sh/config/vscode). - -### 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. - -You can edit the CI script in [.github/workflows/ci.yml](./.github/workflows/ci.yml). - -## Installing Dependencies - -Foundry typically uses git submodules to manage dependencies, but this template uses Node.js packages because -[submodules don't scale](https://twitter.com/PaulRBerg/status/1736695487057531328). - -This is how to install dependencies: - -1. Install the dependency using your preferred package manager, e.g. `bun install dependency-name` - - Use this syntax to install from GitHub: `bun install github:username/repo-name` -2. Add a remapping for the dependency in [remappings.txt](./remappings.txt), e.g. - `dependency-name=node_modules/dependency-name` - -Note that OpenZeppelin Contracts is pre-installed, so you can follow that as an example. - -## Writing Tests - -To write a new test contract, you start by importing `Test` from `forge-std`, and then you inherit it in your test -contract. Forge Std comes with a pre-instantiated [cheatcodes](https://book.getfoundry.sh/cheatcodes/) environment -accessible via the `vm` property. If you would like to view the logs in the terminal output, you can add the `-vvv` flag -and use [console.log](https://book.getfoundry.sh/faq?highlight=console.log#how-do-i-use-consolelog). - -This template comes with an example test contract [Foo.t.sol](./test/Foo.t.sol) - ## Usage This is a list of the most frequently needed commands. @@ -107,7 +18,7 @@ This is a list of the most frequently needed commands. Build the contracts: ```sh -$ forge build +forge build ``` ### Clean @@ -115,7 +26,7 @@ $ forge build Delete the build artifacts and cache directories: ```sh -$ forge clean +forge clean ``` ### Compile @@ -123,7 +34,7 @@ $ forge clean Compile the contracts: ```sh -$ forge build +forge build ``` ### Coverage @@ -131,7 +42,7 @@ $ forge build Get a test coverage report: ```sh -$ forge coverage +forge coverage ``` ### Deploy @@ -139,21 +50,15 @@ $ forge coverage Deploy to Anvil: ```sh -$ forge script script/Deploy.s.sol --broadcast --fork-url http://localhost:8545 +bash script/deploy.local.sh ``` -For this script to work, you need to have a `MNEMONIC` environment variable set to a valid -[BIP39 mnemonic](https://iancoleman.io/bip39/). - -For instructions on how to deploy to a testnet or mainnet, check out the -[Solidity Scripting](https://book.getfoundry.sh/tutorials/solidity-scripting.html) tutorial. - ### Format Format the contracts: ```sh -$ forge fmt +forge fmt ``` ### Gas Usage @@ -161,7 +66,7 @@ $ forge fmt Get a gas report: ```sh -$ forge test --gas-report +forge test --gas-report ``` ### Lint @@ -169,7 +74,7 @@ $ forge test --gas-report Lint the contracts: ```sh -$ bun run lint +bun run lint ``` ### Test @@ -177,29 +82,22 @@ $ bun run lint Run the tests: ```sh -$ forge test +forge test ``` Generate test coverage and output result to the terminal: ```sh -$ bun run test:coverage +bun run test:coverage ``` Generate test coverage with lcov report (you'll have to open the `./coverage/index.html` file in your browser, to do so simply copy paste the path): ```sh -$ bun run test:coverage:report +bun run test:coverage:report ``` -## Related Efforts - -- [abigger87/femplate](https://github.com/abigger87/femplate) -- [cleanunicorn/ethereum-smartcontract-template](https://github.com/cleanunicorn/ethereum-smartcontract-template) -- [foundry-rs/forge-template](https://github.com/foundry-rs/forge-template) -- [FrankieIsLost/forge-template](https://github.com/FrankieIsLost/forge-template) - ## License This project is licensed under MIT.