W3
合约开发入门预计 30-40 分钟9 个步骤41 次学习

开发环境搭建:Hardhat、Foundry 与编辑器配置

从零搭好一套专业的智能合约开发环境:先建立「编写 → 编译 → 测试 → 本地部署 → 测试网部署 → 审计」的完整路线图,再一步步安装 Node.js、初始化 Hardhat 项目、安装 Foundry 工具链、配置 VS Code 的 Solidity 插件与编译器版本,讲清 artifacts / cache / contracts / test / scripts 目录各自存放什么,最后用 .env 与环境变量管理 RPC 与私钥,从第一天就养成「私钥绝不硬编码进代码」的安全习惯,并跑通第一次 hardhat compile。

开发环境搭建:Hardhat、Foundry 与编辑器配置
⚠️
操作前必读

本章只在本地与测试网操作,不涉及真实资金,但请从第一天就建立两条红线:第一,私钥与助记词只放在本地 .env 文件中,且 .env 必须写进 .gitignore,绝不能提交到 GitHub——公开仓库里的私钥会在几分钟内被扫描机器人清空;第二,测试网开发请使用专门的「开发钱包」,永远不要用存放主网资产的钱包私钥做实验。

01
1. 全局视角与工具选型

先看全流程:合约代码是怎么上链的

登录记录进度

智能合约开发遵循一条固定流水线,本章的环境搭建就是为这条流水线准备工具: 1. 编写:用 Solidity 语言写 .sol 合约源文件。 2. 编译:用 solc 编译器把源码编译成 EVM 字节码(Bytecode)和 ABI 接口文件。

  1. 测试:在本地用 JS/TS 测试或 Solidity 测试验证逻辑,配合模糊测试与主网分叉测试。 4. 本地部署:先部署到本地开发链(Hardhat Network / Anvil)反复调试。

  2. 测试网部署:部署到 Sepolia 等公共测试网,用免费测试币做端到端验证。 6. 源码验证:在区块浏览器上验证源码,让任何人都能核对链上字节码与源码一致。

  3. 安全审计:静态分析 + 手动审计 + 测试覆盖,必要时请第三方审计。 8. 主网部署:多签管理、Timelock 延迟、部署后监控。

先记住这条链路,后面每一章对应其中一个环节。

先看全流程:合约代码是怎么上链的
先看全流程:合约代码是怎么上链的|界面示意 · ethereum.org · 采集于 2026-09-18
💡
小技巧:

每一个环节都对应真实团队招聘里的要求:写合约只是第 1 步,测试与安全审计往往占用项目 60% 以上的时间。

02
1. 全局视角与工具选型

安装 Node.js 与基础命令行工具

登录记录进度

Hardhat、大多数前端工具和部署脚本都运行在 Node.js 上。到 Node.js 官网 下载 20 LTS 或更高版本(Windows 选 .msi 安装包,macOS 可选 .pkg 或用 nvm,Linux 推荐用 nvm 安装)。

安装完成后打开终端(Windows 用 PowerShell 或 Git Bash)验证:node --versionnpm --version 能正常打印版本号即可。

建议同时安装 Git(git-scm.com)用于版本管理,并准备好一个终端工具。Windows 用户注意:如果执行 npx 或全局命令时提示「无法加载脚本,因为在此系统上禁止运行脚本」,这是 PowerShell 默认执行策略导致的,可改用项目内的 npm.cmd / npx.cmd,或在了解风险后执行 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

安装 Node.js 与基础命令行工具
安装 Node.js 与基础命令行工具|界面示意 · nodejs.org · 采集于 2026-09-18
🚫
避坑提醒:

不要从非官方下载站安装 Node,第三方捆绑安装包曾被植入恶意程序。只访问 nodejs.org 或使用 nvm 官方脚本。

Node.js 官方下载
03
1. 全局视角与工具选型

两大主流框架:Hardhat 与 Foundry 怎么选

登录记录进度

目前行业里有两套事实标准工具链:

对比项 Hardhat Foundry
开发语言 JavaScript / TypeScript Rust 编写,测试用 Solidity
测试写法 Mocha + Chai(JS/TS) .t.sol 中直接用 Solidity 写测试
模糊测试 需要插件配合 原生 fuzz / invariant testing,速度快
上手门槛 对前端/JS 背景更友好 对纯 Solidity 开发者极快
生态 插件最全、教程最多 近年新项目与审计圈普及率极高

建议路径:初学者先学 Hardhat(概念更直观、报错更友好、和前端衔接顺滑),学到测试章节再装 Foundry,最终两者都会用——真实项目经常 Hardhat 负责脚本与前端联调、Foundry 负责高速测试与模糊测试。

两大主流框架:Hardhat 与 Foundry 怎么选
两大主流框架:Hardhat 与 Foundry 怎么选|界面示意 · hardhat.org · 采集于 2026-09-18
💡
小技巧:

两个框架可以装在同一台电脑上共存,互不冲突;它们都只是本地开发工具,不需要购买,也和链本身无关。

04
2. 搭起两套主流开发框架

初始化第一个 Hardhat 项目

登录记录进度

新建一个空文件夹并在终端进入,然后执行:npm init -y 初始化 package.json,再执行 npm install --save-dev hardhat 安装 Hardhat。安装完成后运行 npx hardhat,首次运行会出现交互菜单,选择 Create a JavaScript project(或 TypeScript project),同意安装 @nomicfoundation/hardhat-toolbox 这个工具箱(它打包了 ethers.js、测试库、覆盖率、Gas 报告等常用插件)。

初始化完成后执行 npx hardhat compile,如果看到 Compiled 1 Solidity file successfully,说明工具链已经跑通。Hardhat 还内置了一条本地测试链,执行 npx hardhat node 会在 http://127.0.0.1:8545 启动,并预生成 20 个带 10000 ETH 测试余额的账户,专门用于本地调试。

初始化第一个 Hardhat 项目
初始化第一个 Hardhat 项目|界面示意 · hardhat.org · 采集于 2026-09-18
🚫
避坑提醒:

npx hardhat node 启动后终端会被占用,需要另开一个终端执行部署命令;停止本地链用 Ctrl+C。

05
2. 搭起两套主流开发框架

安装 Foundry 工具链(forge / cast / anvil / chisel)

登录记录进度

Foundry 由四个命令行工具组成:forge(编译、测试、部署、依赖管理)、cast(直接与链/RPC 交互的瑞士军刀,可查余额、编码 calldata、手动发交易)、anvil(本地开发链,对标 hardhat node)、chisel(快速试 Solidity 语法片段的 REPL)。

安装方式:macOS / Linux 执行官方安装器 curl -L https://foundry.paradigm.xyz | bash 后重开终端运行 foundryup;Windows 用户建议先安装 Foundry for Windows 官方文档给出的方式(或使用 WSL2)。

验证安装:执行 forge --version。想体验它的速度,可以在一个新目录执行 forge init my_project,然后 cd my_project && forge test——它会在毫秒级编译并运行示例测试。

安装 Foundry 工具链(forge / cast / anvil / chisel)
安装 Foundry 工具链(forge / cast / anvil / chisel)|界面示意 · book.getfoundry.sh · 采集于 2026-09-18
Foundry 官方手册
06
2. 搭起两套主流开发框架

配置 VS Code 与 Solidity 插件

登录记录进度

行业默认编辑器是 Visual Studio Code(免费)。安装后在扩展市场搜索并安装 Solidity(Nomic Foundation 出品,即 Hardhat 团队,提供编译错误提示、格式化与 Hardhat 集成)。

可选安装 Solidity Visual Developer(辅助梳理函数调用关系与安全高亮)和 Prettier + prettier-plugin-solidity(保存时自动格式化代码)。

关键配置是编译器版本匹配:Solidity 源文件第一行的 pragma solidity ^0.8.20; 必须与项目实际使用的 solc 版本兼容,否则插件会报红线。在 VS Code 设置(Ctrl+,)里搜索 solidity.defaultCompiler,可设为 localNodeModule 让它直接读取项目 node_modules 里的编译器,保证团队每个人版本一致。

配置 VS Code 与 Solidity 插件
配置 VS Code 与 Solidity 插件|界面示意 · docs.soliditylang.org · 采集于 2026-09-18
💡
小技巧:

合约代码缩进、花括号位置有官方风格指南,配合 prettier-plugin-solidity 自动格式化,可以让你的代码在提交 PR 时和开源项目风格一致。

07
3. 工程结构、密钥管理与验收

认识标准项目目录结构

登录记录进度

以 Hardhat 项目为例,初始化后的目录各有分工: - contracts/:你写的 Solidity 源文件,一个 .sol 文件可包含多个合约,但通常一个主合约一个文件并同名。

  • test/:测试文件,Lock.js / Lock.ts 是生成的示例。 - scripts/:部署与运维脚本,例如 deploy.js

  • ignition/:Hardhat Ignition 声明式部署模块(新版推荐的部署方式)。 - hardhat.config.js:项目的核心配置:Solidity 版本、网络 RPC、插件、验证用的 Etherscan API Key。

  • artifacts/:编译产物,每个合约生成包含 ABI 与字节码的 JSON,前端就是靠 ABI 才能调用合约。 - cache/:编译缓存,可随时删除。

Foundry 项目则是 src/(合约)、test/.t.sol)、script/.s.sol)、lib/(依赖)、out/(产物)与 foundry.toml 配置。

认识标准项目目录结构
认识标准项目目录结构|界面示意 · hardhat.org · 采集于 2026-09-18
🚫
避坑提醒:

artifacts、cache、node_modules 都应加入 .gitignore;提交开源仓库前务必确认 .env 也被忽略。

08
3. 工程结构、密钥管理与验收

用 .env 管理 RPC 与私钥:从第一天养成习惯

登录记录进度

部署到测试网/主网需要两样敏感信息:RPC 地址(如 Alchemy、Infura 提供的节点 URL,内含 API Key)和钱包私钥。它们绝不能写死在代码或配置文件里,标准做法是: 1. 安装 npm install --save-dev dotenv,在项目根目录新建 .env 文件,写入如 SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/xxxxPRIVATE_KEY=0x你的测试钱包私钥

  1. hardhat.config.js 顶部 require('dotenv').config(),网络配置里通过 process.env.PRIVATE_KEY 读取。

  2. 确认 .gitignore 中包含 .env(Hardhat 模板默认已包含)。

可以用 git statusgit check-ignore .env 双重确认 .env 不会被提交。

用 .env 管理 RPC 与私钥:从第一天养成习惯
用 .env 管理 RPC 与私钥:从第一天养成习惯|界面示意 · hardhat.org · 采集于 2026-09-18
🚫
避坑提醒:

GitHub 上有自动化机器人 7×24 小时扫描泄露私钥,提交后几秒内测试币甚至主网资产就会被转走。永远使用零资产的专用开发钱包,并定期轮换测试用私钥。

09
3. 工程结构、密钥管理与验收

环境验收:跑通「编译 → 本地测试链」闭环

登录记录进度

用三个命令验收本章成果: 1. npx hardhat compile——能成功编译示例合约并在 artifacts 目录看到 JSON 产物。 2. npx hardhat test——能运行内置示例测试并全绿(默认在内存中的临时链上运行,无需启动 node)。

  1. 新开终端执行 npx hardhat node,再在另一个终端执行 npx hardhat run scripts/deploy.js --network localhost——示例部署脚本会把合约部署到本地链,并在 node 终端实时打印出区块与交易日志。

看到合约地址(0x5FbDB2315678afecb367f032d93F642f64180aa3 这类本地确定性地址)被打印出来,就说明你的编辑器、编译器、本地链、脚本环境全部就绪,可以进入下一章学习 Solidity 语法了。

环境验收:跑通「编译 → 本地测试链」闭环
环境验收:跑通「编译 → 本地测试链」闭环|界面示意 · hardhat.org · 采集于 2026-09-18
💡
小技巧:

hardhat node 每次重启都会清空链上数据并重置账户余额,这是正常设计——本地链就是用来随时推倒重来的。

来源与时效

教程记录平台 ethereum.org · 客户端 Web / App · 版本 v1。各平台界面会随版本更新变化,请以官方当前界面为准。

全部步骤已完成

操作完成后建议再核对一次到账金额与手续费,并保留交易哈希作为凭证。

相关教程

Solidity 语法基础:合约结构、数据类型与权限控制
合约开发入门35-45 分钟

Solidity 语法基础:合约结构、数据类型与权限控制

系统讲透 Solidity 写智能合约必备的语法骨架:pragma 版本声明的含义与 ^ / ~ 范围规则;状态变量、局部变量、构造函数、常量与 immutable 的区别;值类型(uint 系列、address、bool、定长 bytes、枚举)与引用类型(数组、struct、mapping)及 memory / storage / calldata 三种数据位置;public / external / internal / private 四种可见性与 view / pure 修饰;modifier 修饰器与 onlyOwner 权限模式;event 事件与 indexed 参数;合约收 ETH 的 receive / fallback 与 call 转账;最后是 interface、library 与继承 is,学完即可读懂绝大多数合约源码。

9 个步骤
实战编写 ERC-20:基于 OpenZeppelin 发一个代币合约
合约开发中级40-50 分钟

实战编写 ERC-20:基于 OpenZeppelin 发一个代币合约

亲手完成一个可部署的 ERC-20 代币合约:拆解 EIP-20 标准规定的 6 个必选函数(totalSupply / balanceOf / transfer / allowance / approve / transferFrom)与 Transfer、Approval 两个事件;安装并理解 OpenZeppelin Contracts 库为什么是行业标配;写出继承 ERC20 的 MyToken,用构造函数设置名称符号并初始 mint;讲透 _mint / _burn / approve / allowance / transferFrom 的授权扣款链路;分析加「转账征税」等自定义逻辑时最容易引入的漏洞;编译后检查 artifacts 中的 ABI 与字节码;再扩展到 ERC20Burnable、Pausable、ERC20Permit、ERC20Votes 与 ERC-721/1155 的区别。

9 个步骤