摘要:对照 getfoundry.sh Scripting / forge script 参考:本机 forge init 的 script/ 结构,anvil 上 forge script --broadcast 看到部署地址;与站内 forge test 入门文区分。不碰主网资金。

上一篇 Foundry forge 入门 讲了 forge init / forge test / trace。本篇专讲 script 部署脚本结构:官方怎么写 Script、vm.startBroadcast 包一层,以及本机用 anvil 跑 forge script … --broadcast 看到部署地址。不碰真私钥、不上主网。Hardhat 本地脚本对照见 Hardhat 初始化;合约语法见 Solidity 与 Remix。

一、官方:Scripting 在讲什么

getfoundry.sh「Scripting」写明:Forge scripts 是 Solidity 文件,用来部署合约、在链上执行交易,替代传统用 JavaScript 写的部署脚本。页内「Script structure」给出典型骨架:继承 forge-std/Script,在 run() 里 vm.startBroadcast() … new Counter() … vm.stopBroadcast()。

Foundry forge script:本地脚本部署结构怎么跑-程序旅途
图1:getfoundry.sh/forge/scripting:Scripting 总述与 Script structure 示例(Deploy.s.sol / startBroadcast);界面英文,2026-10-12 实拍

命令参考页「forge script」说明:把智能合约当脚本跑,构建可上链发送的交易。示例含本地模拟、--rpc-url … --broadcast、以及 --resume。

Foundry forge script:本地脚本部署结构怎么跑-程序旅途
图2:getfoundry.sh/reference/forge/script:forge script 用法与 Examples;界面英文,2026-10-12 实拍

二、本机:forge init 与 script/ 目录

本场用 Foundry 1.8.5 执行 forge init script_demo --no-commit:安装 forge-std v1.17.0,并生成 script/Counter.s.sol、src/Counter.sol、test/、foundry.toml。版本以你机器上 forge --version 为准。

Foundry forge script:本地脚本部署结构怎么跑-程序旅途
图3:本机:forge init script_demo --no-commit → forge-std v1.17.0;find 可见 script/Counter.s.sol、src/Counter.sol;foundry.toml 中 src/out/libs;2026-10-12
路径 本篇关注
script/*.s.sol 部署/广播脚本(继承 Script)
src/ 要部署的合约源码
foundry.toml src / out / libs 等配置
broadcast/ 加 --broadcast 后写入的交易记录(本场本地 anvil)
test/ 测试(见入门文,本文不展开)

三、脚本文件结构:startBroadcast / stopBroadcast

本场在默认脚本上加了一行 console.log,方便终端打印部署地址。核心仍是:vm.startBroadcast() 与 vm.stopBroadcast() 之间的 new Counter() 会被记成待广播交易。

Foundry forge script:本地脚本部署结构怎么跑-程序旅途
图4:本机 cat script/Counter.s.sol:Script + console;run() 内 startBroadcast → new Counter → log 地址 → stopBroadcast;2026-10-12
// script/Counter.s.sol(结构节选)
contract CounterScript is Script {
    function run() public {
        vm.startBroadcast();
        counter = new Counter();
        console.log("Counter deployed at", address(counter));
        vm.stopBroadcast();
    }
}

四、本地 anvil:forge script --broadcast

本场连本机 anvil(默认链 ID 31337,RPC http://127.0.0.1:8545),用 anvil 账户 #0 的公开测试私钥(文中截断为 0xac09…ff80;官方文档亦提示勿把真钥写进仓库)。命令形态:

forge script script/Counter.s.sol:CounterScript \
  --rpc-url http://127.0.0.1:8545 --broadcast \
  --private-key 0xac09…ff80   # 仅 anvil 公开测试钥

本场实跑结果(2026-10-12):Solc 0.8.37 编译通过;日志 Counter deployed at 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512;ONCHAIN EXECUTION COMPLETE & SUCCESSFUL;交易写入 broadcast/Counter.s.sol/31337/run-latest.json。Gas/费用估算会随本地节点状态变化,以你终端为准。

Foundry forge script:本地脚本部署结构怎么跑-程序旅途
图5:本机 anvil:forge script … --broadcast → new Counter@0xe7f1…0512;Chain 31337;ONCHAIN EXECUTION COMPLETE;2026-10-12

五、和 Hardhat / 测试文怎么衔接

只本地,不上主网
本场 RPC 指向 127.0.0.1 anvil;不要把 --broadcast 指到主网,也不要用真资金账户私钥。
和 forge test 的分工
test/ 验证逻辑;script/ 负责部署与链上步骤。trace/测试见站内 Foundry 入门文。
和 Hardhat 对照
Hardhat 常用 JS/TS scripts + localhost;Foundry 用 Solidity Script + forge script。两条都能本地跑通。
  1. 先跑通 forge init / test,再回来写 script。
  2. 本地节点也可用 Hardhat node,见 Hardhat 初始化。
  3. 合约字段与 Remix 部署对照见 Solidity 第一课、mapping 与事件。
  4. 需要钱包看测试网时,可用欧易 Web3(创建步骤可填 CHENGXULVTU);买少量 Gas 可在 币安 或 欧易——本场本地部署完全不需要。

相关阅读

说明:配图为 2026-10-12 getfoundry.sh 官方文档与本机真实终端输出(Foundry 1.8.5 + anvil)。私钥仅为 anvil 公开测试钥并已截断。本文不涉及主网资金,不构成投资建议。命令与版本以你安装的 Foundry / 官方文档为准。