Example smart contracts repo for Gemforge using Foundry.
This contains the optimal folder structure for use with Gemforge:
- Build and deploy commands already setup
- Pre-configured config file
There are two facets provided:
ExampleFacet
- a simple example of a facet with a single function. Try adding and removing functions to/from this facet to see how the Gemforge deployment changes.ERC20Facet
- a complex example demonstrating how to deploy multiple separate ERC20s token contracts all internally backed by the same upgradeable diamond proxy (read more).
Note: A Hardhat equivalent of this repo is available at https://github.com/gemstation/contracts-hardhat
- Node.js 20+
- PNPM (NOTE:
yarn
andnpm
can also be used) - Foundry
In an empty folder:
npx gemforge scaffold
Change into the folder and run in order:
$ foundryup # On OS X you may first need to run: brew install libusb
$ pnpm i
$ git submodule update --init --recursive
Run a local dev node anvil in a separate terminal:
pnpm devnet
To build the code:
$ pnpm build
To run the tests:
$ pnpm test
To deploy to the local
target:
$ pnpm dep local
You first need to configure the deployment wallet private key in your environment. Ensure that this wallet has a non-zero balance of Base Sepolia ETH (you can use Alchemy's faucet to get some):
$ export PRIVATE_KEY=<your Base Sepolia deployment wallet private key>
Now register on https://basescan.org and generate an API key to set in the environment. This will be used for contract source verification on basescan:
$ export BASESCAN_API_KEY=<api key obtained from basescan.org>
Now run:
$ pnpm dep base_sepolia
If you visit https://sepolia.basescan.org you should see the deployed contracts along with verified source code.
For verbose output simply add -v
to the commands:
$ pnpm build -v
$ pnpm dep -v
MIT - see LICENSE.md