1. 网络与基础依赖
核心目标:解决 WSL 的网络连接问题,并一次性安装所有底层编译依赖(GCC/G++、Python3、Pipx),为后续工具链铺平道路。
1.1 网络模式选择
在开始下载之前,请根据您 Day001 的调试结果,选择一种网络连接方式。
-
1.1.1 方案 A:TUN 模式 (强烈推荐):
- 如果您的 v2rayN/Clash 已开启 TUN 模式,且在 Ubuntu 终端能直接
ping google.com通畅。 - 操作:不需要执行任何代理命令,直接跳到 1.3 节 开始安装。
- 如果您的 v2rayN/Clash 已开启 TUN 模式,且在 Ubuntu 终端能直接
-
1.1.2 方案 B:脚本代理 (保底方案):
- 如果 TUN 模式无效(Ping 不通),或者下载速度极慢。
- 操作:请使用我们在
.bashrc中配置的脚本。 - 执行命令:setproxy
1.2 代理命令机制详解
很多新手会对 source 和 setproxy 感到困惑,这里用“开关灯”做比喻:
-
1.2.1 什么是
source ~/.bashrc(安装开关):- 含义:这相当于把“开关”安装到墙上。
- 频率:极低。只有当你修改了
.bashrc文件(比如粘贴了新代码进去)时,才需要运行一次。平时开机,系统会自动执行。
-
1.2.2 什么是
setproxy(按下开关):- 含义:这相当于伸手去“按开关,开灯”。
- 安全机制:脚本默认是静默的。只要您不手动输入这个命令,它就绝对不会运行,绝不会干扰 TUN 模式。
- 频率:按需。每次新打开一个黑窗口,默认都是“纯净模式”(无代理)。
-
1.2.3 端口号策略 (自定义技巧):
- 默认行为:直接输入
setproxy,默认连接 7890 端口。 - 修改默认值:编辑
~/.bashrc,找到local port=${1:-7890},将 7890 改为您常用的(如 10809)。
- 默认行为:直接输入
1.3 安装系统工具链
执行以下命令,一次性安装 C++ 编译器、Python 环境以及 pipx(解决新版 Ubuntu 限制 pip 的问题):
# 1. 安装核心依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git build-essential libssl-dev pkg-config python3-pip pipx
# 2. 配置 pipx 环境变量 (关键步骤)
pipx ensurepath
# 3. 立即刷新环境变量,确保 pipx 生效
source ~/.bashrc2. Node.js 环境
核心目标:通过 NVM (Node Version Manager) 安装 Node.js,杜绝权限问题。
2.1 安装 NVM 管理器
严禁使用 sudo apt install nodejs。请执行官方脚本:
curl -o- [https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh](https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh) | bash
2.2 刷新与安装 LTS 版本
-
2.2.1 刷新环境:
source ~/.bashrc -
2.2.2 安装 Node.js: 安装长期支持版 (LTS),这是企业开发的标准:
nvm install --lts -
2.2.3 启用 Corepack (可选): 开启 pnpm/yarn 支持:
corepack enable
2.3 验证安装
执行以下命令,版本号应为 v20.x 或更高:
node -v
npm -v
3. Foundry 工具链
核心目标:安装 Rust 编写的 Foundry 套件。它是目前审计公司(如 OpenZeppelin)和黑客最常用的工具。
3.1 下载与安装
执行官方安装脚本:
curl -L [https://foundry.paradigm.xyz](https://foundry.paradigm.xyz) | bash
3.2 激活与组件下载
-
3.2.1 刷新环境:
source ~/.bashrc -
3.2.2 安装组件: 执行此命令下载
forge,cast,anvil:foundryup
3.3 验证安装
forge --version
4. Solidity 编译器管理
核心目标:使用隔离环境安装编译器切换工具,完美兼容 PEP 668 标准。
4.1 安装工具
由于已经在 1.3 节配置好了 pipx,这里直接安装即可:
pipx install solc-select
4.2 安装并锁定版本
-
4.2.1 安装 0.8.20:这是目前最主流的稳定版本:
solc-select install 0.8.20 -
4.2.2 设为全局默认:
solc-select use 0.8.20
- 4.2.3 切换运行:若要改用不同的solidity版本运行项目,执行4.2.1下载不同版本,再执行4.2.2即可
4.3 验证切换
solc --version
5. VS Code插件配置
核心目标:让 VS Code 支持 Solidity 语法高亮。
5.1 启动 VS Code
code .
5.2 必装插件
-
Solidity (Nomic Foundation):官方 Hardhat 团队出品。
-
Even Better TOML:用于高亮
foundry.toml配置文件。
6. 环境终极验证
核心目标:跑通一个标准的 Foundry 项目,确保所有链路正常。
6.1 初始化项目
mkdir demo_contract
cd demo_contract
forge init
6.2 编译与测试
forge build
forge test
6.3 判定标准
- 如果终端输出了绿色的
[PASS]字样,恭喜!您的企业级 Solidity 开发环境已完美就绪。
7. Web3 项目自动化
7.1 脚本源代码
Windows下新建FoundryManager.bat,修改BASE_DIR路径,再粘贴修改后脚本:
@echo off
setlocal enabledelayedexpansion
:: ====================================================
:: 配置区域
:: ====================================================
set "LINUX_USER=cx770"
set "BASE_DIR=/home/%LINUX_USER%/solidityCode"
echo ========================================
echo Web3 Solidity Project Manager (V15)
echo ========================================
:: 1. 交互询问
set /p "choice=是否创建新项目? (y/n): "
if /i "%choice%"=="y" (
set /p "proj_name=请输入无空格和非法字符的项目名称: "
:: --- 安全锁:检查目录是否存在 ---
wsl -u %LINUX_USER% bash -c "if [ -d \"%BASE_DIR%/!proj_name!\" ]; then exit 100; fi"
if !errorlevel! equ 100 (
echo.
echo [警告] 文件夹 '!proj_name!' 已存在!
set /p "reopen=为防止代码被覆盖,已停止初始化。是否直接打开该旧项目? (y/n): "
if /i "!reopen!"=="y" (
set "TARGET_PROJ=!proj_name!"
goto OPEN_PROJ
) else (
echo 已取消。
pause
exit /b
)
)
echo [状态] 正在进入 Linux 初始化新项目...
:: --- 核心初始化逻辑 ---
:: 修复点:确保 .last_project 写入时不带多余空格或换行
wsl -u %LINUX_USER% bash -l -c "rm -rf \"%BASE_DIR%/.last_project\" && mkdir -p \"%BASE_DIR%/!proj_name!\" && cd \"%BASE_DIR%/!proj_name!\" && $HOME/.foundry/bin/forge init && [ -f foundry.toml ] && echo -n \"!proj_name!\" > \"%BASE_DIR%/.last_project\""
if !errorlevel! neq 0 (
echo.
echo [错误] 项目创建失败!可能原因:网络超时或路径非法。
echo [建议] 请在下方的终端中手动尝试输入: forge init
wsl -u %LINUX_USER% --cd "%BASE_DIR%/!proj_name!" bash -l
pause
exit /b
)
set "TARGET_PROJ=!proj_name!"
) else (
:: --- 核心修复:获取历史记录逻辑 ---
:: 使用 head -n 1 确保只读取第一行内容,忽略文件末尾的空行干扰
set "TARGET_PROJ="
for /f "tokens=*" i"
)
:: --- 逻辑跳转:未发现历史记录时返回基础目录 ---
if "!TARGET_PROJ!"=="" (
echo.
echo [提示] 未发现有效的历史记录。
echo [状态] 正在为您打开基础工作目录: %BASE_DIR%
set "TARGET_PROJ=."
pause
goto OPEN_PROJ
)
)
:OPEN_PROJ
:: 判断是进入具体项目还是基础目录
if "!TARGET_PROJ!"=="." (
echo [状态] 正在唤起 VS Code: %BASE_DIR% ...
wsl -u %LINUX_USER% --cd "%BASE_DIR%" code .
echo [完成] 基础目录终端已就绪。
wsl -u %LINUX_USER% --cd "%BASE_DIR%" bash -l
) else (
echo [状态] 正在唤起 VS Code: !TARGET_PROJ! ...
wsl -u %LINUX_USER% --cd "%BASE_DIR%/!TARGET_PROJ!" code .
echo [完成] 项目终端已就绪。
wsl -u %LINUX_USER% --cd "%BASE_DIR%/!TARGET_PROJ!" bash -l
)
7.2 VScode编码合规
为了确保合约代码在特定环境下正确识别,请严格执行以下手动编码保存步骤:
-
7.2.1 定位编码状态栏:在 VS Code 编辑器界面的右下角,找到显示当前编码(如
UTF-8)的区域并点击。 -
7.2.2 触发保存动作:在编辑器顶部弹出的命令菜单中,选择 Save with Encoding(通过编码保存)。
-
7.2.3 选择目标编码:在列表中搜索并选择 Simplified Chinese (GB2312)。
-
7.2.4 注意事项:执行此操作会改变文件的磁盘写入编码。在执行
forge build前,请确保代码逻辑已完成且保存状态为 LF(行尾序列)。
7.3 使用方法与工作流
-
7.3.1 极速启动逻辑:双击
.bat文件后,直接输入项目名即可完成“目录创建 → 框架初始化 → VS Code 唤起”的闭环。 -
7.3.2 历史跳转:若只需继续开发上一个项目,运行脚本后输入
n,脚本会读取.last_project记录并自动定位开启。 -
7.3.3 终端协同原则:
-
管理器终端:即运行
.bat的黑窗口,初始化成功后应将其最小化作为环境备份。 -
生产终端:在 VS Code 内部使用
Ctrl + ~开启,负责所有的forge编译、测试与交互任务。
-