⚡ 从零构建第一个智能合约
Solidity 全栈 · 30 章 闯关式学习
📦 30 个实战合约
🧪 Foundry + Hardhat
Web3.js Ethers
🗂️ 点击卡片跳转章节
01课程导学与环境准备
💡 什么是智能合约 🛠️ Remix IDE ⚙️ Solidity 选择
02第一个合约:Hello World
📄 创建文件 🧪 编译部署 🌐 链上交互
03Solidity 数据类型 (上)
🔢 布尔/整型 📍 地址类型 🧩 字节数组
04Solidity 数据类型 (下)
📝 字符串/枚举 🏗️ 结构体 🗺️ 映射
05变量与状态变量
📦 状态/局部/全局 💾 storage/memory/calldata
06函数基础
👁️ public/private 🔄 view/pure/payable
07函数进阶
🔁 重载 / modifier ⬇️ fallback & receive
08控制结构
🔀 if-else / for / while ❓ 三元运算符
09数组
📊 固定/动态数组 ➕ 增删改查 & 遍历
10映射 (Mapping)
🗺️ 定义 & 使用 🔄 迭代技巧 🪆 嵌套映射
11结构体 (Struct)
🧱 定义 & 数组 📥 函数参数/返回值
12事件 (Event)
📢 声明 & 触发 🔍 索引参数 📱 DApp 作用
13继承
🧬 继承机制 / 多重 🔄 override & virtual
14抽象合约与接口
📐 抽象合约 🔌 接口定义 & 实现 🤝 合约交互
15库 (Library)
📚 定义 & 区别 🧮 数学运算库
16错误处理
⚠️ require / revert / assert 🛑 自定义错误
17合约间调用
📞 call/delegatecall/staticcall 🧾 ABI 编解码
18Gas 优化技巧
⛽ Gas 重要性 💡 存储 & 循环优化
19合约部署与构造函数
🏗️ 构造函数参数 🔮 create2 操作码
20时间与区块
⏰ block.timestamp 🔢 block.number ⚠️ 时间戳安全
21地址与转账
💳 address payable 📤 transfer/send/call
22合约自毁与暂停
💥 selfdestruct ⏸️ Pausable 模式
23访问控制
👑 Ownable / RBAC 🔐 OpenZeppelin AccessControl
24重入攻击与防护
🔄 重入攻击 / DAO 🛡️ 检查-生效-交互 / 重入锁
25整数溢出与防护
📈 溢出原理 🧮 SafeMath / 0.8+ 内置检查
26前端与合约交互 (Web3.js)
🌐 安装 Web3.js 🦊 MetaMask 连接 📨 发送交易
27前端与合约交互 (Ethers.js)
⚡ Provider / Signer 📄 合约实例化 & 调用
28测试合约 (Foundry)
🔧 环境搭建 🧪 单元测试 / Cheatcodes 📊 Gas 报告
29测试合约 (Hardhat)
🛠️ 环境搭建 📝 测试脚本 / 部署
30综合实战:众筹合约
📋 需求分析 & 设计 🧑‍💻 编写 / 测试 / 部署