依赖

默认情况下,Forge 使用 git submodules 管理依赖项,这意味着它可以与任何包含智能合约的 GitHub 代码库一起使用。

添加依赖

要添加依赖项,请运行 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 库,在 git 中暂存 .gitmodules 文件并使用消息“Installed solmate”进行提交。

如果我们现在检查 lib 文件夹:

$ tree lib -L 1
lib
├── forge-std
├── solmate
└── weird-erc20

3 directories, 0 files

我们可以看到Forge安装了solmate

默认情况下,forge install 安装最新的 master 分支版本。 如果你想安装一个特定的标签或提交,你可以这样做:

$ forge install transmission11/solmate@v7

重新映射依赖项

Forge 可以重新映射(remap)依赖关系,使它们更容易导入。 Forge 将自动尝试为您推断出一些重新映射:

$ forge remappings
ds-test/=lib/forge-std/lib/ds-test/src/
forge-std/=lib/forge-std/src/
solmate/=lib/solmate/src/
weird-erc20/=lib/weird-erc20/src/

这些重新映射意味着:

  • 要从 forge-std 导入,我们会这样写:import "forge-std/Contract.sol";
  • 要从 ds-test 导入,我们会这样写:import "ds-test/Contract.sol";
  • 要从 solmate 导入,我们会这样写:import "solmate/Contract.sol";
  • 要从 weird-erc20 导入,我们会这样写:import "weird-erc20/Contract.sol";

您可以通过在项目的根目录中创建一个 remappings.txt 文件来自定义这些重新映射。

让我们创建一个名为 solmate-utils 的重映射,它指向 solmate repo中的 utils 文件夹!

solmate-utils/=lib/solmate/src/utils/

您还可以在 foundry.toml 中设置重映射。

remappings = [
    "@solmate-utils/=lib/solmate/src/utils/",
]

现在我们可以像这样导入 solmate repo的 src/utils 中的任何合约:

import "solmate-utils/LibString.sol";

更新依赖

您可以使用 forge update <dep> 将特定依赖项更新为您指定版本的最新提交。 例如,如果我们想从我们之前安装的 solmate 主版本中提取最新的提交,我们将运行:

$ forge update lib/solmate

或者,您可以通过运行 forge update 一次对所有依赖项执行更新。

删除依赖

您可以使用 forge remove <deps>... 删除依赖项,其中 <deps> 是依赖项的完整路径或只是名称 . 例如,要删除 solmate,这两个命令是等价的:

$ forge remove solmate
# ... 等同于 ...
$ forge remove lib/solmate

与 Hardhat 兼容

Forge 还支持基于 Hardhat 的项目,其中依赖项是 npm 包(存储在 node_modules 中)并且其合约存储在 contracts 中而不是 src 中。

要启用 Hardhat 兼容模式,请传递 --hh 标志。