- 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.