第十天:与线上合约对话——cast、脚本与事件监听
合约已经在 Sepolia 上”住”下来了,今天练习三种与它对话的方式:命令行(cast)、脚本(forge script 的进阶用法)、以及事件监听。掌握之后,你就能独立完成绝大多数链上运维任务。
cast:把 RPC 当命令行用
# 读:不花 gas
cast call $CONTRACT "balanceOf(address)(uint256)" 0x你的地址 --rpc-url $SEPOLIA_RPC_URL
# 写:这是一笔交易,要私钥签名
cast send $CONTRACT "faucet()" --rpc-url $SEPOLIA_RPC_URL --account study-deployer
# 查回执与事件
cast receipt $TX_HASH --rpc-url $SEPOLIA_RPC_URL函数签名写法是 Foundry 的特色:完整签名 + (返回类型) 后缀,cast 会自动算出函数选择器。日常排错(”为什么我的交易 revert 了”)用 cast run $TX_HASH 能直接还原调用栈和 revert 原因。
部署脚本进阶:参数化与多环境
第九天的 Deploy 脚本可以升级成”读环境变量 + 多网络通用”:
contract Deploy is Script {
function run() external {
string memory name = vm.envOr("TOKEN_NAME", string("Study Coin"));
vm.startBroadcast();
new StudyCoin();
vm.stopBroadcast();
}
}配合 forge script --rpc-url $RPC --broadcast,同一份脚本可以在 anvil、Sepolia、L2 之间自由切换——这就是第十一天要讲的”同一份合约多环境部署”的雏形。
事件监听:让链下世界感知链上变化
# 拉历史日志:Transfer 事件(topic0 是事件签名的 keccak 哈希)
cast logs --from-block 0 --to-block latest
"Transfer(address,address,uint256)" $CONTRACT --rpc-url $SEPOLIA_RPC_URL链下程序(索引器、通知机器人)本质都在做这件事:订阅事件 → 解析 → 落库/推送。今天的作业是用 cast 完成一次”领币 → 查余额 → 查事件”的闭环,并把 receipt 里你最能看懂的字段记下来。明天我们把交互层搬进网页。
读完了点一下,作者能得积分
赞赏
如果这篇内容帮到了你,不妨请作者喝杯咖啡
赞赏
如果这篇内容帮到了你,不妨请作者喝杯咖啡
选个金额
微信扫码扫一下,金额 ¥6
- 扫码后按所选金额支付即可
- 赞赏完全自愿,与积分、红包互不影响
发表评论