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:成品车间(存放造好的整车)。