1. 核心工作区
这是项目的灵魂所在,承载了所有的业务逻辑、安全验证和自动化部署流程。作为开发者,90% 的时间都将聚焦于此。
1.1 src (Source Code)
这里是智能合约的源代码目录,也是黑客攻击的首要目标。
-
1.1.1 文件特征:以
.sol结尾的标准 Solidity 文件。 -
1.1.2 核心职能:存放具体的业务逻辑合约(如 ERC20 代币、DeFi 借贷协议、NFT 交易所核心代码)。
-
1.1.3 安全视角:审计员会逐行分析此处的代码逻辑,寻找重入攻击、权限溢出等漏洞。
1.2 test (Testing Suite)
这里是测试脚本目录。在 Web3 安全领域,未经验证的代码等同于漏洞。
-
1.1.1 文件特征:以
.t.sol结尾。这是 Foundry 的命名约定,区别于普通合约。 -
1.1.2 技术优势:Foundry 允许使用 Solidity 编写测试(而非传统的 JavaScript),这使得测试可以直接调用合约底层逻辑。
-
1.1.3 关键能力:这里不仅包含单元测试,还支持 Fuzzing (模糊测试) 和 Invariant Testing (不变性测试),这是发现深层逻辑漏洞的核武器。
1.3 script (Deployment Scripts)
这里是部署与运维脚本目录,负责将代码送上区块链。
-
1.3.1 文件特征:以
.s.sol结尾。 -
1.3.2 运行机制:利用 Solidity 的 FFI (外部函数接口) 功能,在本地模拟完整的部署流程,确认无误后广播到主网。
-
1.3.3 应用场景:用于合约上链部署、初始化参数配置、以及执行复杂的跨合约多步操作。
2. 编译产物与缓存 (The Machine Room)
这一部分完全由机器生成和管理,严禁手动修改。
2.1 out (Artifacts)
这是编译后的产物目录,包含机器可读的代码。
-
2.1.1 核心内容:
-
Bytecode (字节码):EVM 虚拟机实际执行的十六进制代码。
-
ABI (应用二进制接口):前端或外部脚本与合约交互的“说明书” (JSON 格式)。
-
-
2.1.2 动态特性:执行
forge build时自动生成或更新;如果删除,下次编译会自动重建。
2.2 cache (Build Cache)
这是编译器的增量缓存目录。
-
2.2.1 核心职能:记录上一次编译的文件指纹。
-
2.2.2 效能提升:当只修改一行代码时,Foundry 通过读取缓存,仅重新编译修改的部分,从而实现毫秒级的极速反馈。
-
2.2.3 故障排查:如果遇到无法解释的编译错误,执行
forge clean删除此文件夹通常是第一解决方案。
3. 依赖管理系统 (The Supply Chain)
Web3 开发高度依赖开源社区,这里管理所有的第三方组件(如 OpenZeppelin)。
3.1 lib (Libraries)
这是第三方依赖库的存放地。
-
3.1.1 管理机制:基于 Git Submodules (子模块) 技术。
-
3.1.2 结构差异:不同于 Node.js 的
node_modules黑盒,lib下的文件夹本质上是指向 GitHub 原始仓库的“快捷方式”。 -
3.1.3 常见内容:
forge-std(Foundry 标准库),openzeppelin-contracts(安全合约模版)。
3.2 foundry.lock & .gitmodules
这是依赖管理的版本控制文件。
-
3.2.1 .gitmodules:记录依赖库的远程 GitHub 地址映射关系。
-
3.2.2 foundry.lock:精确锁定依赖库的 Commit Hash。
-
3.2.3 团队协作:确保团队所有成员使用的第三方库版本完全一致,防止“环境不同”导致的诡异 Bug。
4. 全局配置与工程化 (The Control Panel)
这一部分控制着项目的行为准则和安全底线。
4.1 foundry.toml (核心配置)
这是 Foundry 的总控配置文件。
-
4.1.1 编译器设置:指定
solc_version(如 0.8.20) 和optimizer_runs(Gas 优化次数)。 -
4.1.2 路径映射 (Remappings):告诉编译器
@openzeppelin/等同于lib/openzeppelin-contracts/。 -
4.1.3 验证接口:配置 Etherscan API Key,实现部署后自动上传源码验证。
4.2 .gitignore (安全守卫)
这是 Git 的忽略清单。
-
4.2.1 核心职能:防止垃圾文件或敏感文件被上传到 GitHub。
-
4.2.2 绝对红线:必须包含
.env(通常存放私钥) 和out/、cache/。 -
4.2.3 安全警示:如果私钥文件被误传,资产将在几秒钟内被自动脚本盗走。
5. 总结 (Mental Model)
为了方便记忆,您可以将整个项目结构比喻为一个 “汽车制造厂”:
-
5.1 核心部门:
-
src:设计部门(画图纸)。 -
test:碰撞实验室(做质检)。 -
script:物流发货部(送往 4S 店/区块链)。
-
-
5.2 供应链与后勤:
-
lib:零部件仓库(轮胎、发动机)。 -
foundry.toml:工厂总控室(调节流水线参数)。 -
out:成品车间(存放造好的整车)。
-