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 builldforge 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

https://book.getfoundry.sh/projects/dependencies

https://book.getfoundry.sh/projects/project-layout