摘要:对照 getfoundry.sh Cast / cast call / cast send:本机用公开 RPC 读 USDT,用 anvil 公开测试钥发本地交易;与站内 forge test、forge script 文区分。不碰主网资金。

站内已有 forge init / test / trace 与 forge script 本地部署。本篇专讲 cast:用命令行读链上状态(cast call / cast storage)以及在本地 anvil上发一笔测试交易(cast send)。读主网只用公开 RPC;发交易只用 anvil 公开测试钥并截断展示,不碰真私钥、不上主网。Hardhat 本地对照见 Hardhat 初始化。

一、官方:Cast 是什么

getfoundry.sh「Cast」写明:Cast 从命令行做以太坊 RPC 调用、发交易、解码数据,是链上交互的「瑞士军刀」,可在 Foundry 项目内外使用。页内「Key capabilities」覆盖 Chain data、Transactions、Wallets、ABI encoding、Utilities;「Common workflows」示例含 cast block-number、cast call、cast send 等。

Foundry cast:读链上存储与发测试交易怎么跑-程序旅途
图1:getfoundry.sh/cast:Cast 总述、Key capabilities 表与 Common workflows;界面英文,2026-10-13 实拍

二、官方:cast call(只读,不上链)

参考页「cast call」定义:在账户上执行调用但不发布交易。示例包括 cast call $TOKEN "balanceOf(address)(uint256)" vitalik.eth。适合核对 name / decimals / balanceOf,以及对照浏览器 Read Contract。

Foundry cast:读链上存储与发测试交易怎么跑-程序旅途
图2:getfoundry.sh/reference/cast/call:Perform a call… without publishing;Examples 与 Usage;界面英文,2026-10-13 实拍

三、本机:对主网 USDT 做 cast call / storage

本场 Foundry 1.8.5,公开 RPC https://ethereum.publicnode.com,合约为以太坊主网 USDT 0xdAC17F958D2ee523a2206206994597C13D831ec7。实跑结果(块高与余额会变,以你终端为准):

cast call 0xdAC1…1ec7 "name()(string)" --rpc-url https://ethereum.publicnode.com
# → "Tether USD"

cast call … "symbol()(string)"     # → "USDT"
cast call … "decimals()(uint8)"    # → 6
cast call … "balanceOf(address)(uint256)" 0xd8dA…6045
# → 291368219  (÷10^6 ≈ 291.37 USDT)

cast storage 0xdAC1…1ec7 0 --rpc-url …
# → 0x0000…c6cde7c39eb2f0f0095f41570af89efc2c1ea828

cast block-number …   # 本场约 26182491
cast chain-id …       # 1

cast storage 读的是原始槽位,不等于已经按 ABI 解码好的字段;要人类可读结果优先用 cast call。余额记得除以 decimals。

Foundry cast:读链上存储与发测试交易怎么跑-程序旅途
图3:本机 cast 1.8.5:name/symbol/decimals/balanceOf + storage slot0 + block-number/chain-id;RPC=publicnode;2026-10-13

四、官方:cast send(会发交易)

参考页「cast send」:签名并发布交易。本场只把 --rpc-url 指到本机 anvil(默认 http://127.0.0.1:8545,链 ID 31337),私钥用 anvil 账户 #0 的公开测试钥(文中截断为 0xac09…ff80)。不要把同一命令指到主网或填入真资金账户。

Foundry cast:读链上存储与发测试交易怎么跑-程序旅途
图4:getfoundry.sh/reference/cast/send:Sign and publish a transaction;Usage 与 Options;界面英文,2026-10-13 实拍

五、本机 anvil:cast send 一笔 ETH

本场发现部分环境下 eth_estimateGas 会因请求体同时带 input/data 报错;加上 --gas-limit 21000 可跳过估算、直接发普通转账。示例:

anvil --port 8545 --chain-id 31337   # 另开终端

cast send 0x7099…79C8 --value 0.01ether \
  --private-key 0xac09…ff80 \
  --rpc-url http://127.0.0.1:8545 --gas-limit 21000

# 本场回执摘要:
# status 1 (success)
# transactionHash 0x3027bcf5…846629
# chainId 31337  gasUsed 21000  value 0.01 ETH

再用 cast tx <hash> / cast receipt <hash> 核对 nonce、value、status。本场 from 为 anvil #0 0xf39F…2266,to 为 #1 0x7099…79C8。

Foundry cast:读链上存储与发测试交易怎么跑-程序旅途
图5:本机 anvil:cast send 0.01 ETH → status success / hash 0x3027…6629;cast tx 见 chainId 31337、nonce、value;私钥已截断;2026-10-13

六、怎么和站内其它文衔接

只读 vs 广播
call/storage/block-number 可对公开 RPC;send 只建议本地 anvil 或你自己的测试网账户。
和 forge test / script 分工
test 验证逻辑;script 部署合约;cast 是即时 CLI 读/写。三者互补。
和 Hardhat 对照
Hardhat 常用 console / ethers 脚本;Foundry 用 cast 一条命令就能查余额、发本地交易。
  1. 先装 Foundry(见 forge 入门),确认 cast --version。
  2. 对公开 RPC 练 cast call / cast storage;ERC-20 事件在浏览器怎么读见 Transfer/Approve 怎么读。
  3. 本地 anvil + cast send --gas-limit …;脚本部署见 forge script。
  4. 需要钱包看测试网时,可用欧易 Web3(创建步骤可填 CHENGXULVTU);买少量 Gas 可在 币安 或 欧易——本场本地发交易完全不需要。

相关阅读

说明:配图为 2026-10-13 getfoundry.sh 官方文档与本机真实终端输出(Foundry cast 1.8.5 + anvil)。主网只读公开 RPC;私钥仅为 anvil 公开测试钥并已截断。块高、余额、Gas 会变。本文不构成投资建议。