| name | cast-commands |
| description | Interact with EVM chains using Cast CLI. Use when querying blockchain data, sending transactions, calling contracts, or converting between formats. Cast is the Swiss Army knife for chain interaction. |
Cast Commands
Cast is Foundry's command-line tool for interacting with EVM-compatible blockchains.
When to Use
- Querying contract state (balances, storage, call results)
- Sending transactions
- Calling contract functions
- Converting between data formats
- Debugging transactions
- ENS resolution
- ABI encoding/decoding
Reading Contract State
call - Read-Only Function Calls
cast call 0xContract "balanceOf(address)(uint256)" 0xAddress
cast call 0xContract "totalSupply()(uint256)" --rpc-url mainnet
cast call 0xContract "getReserves()(uint112,uint112,uint32)"
balance - Get ETH Balance
cast balance 0xAddress --rpc-url mainnet
cast balance 0xAddress --rpc-url mainnet -e
storage - Read Storage Slots
cast storage 0xContract 0 --rpc-url mainnet
cast storage 0xContract 0x2 --rpc-url mainnet
code - Get Contract Bytecode
cast code 0xContract --rpc-url mainnet
Sending Transactions
send - Write Transactions
cast send 0xContract "transfer(address,uint256)" \
0xRecipient 1000000000000000000 \
--rpc-url mainnet \
--private-key $PRIVATE_KEY
cast send 0xContract "deposit()" \
--value 1ether \
--rpc-url mainnet \
--private-key $PRIVATE_KEY
cast send 0xRecipient --value 1ether \
--rpc-url mainnet \
--private-key $PRIVATE_KEY
Gas Configuration
cast send 0xContract "mint()" --gas 500000
cast send 0xContract "mint()" --gas-price 50gwei
cast send 0xContract "mint()" \
--priority-gas-price 2gwei \
--gas-price 100gwei
ABI Encoding/Decoding
abi-encode - Encode Function Arguments
cast abi-encode "transfer(address,uint256)" 0xRecipient 1000
cast abi-encode "constructor(string,string,uint8)" "Token" "TKN" 18
abi-decode - Decode Data
cast abi-decode "balanceOf(address)(uint256)" 0x000...0001
cast abi-decode "getReserves()(uint112,uint112,uint32)" 0x...
calldata - Encode Full Calldata
cast calldata "transfer(address,uint256)" 0xRecipient 1000
cast calldata-decode "transfer(address,uint256)" 0xa9059cbb...
sig - Get Function Selector
cast sig "transfer(address,uint256)"
cast sig-event "Transfer(address,address,uint256)"
Data Conversion
Numbers
cast to-dec 0xff
cast to-hex 255
cast to-wei 1.5 ether
cast from-wei 1500000000000000000
Units
cast to-unit 1000000000000000000 ether
cast to-wei 100 gwei
Strings and Bytes
cast format-bytes32-string "hello"
cast parse-bytes32-string 0x68656c6c6f...
cast from-utf8 "hello"
cast to-ascii 0x68656c6c6f
Addresses
cast to-checksum-address 0xaddress
cast compute-address 0xDeployer --nonce 5
cast create2 --starts-with 0000 \
--deployer 0xDeployer \
--init-code-hash 0x...
Block & Transaction Info
block - Get Block Data
cast block latest --rpc-url mainnet
cast block 18000000 --rpc-url mainnet
cast block latest --field timestamp --rpc-url mainnet
tx - Get Transaction Data
cast tx 0xTxHash --rpc-url mainnet
cast tx 0xTxHash --field gasPrice --rpc-url mainnet
receipt - Get Transaction Receipt
cast receipt 0xTxHash --rpc-url mainnet
cast receipt 0xTxHash --field logs --rpc-url mainnet
logs - Get Event Logs
cast logs "Transfer(address,address,uint256)" \
--from-block 18000000 \
--to-block latest \
--address 0xTokenContract \
--rpc-url mainnet
Chain Info
cast chain-id --rpc-url mainnet
cast gas-price --rpc-url mainnet
cast base-fee --rpc-url mainnet
cast nonce 0xAddress --rpc-url mainnet
ENS
cast resolve-name vitalik.eth --rpc-url mainnet
cast lookup-address 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --rpc-url mainnet
Wallet Operations
wallet - Manage Keys
cast wallet new
cast wallet address --private-key $PRIVATE_KEY
cast wallet sign "message" --private-key $PRIVATE_KEY
cast wallet verify --address 0xAddress "message" 0xSignature
Debugging
run - Trace Transaction
cast run 0xTxHash --rpc-url mainnet
cast run 0xTxHash --quick --rpc-url mainnet
4byte - Decode Function Signature
cast 4byte 0xa9059cbb
cast 4byte-event 0xddf252ad...
Utility Commands
keccak - Hash Data
cast keccak "hello"
cast keccak "transfer(address,uint256)" | cut -c1-10
concat-hex - Concatenate Hex
cast concat-hex 0x1234 0x5678
access-list - Generate Access List
cast access-list 0xContract "swap(uint256)" 1000 \
--rpc-url mainnet
RPC Configuration
Using foundry.toml
[rpc_endpoints]
mainnet = "${MAINNET_RPC_URL}"
sepolia = "${SEPOLIA_RPC_URL}"
cast call 0xContract "totalSupply()(uint256)" --rpc-url mainnet
Environment Variable
export ETH_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/...
cast call 0xContract "totalSupply()(uint256)"
Common Patterns
See patterns.md for more examples.
Check Token Balance
cast call $TOKEN "balanceOf(address)(uint256)" $ADDRESS --rpc-url mainnet | cast to-dec
Approve and Transfer
cast send $TOKEN "approve(address,uint256)" $SPENDER $AMOUNT \
--rpc-url mainnet --private-key $PK
cast send $TOKEN "transferFrom(address,address,uint256)" $FROM $TO $AMOUNT \
--rpc-url mainnet --private-key $PK
Interact with Uniswap
cast call $PAIR "getReserves()(uint112,uint112,uint32)" --rpc-url mainnet
cast call $ROUTER "getAmountsOut(uint256,address[])(uint256[])" \
1000000000000000000 "[$WETH,$USDC]" --rpc-url mainnet