Foundry Cheat Sheet

100+ commands · forge · cast · anvil · config · opcodes

Forge builds & tests Solidity, Cast calls chains & wallets, Anvil runs a local node. One page, searchable, fork-ready. ⚠ All commands work on any network — test on a fork or testnet before mainnet.

$1 lifetime access · PDF + plaintext

Send ETH / ERC-20 to:

0x0D42B32D6E21F496082104BFC8d7213081474577

Forge build & test

Compile, test, deploy, and debug Solidity contracts.

$ curl -L https://foundry.paradigm.xyz | bash && foundryup # install Foundry
$ forge init && forge build # start a new project
$ forge build # compile project (--optimize --via-ir)
$ forge test -vvvv # run tests with full traces
$ forge test --match-test testWithdraw -vvv --gas-report
$ forge script script/Deploy.s.sol \
  --rpc-url $RPC --broadcast --verify
$ forge create src/Contract.sol:MyContract \
  --rpc-url $RPC --private-key $PK
$ forge inspect MyContract methods --pretty

Cast chain interactions

Call contracts, send transactions, query blockchain state.

$ cast call 0x1234… "balanceOf(address)(uint256)" 0x… --rpc-url $RPC
$ cast send 0x1234… "transfer(address,uint256)" 0x… 100 \
  --rpc-url $RPC --private-key $PK
$ cast block latest --rpc-url $RPC
$ cast logs --from-block 18000000 --to-block latest \
  --address 0x1234… --rpc-url $RPC
$ cast wallet new
$ cast estimate 0x1234… "mint(uint256)" 42 \
  --rpc-url $RPC --from 0x…

Anvil local node

Spin up a local Ethereum node in seconds.

$ anvil # start local dev node (port 8545)
$ anvil --fork-url $RPC --fork-block-number 18000000
$ anvil --block-time 12 --accounts 15 --balance 1000
$ anvil --port 8546 --silent --chain-id 31337

Config foundry.toml

Project configuration and remappings.

$ forge config # print current resolved config
$ forge config --json # JSON output
# foundry.toml
[profile.default]
solc_version = "0.8.27"
optimizer = true
optimizer_runs = 200
via_ir = true
remappings = [
  "@openzeppelin=lib/openzeppelin-contracts",
  "forge-std=lib/forge-std/src"
]

Opcodes Yul & EVM

Essential EVM opcodes for inline assembly.

// Load free memory pointer
assembly { let ptr := mload(0x40) }
// SLOAD / SSTORE — read & write contract storage
assembly { let val := sload(slot) }
assembly { sstore(slot, value) }
// DELEGATECALL — proxy pattern
assembly {
  let success := delegatecall(
    gas(), impl, 0, calldatasize(), 0, 0
  )
}
// Return data
assembly {
  return(ptr, size)
}

More developer tools — $1 each