学习Foundry之创建、管理项目及其依赖项
1 - 创建新项目
我们可以使用forge init
命令来创建一个新项目:
forge init hello_forge
上述命令会从默认的模版中创建一个名为hello_forge
的项目。
如果你想在创建新项目时指定一个模版,你可以使用--template
参数:
forge init --template https://github.com/foundry-rs/forge-template hello_template
其中默认的模版有Forge标准库
的依赖项,这是在Foundry项目中执行测试的库。
2 - 编译
可以使用forge build
命令来编译项目。
3 - 测试
可以通过forge test
命令来进行测试。
4 - 处理已有项目
假设,我从Github上克隆了一个项目:
git clone https://github.com/abigger87/femplate
cd femplate
forge install
我们首先需要运行forge install
命令来安装依赖项,然后就可以执行forge builld
或forge test
来进行编译或测试了。
5 - 依赖项
默认情况下,forge
是通过git submodule
来管理依赖的,这意味着它可以在任何包含了智能合约代码上工作。
5-1 添加依赖项
我们可以使用forge install
来添加依赖项
forge install transmissions11/solmate
Installing solmate in "/private/var/folders/p_/xbvs4ns92wj3b9xmkc1zkw2w0000gn/T/tmp.FRH0gNvz/deps/lib/solmate" (url: Some("https://github.com/transmissions11/solmate"), tag: None)
Installed solmate
这样就会将solmate
库以submodule的方式加入到git的仓库里,并且会生成一条"forge install: solmate"的记录
默认情况下,forge install
会安装最终master分支版本的库,如果你想指定tag或commit,你可以这样做:
forge install transmissions11/solmate@v7
5-2 重新映射依赖项
forge
可以重映射(remap)依赖项使其变得更好导入(import)。
forge
会自动尝试推断一些重映射项(remapping)给你。
forge remappings
ds-test/=lib/forge-std/lib/ds-test/src/
forge-std/=lib/forge-std/src/
solmate/=lib/solmate/src/
上面的这些重映射代表着:
- 导入
forge-std
时,我们就可以写成import "forge-std/Contract.sol";
- 导入
ds-test
时,我们就可以写成import "ds-test/Contract.sol";
- …
当然,你也可以通过在项目的根目录中创建remappings.txt
来自定义这些重映射项。
接下来我们可以创建一个名为solumate-utils
,它会指向solmate仓库中的utils
文件夹。
solumate-utils/=lib/solmate/src/utils/
现在,我们就可以导入任何solumate仓库中src/utils
文件夹中的任何合约代码了:
import "solmate-utils/Contract.sol";
5-3 更新依赖项
我们可以通过forge update
命令来指定某个依赖项在该版本中最新的记录。
例如,如果我们想在之前安装的master版本的solamate
中,拉取最后一条提交记录,就可以执行:
forge update lib/solmate
或者,你可以通过forge update
命令来更新所有的依赖项。
5-4 删除依赖项
我们可以通过forge remove <deps>
命令来删除依赖项。
比如,为了删除solmate
,可以使用以下两种做法:
forge remove solmate
或者
forge remove lib/solmate
6 - 项目结构介绍
默认情况下,forge
的项目结构如下:
.
├── foundry.toml
├── lib
│ └── forge-std
│ ├── LICENSE-APACHE
│ ├── LICENSE-MIT
│ ├── README.md
│ ├── foundry.toml
│ ├── lib
│ └── src
├── script
│ └── Counter.s.sol
├── src
│ └── Counter.sol
└── test
└── Counter.t.sol
- 你可以通过
foundry.toml
文件来配置foundry
的行为。 remappings.txt
文件配置重映射。- 默认的合约文件夹是
src
。 - 默认的测试文件夹是
tests
,任何合约的函数其名称以test
开头的都会被认为是测试函数。 - 依赖项以
git submodules
的方式存在lib
文件夹中。
参考文档
https://book.getfoundry.sh/projects/creating-a-new-project
https://book.getfoundry.sh/projects/working-on-an-existing-project