cli-cast
npx skills add https://github.com/paulrberg/agent-skills --skill cli-cast
Agent 安装分布
Skill 文档
Foundry Cast CLI
Overview
Expert guidance for Foundry’s cast CLI â the Swiss Army knife for interacting with EVM-compatible blockchains from the command line. Use this skill for signing transactions, sending them to chain RPCs, reading on-chain state, encoding/decoding ABI data, and managing wallets.
Key capabilities:
- Send transactions and call contracts via RPC
- Sign messages and typed data
- Encode and decode ABI calldata
- Query balances, transaction receipts, and block data
- Resolve ENS names and addresses
- Manage keystores and wallet operations
RPC Configuration
All on-chain commands require an RPC endpoint. Use RouteMesh as the default RPC provider.
URL pattern:
https://lb.routeme.sh/{CHAIN_ID}/{ROUTEMESH_API_KEY}
Construct the RPC URL by looking up the chain ID from references/chains.md and reading the ROUTEMESH_API_KEY environment variable.
Before running any on-chain command, verify that ROUTEMESH_API_KEY is set:
if [[ -z "$ROUTEMESH_API_KEY" ]]; then
echo "Error: ROUTEMESH_API_KEY is not set"
exit 1
fi
Example usage with a chain ID:
# Ethereum Mainnet (chain ID 1)
cast call "$CONTRACT" "balanceOf(address)" "$ADDR" \
--rpc-url "https://lb.routeme.sh/1/$ROUTEMESH_API_KEY"
# Arbitrum (chain ID 42161)
cast send "$CONTRACT" "transfer(address,uint256)" "$TO" "$AMOUNT" \
--rpc-url "https://lb.routeme.sh/42161/$ROUTEMESH_API_KEY" \
--private-key "$PRIVATE_KEY"
Signing & Key Management
Cast supports multiple signing methods. Choose based on the security context.
Private Key (dev/testing only)
cast send "$CONTRACT" "approve(address,uint256)" "$SPENDER" "$AMOUNT" \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY"
Keystore Account (recommended for persistent keys)
# Import a private key into a keystore
cast wallet import my-account --interactive
# Use the keystore account
cast send "$CONTRACT" "transfer(address,uint256)" "$TO" "$AMOUNT" \
--rpc-url "$RPC_URL" \
--account my-account
Hardware Wallet
# Ledger
cast send "$CONTRACT" "transfer(address,uint256)" "$TO" "$AMOUNT" \
--rpc-url "$RPC_URL" \
--ledger
Core Commands
Send Transactions
Use cast send to submit state-changing transactions on-chain.
# Send ETH
cast send "$TO" --value 1ether \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY"
# Call a contract function
cast send "$CONTRACT" "approve(address,uint256)" "$SPENDER" "$AMOUNT" \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY"
# With gas parameters
cast send "$CONTRACT" "mint(uint256)" 100 \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY" \
--gas-limit 200000 \
--gas-price 20gwei
Read Contract State
Use cast call for read-only calls that do not submit transactions.
# Read a single value
cast call "$CONTRACT" "totalSupply()(uint256)" --rpc-url "$RPC_URL"
# Read with arguments
cast call "$CONTRACT" "balanceOf(address)(uint256)" "$ADDR" --rpc-url "$RPC_URL"
# Read multiple return values
cast call "$CONTRACT" "getReserves()(uint112,uint112,uint32)" --rpc-url "$RPC_URL"
Build Raw Transactions
Use cast mktx to create a signed raw transaction without broadcasting it.
cast mktx "$CONTRACT" "transfer(address,uint256)" "$TO" "$AMOUNT" \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY"
Inspect Transactions
# View transaction details
cast tx "$TX_HASH" --rpc-url "$RPC_URL"
# View transaction receipt
cast receipt "$TX_HASH" --rpc-url "$RPC_URL"
# Get specific receipt fields
cast receipt "$TX_HASH" status --rpc-url "$RPC_URL"
cast receipt "$TX_HASH" gasUsed --rpc-url "$RPC_URL"
ABI Utilities
Encode Calldata
# Encode a function call
cast calldata "transfer(address,uint256)" "$TO" "$AMOUNT"
# ABI-encode arguments (without function selector)
cast abi-encode "transfer(address,uint256)" "$TO" "$AMOUNT"
Decode Calldata
# Decode calldata with a known signature
cast decode-calldata "transfer(address,uint256)" "$CALLDATA"
# Decode ABI-encoded data (without selector)
cast abi-decode "balanceOf(address)(uint256)" "$DATA"
Function Signatures
# Get the 4-byte selector for a function
cast sig "transfer(address,uint256)"
# Get the event topic hash
cast sig-event "Transfer(address,address,uint256)"
Wallet & ENS
Wallet Operations
# Generate a new wallet
cast wallet new
# Get address from private key
cast wallet address --private-key "$PRIVATE_KEY"
# List keystore accounts
cast wallet list
# Sign a message
cast wallet sign "Hello, world!" --private-key "$PRIVATE_KEY"
ENS Resolution
# Resolve ENS name to address
cast resolve-name "vitalik.eth" --rpc-url "$RPC_URL"
# Reverse lookup: address to ENS name
cast lookup-address "$ADDR" --rpc-url "$RPC_URL"
Balance Queries
# Get ETH balance
cast balance "$ADDR" --rpc-url "$RPC_URL"
# Get balance in ether (human-readable)
cast balance "$ADDR" --ether --rpc-url "$RPC_URL"
Chain Resolution
When the user specifies a chain by name, resolve the chain ID using these steps:
- Check
references/chains.mdfirst â it contains the 25 most commonly used chains - If the chain is not listed, web search for the correct chain ID on chainlist.org
- Construct the RPC URL using the resolved chain ID and RouteMesh pattern
Quick Reference
| Operation | Command | Key Flags |
|---|---|---|
| Send tx | cast send |
--rpc-url, --private-key, --value |
| Read state | cast call |
--rpc-url, --block |
| View tx | cast tx |
--rpc-url, --json |
| View receipt | cast receipt |
--rpc-url, --json |
| Build tx | cast mktx |
--rpc-url, --private-key |
| Encode call | cast calldata |
(function sig + args) |
| Decode call | cast decode-calldata |
(function sig + data) |
| ABI encode | cast abi-encode |
(function sig + args) |
| ABI decode | cast abi-decode |
(function sig + data) |
| Function sig | cast sig |
(function signature string) |
| Balance | cast balance |
--rpc-url, --ether |
| ENS resolve | cast resolve-name |
--rpc-url |
| New wallet | cast wallet new |
â |
| Sign message | cast wallet sign |
--private-key, --account |
Additional Resources
- Chain Reference â Chain names and IDs for RouteMesh RPC URL construction
- Foundry Book: https://book.getfoundry.sh/reference/cast/