| name | cast-commands |
| description | Use when interacting with Ethereum contracts and data from the command line using Foundry's cast. Covers read/write calls, storage inspection, ABI encoding/decoding, block queries, and common one-liners. |
Cast CLI Reference
Overview
cast is Foundry's command-line tool for interacting with EVM chains. Read state, send transactions, decode data, and inspect contracts without writing scripts.
Reading State (cast call)
cast call 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
"balanceOf(address)(uint256)" 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 \
--rpc-url $ETH_RPC_URL
cast call 0xUniswapV3Pool "slot0()(uint160,int24,uint16,uint16,uint16,uint8,bool)" \
--rpc-url $ETH_RPC_URL
cast call 0xContract "totalSupply()(uint256)" --block 18000000 --rpc-url $ETH_RPC_URL
cast call --from 0xWhale 0xContract "balanceOf(address)(uint256)" 0xWhale
Writing State (cast send)
cast send 0xToken "transfer(address,uint256)" 0xRecipient 1000000 \
--private-key $PRIVATE_KEY --rpc-url $ETH_RPC_URL
cast send 0xToken "approve(address,uint256)" 0xSpender $(cast max-uint) \
--private-key $PRIVATE_KEY --rpc-url $ETH_RPC_URL
cast send 0xContract "deposit()" --value 1ether \
--private-key $PRIVATE_KEY --rpc-url $ETH_RPC_URL
cast send 0xContract "doStuff()" \
--gas-limit 500000 --gas-price 30gwei \
--private-key $PRIVATE_KEY --rpc-url $ETH_RPC_URL
Storage Inspection (cast storage)
cast storage 0xContract 0 --rpc-url $ETH_RPC_URL
cast storage 0xProxy \
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc \
--rpc-url $ETH_RPC_URL
cast index address 0xAddress 2
cast storage 0xContract $(cast index address 0xAddress 2)
ABI Encoding / Decoding
cast calldata "transfer(address,uint256)" 0xRecipient 1000000
cast 4byte-decode 0xa9059cbb000000000000000000000000...
cast abi-encode "constructor(string,string,uint256)" "MyToken" "MTK" 1000000
cast abi-decode "balanceOf(address)(uint256)" 0x00000000000000000000000000000000000000000000000000000000000f4240
cast sig "transfer(address,uint256)"
cast 4byte 0xa9059cbb
Block and Chain Info
cast block-number --rpc-url $ETH_RPC_URL
cast block latest --rpc-url $ETH_RPC_URL
cast block 18000000 --rpc-url $ETH_RPC_URL
cast base-fee --rpc-url $ETH_RPC_URL
cast gas-price --rpc-url $ETH_RPC_URL
cast chain-id --rpc-url $ETH_RPC_URL
cast client --rpc-url $ETH_RPC_URL
Contract Inspection
cast code 0xContract --rpc-url $ETH_RPC_URL
cast code 0xContract --rpc-url $ETH_RPC_URL | wc -c
cast interface 0xContract --etherscan-api-key $ETHERSCAN_API_KEY
cast etherscan-source 0xContract --etherscan-api-key $ETHERSCAN_API_KEY -d ./source
Account and Balance
cast balance 0xAddress --rpc-url $ETH_RPC_URL
cast balance 0xAddress --rpc-url $ETH_RPC_URL --ether
cast nonce 0xAddress --rpc-url $ETH_RPC_URL
cast resolve-name vitalik.eth --rpc-url $ETH_RPC_URL
cast lookup-address 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --rpc-url $ETH_RPC_URL
Transaction Inspection
cast tx 0xTxHash --rpc-url $ETH_RPC_URL
cast receipt 0xTxHash --rpc-url $ETH_RPC_URL
cast 4byte-decode $(cast tx 0xTxHash input --rpc-url $ETH_RPC_URL)
cast run 0xTxHash --rpc-url $ETH_RPC_URL
Conversion Utilities
cast from-wei 1000000000000000000
cast to-wei 1.5
cast to-dec 0xff
cast to-hex 255
cast keccak "Transfer(address,address,uint256)"
cast max-uint
Common One-Liners
cast code 0xAddress --rpc-url $ETH_RPC_URL | grep -q "^0x$" && echo "EOA" || echo "Contract"
cast call 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
"balanceOf(address)(uint256)" 0xAddress --rpc-url $ETH_RPC_URL | \
xargs -I{} cast from-wei {} 6
cast storage 0xProxy \
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc \
--rpc-url $ETH_RPC_URL
cast call 0xRouter \
"getAmountsOut(uint256,address[])(uint256[])" \
1000000000000000000 "[0xWETH,0xUSDC]" \
--rpc-url $ETH_RPC_URL
cast estimate 0xContract "doStuff(uint256)" 42 --rpc-url $ETH_RPC_URL
cast block-number --rpc-url $ETH_RPC_URL --watch
Tips
- Set
ETH_RPC_URL environment variable to avoid --rpc-url on every command
- Use
--json flag for machine-readable output
- Pipe cast output to other cast commands for complex queries
- Use
cast wallet subcommands for key management
cast completions bash/zsh/fish generates shell completions