尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【好用的工具记录-Foundry 智能合约开发工具包】

【好用的工具记录-Foundry 智能合约开发工具包】 Foundry 智能合约开发工具包Cast 常用命令速查表Cast 是 Foundry 工具套件中的命令行工具用于与以太坊链交互Cast call 查询合约的只读函数Cast send 与合约交互环境配置# 设置常用环境变量exportRPChttps://api.zan.top/node/v1/pharos/atlantic/xxxexportPKyour_private_key# 如需代理exporthttps_proxyhttp://127.0.0.1:7890基础查询# 查询最新区块号cast block-number --rpc-url$RPC# 查询最新区块详情cast block latest --rpc-url$RPC# 查询指定区块cast block12345--rpc-url$RPC# 查询当前 gas 价格cast gas-price --rpc-url$RPC# 查询 chain idcast chain-id --rpc-url$RPC# 获取合约 codecast code 0x合约地址 --rpc-url$RPC余额查询# 查询 ETH 余额单位: weicast balance 0x地址 --rpc-url$RPC# 查询 ETH 余额可读格式单位: ethercast balance 0x地址 --rpc-url$RPC--ether# 查询 ERC20 代币余额cast call 0x代币合约balanceOf(address)(uint256)0x用户地址 --rpc-url$RPC合约方法调用只读 view/pure# totalSupply - 总发行量cast call 0x合约地址totalSupply()(uint256)--rpc-url$RPC# totalAssets - 总资产Vault 类合约常用cast call 0x合约地址totalAssets()(uint256)--rpc-url$RPC# 代币基本信息cast call 0x合约地址name()(string)--rpc-url$RPCcast call 0x合约地址symbol()(string)--rpc-url$RPCcast call 0x合约地址decimals()(uint8)--rpc-url$RPC# 查询授权额度 allowancecast call 0x代币合约allowance(address,address)(uint256)0xowner 0xspender --rpc-url$RPC# 查询存储槽cast storage 0x合约地址 槽位 --rpc-url$RPC# 其他自定义方法cast call 0x合约地址getUserInfo(address)(uint256,uint256)0x用户地址 --rpc-url$RPC部署合约forge create --private-key${OWNER_PRIVATE_KEY}--broadcastsrc/LuLuCoin.sol:LuLuCoin --constructor-args${OWNER_ADDRESS}// 顺序是固定的私钥路径构造函数 // 其他记录 forge init forge compile forgetestforge to-dec 0x0000000000000000000000000000000000000000000000056bc75e2d63100000交易相关查询交易# 查询交易详情cast txtx_hash--rpc-url$RPC# 查询交易回执包含 logs、status、gasUsed 等cast receipttx_hash--rpc-url$RPC# 查询交易回执并显示完整信息cast receipttx_hash--rpc-url$RPC-vvv发送交易# 调用合约方法需要 gascast send 0x合约地址deposit(uint256)1000000000000000000\--private-key$PK\--rpc-url$RPC# 调用合约方法带 ETHcast send 0x合约地址deposit()\--value1ether\--private-key$PK\--rpc-url$RPC# 直接发送 ETHcast send 0x接收地址--value1ether --private-key$PK--rpc-url$RPC# 指定 gas limit 和 gas pricecast send 0x合约地址function()\--private-key$PK\--rpc-url$RPC\--gas-limit200000\--gas-price 20gwei# 使用 nonce 强制替换交易cast send 0x合约地址function()\--private-key$PK\--rpc-url$RPC\--nonce123模拟与估算# 模拟调用不实际发送交易检查是否会 revertcast call 0x合约地址withdraw(uint256)1000000000000000000\--from0x调用者地址\--rpc-url$RPC# 估算 gascast estimate 0x合约地址deposit(uint256)1000000000000000000\--from0x调用者地址\--rpc-url$RPC数据编码/解码# 编码 calldatacast calldatatransfer(address,uint256)0x接收地址1000000000000000000# 编码带签名的 calldatacast calldatapermit(address,address,uint256,uint256,uint8,bytes32,bytes32)\0xowner 0xspender10000000000000000001234567890270xr 0xs# 解码 calldatacast --calldata-decodetransfer(address,uint256)input_data# 解码事件日志cast decode-event--datalog_data--topicstopic0topic1# 解码函数输出cast --abi-decodebalanceOf(address)(uint256)return_data单位转换# hex 转 decimalcast --to-dec 0x1234# decimal 转 hexcast --to-hex4660# ether 转 weicast --to-wei 1ether# 输出: 1000000000000000000# wei 转 ethercast --from-wei1000000000000000000# 输出: 1 ether# gwei 转换cast --to-unit1000000000gwei地址与签名# 私钥转地址cast wallet address --private-key$PK# 签名消息cast wallet signhello world--private-key$PK# 验证签名cast wallet verify--address0x地址--messagehello world--signaturesig# 计算合约创建地址cast compute-address--address0x部署者地址--nonce0实用技巧# 批量操作示例foraddrin0xaaa... 0xbbb... 0xccc...;doecho$addr:$(cast balance $addr --rpc-url $RPC--ether)ETHdone# 监控pending交易cast receipttx_hash--rpc-url$RPC--wait# 获取事件日志通过区块范围cast logs--address0x合约地址 --from-block1000--to-block2000--rpc-url$RPC# 读取单个存储槽cast storage 0x合约地址0--rpc-url$RPC# 读取映射类型存储槽 (hash(key, slot))cast storage 0x合约地址$(cast index address 0x用户地址0)--rpc-url$RPC快速查表需求命令区块号cast block-number --rpc-url $RPCETH 余额cast balance 0x地址 --rpc-url $RPCETH 余额(ether)cast balance 0x地址 --rpc-url $RPC --etherERC20 余额cast call 0x代币 balanceOf(address)(uint256) 0x用户 --rpc-url $RPCtotalSupplycast call 0x合约 totalSupply()(uint256) --rpc-url $RPCtotalAssetscast call 0x合约 totalAssets()(uint256) --rpc-url $RPC代币名称cast call 0x合约 name()(string) --rpc-url $RPC代币符号cast call 0x合约 symbol()(string) --rpc-url $RPC代币精度cast call 0x合约 decimals()(uint8) --rpc-url $RPC授权额度cast call 0x代币 allowance(address,address)(uint256) 0xowner 0xspender --rpc-url $RPC交易详情cast tx hash --rpc-url $RPC交易回执cast receipt hash --rpc-url $RPC发送交易cast send 0x地址 func() --private-key $PK --rpc-url $RPC发送 ETHcast send 0x地址 --value 1ether --private-key $PK --rpc-url $RPCgas 价格cast gas-price --rpc-url $RPCchain idcast chain-id --rpc-url $RPC合约代码cast code 0x合约 --rpc-url $RPC编码 calldatacast calldata func(type) args...解码 calldatacast --calldata-decode func(type) data常见问题1. 返回值是 wei如何转成可读格式# 方法1: 使用 --ether 标志部分命令支持cast balance 0x地址 --rpc-url$RPC--ether# 方法2: 使用 --from-weicast --from-wei$(cast balance 0x地址 --rpc-url $RPC)2. 如何处理大数字# 使用 cast --to-hex 转换大数字cast call 0x合约balanceOf(address)(uint256)0x用户 --rpc-url$RPC|cast --to-dec3. 如何获取 ERC20 转账事件的 logs# Transfer(address from, address to, uint256 value) 事件签名cast logs--address0x代币合约\--topic00xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\--from-block1000\--rpc-url$RPC
返回列表