- Start simple
forge init my-project. You may need to restart your project once or twice.
- Learn to create interfaces for external contracts and use them.
- Good to know:
hex"..." is a bytes literal. It’s the easiest way to create bytes from hex.
- Do not initialize your contract in the
setUp() function. It causes bugs. Currently I initialize the contract in each test.
- Learn to test with
forge test -vvvvv (full trace)
- Fork the network with
vm.createSelectFork(...) in your setUp()
- Optionally, provide a block number for faster tests.
- Use the
--debug flag to attach a debugger.
- Use
vm.breakpoint("a") to set a breakpoint.
- Use
vm.startPrank(...) and .stopPrank() to set msg.sender
- Learn to use
console2.log and its variants (console2.logBytes32, etc.)
- They can be used inside of tests and contracts.
- Learn to use Chisel to quickly prototype a script.
- Import this script into a foundry project and run it with
forge script scripts/MyScript.s.sol --fork-url ... -vvvvv
- This provides similar functionality to smart contracts, but acts more like EOA or an “ETH REPL.”
- Use
!help to see available commands.
vm.label(address(flashSwapper), "FlashSwapV2"); is a great way to label contracts.
- A full cheatsheet can be found here.