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.
Send ETH / ERC-20 to:
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
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…
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
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" ]
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) }