Foundry ERC20
Usage
OpenZeppelin
OpenZeppelin Contracts Docs
OpenZeppelin GitHub Repo
Installing OpenZeppelin Contracts Package
forge install OpenZeppelin/openzeppelin-contracts --no-commit
Start a local node
make anvil
Deploy
This will default to your local node. You need to have it running in another terminal in order for it to deploy.
make deploy
Deploy - Other Network
Testing
We talk about 4 test tiers in the video.
- Unit
- Integration
- Forked
- Staging
This repo we cover #1 and #3.
forge test
or
forge test --fork-url $SEPOLIA_RPC_URL
Test Coverage
forge coverage
Deployment to a testnet or mainnet
- Setup environment variables
You'll want to set your SEPOLIA_RPC_URL
and PRIVATE_KEY
as environment variables. You can add them to a .env
file, similar to what you see in .env.example
.
PRIVATE_KEY
: The private key of your account (like from metamask). NOTE: FOR DEVELOPMENT, PLEASE USE A KEY THAT DOESN'T HAVE ANY REAL FUNDS ASSOCIATED WITH IT.- You can learn how to export it here.
SEPOLIA_RPC_URL
: This is url of the sepolia testnet node you're working with. You can get setup with one for free from Alchemy
Optionally, add your ETHERSCAN_API_KEY
if you want to verify your contract on Etherscan.
- Get testnet ETH
Head over to faucets.chain.link and get some testnet ETH. You should see the ETH show up in your metamask.
- Deploy
make deploy ARGS="--network sepolia"
Scripts
After deploy to a testnet or local net, you can run the scripts.
Using cast deployed locally example:
cast send <ERC20_CONTRACT_ADDRESS> "transfer()" --value 0.1ether --private-key <PRIVATE_KEY> --rpc-url $SEPOLIA_RPC_URL
or, to create a ChainlinkVRF Subscription:
make createSubscription ARGS="--network sepolia"
Estimate gas
You can estimate how much gas things cost by running:
forge snapshot
And you'll see and output file called .gas-snapshot
Formatting
To run code formatting:
forge fmt