Awesome
@gemstation/contracts-hardhat
Example smart contracts repo for Gemforge using Hardhat.
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 Foundry equivalent of this repo is available at https://github.com/gemstation/contracts-foundry
Requirements
- Node.js 20+
- PNPM (NOTE:
yarn
andnpm
can also be used)
Installation
In an empty folder:
npx gemforge scaffold --hardhat
Change into the folder and run in order:
$ git submodule update --init --recursive
$ pnpm i
Usage
Run a local dev node in a separate terminal:
pnpm devnet
To build the code:
$ pnpm build
Deploy to local devnet
To deploy to the local
target:
$ pnpm dep local
Deploy to testnet (Base Sepolia)
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 testnet
To check the deployment:
pnpm query testnet
To verify the sourcecode in Basescan run:
$ pnpm verify testnet
If you visit https://sepolia.basescan.org you should see the deployed contracts along with verified source code.
Miscellanous
For verbose output simply add -v
to the commands:
$ pnpm build -v
$ pnpm dep -v
License
MIT - see LICSENSE.md