Code Monkey home page Code Monkey logo

hardhat-foundry-template's Introduction

Hardhat x Foundry Template

Template repository for getting started quickly with Hardhat and Foundry in one project

Github Actions

Getting Started

  • Use Foundry:
forge install
forge test
  • Use Hardhat:
npm install
npx hardhat test

Features

  • Write / run tests with either Hardhat or Foundry:
forge test
# or
npx hardhat test
  • Use Hardhat's task framework
npx hardhat example
  • Install libraries with Foundry which work with Hardhat.
forge install rari-capital/solmate # Already in this repo, just an example

Notes

Whenever you install new libraries using Foundry, make sure to update your remappings.txt file by running forge remappings > remappings.txt. This is required because we use hardhat-preprocessor and the remappings.txt file to allow Hardhat to resolve libraries you install with Foundry.

hardhat-foundry-template's People

Contributors

devanoneth avatar gakonst avatar samlaf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

hardhat-foundry-template's Issues

enable hardhat coverage

It would be good to enable hardhat coverage in this template repo as a PoC.

I just went through the exercise on a project utilising this template and had to do the following to get hardhat coverage to work:

  1. install and import @nomicfoundation/hardhat-toolbox in hardhat.config.ts
  2. Install all the external libs/pkgs in ./lib using your project's node package manager(i.e. yarn, npm or pnpm) and ensure that these packages are now visible in the package.json and node_modules
  3. before running hardhat coverage you'll first have to comment out the preprocess config in the HardhatUserConfig to disable it

Add .env to .gitignore

Currently the .gitignore file of the project does not include the broadly used .env across the majority of projects.

Users might be unaware of this and push sensitive information potentially putting funds and access control at risk.

Add .env to the .gitignore on this and any other template you offer where it might be missing.

Remappings for Contracts with Same Dependencies but different Paths

One of my forge installed libraries uses this import path for it's OZ dependency:

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

Another one of the contracts from a different library uses this import path:

import "openzeppelin-contracts/contracts/access/AccessControl.sol";

My OZ dependency lives in lib/openzeppelin-contracts

My remappings are as such:

@openzeppelin=lib/openzeppelin-contracts/
openzeppelin-contracts/=lib/openzeppelin-contracts/

Unfortunately, the hardhat preprocess does a sed which means that it does the following:

  1. Replace @openzeppelin with lib/openzeppelin-contracts/
  2. Replace lib/openzeppelin-contracts/ with lib/lib/openzeppelin-contracts/

I was able to resolve the issue by changing the order of my remappings to avoid the overlap, but this issue may affect others

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.