Foundry部署到本地环境
使用anvil搭建本地环境,并将智能合约部署到该测试环境。
我们之前在文章中总结过如何部署合约到以太坊测试网:
forge create --rpc-url $Env:RPC_Goerli --private-key $Env:PRIVATE_KEY src/2_ERC721Metadata.sol:GameItemFoundry的四个组件
cast - CLI工具,用于直接和链进行交互
anvil - 本地测试节点,类似hardhat的node
chisel - Solidity REPL
forge - 用于智能合约的测试,脚本,编译,部署等等
cast - 瑞士军刀
通过命令行交互区块链。
获取数据
区块
交易
地址
执行交易 & Static Call
读取存储数值
解码/编码calldata
发送rpc调用
…
比如可以直接读取链上的合约信息:
cast interface
$ cast interface 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
pragma solidity ^0.8.10;
interface WETH9 {
event Approval(address indexed src, address indexed guy, uint256 wad);
event Deposit(address indexed dst, uint256 wad);
event Transfer(address indexed src, address indexed dst, uint256 wad);
event Withdrawal(address indexed src, uint256 wad);
function allowance(address, address) external view returns (uint256);
function approve(address guy, uint256 wad) external returns (bool);
function balanceOf(address) external view returns (uint256);
function decimals() external view returns (uint8);
function deposit() external payable;
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function totalSupply() external view returns (uint256);
function transfer(address dst, uint256 wad) external returns (bool);
function transferFrom(address src, address dst, uint256 wad) external returns (bool);
function withdraw(uint256 wad) external;
}读取的是合约的接口信息。
更多链上合约例子可查:https://www.alchemy.com/smart-contracts/flashwallet
数据解读出来的就是ABI数据。
模式是查询以太坊主网,可以指定查询的链ID:
cast interface 0xC5f882924A4d8a9B7C952193C2543117051a6791 -c 5-c 5 指的是Goerli。
https://chainlist.org/?testnets=true&search=Goer
cast run
cast run --quick --rpc-url ...可以获得很多有效的debug信息。
anvil
类似hardhat node但是更快。

