Basic template with prettier and rest configuration
To create a new project using this template run
$ forge init --template bgd-labs/bgd-forge-template my_new_project
bgd-labs/solidity-utils - common contracts we use everywhere, ie transparent proxy and around
bgd-labs/aave-address-book - the best and only source about all deployed Aave ecosystem related contracts across all the chains
bgd-labs/aave-helpers - useful utils for integration, and not only testing related to Aave ecosystem contracts
Rari-Capital/solmate - one of the best sources of base contracts for ERC20, ERC21, which will work with transparent proxy pattern out of the box
OpenZeppelin/openzeppelin-contracts - another very reputable and well organized source of base contracts for tokens, access control and many others
This project uses Foundry. See the book for detailed instructions on how to install and use Foundry.
The template ships with sensible default so you can use default foundry
commands without resorting to MakeFile
.
cp .env.example .env
forge install
forge test
In case of the multichain deployment we recommend to name scripts with the same name as the network you deploy.
For example if you will define
deploy-ghost-multi-chain:
$(call deploy_fn,Ghost,ethereum avalanche)
And then execute
make deploy-ghost-multi-chain
It will execute Mainnet
and Avalanche
scripts located at scripts/Ghost.s.sol
which will deploy Ghost
contract to ethereum
and avalanche
networks respectfully
If you want to put a custom name for your deployment script
deploy-ghost-custom:
$(call deploy_fn,Ghost,ethereum,CustomDeploy)
And then execute
make deploy-ghost-custom
It will execute CustomDeploy
script located at scripts/Ghost.s.sol
which will deploy Ghost
contract to ethereum
network
For contracts upgrading implementations it's quite important to diff the implementation code to spot potential issues and ensure only the intended changes are included.
Therefore the Makefile
includes some commands to streamline the diffing process.
You can download
the current contract code of a deployed contract via make download chain=polygon address=0x00
. This will download the contract source for specified address to src/etherscan/chain_address
. This command works for all chains with a etherscan compatible block explorer.
You can git-diff
a downloaded contract against your src via make git-diff before=./etherscan/chain_address after=./src out=filename
. This command will diff the two folders via git patience algorithm and write the output to diffs/filename.md
.
Caveat: If the onchain implementation was verified using flatten, for generating the diff you need to flatten the new contract via forge flatten
and supply the flattened file instead fo the whole ./src
folder.